? d6.mysql
? mailhandler-11962-41.patch
? mailhandler-580810-5.patch
? mailhandler-php53.patch
Index: mailhandler.admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/mailhandler/Attic/mailhandler.admin.inc,v
retrieving revision 1.1.2.9
diff -u -p -r1.1.2.9 mailhandler.admin.inc
--- mailhandler.admin.inc	10 Jan 2010 16:46:24 -0000	1.1.2.9
+++ mailhandler.admin.inc	11 Jan 2010 04:15:29 -0000
@@ -4,7 +4,7 @@
  * Return a form for editing or creating an individual mailbox.
  */
 function mailhandler_add_edit_mailbox($form_state, $mid, $clone = FALSE) {
-
+  module_load_include('inc', 'mailhandler', 'mailhandler.retrieve');
   $edit = $mid ? mailhandler_get_mailbox($mid) : array(
     'mail' => '',
     'mailto' => '',
@@ -23,6 +23,7 @@ function mailhandler_add_edit_mailbox($f
     'delete_after_read' => 1,
     'enabled' => 1,
     'format' => FILTER_FORMAT_DEFAULT,
+    'authentication',
   );
 
   if ($clone) {
@@ -133,6 +134,23 @@ function mailhandler_add_edit_mailbox($f
 
   // Allow administrators to select the format of saved nodes/comments
   $form['format'] = filter_form($edit['format']);
+  
+  $options = array();
+  $descriptions = '';
+  $options[0] = t('Choose method');
+  $methods = mailhandler_mailhandler_authenticate('info');
+  foreach (array_shift($methods) as $name => $info) {
+    $options[$name] = t($info['title']);
+    // TODO: theme function
+    $descriptions .= t($info['title']) .": ". t($info['description']) . "\n";
+  } 
+  $form['authentication'] = array(
+    '#type' => 'select',
+    '#title' => t('Message authentication method'),
+    '#options' => $options,
+    '#description' => t('Following is the name and description of each available authentication method') . "\n\n" . $descriptions,
+    '#default_value' => $edit['authentication'],
+  );
 
   $form['actions'] = array('#prefix' => '<p><div class="confirmation container-inline">', '#suffix' => '</div></p>');
 
@@ -221,11 +239,11 @@ function mailhandler_add_edit_mailbox_va
 function mailhandler_add_edit_mailbox_submit($form, &$form_state) {
 // TODO: try to rewrite these monsters wth drupal_write_record();
   if ($form_state['values']['mid']) {
-    db_query("UPDATE {mailhandler} SET mail = '%s', mailto = '%s', domain = '%s', port = %d, folder = '%s', name = '%s', pass = '%s', extraimap = '%s', mime = '%s', imap = '%s', security = %d, replies = %d, fromheader = '%s', commands = '%s', sigseparator = '%s', enabled = %d, delete_after_read = %d, format = %d WHERE mid = %d", $form_state['values']['mail'], $form_state['values']['mailto'], $form_state['values']['domain'], $form_state['values']['port'], $form_state['values']['folder'], $form_state['values']['name'], $form_state['values']['pass'], $form_state['values']['extraimap'], $form_state['values']['mime'], $form_state['values']['imap'], $form_state['values']['security'], $form_state['values']['replies'], $form_state['values']['fromheader'], $form_state['values']['commands'], $form_state['values']['sigseparator'], $form_state['values']['enabled'], $form_state['values']['delete_after_read'], $form_state['values']['format'], $form_state['values']['mid']);
+    db_query("UPDATE {mailhandler} SET mail = '%s', mailto = '%s', domain = '%s', port = %d, folder = '%s', name = '%s', pass = '%s', extraimap = '%s', mime = '%s', imap = '%s', security = %d, replies = %d, fromheader = '%s', commands = '%s', sigseparator = '%s', enabled = %d, delete_after_read = %d, format = %d, authentication = '%s' WHERE mid = %d", $form_state['values']['mail'], $form_state['values']['mailto'], $form_state['values']['domain'], $form_state['values']['port'], $form_state['values']['folder'], $form_state['values']['name'], $form_state['values']['pass'], $form_state['values']['extraimap'], $form_state['values']['mime'], $form_state['values']['imap'], $form_state['values']['security'], $form_state['values']['replies'], $form_state['values']['fromheader'], $form_state['values']['commands'], $form_state['values']['sigseparator'], $form_state['values']['enabled'], $form_state['values']['delete_after_read'], $form_state['values']['format'], $form_state['values']['authentication'], $form_state['values']['mid']);
     drupal_set_message(t('Mailbox %mailbox updated.', array('%mailbox' => $form_state['values']['mail'])));
   }
   else {
-    db_query("INSERT INTO {mailhandler} (mail, mailto, domain, port, folder, name, pass, extraimap, mime, imap, security, replies, fromheader, commands, sigseparator, enabled, delete_after_read, format) VALUES ('%s', '%s', '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', '%s', %d, %d, %d)", $form_state['values']['mail'], $form_state['values']['mailto'], $form_state['values']['domain'], $form_state['values']['port'], $form_state['values']['folder'], $form_state['values']['name'], $form_state['values']['pass'], $form_state['values']['extraimap'], $form_state['values']['mime'], $form_state['values']['imap'], $form_state['values']['security'], $form_state['values']['replies'], $form_state['values']['fromheader'], $form_state['values']['commands'], $form_state['values']['sigseparator'], $form_state['values']['enabled'], $form_state['values']['delete_after_read'], $form_state['values']['format']);
+    db_query("INSERT INTO {mailhandler} (mail, mailto, domain, port, folder, name, pass, extraimap, mime, imap, security, replies, fromheader, commands, sigseparator, enabled, delete_after_read, format, authentication) VALUES ('%s', '%s', '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', '%s', %d, %d, %d, '%s')", $form_state['values']['mail'], $form_state['values']['mailto'], $form_state['values']['domain'], $form_state['values']['port'], $form_state['values']['folder'], $form_state['values']['name'], $form_state['values']['pass'], $form_state['values']['extraimap'], $form_state['values']['mime'], $form_state['values']['imap'], $form_state['values']['security'], $form_state['values']['replies'], $form_state['values']['fromheader'], $form_state['values']['commands'], $form_state['values']['sigseparator'], $form_state['values']['enabled'], $form_state['values']['delete_after_read'], $form_state['values']['format'], $form_state['values']['authentication']);
     drupal_set_message(t('Mailbox %mailbox added.', array('%mailbox' => $form_state['values']['mail'])));
   }
 
Index: mailhandler.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/mailhandler/Attic/mailhandler.install,v
retrieving revision 1.7.2.2
diff -u -p -r1.7.2.2 mailhandler.install
--- mailhandler.install	26 Oct 2008 17:32:40 -0000	1.7.2.2
+++ mailhandler.install	11 Jan 2010 04:15:29 -0000
@@ -124,6 +124,12 @@ function mailhandler_uninstall() {
         'not null' => TRUE,
         'default' => 0,
       ),
+      'authentication' => array(
+        'type' => 'varchar',
+        'length' => '255',
+        'not null' => TRUE,
+        'default' => 'mailhandler_default',
+      ),
     ),
     'primary key' => array('mid'),
     'indexes' => array(
@@ -143,6 +149,17 @@ function mailhandler_update_1() {
   //return _system_update_utf8(array('mailhandler'));
 }
 
+function mailhandler_update_6001() {
+  $ret = array();
+  db_add_field($ret, 'mailhandler', 'authentication', array(
+    'type' => 'varchar', 
+    'not null' => TRUE,
+    'length' => '255',
+    'default' => 'mailhandler_default',
+  ));
+  return $ret;
+}
+
 
 /**
  * Check that the IMAP extension exists for PHP.
@@ -158,9 +175,4 @@ function mailhandler_requirements($phase
     'severity' => $has_imap ? REQUIREMENT_OK : REQUIREMENT_ERROR,
   );
   return $requirements;
-}
-
-
-/**
-
-**/
\ No newline at end of file
+}
\ No newline at end of file
Index: mailhandler.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/mailhandler/Attic/mailhandler.module,v
retrieving revision 1.96.2.8
diff -u -p -r1.96.2.8 mailhandler.module
--- mailhandler.module	10 Jan 2010 21:53:32 -0000	1.96.2.8
+++ mailhandler.module	11 Jan 2010 04:15:31 -0000
@@ -291,8 +291,8 @@ function mailhandler_node_process_messag
   $node = mailhandler_node_prepare_message($header, $origbody, $mailbox);
 
   // check if mail originates from an authenticated user
-  $node = mailhandler_authenticate($node, $header, $origbody, $mailbox);
-
+  $node = mailhandler_mailhandler_authenticate('execute', $mailbox['authentication'], array($node, $header, $origbody, $mailbox));
+  
   // Put $mimeparts on the node
   $node->mimeparts = $mimeparts;
 
@@ -637,3 +637,48 @@ function mailhandler_mail($key, &$messag
   $message['body'][] = t("You sent:\n\nFrom: !from\nSubject: !subject\nBody:\n!body", $variables);
 }
 
+/**
+ * Implementation of hook_mailhandler_authenticate_info()
+ * 
+ */
+function mailhandler_mailhandler_authenticate_info() {
+  return array(
+    'mailhandler_default' => array(
+      'title' => 'Mailhandler Default',
+      'description' => 'Checks whether the sender matches a valid user in the database',
+      'callback' => 'mailhandler_authenticate_default',
+      'module' => 'mailhandler',
+      'extension' => NULL, // as in $type in module_load_include
+      'basename' => NULL, // as in $name in module_load_include
+    ),
+  //'mailhandler_virtual' => array(
+  //  // todo
+  //),
+  );
+}
+
+function mailhandler_authenticate_default($node, $header, $origbody, $mailbox) {
+  // $fromaddress really refers to the mail header which is authoritative for authentication
+  list($fromaddress, $fromname) = mailhandler_get_fromaddress($header, $mailbox);
+  if ($from_user = mailhandler_user_load($fromaddress, $node->pass, $mailbox)) {
+    $node->uid = $from_user->uid; // success!
+    $node->name = $from_user->name;
+  }
+  else if (function_exists('mailalias_user')) { // since $fromaddress failed, try e-mail aliases
+    $result = db_query("SELECT mail FROM {users} WHERE data LIKE '%%%s%%'", $fromaddress);
+    while ($alias = db_result($result)) {
+      if ($from_user = mailhandler_user_load($alias, $node->pass, $mailbox)) {
+        $node->uid = $from_user->uid; // success!
+        $node->name = $from_user->name;
+        break;
+      }
+    }
+  }
+  if (!$from_user) {
+    // failed authentication. we will still try to submit anonymously.
+    $node->uid = 0;
+    $node->name = $fromname; // use the name supplied in email headers
+  }
+  return $node;
+}
+
Index: mailhandler.retrieve.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/mailhandler/Attic/mailhandler.retrieve.inc,v
retrieving revision 1.1.2.34
diff -u -p -r1.1.2.34 mailhandler.retrieve.inc
--- mailhandler.retrieve.inc	10 Jan 2010 21:53:32 -0000	1.1.2.34
+++ mailhandler.retrieve.inc	11 Jan 2010 04:15:31 -0000
@@ -224,32 +224,49 @@ function mailhandler_commands_parse($bod
 }
 
 /**
- * Determine who is the author of the upcoming node.
+ * Defines and executes message authentication methods
+ * 
+ * @param $op
+ *   String info or execute
+ * @param $name
+ *   String identifier for authentication method
+ * @param $args
+ *   Array of arguments to pass in to the authentication method callback
  */
-function mailhandler_authenticate($node, $header, $origbody, $mailbox) {
-
-  // $fromaddress really refers to the mail header which is authoritative for authentication
-  list($fromaddress, $fromname) = mailhandler_get_fromaddress($header, $mailbox);
-  if ($from_user = mailhandler_user_load($fromaddress, $node->pass, $mailbox)) {
-    $node->uid = $from_user->uid; // success!
-    $node->name = $from_user->name;
-  }
-  else if (function_exists('mailalias_user')) { // since $fromaddress failed, try e-mail aliases
-    $result = db_query("SELECT mail FROM {users} WHERE data LIKE '%%%s%%'", $fromaddress);
-    while ($alias = db_result($result)) {
-      if ($from_user = mailhandler_user_load($alias, $node->pass, $mailbox)) {
-        $node->uid = $from_user->uid; // success!
-        $node->name = $from_user->name;
-        break;
+function mailhandler_mailhandler_authenticate($op, $name = NULL, $args = array()) {
+  $methods = array();
+  switch ($op) {
+    case 'info':
+      foreach (module_list() as $module) {
+        if (module_hook($module, 'mailhandler_authenticate_info')) {
+          $function = $module .'_mailhandler_authenticate_info';
+          $methods[] = $function();
+        }
       }
-    }
-  }
-  if (!$from_user) {
-    // failed authentication. we will still try to submit anonymously.
-    $node->uid = 0;
-    $node->name = $fromname; // use the name supplied in email headers
+      return $methods;
+    case 'execute':
+      foreach (module_list() as $module) {
+        if (module_hook($module, 'mailhandler_authenticate_info')) {
+          $function = $module .'_mailhandler_authenticate_info';
+          $methods = $function('info');
+          // TODO - May not be found, like if providing module is disabled.  Must fail gracefully
+          foreach ($methods as $key => $method) {
+            if ($name == $key) {
+              if ($method['extension'] && $method['basename']) {
+                module_load_include($method['extension'], $method['module'], $method['basename']);
+                return call_user_func_array($method['callback'], $args);
+              }
+              else {
+                drupal_load('module', $method['module']);
+                return call_user_func_array($method['callback'], $args);
+              }
+              break 2;
+            }
+          }
+        }
+      }
+      break;
   }
-  return $node;
 }
 
 /**
