? passive_mode.patch
Index: drupal_ftp.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/drupal_ftp/drupal_ftp.module,v
retrieving revision 1.5
diff -u -p -r1.5 drupal_ftp.module
--- drupal_ftp.module	28 Jun 2007 21:08:57 -0000	1.5
+++ drupal_ftp.module	22 Sep 2009 03:07:14 -0000
@@ -11,6 +11,7 @@ define('DRUPAL_FTP_DEFAULT_SERVER', 'ftp
 define('DRUPAL_FTP_DEFAULT_USERNAME', 'anonymous');
 define('DRUPAL_FTP_DEFAULT_PASSWORD', 'someone@somewhere.com');
 define('DRUPAL_FTP_DEFAULT_HOME_DIRECTORY', '/pub/drupal/');
+define('DRUPAL_FTP_DEFAULT_PASSIVE_MODE', 0);
 
 /**
  *  creates a new ftp object. if any elements of ftp_map are missing, they'll be filled with the server defaults.
@@ -22,6 +23,7 @@ function drupal_ftp_ftp_object($ftp_map 
   $ftp->__user = $ftp_map['#ftp_user'] ? $ftp_map['#ftp_user'] : variable_get('drupal_ftp_default_username', DRUPAL_FTP_DEFAULT_USERNAME);
   $ftp->__password = $ftp_map['#password'] ? $ftp_map['#password'] : variable_get('drupal_ftp_default_password', DRUPAL_FTP_DEFAULT_PASSWORD);
   $ftp->__directory = $ftp_map['#directory'] ? $ftp_map['#directory'] : variable_get('drupal_ftp_default_home_directory', DRUPAL_FTP_DEFAULT_HOME_DIRECTORY);
+  $ftp->__passive_mode = $ftp_map['#passive_mode'] ? $ftp_map['#passive_mode'] : variable_get('drupal_ftp_default_passive_mode', DRUPAL_FTP_DEFAULT_PASSIVE_MODE);
 
   return $ftp;
 }
@@ -53,6 +55,11 @@ function drupal_ftp_connect(&$ftp) {
       return false;
     }
 
+    // set passive mode
+    if ($ftp->__passive_mode) {
+      @ftp_pasv($ftp->__conn, true);
+    }
+
     // Attempt to change into the working directory
     $chDir = @ftp_chdir($ftp->__conn, $ftp->__directory);
 
@@ -727,6 +734,12 @@ function drupal_ftp_settings() {
     '#default_value' => variable_get('drupal_ftp_default_home_directory', DRUPAL_FTP_DEFAULT_HOME_DIRECTORY),
     '#description' => t('This is the default directory that will be used as the home directory when browsing. Make sure that the directory begins and ends with a forward slash, such as \'/www/\', \'/home/public_ftp/\', or \'/\'. Note that other modules using the provided API may override this value.'),
   );
+  $form['drupal_ftp_default_passive_mode'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Passive mode'),
+    '#default_value' => variable_get('drupal_ftp_default_passive_mode', DRUPAL_FTP_DEFAULT_PASSIVE_MODE),
+    '#description' => t('Use passive mode for file transfers. Works for getting files from behind a firewall.'),
+  );
   return system_settings_form($form);
 }
 
