예제 #1
0
function mount_ssh($pattern, $ID, $testwrite = true)
{
    $backup = new backup_protocols();
    $unix = new unix();
    $rsync = $unix->find_program("rsync");
    $umount = $unix->find_program("umount");
    $cp = $unix->find_program("cp");
    $touch = $unix->find_program("touch");
    $array = $backup->extract_ssh_protocol($pattern);
    if (!is_array($array)) {
        writelogs(date('m-d H:i:s') . " " . "[TASK {$ID}]: ssh protocol error", __FUNCTION__, __FILE__, __LINE__);
        return false;
    }
    $mount_path = "/opt/artica/mounts/backup/{$ID}";
    backup_events($ID, "initialization", "INFO, local mount point {$mount_path} (mount_ssh())", __LINE__);
    include_once dirname(__FILE__) . "/ressources/class.mount.inc";
    backup_events($ID, "initialization", "INFO, mount({$GLOBALS["ADDLOG"]})", __LINE__);
    $mount = new mount($GLOBALS["ADDLOG"]);
    $mount = new mount($GLOBALS["ADDLOG"]);
    if (!$mount->ismounted($mount_path)) {
        backup_events($ID, "initialization", "INFO, local mount point {$mount_path} not mounted (mount_ssh())", __LINE__);
        @mkdir($mount_path, null, true);
    }
    if (!$mount->ssh_mount($mount_path, $array["SERVER"], $array["USER"], $array["PASSWORD"], $array["FOLDER"])) {
        backup_events($ID, "initialization", "ERROR, unable to mount target server (ssh_mount({$mount_path},{$array["SERVER"]}))\n" . @implode("\n", $GLOBALS["MOUNT_EVENTS"]), __LINE__);
        return false;
    }
    if (!$testwrite) {
        return true;
    }
    $md5 = md5(date('Y-m-d H:i:s'));
    exec("{$touch} {$mount_path}/{$md5} 2>&1", $results_touch);
    if (is_file("{$mount_path}/{$md5}")) {
        @unlink("{$mount_path}/{$md5}");
        backup_events($ID, "initialization", "INFO, writing test successfully passed OK !", __LINE__);
        if ($GLOBALS["ONLY_TESTS"]) {
            writelogs(date('m-d H:i:s') . " " . "<H2>{success}</H2>", __FUNCTION__, __FILE__, __LINE__);
        }
        if (is_file($rsync)) {
            $GLOBALS["COMMANDLINECOPY"] = "{$rsync} -ar --no-p --no-g --no-o --chmod=ug=rwX,o=rwX {SRC_PATH} {NEXT} --stats -v";
        } else {
            $GLOBALS["COMMANDLINECOPY"] = "{$cp} -ru {SRC_PATH} {NEXT}";
        }
        $GLOBALS["COMMANDLINE_MOUNTED_PATH"] = $mount_path;
        return true;
    } else {
        $logs_touch = implode("<br>", $results_touch);
        writelogs(date('m-d H:i:s') . " " . "[TASK {$ID}]: Permissions error ! FAILED", __FUNCTION__, __FILE__, __LINE__);
        backup_events($ID, "initialization", "ERROR, writing test failed", __LINE__);
        writelogs(date('m-d H:i:s') . " " . "[TASK {$ID}]: {$logs_touch}", __FUNCTION__, __FILE__, __LINE__);
        writelogs(date('m-d H:i:s') . " " . "[TASK {$ID}]: umount {$mount_path}", __FUNCTION__, __FILE__, __LINE__);
        exec("{$umount} -l {$mount_path}");
    }
}