On Fri, 17 Jun 2005, Otto Moerbeek wrote: > This looks ok. I suggest you setup a local blacklist with an IP you > can use to connect to the mail machine. After that, use "nc mailserver > 25" from that IP to connect to the machine and you'll see what is > going on.
While playing with this myself, I found that spamd has an off-by one: the last entry in a blacklist does not get handled properly. This is supposed to fix it, diff against -current. -Otto Index: sdl.c =================================================================== RCS file: /cvs/src/libexec/spamd/sdl.c,v retrieving revision 1.12 diff -u -r1.12 sdl.c --- sdl.c 26 Feb 2004 08:18:56 -0000 1.12 +++ sdl.c 17 Jun 2005 18:54:51 -0000 @@ -75,11 +75,12 @@ } if (index != -1) { if (debug > 0) - printf("replacing list %s\n", blacklists[index].tag); + printf("replacing list %s; %d new entries\n", + blacklists[index].tag, addrc); sdl_free(&blacklists[index]); } else { if (debug > 0) - printf("adding list %s\n", sdname); + printf("adding list %s; %d entries\n", sdname, addrc); index = blu; } if (index == blu && blu == blc) { Index: spamd.c =================================================================== RCS file: /cvs/src/libexec/spamd/spamd.c,v retrieving revision 1.78 diff -u -r1.78 spamd.c --- spamd.c 23 May 2005 21:08:43 -0000 1.78 +++ spamd.c 17 Jun 2005 18:54:51 -0000 @@ -231,13 +231,10 @@ } while ((av[au++] = strsep(&cp, ";")) != NULL); /* toss empty last entry to allow for trailing ; */ - if (av[au - 1][0] == '\0'); + while (au > 0 && (av[au - 1] == NULL || av[au - 1][0] == '\0')) au--; - if (au < 1) - goto parse_error; - else - sdl_add(name, msg, av, au - 1); + sdl_add(name, msg, av, au); return (0); parse_error: