steffen: server/kolab-resource-handlers/kolab-resource-handlers/resmgr kolabfilter.php, 1.26.2.4, 1.26.2.5

cvs at intevation.de cvs at intevation.de
Thu May 18 13:13:38 CEST 2006


Author: steffen

Update of /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/resmgr
In directory doto:/tmp/cvs-serv1633

Modified Files:
      Tag: kolab_2_0_branch
	kolabfilter.php 
Log Message:
Fix for Issue1243 (from header rewriting). Port to HEAD still pending

Index: kolabfilter.php
===================================================================
RCS file: /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/resmgr/Attic/kolabfilter.php,v
retrieving revision 1.26.2.4
retrieving revision 1.26.2.5
diff -u -d -r1.26.2.4 -r1.26.2.5
--- kolabfilter.php	29 Mar 2006 12:46:12 -0000	1.26.2.4
+++ kolabfilter.php	18 May 2006 11:13:36 -0000	1.26.2.5
@@ -90,10 +90,11 @@
   $adrs = imap_rfc822_parse_adrlist($addr, $params['email_domain']);
   foreach ($adrs as $adr) {
     $adrdom = $adr->host;
-	foreach( $domains as $dom ) {
-	  if( $dom == $adrdom ) return true;
-	  if( $params['verify_subdomains'] && substr($adrdom, -strlen($dom)-1) == ".$dom" ) return true;
-	}
+    if( empty($adrdom) ) continue;
+    foreach( $domains as $dom ) {
+      if( $dom == $adrdom ) return true;
+      if( $params['verify_subdomains'] && substr($adrdom, -strlen($dom)-1) == ".$dom" ) return true;
+    }
   }
   return false;
 }
@@ -184,12 +185,20 @@
 $subject = false;
 $senderok = true;
 $rewrittenfrom = false;
-while (!feof(STDIN) && !$headers_done) {
+
+define( RM_STATE_READING_HEADER, 1 );
+define( RM_STATE_READING_FROM,   2 );
+define( RM_STATE_READING_SENDER, 3 );
+define( RM_STATE_READING_BODY,   4 );
+
+$state = RM_STATE_READING_HEADER;
+
+while (!feof(STDIN) && $state != RM_STATE_READING_BODY) {
   $buffer = fgets(STDIN, 8192);
   $line = rtrim( $buffer, "\r\n");
   if( $line == '' ) {
     // Done with headers
-    $headers_done = true;
+    $state = RM_STATE_READING_BODY;
     if( $from && $params['verify_from_header'] ) {
       if( !verify_sender( strtolower($sender), strtolower($from), $client_address) ) {
 		myLog("$sender and $from differ!", RM_LOG_DEBUG);
@@ -207,15 +216,30 @@
 		}
       }
     }
-  } else if( !$headers_done && $params['allow_sender_header'] && eregi( '^Sender: (.*)', $line, $regs ) ) {
-    $from = $regs[1];
-  } else if( !$headers_done && !$from && eregi( '^From: (.*)', $line, $regs ) ) {
-    $from = $regs[1];
-  } else if( !$headers_done && eregi( '^Subject: (.*)', $line, $regs ) ) {
-    $subject = $regs[1];
-  } else if( !$headers_done && eregi( '^Content-Type: text/calendar', $line ) ) {
-    myLog("Found iCal data in message", RM_LOG_DEBUG);
-    $ical = true;
+  } else {
+    if( $line[0] != ' ' && $line[0] != "\t" ) $state = RM_STATE_READING_HEADER;
+    switch( $state ) {
+    case RM_STATE_READING_HEADER:
+      if( $params['allow_sender_header'] && eregi( '^Sender: (.*)', $line, $regs ) ) {
+	$from = $regs[1];
+	$state = RM_STATE_READING_SENDER;
+      } else if( !$from && eregi( '^From: (.*)', $line, $regs ) ) {
+	$from = $regs[1];
+	$state = RM_STATE_READING_FROM;
+      } else if( eregi( '^Subject: (.*)', $line, $regs ) ) {
+	$subject = $regs[1];
+      } else if( eregi( '^Content-Type: text/calendar', $line ) ) {
+	myLog("Found iCal data in message", RM_LOG_DEBUG);
+	$ical = true;
+      }
+      break;
+    case RM_STATE_READING_FROM:
+      $from .= $line;
+      break;
+    case RM_STATE_READING_SENDER:
+      $from .= $line;
+      break;
+    }
   }
   if( fwrite($tmpf, $buffer) === false ) {
     exit(EX_TEMPFAIL);





More information about the commits mailing list