Example #1
0
function fn_ftp_chmod_file($filename, $perm = DEFAULT_FILE_PERMISSIONS, $recursive = false)
{
    $result = false;
    $ftp = Registry::get('ftp_connection');
    if (is_resource($ftp)) {
        $dest = dirname($filename);
        $dest = rtrim($dest, '/') . '/';
        // force adding trailing slash to path
        $rel_path = str_replace(Registry::get('config.dir.root') . '/', '', $dest);
        $cdir = ftp_pwd($ftp);
        if (empty($rel_path)) {
            // if rel_path is empty, assume it's root directory
            $rel_path = $cdir;
        }
        if (@ftp_chdir($ftp, $rel_path)) {
            $result = @ftp_site($ftp, 'CHMOD ' . sprintf('0%o', $perm) . ' ' . fn_basename($filename));
            if ($recursive) {
                $path = fn_normalize_path($cdir . '/' . $rel_path . fn_basename($filename));
                if (is_dir($path)) {
                    $_files = fn_get_dir_contents($path, true, true, '', '', true);
                    if (!empty($_files)) {
                        foreach ($_files as $_file) {
                            fn_ftp_chmod_file($path . '/' . $_file, $perm, false);
                        }
                    }
                }
            }
            ftp_chdir($ftp, $cdir);
        }
    }
    return $result;
}
Example #2
0
 /**
  * Corrects permissions of store files and folders
  *
  * @param  array $cart_settings     Cart settings
  * @param  array $database_settings Database settings
  * @param  array $server_settings   Server settings
  * @param  array $ftp_settings      FTP connection settings
  * @param  array $addons            List of addons to be installed
  * @return bool  Always true
  */
 public function actionCorrectPermissions($cart_settings, $database_settings, $server_settings, $ftp_settings, $addons)
 {
     $app = App::instance();
     $validator = new Validator();
     if (!empty($ftp_settings['ftp_hostname']) && !empty($ftp_settings['ftp_username']) && !empty($ftp_settings['ftp_password'])) {
         if (fn_ftp_connect($ftp_settings)) {
             $files = array('config.local.php' => 0666, 'images' => 0777, 'design' => 0777, 'var' => 0777);
             foreach ($files as $file => $perm) {
                 fn_ftp_chmod_file($file, $perm, true);
             }
         }
     }
     $validator->isFilesystemWritable(true);
     $params['dispatch'] = 'setup.index';
     $params['cart_settings'] = $cart_settings;
     $params['database_settings'] = $database_settings;
     $params['server_settings'] = $server_settings;
     $params['addons'] = $addons;
     $app->run($params);
     return true;
 }
Example #3
0
 public function chmod($path, $permissions, Log $logger)
 {
     $logger->add(str_repeat('-', 10));
     $logger->add(sprintf('Changing permissions of "%s" to %o', $path, $permissions));
     $logger->add('Using chmod()... ', true, true, false);
     $result = @chmod($path, $permissions);
     $logger->add($result ? 'OK' : 'FAILED', true, false, true);
     if (!$result) {
         $logger->add('Using FTP...');
         $ftp_connection = Registry::get('ftp_connection');
         if (is_resource($ftp_connection)) {
             $logger->add('Connection is already established');
             $ftp_ready = true;
         } elseif (fn_ftp_connect($this->settings, true)) {
             $logger->add('Connection established');
             $ftp_ready = true;
         } else {
             $logger->add('Failed to establish connection');
             $ftp_ready = false;
         }
         if ($ftp_ready) {
             $result = fn_ftp_chmod_file($path, $permissions, false);
             $logger->add(sprintf('FTP chmod result: %s', $result ? 'OK' : 'FAILED'));
         }
     }
     $logger->add(str_repeat('-', 10));
     return $result;
 }
Example #4
0
 /**
  * Sets writable permissions to the specified file/dir
  *
  * @param  string $path               Path to file/dir
  * @param  bool   $show_notifications Show FTP connection error notifications
  * @return bool   true if permissions were succesfully changed, false otherwise
  */
 public function correctPermissions($path, $show_notifications)
 {
     $ftp_link = Registry::get('ftp_connection');
     if (empty($ftp_link) && is_null($this->ftp_connection_status)) {
         if (fn_ftp_connect(Registry::get('settings.Upgrade_center'), $show_notifications)) {
             $this->ftp_connection_status = true;
         } else {
             $this->ftp_connection_status = false;
         }
     }
     $correction_result = true;
     if (is_file($path) || is_dir($path)) {
         if (!is_writable($path)) {
             @chmod($path, 0777);
         }
         if (!is_writable($path) && !is_null($this->ftp_connection_status)) {
             fn_ftp_chmod_file($path, 0777);
         }
         if (!is_writable($path)) {
             $correction_result = false;
         }
     }
     return $correction_result;
 }
function fn_uc_check_file_access(&$result, $path, $package, $correct_permissions)
{
    if (is_file($path)) {
        $original_file = str_replace(Registry::get('config.dir.upgrade') . $package . '/package/', Registry::get('config.dir.root') . '/', $path);
        $relative_file = str_replace(Registry::get('config.dir.root') . '/', '', $original_file);
        if (!is_writable($original_file) && $correct_permissions) {
            @chmod($original_file, 0777);
        }
        if (!is_writable($original_file) && $correct_permissions) {
            fn_ftp_chmod_file($original_file);
        }
        if (is_file($original_file) && !is_writable($original_file)) {
            $result['non_writable'][] = $relative_file;
        }
    }
    if (is_dir($path)) {
        foreach (scandir($path) as $subfile) {
            $skip_files = array('.', '..');
            if (!in_array($subfile, $skip_files)) {
                fn_uc_check_file_access($result, $path . '/' . $subfile, $package, $correct_permissions);
            }
        }
    }
    return true;
}