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