work around broken mailers sending broken date headers without
[squirrelmail.git] / functions / auth.php
index 71f2fdb95dc52c13db966214135bbe16dae6dbf1..de11da7da3f70c147daeb6ec02fe1747329325cf 100644 (file)
@@ -9,7 +9,7 @@
  *  functions/global.php
  *  functions/strings.php.
  *
- * @copyright © 1999-2006 The SquirrelMail Project Team
+ * @copyright © 1999-2007 The SquirrelMail Project Team
  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  * @version $Id$
  * @package squirrelmail
@@ -17,7 +17,7 @@
 
 
 /**
- * Detect logged user
+ * Detect whether user is logged in
  *
  * Function is similar to is_logged_in() function. If user is logged in, function
  * returns true. If user is not logged in or session is expired, function saves $_POST
 function sqauth_is_logged_in() {
     if ( sqsession_is_registered('user_is_logged_in') ) {
         return true;
-    } else {
-        global $PHP_SELF, $session_expired_post, $session_expired_location;
+    }
 
-        //  First we store some information in the new session to prevent
-        //  information-loss.
-        //
-        $session_expired_post = $_POST;
-        $session_expired_location = $PHP_SELF;
-        if (!sqsession_is_registered('session_expired_post')) {
-            sqsession_register($session_expired_post,'session_expired_post');
-        }
-        if (!sqsession_is_registered('session_expired_location')) {
-            sqsession_register($session_expired_location,'session_expired_location');
-        }
+       //  First we store some information in the new session to prevent
+       //  information-loss.
+       sqGetGlobalVar('PHP_SELF', $PHP_SELF, SQ_SERVER);
 
-        return false;
-     }
+       $session_expired_post = $_POST;
+       $session_expired_location = $PHP_SELF;
+       if (!sqsession_is_registered('session_expired_post')) {
+           sqsession_register($session_expired_post,'session_expired_post');
+       }
+       if (!sqsession_is_registered('session_expired_location')) {
+           sqsession_register($session_expired_location,'session_expired_location');
+       }
+       session_write_close();
+
+       return false;
 }
 
 /**
@@ -122,10 +122,11 @@ function cram_md5_response ($username,$password,$challenge) {
  *   define the digest-uri.
  * @param string $host The host name, usually the server's FQDN; it is used to
  *   define the digest-uri.
+ * @param string $authz Authorization ID (since 1.5.2)
  * @return string The response to be sent to the IMAP server
  * @since 1.4.0
  */
-function digest_md5_response ($username,$password,$challenge,$service,$host) {
+function digest_md5_response ($username,$password,$challenge,$service,$host,$authz='') {
     $result=digest_md5_parse_challenge($challenge);
 
     // verify server supports qop=auth
@@ -151,6 +152,9 @@ function digest_md5_response ($username,$password,$challenge,$service,$host) {
     $string_a1 .= utf8_encode($password);
     $string_a1 = hmac_md5($string_a1);
     $A1 = $string_a1 . ":" . $result['nonce'] . ":" . $cnonce;
+    if(!empty($authz)) {
+        $A1 .= ":" . utf8_encode($authz);
+    }
     $A1 = bin2hex(hmac_md5($A1));
     $A2 = "AUTHENTICATE:$digest_uri_value";
     // If qop is auth-int or auth-conf, A2 gets a little extra
@@ -166,6 +170,9 @@ function digest_md5_response ($username,$password,$challenge,$service,$host) {
     $reply .= 'nonce="' . $result['nonce'] . '",nc=' . $ncount . ',cnonce="' . $cnonce . '",';
     $reply .= "digest-uri=\"$digest_uri_value\",response=$response_value";
     $reply .= ',qop=' . $qop_value;
+    if(!empty($authz)) {
+        $reply .= ',authzid=' . $authz;
+    }
     $reply = base64_encode($reply);
     return $reply . "\r\n";
 
@@ -264,7 +271,8 @@ function get_smtp_user(&$user, &$pass) {
     if ($smtp_auth_mech == 'none') {
         $user = '';
         $pass = '';
-    } elseif ( isset($smtp_sitewide_user) && isset($smtp_sitewide_pass) ) {
+    } elseif ( isset($smtp_sitewide_user) && isset($smtp_sitewide_pass) &&
+               !empty($smtp_sitewide_user)) {
         $user = $smtp_sitewide_user;
         $pass = $smtp_sitewide_pass;
     } else {
@@ -272,5 +280,3 @@ function get_smtp_user(&$user, &$pass) {
         $pass = sqauth_read_password();
     }
 }
-
-?>
\ No newline at end of file