steffen: server/kolab-resource-handlers/kolab-resource-handlers/resmgr kolabfilter.php.in, 1.9, 1.10 kolabmailboxfilter.php.in, 1.6, 1.7

cvs at intevation.de cvs at intevation.de
Sun May 21 15:53:27 CEST 2006


Author: steffen

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

Modified Files:
	kolabfilter.php.in kolabmailboxfilter.php.in 
Log Message:
Forward port of fix for issues 1243/1245

Index: kolabfilter.php.in
===================================================================
RCS file: /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/resmgr/kolabfilter.php.in,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- kolabfilter.php.in	29 Mar 2006 12:56:01 -0000	1.9
+++ kolabfilter.php.in	21 May 2006 13:53:25 -0000	1.10
@@ -70,7 +70,11 @@
 
 // Temp file for storing the message
 $tmpfname = tempnam( TMPDIR, 'IN.' );
-$tmpf = fopen($tmpfname, "w");
+$tmpf = @fopen($tmpfname, "w");
+if( !$tmpf ) {
+  myLog("Error: Could not open $tempfname for writing: ".php_error(), RM_LOG_ERROR);
+  exit(EX_TEMPFAIL);
+}
 
 // Cleanup function
 function cleanup() {
@@ -90,10 +94,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;
 }
@@ -277,19 +282,24 @@
 myLog("Kolabfilter starting up, user=$sasl_username, sender=$sender, recipients=".join(',', $recipients)
       .", client_address=$client_address", RM_LOG_DEBUG);
 
+define( RM_STATE_READING_HEADER, 1 );
+define( RM_STATE_READING_FROM,   2 );
+define( RM_STATE_READING_SUBJECT,3 );
+define( RM_STATE_READING_SENDER, 4 );
+define( RM_STATE_READING_BODY,   5 );
+
 $ical = false;
-$add_headers = array();
-$headers_done = false;
 $from = false;
 $subject = false;
 $senderok = true;
 $rewrittenfrom = false;
-while (!feof(STDIN) && !$headers_done) {
+$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'] ) {
       $rc = verify_sender( $sasl_username, $sender, $from, $client_address);
       if( PEAR::isError($rc) ) {
@@ -310,15 +320,34 @@
 	}
       }
     }
-  } 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];
+	$state = RM_STATE_READING_SUBJECT;
+      } 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;
+    case RM_STATE_READING_SUBJECT:
+      $subject .= $line;
+      break;
+    }
   }
   if( fwrite($tmpf, $buffer) === false ) {
     exit(EX_TEMPFAIL);
@@ -355,7 +384,12 @@
 //$outputtime =& new MyTimer("Output");
 //$outputtime->start();
 
-$tmpf = fopen($tmpfname,"r");
+$tmpf = @fopen($tmpfname,"r");
+if( !$tmpf ) {
+  myLog("Error: Could not open $tempfname for reading: ".php_error(), RM_LOG_ERROR);
+  exit(EX_TEMPFAIL);
+}
+
 /* TODO: Dont hardcode localhost:10025 */
 $smtp = new KolabSMTP( 'localhost', 10025 );
 if( PEAR::isError( $smtp ) ) {
@@ -369,30 +403,35 @@
   else exit(EX_UNAVAILABLE);
 }
 
-$headers_done = false;
-while (!feof($tmpf) && !$headers_done) {
+$state = RM_STATE_READING_HEADER;
+while (!feof($tmpf) && $state != RM_STATE_READING_BODY) {
   $buffer = fgets($tmpf, 8192);
-  if( !$headers_done && $rewrittenfrom && eregi( '^From: (.*)', $buffer ) ) {
-	if( PEAR::isError($error = $smtp->data( $rewrittenfrom )) ) {
-	  fwrite(STDOUT, $error->getMessage().", code ".$error->getCode()."\n"); 
-	  if( $error->getCode() < 500 ) exit(EX_TEMPFAIL);
-	  else exit(EX_UNAVAILABLE);
-	}
-	continue;
-  } 
-  if( !$headers_done && rtrim( $buffer, "\r\n" ) == '' ) {
-    $headers_done = true;
-    foreach( $add_headers as $h ) {
-      if( PEAR::isError($error = $smtp->data( "$h\r\n" )) ) {
-		fwrite(STDOUT, $error->getMessage().", code ".$error->getCode()."\n"); 
-		if( $error->getCode() < 500 ) exit(EX_TEMPFAIL);
-		else exit(EX_UNAVAILABLE);
+  if( $rewrittenfrom ) {
+    if( eregi( '^From: (.*)', $buffer ) ) {
+      if( PEAR::isError($error = $smtp->data( $rewrittenfrom )) ) {
+	$str = $error->getMessage().", code ".$error->getCode();
+	myLog($str,RM_LOG_ERROR);
+	fwrite(STDOUT, $str."\n");
+	if( $error->getCode() < 500 ) exit(EX_TEMPFAIL);
+	else exit(EX_UNAVAILABLE);
       }
+      $state = RM_STATE_READING_FROM;
+      continue;
+    } else if( $state == RM_STATE_READING_FROM &&
+	       ($buffer[0] == ' ' || $buffer[0] == "\t" ) ) {
+      // Folded From header, ignore
+      continue;
     }
   }
-  //myLog("Calling smtp->data( ".rtrim($buffer)." )", RM_LOG_DEBUG);
+  if( rtrim( $buffer, "\r\n" ) == '' ) {
+    $state = RM_STATE_READING_BODY;
+  } else if( $buffer[0] != ' ' && $buffer[0] != "\t" ) {
+    $state = RM_STATE_READING_HEADER;
+  }
   if( PEAR::isError($error = $smtp->data( $buffer )) ) {
-    fwrite(STDOUT, $error->getMessage().", code ".$error->getCode()."\n"); 
+    $str = $error->getMessage().", code ".$error->getCode();
+    myLog($str,RM_LOG_ERROR);
+    fwrite(STDOUT, $str."\n");
     if( $error->getCode() < 500 ) exit(EX_TEMPFAIL);
     else exit(EX_UNAVAILABLE);
   }

Index: kolabmailboxfilter.php.in
===================================================================
RCS file: /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/resmgr/kolabmailboxfilter.php.in,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- kolabmailboxfilter.php.in	28 Feb 2006 21:20:38 -0000	1.6
+++ kolabmailboxfilter.php.in	21 May 2006 13:53:25 -0000	1.7
@@ -39,7 +39,11 @@
 
 // Temp file for storing the message
 $tmpfname = tempnam( TMPDIR, 'IN.' );
-$tmpf = fopen($tmpfname, "w");
+$tmpf = @fopen($tmpfname, "w");
+if( !$tmpf ) {
+  myLog("Error: Could not open $tempfname for writing: ".php_error(), RM_LOG_ERROR);
+  exit(EX_TEMPFAIL);
+}
 
 // Cleanup function
 function cleanup() {
@@ -76,17 +80,12 @@
 $ical = false;
 $add_headers = array();
 $headers_done = false;
-$from = false;
 while (!feof(STDIN) && !$headers_done) {
   $buffer = fgets(STDIN, 8192);
   $line = rtrim( $buffer, "\r\n");
   if( $line == '' ) {
     // Done with headers
     $headers_done = true;
-  } else if( !$headers_done && $params['allow_sender_header'] && eregi( '^Sender: (.*)', $line, $regs ) ) {
-    $from = strtolower($regs[1]);
-  } else if( !$headers_done && !$from && eregi( '^From: (.*)', $line, $regs ) ) {
-    $from = strtolower($regs[1]);
   } else if( eregi( '^Content-Type: text/calendar', $line ) ) {
     myLog("Found iCal data in message", RM_LOG_DEBUG);    
     $ical = true;
@@ -124,7 +123,12 @@
 // Check if we still have recipients
 if( empty($recipients) ) exit(0);
 
-$tmpf = fopen($tmpfname,"r");
+$tmpf = @fopen($tmpfname,"r");
+if( !$tmpf ) {
+  myLog("Error: Could not open $tempfname for writing: ".php_error(), RM_LOG_ERROR);
+  exit(EX_TEMPFAIL);
+}
+
 $lmtp = new KolabLMTP();
 if( PEAR::isError( $lmtp ) ) {
   fwrite(STDOUT, $lmtp->getMessage()."\n");





More information about the commits mailing list