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
* 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 MAIL_RELEASE_DATE "20040312"
#define VAR_MAIL_VERSION "mail_version"
-#define DEF_MAIL_VERSION "2.0.18"
+#define DEF_MAIL_VERSION "2.0.19"
extern char *var_mail_version;
/*
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
#include <vstream.h>
#include <set_ugid.h>
#include <safe_open.h>
+#include <watchdog.h>
#include <stringops.h>
/* Global library. */
* 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 {
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);
* Specify that the lookup key is partial, to avoid matching partial keys
* with regular expressions.
*/
- for (name = ratsign + 1; /* void */ ; name = next) {
+ 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)
if (strchr(pattern, ':') != 0) {
temp = lowercase(mystrdup(name));
match = 0;
- for (entry = temp; /* void */ ; entry = next) {
+ for (entry = temp; *entry != 0; entry = next) {
if ((match = (dict_lookup(pattern, entry) != 0)) != 0)
break;
if (dict_errno != 0)