Thank you Wietse, I tested with test-milter per your instructions and confirmed that postfix does indeed include the i-macro. After some more digging I found out that Fedora installed Sendmail::PMilter instead of the apparently obsoleted Sendmail::Milter package. Unfortunately for some reason PMilter understands all macros except i (?) I have no clue why... Anyway, I reverted back to Sendmail::Milter and all is well again.
Thank you again for your useful pointers on debugging this issue! Kind regards, Erik. On 08/22/2010 11:34 PM, Wietse Venema wrote: > As with Postfix 2.3, Postfix sends the I macro by default, as > observed with the test Milter program (test-milter.c, included with > Postfix source code): > > test_eom > macro: i="972E0547B07" > macro: j="tail.porcupine.org" > macro: v="Postfix 2.8-20100728" > macro: {daemon_name}="tail.porcupine.org" > macro: {mail_addr}="wie...@porcupine.org" > macro: {rcpt_addr}="wie...@porcupine.org" > test_reply 0 > > Also visible with verbose logging from the cleanup server: > > Aug 22 17:11:34 tail postfix/cleanup[7980]: event: SMFIC_BODYEOB; macros: > i=972E0547B07 > > Finally, tcpdump will also capture the info but requires manual > disassembly of the data stream: > > IP_HDR=20 IP_OPT=0 TCP_HDR=20 TCP_OPT=12 DATA=25 FLAGS=PUSH ACK > > IP_HDR 45 00 00 4d 0b af 40 00 40 06 > vhl tos len len id id off off ttl pro > IP_HDR 00 00 7f 00 00 01 7f 00 00 01 > sum sum src src src src dst dst dst dst > TCP_HDR 8a 4d 27 0f cb f3 9f e4 b4 fd > src src dst dst seq seq seq seq ack ack > TCP_HDR ca 3c 80 18 23 00 7d e8 00 00 > ack ack off flg win win sum sum urp urp > TCP_OPT 01 01 08 0a 03 7a 94 35 9e 5c > opt opt opt opt opt opt opt opt opt opt > TCP_OPT c9 c5 > opt opt > DATA 00 00 00 10 44 45 69 00 39 37 > ^@ ^@ ^@ ^P D E i ^@ 9 7 ....DEi.97 > DATA 32 45 30 35 34 37 42 30 37 00 > 2 E 0 5 4 7 B 0 7 ^@ 2E0547B07. > DATA 00 00 00 01 45 > ^@ ^@ ^@ ^A E ....E > > 00 00 00 10 is a packet length (16 bytes) > 'D' means that the packet contains macros > 'E' means that these are end-of-body macros (SMFIC_BODYEOB) > 'i' is the name of the macro terminated by null byte > 972E0547B07 is the value of the 'i' macro terminated by null byte > > 00 00 00 01 is a packet length (1 byte) > 'E' means end of body (SMFIC_BODYEOB). > > The constants are defined in the Postfix source, and in > /usr/include/libmilter/mfdef.h > > Without even understanding anything about the Milter protocol you > should be able to find this. The next TCP packets are a reply from > the Milter containing one byte with 'c' meaning "continue", and a > command from Postfix containing one byte with 'Q' which means > "quit". > > It is possible that the Milter requests that Postfix does not notify > it about certain events that it is not interested in; in that case > Postfix won't report those events (and their milter_xxx_macros) to > the Milter application. > > To debug, it's probably easiest to hook in the Postfix test-milter > program first to convince yourself that Postfix sends 'i' at EOM > time. > > # postconf -e {,non_}smtpd_milters=inet:127.0.0.1:9999 > # postfix reload > > $ ./test-milter -d 2 -p inet:9...@localhost > > Then send some test message. > > To debug the flow with the perl application, you may need to > capture a tcpdump recording. > > Wietse