On Thu, 2004-08-05 at 13:23 +0400, Eugene Crosser wrote:
> So, my current theory is that this is smtpserver who somehow remembers
> negative result from contentfilter and applies it to all consequitive
> messages. I am going to investigate it today.
Looks like two things interfering:
1. result sanity check in subdaemon-ctf.c line 710 is too strict: it
fails if there is no extended code in the message.
2. in contentfilter_proc() (subdaemon-ctf.c line 634 and down),
ctfstate->pbuf does not get initialized, and if sanity check above
fails, on reception of "#hungry" the *old* value is used. Oops!
This is what I suggest:
Index: subdaemon-ctf.c
===================================================================
RCS file: /cvsroot/zmailer/smtpserver/subdaemon-ctf.c,v
retrieving revision 1.17
diff -u -r1.17 subdaemon-ctf.c
--- subdaemon-ctf.c 9 Jul 2004 21:59:40 -0000 1.17
+++ subdaemon-ctf.c 5 Aug 2004 10:27:23 -0000
@@ -660,6 +660,9 @@
/* We have seen "#hungry\n", now we go and send our little thingie
down the pipe... */
+ if (ctfstate->pbuf) free(ctfstate->pbuf);
+ ctfstate->pbuf=NULL;
+
fprintf(ctfstate->outfp, "%s\n", fname);
fflush(ctfstate->outfp);
if (ferror(ctfstate->outfp)) {
@@ -707,9 +710,9 @@
/* We have a reply line here.. */
{
int i;
- rc = sscanf(ctfstate->buf, "%i %i %i", &i, &i, &i);
+ rc = sscanf(ctfstate->buf, "%i %i", &i, &i);
}
- if (rc < 3) {
+ if (rc < 2) {
/* BAD! */
continue;
}
This is a digitally signed message part