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);