Some tweaks to SMTP auth to allow a site-wide user/pass override
authorebullient <ebullient@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Sun, 4 Jan 2004 06:11:15 +0000 (06:11 +0000)
committerebullient <ebullient@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Sun, 4 Jan 2004 06:11:15 +0000 (06:11 +0000)
(for those of us with a home installation that want to go out
using the ISP's SMTP server because people arbitrarily block
our dynamic IP addresses).

new function in auth.php assigns the correct user/pass values
based on the auth mechanism.

For some reason the initStream method in Deliver_SMTP was not using
the passed in user name, it was using the global $username, and had
the key and onetimepad declared, though it always used the passed in
parameter pass instead - cleaned that up so it used the user/pass values
passed in instead.

read_body and compose were updated to use the new function in auth.php
to get the correct username and password for SMTP auth, and pass these
values to initStream.

Works for me.

git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@6369 7612ce4b-ef26-0410-bec9-ea0150e637f0

class/deliver/Deliver_SMTP.class.php
functions/auth.php
src/compose.php
src/read_body.php

index 13f9b0ba9dede11f81cc4f2cfcd14fc5108571de..a5f657cd5738356809e4e4b5c1ebe658a4ad89aa 100644 (file)
@@ -28,12 +28,12 @@ class Deliver_SMTP extends Deliver {
     }
     
     function initStream($message, $domain, $length=0, $host='', $port='', $user='', $pass='', $authpop=false) {
-       global $use_smtp_tls,$smtp_auth_mech,$username,$key,$onetimepad;
-    
+       global $use_smtp_tls,$smtp_auth_mech;
+
        if ($authpop) {
-          $this->authPop($host, '', $username, $pass);
+          $this->authPop($host, '', $user, $pass);
        }
-       
+
     $rfc822_header = $message->rfc822_header;      
        $from = $rfc822_header->from[0];  
        $to =   $rfc822_header->to;
@@ -95,9 +95,9 @@ class Deliver_SMTP extends Deliver {
          $chall = substr($tmp,4);
          // Depending on mechanism, generate response string 
          if ($smtp_auth_mech == 'cram-md5') {
-           $response = cram_md5_response($username,$pass,$chall);
+           $response = cram_md5_response($user,$pass,$chall);
          } elseif ($smtp_auth_mech == 'digest-md5') {
-           $response = digest_md5_response($username,$pass,$chall,'smtp',$host);
+           $response = digest_md5_response($user,$pass,$chall,'smtp',$host);
          }
          fputs($stream, $response);
          
@@ -130,7 +130,7 @@ class Deliver_SMTP extends Deliver {
          if ($this->errorCheck($tmp, $stream)) {
        return(0);
          }
-      fputs($stream, base64_encode ($username) . "\r\n");
+      fputs($stream, base64_encode ($user) . "\r\n");
       $tmp = fgets($stream, 1024);
          if ($this->errorCheck($tmp, $stream)) {
        return(0);
@@ -143,7 +143,7 @@ class Deliver_SMTP extends Deliver {
          }
        } elseif ($smtp_auth_mech == "plain") {
       /* SASL Plain */
-      $auth = base64_encode("$username\0$username\0$pass");
+      $auth = base64_encode("$user\0$user\0$pass");
                   
       $query = "AUTH PLAIN\r\n";
       fputs($stream, $query);
index 5f939cccf1d553c7b281f6c2b07e401e8ecf16f1..802efced5b5856384bbebbc2de5cd916fc8b5536 100644 (file)
@@ -218,4 +218,28 @@ function hmac_md5($data, $key='') {
     return $hmac;
 }
 
+/** 
+ * Fillin user and password based on SMTP auth settings.
+ *
+ * @global
+ * @param string $user Reference to SMTP username
+ * @param string $pass Reference to SMTP password (unencrypted)
+ */
+function get_smtp_user(&$user, &$pass) {
+    global $username, $smtp_auth_mech, 
+           $smtp_sitewide_user, $smtp_sitewide_pass;
+
+    if ($smtp_auth_mech == 'none') {
+        $user = '';
+        $pass = '';
+    } elseif ( isset($smtp_sitewide_user) && isset($smtp_sitewide_pass) ) {
+        $user = $smtp_sitewide_user;
+        $pass = $smtp_sitewide_pass;
+    } else {
+        global $key, $onetimepad;
+        $user = $username;
+        $pass = OneTimePadDecrypt($key, $onetimepad);
+    }
+}
+
 ?>
index b9bda84df5614a4645cee030fe205ec5fbb676d5..2c5317f434c8d85d19b53f56beed63450775379d 100644 (file)
@@ -1462,16 +1462,8 @@ function deliverMessage($composeMessage, $draft=false) {
         $deliver = new Deliver_SMTP();
         global $smtpServerAddress, $smtpPort, $pop_before_smtp, $smtp_auth_mech;
 
-        if ($smtp_auth_mech == 'none') {
-                $user = '';
-                $pass = '';
-        } else {
-                global $key, $onetimepad;
-                $user = $username;
-                $pass = OneTimePadDecrypt($key, $onetimepad);
-        }
-
         $authPop = (isset($pop_before_smtp) && $pop_before_smtp) ? true : false;
+        get_smtp_user($user, $pass);
         $stream = $deliver->initStream($composeMessage,$domain,0,
                           $smtpServerAddress, $smtpPort, $user, $pass, $authPop);
     } elseif (!$draft) {
index bc267c6b1e91f3aff3461561e2aeb33dcd63ebe1..d8019b33f674e32ba4ab856b9804cd5084d5af19 100644 (file)
@@ -278,15 +278,8 @@ function SendMDN ( $mailbox, $passed_id, $sender, $message, $imapConnection) {
         require_once(SM_PATH . 'class/deliver/Deliver_SMTP.class.php');
         $deliver = new Deliver_SMTP();
         global $smtpServerAddress, $smtpPort, $smtp_auth_mech, $pop_before_smtp;
-        if ($smtp_auth_mech == 'none') {
-            $user = '';
-            $pass = '';
-        } else {
-            global $key, $onetimepad;
-            $user = $username;
-            $pass = OneTimePadDecrypt($key, $onetimepad);
-        }
         $authPop = (isset($pop_before_smtp) && $pop_before_smtp) ? true : false;
+        get_smtp_user($user, $pass);
         $stream = $deliver->initStream($composeMessage,$domain,0,
                                        $smtpServerAddress, $smtpPort, $user, $pass, $authPop);
     }