Index: includes/filetransfer/filetransfer.inc =================================================================== RCS file: /Users/wright/drupal/local_repo/drupal/includes/filetransfer/filetransfer.inc,v retrieving revision 1.13 diff -u -p -r1.13 filetransfer.inc --- includes/filetransfer/filetransfer.inc 1 Dec 2010 00:23:36 -0000 1.13 +++ includes/filetransfer/filetransfer.inc 2 Jan 2011 19:05:19 -0000 @@ -28,8 +28,15 @@ abstract class FileTransfer { * Classes that extend this class must override the factory() static method. * * @param string $jail + * The full path where all file operations performed by this object will + * be restricted to. This prevents the FileTransfer classes from being + * able to touch other parts of the filesystem. * @param array $settings - * @return object New instance of the appropriate FileTransfer subclass. + * An array of connection settings for the FileTransfer subclass. If the + * getSettingsForm() method uses any nested settings, the same structure + * will be assumed here. + * @return object + * New instance of the appropriate FileTransfer subclass. */ static function factory($jail, $settings) { throw new FileTransferException('FileTransfer::factory() static method not overridden by FileTransfer subclass.'); Index: includes/filetransfer/ftp.inc =================================================================== RCS file: /Users/wright/drupal/local_repo/drupal/includes/filetransfer/ftp.inc,v retrieving revision 1.15 diff -u -p -r1.15 ftp.inc --- includes/filetransfer/ftp.inc 1 Dec 2010 00:23:36 -0000 1.15 +++ includes/filetransfer/ftp.inc 2 Jan 2011 18:52:07 -0000 @@ -24,10 +24,10 @@ abstract class FileTransferFTP extends F * options. If the FTP PHP extension is available, use it. */ static function factory($jail, $settings) { - $settings['username'] = empty($settings['username']) ? '' : $settings['username']; - $settings['password'] = empty($settings['password']) ? '' : $settings['password']; - $settings['hostname'] = empty($settings['hostname']) ? 'localhost' : $settings['hostname']; - $settings['port'] = empty($settings['port']) ? 21 : $settings['port']; + $username = empty($settings['username']) ? '' : $settings['username']; + $password = empty($settings['password']) ? '' : $settings['password']; + $hostname = empty($settings['advanced']['hostname']) ? 'localhost' : $settings['advanced']['hostname']; + $port = empty($settings['advanced']['port']) ? 21 : $settings['advanced']['port']; if (function_exists('ftp_connect')) { $class = 'FileTransferFTPExtension'; @@ -36,7 +36,7 @@ abstract class FileTransferFTP extends F throw new FileTransferException('No FTP backend available.'); } - return new $class($jail, $settings['username'], $settings['password'], $settings['hostname'], $settings['port']); + return new $class($jail, $username, $password, $hostname, $port); } /** Index: includes/filetransfer/ssh.inc =================================================================== RCS file: /Users/wright/drupal/local_repo/drupal/includes/filetransfer/ssh.inc,v retrieving revision 1.6 diff -u -p -r1.6 ssh.inc --- includes/filetransfer/ssh.inc 1 Dec 2010 00:23:36 -0000 1.6 +++ includes/filetransfer/ssh.inc 2 Jan 2011 19:00:10 -0000 @@ -25,11 +25,11 @@ class FileTransferSSH extends FileTransf } static function factory($jail, $settings) { - $settings['username'] = empty($settings['hostname']) ? '' : $settings['username']; - $settings['password'] = empty($settings['password']) ? '' : $settings['password']; - $settings['hostname'] = empty($settings['hostname']) ? 'localhost' : $settings['hostname']; - $settings['port'] = empty($settings['port']) ? 22 : $settings['port']; - return new FileTransferSSH($jail, $settings['username'], $settings['password'], $settings['hostname'], $settings['port']); + $username = empty($settings['username']) ? '' : $settings['username']; + $password = empty($settings['password']) ? '' : $settings['password']; + $hostname = empty($settings['advanced']['hostname']) ? 'localhost' : $settings['advanced']['hostname']; + $port = empty($settings['advanced']['port']) ? 22 : $settings['advanced']['port']; + return new FileTransferSSH($jail, $username, $password, $hostname, $port); } protected function copyFileJailed($source, $destination) {