Hi all,

i'm trying to setup commercial spam filter with postfix. It works with Sendmail using milter protocol, but with Postfix I've got in logs:

Aug 31 11:34:11 master postfix/cleanup[8458]: warning: milter inet:127.0.0.1:2266: malformed reply: 550 The message has been rejected by spam filtering engine.

I've investigated problem to this place (src/milter/milter8.c):
case SMFIR_REPLYCODE:
...
if ((STR(milter->buf)[0] != '4' && STR(milter->buf)[0] != '5')
    || !ISDIGIT(STR(milter->buf)[1])
    || !ISDIGIT(STR(milter->buf)[2])
    || (STR(milter->buf)[3] != ' ' && STR(milter->buf)[3] != '-')
    || STR(milter->buf)[4] != STR(milter->buf)[0]) {

Comment indicates that Postfix expects "ddd d.d+.d+ text", but anti-spam filter returns something different. So just removing last check resolves problem.
Can someone confirm this fix doesn't break anything?

Patch for version 2.7.4.
Thanks.

--
Vladimir Vassiliev
--- postfix-2.7.4/src/milter/milter8.c	2011-08-31 11:52:55.107198728 +0400
+++ postfix-2.7.4/src/milter/milter8.c	2011-08-31 11:53:34.695322248 +0400
@@ -1255,8 +1255,8 @@
 	    if ((STR(milter->buf)[0] != '4' && STR(milter->buf)[0] != '5')
 		|| !ISDIGIT(STR(milter->buf)[1])
 		|| !ISDIGIT(STR(milter->buf)[2])
-		|| (STR(milter->buf)[3] != ' ' && STR(milter->buf)[3] != '-')
-		|| STR(milter->buf)[4] != STR(milter->buf)[0]) {
+		|| (STR(milter->buf)[3] != ' ' && STR(milter->buf)[3] != '-')) {
+//		|| STR(milter->buf)[4] != STR(milter->buf)[0]) {
 		msg_warn("milter %s: malformed reply: %s",
 			 milter->m.name, STR(milter->buf));
 		milter8_conf_error(milter);

Reply via email to