Make identities matching case insensitive
[squirrelmail.git] / class / deliver / Deliver.class.php
index f22b5f877e05d11b819bd7f13058e82bccf4a2f4..0d797710f83f9d8dc009dd779179d53d720c1126 100644 (file)
@@ -7,7 +7,7 @@
  * a delivery backend.
  *
  * @author Marc Groot Koerkamp
- * @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
@@ -151,8 +151,10 @@ class Deliver {
                 }
                 $last = $body_part;
             } elseif ($message->att_local_name) {
+                global $username, $attachment_dir;
+                $hashed_attachment_dir = getHashedDir($username, $attachment_dir);
                 $filename = $message->att_local_name;
-                $file = fopen ($filename, 'rb');
+                $file = fopen ($hashed_attachment_dir . '/' . $filename, 'rb');
                 while ($body_part = fgets($file, 4096)) {
                     // remove NUL characters
                     $body_part = str_replace("\0",'',$body_part);
@@ -176,8 +178,10 @@ class Deliver {
                     $this->writeToStream($stream, $body_part);
                 }
             } elseif ($message->att_local_name) {
+                global $username, $attachment_dir;
+                $hashed_attachment_dir = getHashedDir($username, $attachment_dir);
                 $filename = $message->att_local_name;
-                $file = fopen ($filename, 'rb');
+                $file = fopen ($hashed_attachment_dir . '/' . $filename, 'rb');
                 while ($tmp = fread($file, 570)) {
                     $body_part = chunk_split(base64_encode($tmp));
                     // Up to 4.3.10 chunk_split always appends a newline,
@@ -378,7 +382,7 @@ class Deliver {
      * @return string $header
      */
     function prepareRFC822_Header($rfc822_header, $reply_rfc822_header, &$raw_length) {
-        global $domain, $version, $username, $encode_header_key, 
+        global $domain, $username, $encode_header_key,
                $edit_identity, $hide_auth_header;
 
         /* if server var SERVER_NAME not available, use $domain */
@@ -395,7 +399,7 @@ class Deliver {
         $rn = "\r\n";
 
         /* This creates an RFC 822 date */
-        $date = date('D, j M Y H:i:s ', mktime()) . $this->timezone();
+        $date = date('D, j M Y H:i:s ', time()) . $this->timezone();
         /* Create a message-id */
         $message_id = '<' . $REMOTE_PORT . '.';
         if (isset($encode_header_key) && trim($encode_header_key)!='') {
@@ -430,7 +434,7 @@ class Deliver {
          *
          * Add $hide_squirrelmail_header as a candidate for config_local.php
          * to allow completely hiding SquirrelMail participation in message
-         * processing; This is dangerous, especially if users can modify their 
+         * processing; This is dangerous, especially if users can modify their
          * account information, as it makes mapping a sent message back to the
          * original sender almost impossible.
          */
@@ -497,7 +501,7 @@ class Deliver {
             }
         }
         /* Identify SquirrelMail */
-        $header[] = 'User-Agent: SquirrelMail/' . $version . $rn;
+        $header[] = 'User-Agent: SquirrelMail/' . SM_VERSION . $rn;
         /* Do the MIME-stuff */
         $header[] = 'MIME-Version: 1.0' . $rn;
         $contenttype = 'Content-Type: '. $rfc822_header->content_type->type0 .'/'.
@@ -513,7 +517,7 @@ class Deliver {
         if ($encoding = $rfc822_header->encoding) {
             $header[] = 'Content-Transfer-Encoding: ' . $encoding .  $rn;
         }
-        if ($rfc822_header->dnt) {
+        if (isset($rfc822_header->dnt) && $rfc822_header->dnt) {
             $dnt = $rfc822_header->getAddr_s('dnt');
             /* Pegasus Mail */
             $header[] = 'X-Confirm-Reading-To: '.$dnt. $rn;
@@ -555,7 +559,9 @@ class Deliver {
                 $aRefs = explode(' ',$sRefs);
                 $sLine = 'References:';
                 foreach ($aRefs as $sReference) {
-                    if (strlen($sLine)+strlen($sReference) >76) {
+                    if ( trim($sReference) == '' ) {
+                         /* Don't add spaces. */
+                    } elseif (strlen($sLine)+strlen($sReference) >76) {
                         $hdr_s .= $sLine;
                         $sLine = $rn . '    ' . $sReference;
                     } else {
@@ -733,7 +739,7 @@ class Deliver {
         $aReferences = preg_split('/\s+/', $hdr->references);
         $message_id = $hdr->message_id;
         $in_reply_to = $hdr->in_reply_to;
-       
+
         // if References already exists, add the current message ID at the end.
         // no References exists; if we know a IRT, add that aswell
         if (count($aReferences) == 0 && $in_reply_to) {
@@ -742,7 +748,7 @@ class Deliver {
         $aReferences[] = $message_id;
 
         // sanitize the array: trim whitespace, remove dupes
-        array_walk($aReferences, 'trim_value');
+        array_walk($aReferences, 'sq_trim_value');
         $aReferences = array_unique($aReferences);
 
         while ( count($aReferences) > 4 && strlen(implode(' ', $aReferences)) >= 986 ) {
@@ -751,13 +757,6 @@ class Deliver {
         return implode(' ', $aReferences);
     }
 
-    /**
-     * Callback function to trim whitespace from a value, to be used in array_walk
-     */
-    function trim_value ( &$value ) {
-        $value = trim($value);
-    }
-
     /**
      * Converts ip address to hexadecimal string
      *
@@ -819,5 +818,3 @@ class Deliver {
         return $ret;
     }
 }
-
-?>