Example #1
0
 /**
  * Create cron file for one user 
  * 
  * @param int $userID
  * @param string $userName
  * @return mixed
  */
 protected static function handleCronjobForUser($userID, $userName)
 {
     System_Daemon::debug('Starting "handleCronjobForUser" subprocess.');
     // Due to bug https://bugs.launchpad.net/ubuntu/+source/cron/+bug/706565 all . in username must be removed or
     // replaced. Otherwise the cronjobs never run.
     $confUser = str_replace('.', '_', $userName);
     $confFile = DaemonConfig::$distro->{'CRON_DIR'} . '/EasySCP_' . $confUser;
     $sql_param = array(':user_id' => $userID, ':active' => 'yes');
     $sql_query = "\n\t\t\tSELECT\n\t\t\t\t*\n\t\t\tFROM\n\t\t\t\tcronjobs\n\t\t\tWHERE\n\t\t\t\tactive = :active\n\t\t\tAND\n\t\t\t\tuser_id = :user_id\n\t\t";
     DB::prepare($sql_query);
     $cronData = DB::execute($sql_param);
     if ($cronData->rowCount() == 0) {
         @unlink($confFile);
     } else {
         $tpl_param = array('ADMIN' => $userName);
         $tpl = DaemonCommon::getTemplate($tpl_param);
         while ($cronJob = $cronData->fetch()) {
             $tpl->append(array('DESCRIPTION' => "# " . $cronJob['description'], 'SCHEDULE' => $cronJob['schedule'], 'USER' => $cronJob['user'], 'COMMAND' => $cronJob['command']));
         }
         // write Cron config
         $config = $tpl->fetch("tpl/cron.tpl");
         System_Daemon::debug($confFile);
         $retVal = DaemonCommon::systemWriteContentToFile($confFile, $config, DaemonConfig::$cfg->{'ROOT_USER'}, DaemonConfig::$cfg->{'ROOT_GROUP'}, 0644, false);
         if ($retVal !== true) {
             $msg = 'Failed to write' . $confFile;
             System_Daemon::warning($msg);
             return $msg . '<br />' . $retVal;
         } else {
             System_Daemon::debug($confFile . ' successfully written!');
         }
     }
     System_Daemon::debug('Finished "handleCronjobForUser" subprocess.');
     return true;
 }
function myHandler($signal)
{
    if ($signal === SIGTERM) {
        System_Daemon::warning('I received the termination signal. ' . $sig);
        // Execute some final code
        // and be sure to:
        System_Daemon::stop();
    }
}
Example #3
0
 /**
  * Handles DaemonCore requests.
  *
  * @param string $Input
  * @return boolean
  */
 public static function Start($Input)
 {
     System_Daemon::debug('Starting "DaemonCore::Start" subprocess.');
     $retVal = null;
     $Input = explode(" ", $Input, 2);
     switch ($Input[0]) {
         case 'checkAll':
             $retVal = self::checkAllData();
             break;
         case 'Restart':
             System_Daemon::info('Running Restart subprocess.');
             SocketHandler::Close();
             System_Daemon::restart();
             break;
         case 'SaveConfig':
             System_Daemon::debug('Running SaveConfig subprocess.');
             if (isset($Input[1]) && is_array($Input[1])) {
                 foreach (json_decode(trim($Input[1])) as $name => $wert) {
                     if (isset(DaemonConfig::$cfg->{$name})) {
                         DaemonConfig::$cfg->{$name} = $wert;
                     }
                 }
             }
             DaemonConfig::Save();
             DaemonConfig::SaveOldConfig();
             System_Daemon::debug('Finished SaveConfig subprocess.');
             $retVal = true;
             break;
         case 'Setup':
             if (file_exists(dirname(__FILE__) . '/DaemonCoreSetup.php')) {
                 require_once dirname(__FILE__) . '/DaemonCoreSetup.php';
                 if (isset($Input[1]) && $Input[1] != '') {
                     $retVal = Setup($Input[1]);
                 }
             } else {
                 $retVal = false;
             }
             break;
         default:
             System_Daemon::warning("Don't know what to do with " . $Input[0]);
             $retVal = false;
             break;
     }
     System_Daemon::debug('Finished "DaemonCore::Start" subprocess.');
     return $retVal;
 }
Example #4
0
 protected static function handleSubDomainAlias($subDomainAliasData)
 {
     System_Daemon::debug('Starting "DaemonDomain::handleSubDomainAlias = ' . $subDomainAliasData['subdomain_name'] . '.' . $subDomainAliasData['alias_name'] . '" subprocess.');
     switch ($subDomainAliasData['alias_status']) {
         case 'add':
             $retVal = self::apacheWriteDomainConfig($subDomainAliasData);
             if ($retVal !== true) {
                 $msg = 'Writing subdomain-alias configuration failed';
                 System_Daemon::debug($msg);
                 return $msg . '<br />' . $retVal;
             }
             $retVal = DaemonDNS::AddDNSEntry($subDomainAliasData);
             if ($retVal !== true) {
                 $msg = 'Creating of subdomain-alias dns entry failed';
                 System_Daemon::debug($msg);
                 return $msg . '<br />' . $retVal;
             }
             break;
         case 'change':
             $retVal = self::apacheWriteDomainConfig($subDomainAliasData);
             if ($retVal !== true) {
                 $msg = 'Writing subdomain-alias configuration failed';
                 System_Daemon::debug($msg);
                 return $msg . '<br />' . $retVal;
             }
             break;
         case 'delete':
             $retVal = self::deleteAliasSubDomain($subDomainAliasData);
             if ($retVal !== true) {
                 $msg = 'Deleting of subdomain-alias failed';
                 System_Daemon::debug($msg);
                 return $msg . '<br />' . $retVal;
             }
             $retVal = DaemonDNS::DeleteDNSEntry($subDomainAliasData);
             if ($retVal !== true) {
                 $msg = 'Deleting of subdomain-alias dns entry failed';
                 System_Daemon::debug($msg);
                 return $msg . '<br />' . $retVal;
             }
             break;
         case 'ok':
             // Configuration has to be rewritten every time to ensure that
             // all domains and subdomains are completely configured
             $retVal = self::apacheWriteDomainConfig($subDomainAliasData);
             if ($retVal !== true) {
                 $msg = 'Writing subdomain-alias configuration failed';
                 System_Daemon::debug($msg);
                 return $msg . '<br />' . $retVal;
             }
             break;
         default:
             $msg = "Don't know what to do with " . $subDomainAliasData['status'] . " (handlesubdomainalias)";
             System_Daemon::warning($msg);
             return $msg . '<br />';
             break;
     }
     if ($retVal === true) {
         $retVal = self::dbSetAliasSubDomainStatus('ok', $subDomainAliasData['subdomain_alias_id']);
         if ($retVal !== true) {
             $msg = 'Setting Aliassubdomain status failed';
             System_Daemon::debug($msg);
             return $msg . '<br />' . $retVal;
         }
     }
     return true;
 }
Example #5
0
 /**
  * Handles DaemonSystem requests
  *
  * @param string $Input
  * @return mixed
  */
 public static function Start($Input)
 {
     System_Daemon::debug('Starting "DaemonSystem::Start" subprocess.');
     $data = explode(" ", $Input);
     switch ($data[0]) {
         case 'cron':
             System_Daemon::debug('Starting "cron" subprocess.');
             $retVal = self::handleCronjobsForAllUsers();
             if ($retVal !== true) {
                 System_Daemon::warning('Failed to handle Cronjobs');
                 System_Daemon::debug('Finished "cron" subprocess.');
                 return false;
             }
             System_Daemon::debug('Finished "cron" subprocess.');
             break;
         case 'direxists':
             System_Daemon::debug('Starting "direxists" subprocess.');
             if (is_dir($data[1])) {
                 System_Daemon::debug('Directory ' . $data[1] . ' exists');
                 System_Daemon::debug('Finished "direxists" subprocess.');
                 return true;
             } else {
                 System_Daemon::debug('Directory ' . $data[1] . ' does not exist');
                 System_Daemon::debug('Finished "direxists" subprocess.');
                 return false;
             }
             break;
         case 'fileexists':
             System_Daemon::debug('Starting "fileexists" subprocess.');
             if (is_file($data[1])) {
                 System_Daemon::debug('File ' . $data[1] . ' exists');
                 System_Daemon::debug('Finished "fileexists" subprocess.');
                 return true;
             } else {
                 System_Daemon::debug('File ' . $data[1] . ' does not exist');
                 System_Daemon::debug('Finished "fileexists" subprocess.');
                 return false;
             }
             break;
         case 'isexecutable':
             System_Daemon::debug('Starting "isexecutable" subprocess.');
             $internalCMD = explode(',', DaemonConfig::$cmd->SHELL_INTERNAL_CMDS);
             System_Daemon::debug(DaemonConfig::$cmd->SHELL_INTERNAL_CMDS);
             if (in_array($data[1], $internalCMD)) {
                 System_Daemon::debug('Command ' . $data[1] . ' is an internal command');
                 System_Daemon::debug('Finished "isexecutable" subprocess.');
                 return true;
             }
             if (self::Start('fileexists ' . $data[1])) {
                 if (is_executable($data[1])) {
                     System_Daemon::debug('File ' . $data[1] . ' is executable');
                     System_Daemon::debug('Finished "isexecutable" subprocess.');
                     return true;
                 } else {
                     System_Daemon::debug('File ' . $data[1] . ' is not executable');
                     System_Daemon::debug('Finished "isexecutable" subprocess.');
                     return false;
                 }
             } else {
                 System_Daemon::debug('Finished "isexecutable" subprocess.');
                 return false;
             }
             break;
         case 'rebuildConfig':
             System_Daemon::debug('Starting "rebuildConfig" subprocess.');
             $rebuildConfig = DaemonConfigCommon::rebuildConfig($data[1]);
             if ($rebuildConfig !== true) {
                 return $rebuildConfig;
             }
             System_Daemon::debug('Finished "rebuildConfig" subprocess.');
             break;
         case 'setPermissions':
             System_Daemon::debug('Starting "setPermissions" subprocess.');
             DaemonCommon::systemSetSystemPermissions();
             DaemonCommon::systemSetGUIPermissions();
             System_Daemon::debug('Finished "setPermissions" subprocess.');
             break;
         case 'updateIana':
             System_Daemon::debug('Starting "updateIana" subprocess.');
             self::updateIanaXML();
             DaemonCommon::systemSetFolderPermissions(EasyConfig_PATH . 'Iana_TLD.xml', 'root', 'root', '644');
             System_Daemon::debug('Finished "updateIana" subprocess.');
             break;
         case 'updateSystem':
             System_Daemon::debug('Starting "updateSystem" subprocess.');
             if (self::verifySystemUpdate()) {
                 self::handleSystemUpdate();
             }
             System_Daemon::debug('Finished "updateSystem" subprocess.');
             break;
         case 'userexists':
             System_Daemon::debug('Starting "userexists" subprocess.');
             exec(DaemonConfig::$cmd->CMD_ID . ' -u ' . $data['1'] . ' 2>&1', $result, $error);
             if ($error != 0) {
                 System_Daemon::debug('User ' . $data['1'] . ' does not exist');
                 unset($result);
                 return false;
             }
             System_Daemon::debug('Finished "userexists" subprocess.');
             break;
         default:
             System_Daemon::warning("Don't know what to do with " . $data[0]);
             return false;
     }
     System_Daemon::debug('Finished "DaemonSystem::Start" subprocess.');
     return true;
 }
 * and stopped directly. You should find a log enty in 
 * /var/log/optest.log
 * 
 */
// Make it possible to test in source directory
// This is for PEAR developers only
ini_set('include_path', ini_get('include_path') . ':..');
// Include Class
error_reporting(E_ALL);
require_once 'System/Daemon.php';
// Bare minimum setup
System_Daemon::setOption('appName', 'optest');
System_Daemon::setOption('authorEmail', '*****@*****.**');
System_Daemon::setOption('logLocation', '/var/log/sysdaemon.devtest.log');
System_Daemon::setOption('logFilePosition', true);
System_Daemon::warning('{appName} daemon encountered an empty appPidLocation');
System_Daemon::err('{appName} daemon encountered an empty appPidLocation');
die;
$options = array();
$options['appName'] = 'devtest';
$options['appExecutable'] = 'devtest.php';
$options['appDir'] = realpath(dirname(__FILE__));
$options['appDescription'] = 'Developer test daemon';
$options['authorName'] = 'kevman';
$options['authorEmail'] = '*****@*****.**';
if (($os = System_Daemon_OS::factory('BSD')) === false) {
    echo 'Cannot create OS\\n';
} else {
    print_r($os->errors);
    echo '\\n';
    echo $os->getAutoRunTemplatePath();
Example #7
0
 protected static function writeMasterConfig()
 {
     $append = false;
     $sysGroup = DaemonConfig::$cfg->APACHE_SUEXEC_USER_PREF . DaemonConfig::$cfg->APACHE_SUEXEC_MIN_GID;
     $sysUser = DaemonConfig::$cfg->APACHE_SUEXEC_USER_PREF . DaemonConfig::$cfg->APACHE_SUEXEC_MIN_UID;
     $sql_query = "\n\t\t\tSELECT\n\t\t\t\t*\n\t\t\tFROM\n\t\t\t\tconfig\n\t\t\tWHERE\n\t\t\t\tname IN (\n\t\t\t\t\t'SSL_KEY',\n\t\t\t\t\t'SSL_CERT',\n\t\t\t\t\t'SSL_CACERT',\n\t\t\t\t\t'SSL_STATUS')\n\t\t";
     $rs = DB::query($sql_query);
     $sslData = array();
     while ($row = $rs->fetch()) {
         $sslData[strtolower($row['name'])] = $row['value'];
     }
     $tpl_param = array('BASE_SERVER_IP' => DaemonConfig::$cfg->BASE_SERVER_IP, 'SUEXEC_GID' => $sysUser, 'SUEXEC_UID' => $sysGroup, 'DEFAULT_ADMIN_ADDRESS' => DaemonConfig::$cfg->DEFAULT_ADMIN_ADDRESS, 'GUI_ROOT_DIR' => DaemonConfig::$cfg->GUI_ROOT_DIR, 'BASE_SERVER_VHOST' => DaemonConfig::$cfg->BASE_SERVER_VHOST, 'APACHE_LOG_DIR' => DaemonConfig::$distro->APACHE_LOG_DIR, 'PHP_STARTER_DIR' => DaemonConfig::$distro->PHP_STARTER_DIR);
     if (isset(DaemonConfig::$cfg->BASE_SERVER_IPv6) && DaemonConfig::$cfg->BASE_SERVER_IPv6 != '') {
         $tpl_param['BASE_SERVER_IPv6'] = DaemonConfig::$cfg->BASE_SERVER_IPv6;
     }
     if ($sslData['ssl_status'] == 1) {
         $tpl_param['BASE_PORT'] = 80;
         $tpl_param['REDIRECT'] = true;
     } else {
         $tpl_param['BASE_PORT'] = 80;
     }
     $tpl = DaemonCommon::getTemplate($tpl_param);
     // write Apache config
     $config = $tpl->fetch('apache/parts/' . DaemonConfig::$cfg->{'DistName'} . '_' . DaemonConfig::$cfg->{'DistVersion'} . '/00_master.conf.tpl');
     $tpl = NULL;
     unset($tpl);
     $confFile = DaemonConfig::$cfg->CONF_DIR . '/apache/working/00_master.conf';
     $retVal = DaemonCommon::systemWriteContentToFile($confFile, $config, DaemonConfig::$cfg->ROOT_USER, DaemonConfig::$cfg->ROOT_GROUP, 0644, $append);
     if ($retVal !== true) {
         $msg = 'Failed to write' . $confFile;
         System_Daemon::warning($msg);
         return $msg . '<br />' . $retVal;
     }
     if ($sslData['ssl_status'] > 0) {
         $append = true;
         $sslData['domain_name'] = 'master';
         $retVal = self::writeSSLKeys($sslData);
         if ($retVal !== true) {
             $msg = 'Writing SSL keys failed';
             System_Daemon::debug($msg);
             return $msg . '<br />' . $retVal;
         }
         $tpl_param['BASE_PORT'] = 443;
         $tpl_param['SSL_CERT_DIR'] = DaemonConfig::$distro->SSL_CERT_DIR;
         $tpl_param['SSL_KEY_DIR'] = DaemonConfig::$distro->SSL_KEY_DIR;
         $tpl_param['REDIRECT'] = false;
         if (isset($sslData['ssl_cacert']) && $sslData['ssl_cacert'] != '') {
             $tpl_param['SSL_CACERT'] = true;
         }
         $tpl = DaemonCommon::getTemplate($tpl_param);
         // write Apache config
         $config = $tpl->fetch('apache/parts/' . DaemonConfig::$cfg->{'DistName'} . '_' . DaemonConfig::$cfg->{'DistVersion'} . '/00_master.conf.tpl');
         $tpl = NULL;
         unset($tpl);
         $confFile = DaemonConfig::$cfg->CONF_DIR . '/apache/working/00_master.conf';
         $retVal = DaemonCommon::systemWriteContentToFile($confFile, $config, DaemonConfig::$cfg->ROOT_USER, DaemonConfig::$cfg->ROOT_GROUP, 0644, $append);
         if ($retVal !== true) {
             $msg = 'Failed to write' . $confFile;
             System_Daemon::warning($msg);
             return $msg . '<br />' . $retVal;
         }
     }
     exec(DaemonConfig::$cmd->CMD_CP . ' -pf ' . DaemonConfig::$cfg->CONF_DIR . '/apache/working/00_master.conf ' . DaemonConfig::$distro->APACHE_SITES_DIR . '/00_master.conf', $result, $error);
     return true;
 }
Example #8
0
 /**
  *
  * @param string $fileName
  * @param mixed $content
  * @param mixed $user
  * @param mixed $group
  * @param mixed $perm
  * @param bool $append
  * @return boolean
  */
 public static function systemWriteContentToFile($fileName, $content, $user, $group, $perm, $append = false)
 {
     $flags = $append == true ? FILE_APPEND : 0;
     if (file_put_contents($fileName, $content, $flags)) {
         return DaemonCommon::systemSetFilePermissions($fileName, $user, $group, $perm);
     } else {
         System_Daemon::warning("Failed to write content to {$fileName}");
         return false;
     }
 }
Example #9
0
 /**
  * @param string $config
  * @return mixed
  */
 public static function rebuildConfigPass($config = 'system')
 {
     System_Daemon::debug('Starting "DaemonConfigCommon::rebuildConfigPass" subprocess.');
     switch ($config) {
         case 'DNS':
             System_Daemon::debug('Starting "DNS" subprocess.');
             $SavePDNSConfig = DaemonConfigDNS::SavePDNSConfig();
             if ($SavePDNSConfig !== true) {
                 return $SavePDNSConfig;
             }
             System_Daemon::debug('Finished "DNS" subprocess.');
             break;
         case 'FTP':
             System_Daemon::debug('Starting "FTP" subprocess.');
             $SaveProFTPdConfig = DaemonConfigFTP::SaveProFTPdConfig();
             if ($SaveProFTPdConfig !== true) {
                 return $SaveProFTPdConfig;
             }
             System_Daemon::debug('Finished "FTP" subprocess.');
             break;
         case 'MTA':
             System_Daemon::debug('Starting "MTA" subprocess.');
             $SaveMTAConfig = DaemonConfigMail::SaveMTAConfig();
             if ($SaveMTAConfig !== true) {
                 return $SaveMTAConfig;
             }
             System_Daemon::debug('Finished "MTA" subprocess.');
             break;
         case 'PMA':
             System_Daemon::debug('Starting "PMA" subprocess.');
             DaemonConfigTools::SavePMAConfig();
             System_Daemon::debug('Finished "PMA" subprocess.');
             break;
         case 'RC':
             System_Daemon::debug('Starting "RC" subprocess.');
             DaemonConfigTools::SaveRCConfig();
             System_Daemon::debug('Finished "RC" subprocess.');
             break;
         case 'system':
             System_Daemon::debug('Starting "system" subprocess.');
             $SavePDNSConfig = DaemonConfigDNS::SavePDNSConfig();
             if ($SavePDNSConfig !== true) {
                 return $SavePDNSConfig;
             }
             $SaveProFTPdConfig = DaemonConfigFTP::SaveProFTPdConfig();
             if ($SaveProFTPdConfig !== true) {
                 return $SaveProFTPdConfig;
             }
             $SaveMTAConfig = DaemonConfigMail::SaveMTAConfig();
             if ($SaveMTAConfig !== true) {
                 return $SaveMTAConfig;
             }
             System_Daemon::debug('Finished "system" subprocess.');
             break;
         default:
             System_Daemon::warning("Don't know what to do with " . $config);
             return false;
     }
     System_Daemon::debug('Finished "DaemonConfigCommon::rebuildConfigPass" subprocess.');
     return true;
 }