Postfix 2.0 patch 19 fixes two low-priority problems. - When mail is submitted at a high rate with the Postfix sendmail command, the pickup daemon is keps busy long enough that it it terminated by the watchdog timer (a feature that prevents Postfix from locking up permanently). - Malformed addresses in SMTP commands could result in table looks with zero-length search strings, causing trouble with NIS lookups. Prereq: "2.0.18" diff -cr /tmp/postfix-2.0.18/src/global/mail_version.h ./src/global/mail_version.h *** /tmp/postfix-2.0.18/src/global/mail_version.h Thu Jan 22 08:41:53 2004 --- ./src/global/mail_version.h Fri Mar 12 17:12:27 2004 *************** *** 20,29 **** * Patches change the patchlevel and the release date. Snapshots change the * release date only, unless they include the same bugfix as a patch release. */ ! #define MAIL_RELEASE_DATE "20040122" #define VAR_MAIL_VERSION "mail_version" ! #define DEF_MAIL_VERSION "2.0.18" extern char *var_mail_version; /* --- 20,29 ---- * Patches change the patchlevel and the release date. Snapshots change the * release date only, unless they include the same bugfix as a patch release. */ ! #define MAIL_RELEASE_DATE "20040312" #define VAR_MAIL_VERSION "mail_version" ! #define DEF_MAIL_VERSION "2.0.19" extern char *var_mail_version; /* diff -cr /tmp/postfix-2.0.18/HISTORY ./HISTORY *** /tmp/postfix-2.0.18/HISTORY Thu Jan 22 09:44:40 2004 --- ./HISTORY Fri Mar 12 21:32:34 2004 *************** *** 7965,7970 **** --- 7965,7982 ---- Portability: test -e is not portable. File: conf/postfix-script. + 20040302 + + Bugfix: the pickup daemon now strokes the watchdog frequently + to prevent the watchdog from barking when mail arrives + faster than it can be picked up. File: pickup/pickup.c. + + 20040311 + + Bugfix: bad address syntax caused map lookup with zero-length + keys. Problem reported by Andrei Koulik. Files: + util/match_ops.c, src/trivial-rewrite/transport.c. + Open problems: Doc: mention the proxy_interfaces parameter everywhere the diff -cr /tmp/postfix-2.0.18/src/pickup/Makefile.in ./src/pickup/Makefile.in *** /tmp/postfix-2.0.18/src/pickup/Makefile.in Sat Sep 13 20:04:04 2003 --- ./src/pickup/Makefile.in Sun Feb 1 16:40:59 2004 *************** *** 64,69 **** --- 64,70 ---- pickup.o: ../../include/vstream.h pickup.o: ../../include/set_ugid.h pickup.o: ../../include/safe_open.h + pickup.o: ../../include/watchdog.h pickup.o: ../../include/stringops.h pickup.o: ../../include/mail_queue.h pickup.o: ../../include/mail_open_ok.h diff -cr /tmp/postfix-2.0.18/src/pickup/pickup.c ./src/pickup/pickup.c *** /tmp/postfix-2.0.18/src/pickup/pickup.c Wed May 21 17:34:55 2003 --- ./src/pickup/pickup.c Sun Feb 1 16:40:38 2004 *************** *** 89,94 **** --- 89,95 ---- #include #include #include + #include #include /* Global library. */ *************** *** 476,481 **** --- 477,486 ---- * still being written, or garbage. Leave it up to the sysadmin to remove * garbage. Keep scanning the queue directory until we stop removing * files from it. + * + * When we find a file, stroke the watchdog so that it will not bark while + * some application is keeping us busy by injecting lots of mail into the + * maildrop directory. */ queue_name = MAIL_QUEUE_MAILDROP; /* XXX should be a list */ do { *************** *** 485,490 **** --- 490,496 ---- if (mail_open_ok(queue_name, id, &info.st, &path) == MAIL_OPEN_YES) { pickup_init(&info); info.path = mystrdup(path); + watchdog_pat(); if (pickup_file(&info) == REMOVE_MESSAGE_FILE) { if (REMOVE(info.path)) msg_warn("remove %s: %m", info.path); diff -cr /tmp/postfix-2.0.18/src/trivial-rewrite/transport.c ./src/trivial-rewrite/transport.c *** /tmp/postfix-2.0.18/src/trivial-rewrite/transport.c Tue Jan 14 08:39:23 2003 --- ./src/trivial-rewrite/transport.c Fri Mar 12 17:42:13 2004 *************** *** 281,287 **** * Specify that the lookup key is partial, to avoid matching partial keys * with regular expressions. */ ! for (name = ratsign + 1; /* void */ ; name = next) { if (find_transport_entry(name, rcpt_domain, PARTIAL, channel, nexthop)) RETURN_FREE(FOUND); if (dict_errno != 0) --- 281,287 ---- * Specify that the lookup key is partial, to avoid matching partial keys * with regular expressions. */ ! for (name = ratsign + 1; *name != 0; name = next) { if (find_transport_entry(name, rcpt_domain, PARTIAL, channel, nexthop)) RETURN_FREE(FOUND); if (dict_errno != 0) diff -cr /tmp/postfix-2.0.18/src/util/match_ops.c ./src/util/match_ops.c *** /tmp/postfix-2.0.18/src/util/match_ops.c Sat Sep 13 22:08:15 2003 --- ./src/util/match_ops.c Fri Mar 12 17:39:49 2004 *************** *** 139,145 **** if (strchr(pattern, ':') != 0) { temp = lowercase(mystrdup(name)); match = 0; ! for (entry = temp; /* void */ ; entry = next) { if ((match = (dict_lookup(pattern, entry) != 0)) != 0) break; if (dict_errno != 0) --- 139,145 ---- if (strchr(pattern, ':') != 0) { temp = lowercase(mystrdup(name)); match = 0; ! for (entry = temp; *entry != 0; entry = next) { if ((match = (dict_lookup(pattern, entry) != 0)) != 0) break; if (dict_errno != 0)