hi all,
the beta package integrating avast! into sendmail is available at:
updated version available:
http://www2.asw.cz/~mensik/avast4milter-2.0.1b.tar.gz
There’s a problem with 2.0.1b.
In A4FI_HEADER you copy headers to ‘textline’ variable with length of 1001.
You assume that incoming headers have less length. And you dont even check it.
I think that sendmail assembles multiline headers so length can actually be much more than 1001. So 2.0.1b just causes a segmentation fault.
Here’s my patch:
diff -u avastmilter.c.orig avastmilter.c
— avastmilter.c.orig Thu Dec 1 11:39:10 2005
+++ avastmilter.c Sat Dec 24 05:47:08 2005
@@ -383,7 +383,7 @@
{
struct a4fiPriv *priv;
int errval;
-
char textline[SMTPPROTOCOL_MAXTEXTLINE+1];
-
const char *splitter = ": "; ssize_t nwritten; priv = (struct a4fiPriv*)smfi_getpriv( ctx );
@@ -392,12 +392,11 @@
return SMFIS_TEMPFAIL;
}
-
strcpy( textline, headerf );
-
strcat( textline, ": " );
-
strcat( textline, headerv );
-
strcat( textline, STR_CRLF );
-
if( file_write( priv->fd, textline, strlen(textline), &nwritten, &errval ) == -1 ) {
-
if( file_write( priv->fd, headerf, strlen(headerf), &nwritten, &errval ) == -1 ||
-
file_write( priv->fd, splitter, strlen(splitter), &nwritten, &errval ) == -1 ||
-
file_write( priv->fd, headerv, strlen(headerv), &nwritten, &errval ) == -1 ||
-
file_write( priv->fd, STR_CRLF, strlen(STR_CRLF), &nwritten, &errval ) == -1
-
) { char errstr[128]; errorstring( errval, errstr, sizeof(errstr) ); syslog( LOG_ERR, "data write error: %s", errstr );
avast4milter fixed and enhanced:
http://www2.asw.cz/~mensik/avast4milter-2.0.1rc.tar.gz
http://www2.asw.cz/~mensik/avast4milter-2.0.1rc-1.i586.rpm