$GLOBALS["VERBOSE"] = true; } $_GET["RsyncStoragePath"] = trim(@file_get_contents("/etc/artica-postfix/settings/Daemons/RsyncStoragePath")); if ($_GET["RsyncStoragePath"] == null) { $_GET["RsyncStoragePath"] = "/var/spool/rsync"; } create_password_files(); echo "Search user that EnableBackupAccount is enabled\n"; $array = GetUserList(); if (!is_array($array)) { echo "No users...\n"; die; } while (list($organisation, $users) = each($array)) { echo "Parsing organization {$organisation}\n"; BuildConfig($organisation, $users); } function BuildConfig($organisation, $users) { @mkdir("/etc/rsync/secrets/{$organisation}", null, true); $rsyncd = new rsyncd_conf(); while (list($num, $user) = each($users)) { $uid = $user["uid"]; $RsyncBackupTargetPath = $user["RsyncBackupTargetPath"]; if ($RsyncBackupTargetPath == null) { $RsyncBackupTargetPath = $_GET["RsyncStoragePath"]; } echo "Parsing user number {$num} ({$uid})\n"; $path_name = md5(strtolower("{$organisation}{$uid}")); $path = "{$RsyncBackupTargetPath}/organizations/{$organisation}/{$uid}"; @mkdir($path, null, true);
function start($aspid = false) { $unix = new unix(); $sock = new sockets(); $Masterbin = $unix->CYRUS_DAEMON_BIN_PATH(); $zarafaBin = $unix->find_program("zarafa-server"); if (!is_file($Masterbin)) { if ($GLOBALS["OUTPUT"]) { echo "Starting......: " . date("H:i:s") . " [INIT]: {$GLOBALS["TITLENAME"]}, arpd not installed\n"; } return; } if (!$aspid) { $pidfile = "/etc/artica-postfix/pids/" . basename(__FILE__) . "." . __FUNCTION__ . ".pid"; $pid = $unix->get_pid_from_file($pidfile); if ($unix->process_exists($pid, basename(__FILE__))) { $time = $unix->PROCCESS_TIME_MIN($pid); if ($GLOBALS["OUTPUT"]) { echo "Starting......: " . date("H:i:s") . " [INIT]: {$GLOBALS["TITLENAME"]} Already Artica task running PID {$pid} since {$time}mn\n"; } return; } @file_put_contents($pidfile, getmypid()); } if ($unix->process_exists($unix->get_pid_from_file("/etc/artica-postfix/artica-backup.pid"))) { if ($GLOBALS["OUTPUT"]) { echo "Starting......: " . date("H:i:s") . " [INIT]: {$GLOBALS["TITLENAME"]} A backup task currently is in use\n"; } return; } $pid = PID_NUM(); if ($unix->process_exists($pid)) { $timepid = $unix->PROCCESS_TIME_MIN($pid); if ($GLOBALS["OUTPUT"]) { echo "Starting......: " . date("H:i:s") . " [INIT]: {$GLOBALS["TITLENAME"]} Service already started {$pid} since {$timepid}Mn...\n"; } return; } if (is_file("/etc/artica-postfix/stop.cyrus.imapd")) { if ($GLOBALS["OUTPUT"]) { echo "Starting......: " . date("H:i:s") . " [INIT]: {$GLOBALS["TITLENAME"]} LOCKED !\n"; } if ($GLOBALS["OUTPUT"]) { echo "Starting......: " . date("H:i:s") . " [INIT]: {$GLOBALS["TITLENAME"]} Remove /etc/artica-postfix/stop.cyrus.imapd !\n"; } return; } if (is_file("/etc/artica-postfix/cyrus-stop")) { if ($GLOBALS["OUTPUT"]) { echo "Starting......: " . date("H:i:s") . " [INIT]: {$GLOBALS["TITLENAME"]} LOCKED !\n"; } if ($GLOBALS["OUTPUT"]) { echo "Starting......: " . date("H:i:s") . " [INIT]: {$GLOBALS["TITLENAME"]} Remove /etc/artica-postfix/cyrus-stop !\n"; } return; } $unix->CreateUnixUser("postfix", "postfix"); $php5 = $unix->LOCATE_PHP5_BIN(); $EnableCyrusImap = $sock->GET_INFO("EnableCyrusImap"); if (!is_numeric($EnableCyrusImap)) { $EnableCyrusImap = 1; } $DisableMessaging = intval($sock->GET_INFO("DisableMessaging")); $DisableIMAPVerif = intval($sock->GET_INFO("DisableIMAPVerif")); if ($DisableIMAPVerif == 0) { if (is_file("{$zarafaBin}")) { if ($GLOBALS["OUTPUT"]) { echo "Starting......: " . date("H:i:s") . " [INIT]: {$GLOBALS["TITLENAME"]} Zarafa is installed, aborting\n"; } stop(true); return; } } if ($EnableCyrusImap == 0) { if ($GLOBALS["OUTPUT"]) { echo "Starting......: " . date("H:i:s") . " [INIT]: {$GLOBALS["TITLENAME"]} service disabled (see EnableCyrusImap)\n"; } return; } if ($DisableMessaging == 1) { if ($GLOBALS["OUTPUT"]) { echo "Starting......: " . date("H:i:s") . " [INIT]: {$GLOBALS["TITLENAME"]} service disabled (see DisableMessaging)\n"; } return; } if (!is_file('/usr/bin/cyradm')) { $cyradm = $unix->CYRADM_PATH(); if (is_file($cyradm)) { shell_exec("/bin/ln -s {$cyradm} /usr/bin/cyradm"); } } if (is_file('/usr/share/artica-postfix/exec.imapd.conf.php')) { shell_exec("{$php5} /usr/share/artica-postfix/exec.imapd.conf.php >/dev/null 2>&1"); } if (!is_file('/etc/artica-postfix/cyrus.check.time')) { shell_exec("/usr/share/artica-postfix/bin/artica-install --cyrus-rights >/dev/null 2>&1"); } shell_exec("{$php5} /usr/share/artica-postfix/exec.check-cyrus-account.php --check-adms"); $sysctl = $unix->find_program("sysctl"); $echo = $unix->find_program("echo"); $nohup = $unix->find_program("nohup"); if ($GLOBALS["OUTPUT"]) { echo "Starting......: " . date("H:i:s") . " [INIT]: {$GLOBALS["TITLENAME"]} service\n"; } if ($GLOBALS["OUTPUT"]) { echo "Starting......: " . date("H:i:s") . " [INIT]: {$GLOBALS["TITLENAME"]} Check permissions\n"; } CheckPermissions(); BuildConfig(); $params[] = "{$nohup} {$Masterbin}"; $params[] = "-M /etc/cyrus.conf"; $params[] = "-C /etc/imapd.conf"; $params[] = "-p /var/run/cyrmaster.pid -d >/dev/null 2>&1 &"; $cmd = @implode(" ", $params); shell_exec($cmd); for ($i = 1; $i < 5; $i++) { if ($GLOBALS["OUTPUT"]) { echo "Starting......: " . date("H:i:s") . " [INIT]: {$GLOBALS["TITLENAME"]} Waiting {$i}/5\n"; } sleep(1); $pid = PID_NUM(); if ($unix->process_exists($pid)) { break; } } $pid = PID_NUM(); if ($unix->process_exists($pid)) { if ($GLOBALS["OUTPUT"]) { echo "Starting......: " . date("H:i:s") . " [INIT]: {$GLOBALS["TITLENAME"]} Success PID {$pid}\n"; } $lmtpsocket = "/var/spool/postfix/var/run/cyrus/socket/lmtp"; for ($i = 1; $i < 5; $i++) { if ($unix->is_socket($lmtpsocket)) { if ($GLOBALS["OUTPUT"]) { echo "Starting......: " . date("H:i:s") . " [INIT]: {$GLOBALS["TITLENAME"]} Waiting socket success..\n"; } $unix->chown_func("postfix", "postfix", "/var/spool/postfix/var/run"); $unix->chown_func("postfix", "postfix", "{$lmtpsocket}"); break; } if ($GLOBALS["OUTPUT"]) { echo "Starting......: " . date("H:i:s") . " [INIT]: {$GLOBALS["TITLENAME"]} Waiting socket {$i}/5\n"; } sleep(1); } } else { if ($GLOBALS["OUTPUT"]) { echo "Starting......: " . date("H:i:s") . " [INIT]: {$GLOBALS["TITLENAME"]} Failed\n"; } if ($GLOBALS["OUTPUT"]) { echo "Starting......: " . date("H:i:s") . " [INIT]: {$GLOBALS["TITLENAME"]} {$cmd}\n"; } } }