Bugfix: the loopback TCP performance workaround was ineffective
due to a wetware bit-flip during code cleanup. File:
util/vstream_tweak.c.
+
+20070911
+
+ Bugfix (introduced Postfix 2.2.11): TLS client certificate
+ with unparsable canonical name caused the SMTP server's
+ policy client to allocate zero-length memory, triggering
+ an assertion that it shouldn't do such things. File:
+ smtpd/smtpd_check.c.
+
+20070912
+
+ Bugfix (introduced Postfix 2.4) missing initialization of
+ event mask in the event_mask_drain() routine (used by the
+ obsolete postkick(1) command). Found by Coverity. File:
+ util/events.c.
+
+20070917
+
+ Workaround: the flush daemon forces an access time update
+ for the per-destination logfile, to prevent an excessive
+ rate of delivery attempts when the queue file system is
+ mounted with "noatime". File: flush/flush.c.
#include <sys_defs.h>
#include <sys/stat.h>
+#include <sys/time.h>
#include <unistd.h>
#include <stdlib.h>
#include <utime.h>
if (count > 0 && ftruncate(vstream_fileno(log), (off_t) 0) < 0)
msg_fatal("%s: truncate fast flush logfile %s: %m", myname, path);
+ /*
+ * Workaround for noatime mounts. Use futimes() if available.
+ */
+ (void) utimes(VSTREAM_PATH(log), (struct timeval *) 0);
+
/*
* Request delivery and clean up.
*/
* Patches change both the patchlevel and the release date. Snapshots have no
* patchlevel; they change the release date only.
*/
-#define MAIL_RELEASE_DATE "20070731"
-#define MAIL_VERSION_NUMBER "2.4.5"
+#define MAIL_RELEASE_DATE "20071017"
+#define MAIL_VERSION_NUMBER "2.4.6"
#ifdef SNAPSHOT
# define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE
coded_CN_buf = 0; \
coded_CN = ""; \
} else { \
- coded_CN_buf = vstring_alloc(strlen(CN)); \
+ coded_CN_buf = vstring_alloc(strlen(CN) + 1); \
xtext_quote(coded_CN_buf, CN, ""); \
coded_CN = STR(coded_CN_buf); \
} \
/* event_drain() repeatedly calls event_loop() until no more timer
/* events or I/O events are pending or until the time limit is reached.
/* This routine must not be called from an event_whatever() callback
-/* routine.
+/* routine. Note: this function ignores pending timer events, and
+/* assumes that no new I/O events will be registered.
/* DIAGNOSTICS
/* Panics: interface violations. Fatal errors: out of memory,
/* system call failure. Warnings: the number of available
if (EVENT_INIT_NEEDED())
return;
+#if (EVENTS_STYLE == EVENTS_STYLE_SELECT)
EVENT_MASK_ZERO(&zero_mask);
+#else
+ EVENT_MASK_ALLOC(&zero_mask, event_fdslots);
+#endif
(void) time(&event_present);
max_time = event_present + time_limit;
while (event_present < max_time
|| memcmp(&zero_mask, &event_xmask,
EVENT_MASK_BYTE_COUNT(&zero_mask)) != 0))
event_loop(1);
+#if (EVENTS_STYLE != EVENTS_STYLE_SELECT)
+ EVENT_MASK_FREE(&zero_mask);
+#endif
}
/* event_enable_read - enable read events */