steffen: server/kolab-resource-handlers/kolab-resource-handlers/resmgr kolabfilter.php, 1.26.2.5, 1.26.2.6 misc.php, 1.4, 1.4.2.1

cvs at intevation.de cvs at intevation.de
Sun May 21 14:09:20 CEST 2006


Author: steffen

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

Modified Files:
      Tag: kolab_2_0_branch
	kolabfilter.php misc.php 
Log Message:
Fix for Issue1245 (folded headers)

Index: kolabfilter.php
===================================================================
RCS file: /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/resmgr/Attic/kolabfilter.php,v
retrieving revision 1.26.2.5
retrieving revision 1.26.2.6
diff -u -d -r1.26.2.5 -r1.26.2.6
--- kolabfilter.php	18 May 2006 11:13:36 -0000	1.26.2.5
+++ kolabfilter.php	21 May 2006 12:09:18 -0000	1.26.2.6
@@ -71,11 +71,15 @@
 // Temp file for storing the message
 $tmpfname = tempnam( TMPDIR, 'IN.' );
 $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() {
   global $tmpfname;
-  file_exists($tmpfname) && unlink($tmpfname);
+  //file_exists($tmpfname) && unlink($tmpfname);
 }
 register_shutdown_function( 'cleanup' );
 
@@ -131,8 +135,6 @@
     $senderdom = substr(strrchr($sender, '@'), 1);
     foreach( $domains as $domain ) {
       if( $params['verify_subdomains'] ) {	
-		//myLog( "Checking if ".substr($senderdom, -strlen($domain)-1)." == .$domain", RM_LOG_DEBUG );
-		//myLog( "Checking if ".substr($fromdom, -strlen($domain)-1)." == .$domain", RM_LOG_DEBUG );
 		if( $client_addr != '127.0.0.1' && 
 			($senderdom == $domain ||
 			 $fromdom   == $domain ||
@@ -179,8 +181,6 @@
       .", client_address=$client_address", RM_LOG_DEBUG);
 
 $ical = false;
-$add_headers = array();
-$headers_done = false;
 $from = false;
 $subject = false;
 $senderok = true;
@@ -188,8 +188,9 @@
 
 define( RM_STATE_READING_HEADER, 1 );
 define( RM_STATE_READING_FROM,   2 );
-define( RM_STATE_READING_SENDER, 3 );
-define( RM_STATE_READING_BODY,   4 );
+define( RM_STATE_READING_SUBJECT,3 );
+define( RM_STATE_READING_SENDER, 4 );
+define( RM_STATE_READING_BODY,   5 );
 
 $state = RM_STATE_READING_HEADER;
 
@@ -228,6 +229,7 @@
 	$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;
@@ -239,6 +241,9 @@
     case RM_STATE_READING_SENDER:
       $from .= $line;
       break;
+    case RM_STATE_READING_SUBJECT:
+      $subject .= $line;
+      break;
     }
   }
   if( fwrite($tmpf, $buffer) === false ) {
@@ -276,6 +281,11 @@
 //$outputtime->start();
 
 $tmpf = fopen($tmpfname,"r");
+if( !$tmpf ) {
+  myLog("Error: Could not open $tempfname for reading: ".php_error(), RM_LOG_ERROR);
+  exit(EX_TEMPFAIL);  
+}
+
 $smtp = new KolabSMTP( 'localhost', 10026 );
 if( PEAR::isError( $smtp ) ) {
   fwrite(STDOUT, $error->getMessage().", code ".$error->getCode()."\n"); 
@@ -288,30 +298,36 @@
   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( $rewrittenfrom ) {
+    if( eregi( '^From: (.*)', $buffer ) ) {
+      if( PEAR::isError($error = $smtp->data( $rewrittenfrom )) ) {
+	$str = $error->getMessage().", code ".$error->getCode();
+	myLog($str,RM_LOG_DEBUG);
+	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( $buffer[0] != ' ' && $buffer[0] != "\t" ) {
+    $state = RM_STATE_READING_HEADER;    
+  }
+  if( rtrim( $buffer, "\r\n" ) == '' ) {
+    $state = RM_STATE_READING_BODY;
+  }
   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_DEBUG);
+    fwrite(STDOUT, $str."\n"); 
     if( $error->getCode() < 500 ) exit(EX_TEMPFAIL);
     else exit(EX_UNAVAILABLE);
   }
@@ -334,7 +350,6 @@
     }
 };
 
-//myLog("Calling smtp->end()", RM_LOG_DEBUG);
 $smtp->end();
 //$outputtime->stop();
 myLog("Kolabfilter successfully completed", RM_LOG_DEBUG);

Index: misc.php
===================================================================
RCS file: /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/resmgr/misc.php,v
retrieving revision 1.4
retrieving revision 1.4.2.1
diff -u -d -r1.4 -r1.4.2.1
--- misc.php	2 Apr 2005 02:47:34 -0000	1.4
+++ misc.php	21 May 2006 12:09:18 -0000	1.4.2.1
@@ -187,4 +187,4 @@
   return $ret;
 }
 
-?>
\ No newline at end of file
+?>





More information about the commits mailing list