steffen: server/kolab-resource-handlers/kolab-resource-handlers/resmgr kolabfilter.php.in, 1.6, 1.7 kolabmailboxfilter.php.in, 1.4, 1.5 kolabmailtransport.php, 1.5, 1.6

cvs at intevation.de cvs at intevation.de
Tue Feb 21 11:26:03 CET 2006


Author: steffen

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

Modified Files:
	kolabfilter.php.in kolabmailboxfilter.php.in 
	kolabmailtransport.php 
Log Message:
Hopefully fixes issue1042 (dotstuffing in kolabfilter)

Index: kolabfilter.php.in
===================================================================
RCS file: /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/resmgr/kolabfilter.php.in,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- kolabfilter.php.in	5 Feb 2006 20:15:10 -0000	1.6
+++ kolabfilter.php.in	21 Feb 2006 10:26:01 -0000	1.7
@@ -399,6 +399,15 @@
 }
 while (!feof($tmpf) ) {
     $buffer = fread($tmpf, 8192);
+    $len = strlen($buffer);
+
+    /* We can't tolerate that the buffer breaks the data
+       between \r and \n, so we try to avoid that. The limit 
+       of 100 reads is to battle abuse */
+    while( $buffer{$len-1} == "\r" && $len < 8192 + 100 ) {
+      $buffer .= fread($tmpf,1);
+      $len++;
+    }
     if( PEAR::isError($error = $smtp->data( $buffer )) ) {
         fwrite(STDOUT, $error->getMessage().", code ".$error->getCode()."\n"); 
 	if( $error->getCode() < 500 ) exit(EX_TEMPFAIL);

Index: kolabmailboxfilter.php.in
===================================================================
RCS file: /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/resmgr/kolabmailboxfilter.php.in,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- kolabmailboxfilter.php.in	5 Feb 2006 20:15:10 -0000	1.4
+++ kolabmailboxfilter.php.in	21 Feb 2006 10:26:01 -0000	1.5
@@ -153,6 +153,15 @@
 }
 while (!feof($tmpf) ) {
     $buffer = fread($tmpf, 8192);
+    $len = strlen($buffer);
+
+    /* We can't tolerate that the buffer breaks the data
+       between \r and \n, so we try to avoid that. The limit 
+       of 100 reads is to battle abuse */
+    while( $buffer{$len-1} == "\r" && $len < 8192 + 100 ) {
+      $buffer .= fread($tmpf,1);
+      $len++;
+    }
     if( PEAR::isError($error = $lmtp->data( $buffer )) ) {
 	fwrite(STDOUT, $error->getMessage().", code ".$error->getCode()."\n"); 
 	if( $error->getCode() < 500 ) exit(EX_TEMPFAIL);

Index: kolabmailtransport.php
===================================================================
RCS file: /kolabrepository/server/kolab-resource-handlers/kolab-resource-handlers/resmgr/kolabmailtransport.php,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- kolabmailtransport.php	22 Dec 2005 17:52:53 -0000	1.5
+++ kolabmailtransport.php	21 Feb 2006 10:26:01 -0000	1.6
@@ -2,7 +2,7 @@
 /*
  *  Copyright (c) 2005 Klaraelvdalens Datakonsult AB
  *
- *    Writen by Steffen Hansen <steffen at klaralvdalens-datakonsult.se>
+ *    Written by Steffen Hansen <steffen at klaralvdalens-datakonsult.se>
  *
  *  This  program is free  software; you can redistribute  it and/or
  *  modify it  under the terms of the GNU  General Public License as
@@ -32,7 +32,7 @@
   function start($sender,$recips) {
     $this->createTransport();
     $myclass = get_class($this->transport);
-    $this->got_newline = false;
+    $this->got_newline = true;
 
     if (!$this->transport) {
       return new PEAR_Error('Failed to connect to $myclass: ' . $error->getMessage(), 421);
@@ -47,7 +47,7 @@
     
     if( !is_array( $recips ) ) $recips = array($recips);
 
-	$reciperrors = array();
+    $reciperrors = array();
     foreach( $recips as $recip ) {
       if (PEAR::isError($error = $this->transport->rcptTo($recip))) {
 		$msg = "Failed to set recipient $recip: " . $error->getMessage(). ", code=".$this->transport->_code;;
@@ -95,9 +95,11 @@
      * Change Unix (\n) and Mac (\r) linefeeds into Internet-standard CRLF
      * (\r\n) linefeeds.
      */
-    $data = preg_replace("/([^\r]{1})\n/", "\\1\r\n", $data);
-    $data = preg_replace("/\n\n/", "\n\r\n", $data);
-    
+    //$data = preg_replace("/([^\r]{1})\n/", "\\1\r\n", $data);
+    //$data = preg_replace("/\n\n/", "\n\r\n", $data);
+    $data = preg_replace(array('/(?<!\r)\n/','/\r(?!\n)/'), "\r\n", $data);
+    //$data = preg_replace(array('/(?<!\r)\n/','/\r(?!\n)/'), "\n", $data);
+
     /*
      * Because a single leading period (.) signifies an end to the data,
      * legitimate leading periods need to be "doubled" (e.g. '..').





More information about the commits mailing list