SSLv2 or SSLv3. See the RELEASE_NOTES file for how to get
the old settings back. Files: global/mail_params.h,
proto/postconf.proto, and files derived from those.
+
+20150924
+
+ Bugfix (introduced: 20090216-24): incorrect postmulti error
+ message. Reported by Patrik Koetter. Fix by Viktor Dukhovni.
+ File: postmulti/postmulti.c.
+
+ Workaround: don't create a new instance when the template
+ main.cf and master.cf files are missing, as happens on
+ Debian-like systems. Viktor Dukhovni. File: conf/postmulti-script.
+
+20150925
+
+ Bugfix (introduced: 19970309, fixed 20150421 in development
+ release): reset errno before calling readdir(), in order
+ to distinguish between an end-of-directory and an error
+ condition. File: scandir.c.
+
+20150930
+
+ Bugfix (introduced: 20040124): Milter client panic while
+ adding a header, because the PREPEND action used the same
+ output function for header_checks and body_checks. Viktor
+ Dukhovni and Wietse. File: cleanup/cleanup_message.c.
fatal "'$config_directory' lacks a master.cf file"
}
+ test -f $daemon_directory/main.cf ||
+ fatal "Missing main.cf prototype: $daemon_directory/main.cf"
+ test -f $daemon_directory/master.cf ||
+ fatal "Missing master.cf prototype: $daemon_directory/master.cf"
+
# Create instance-specific directories
#
test -d $config_directory ||
if (STREQUAL(value, "PREPEND", command_len)) {
if (*optional_text == 0) {
msg_warn("PREPEND action without text in %s map", map_class);
- } else if (strcmp(context, CLEANUP_ACT_CTXT_HEADER) == 0
- && !is_header(optional_text)) {
- msg_warn("bad PREPEND header text \"%s\" in %s map -- "
- "need \"headername: headervalue\"",
- optional_text, map_class);
+ } else if (strcmp(context, CLEANUP_ACT_CTXT_HEADER) == 0) {
+ if (!is_header(optional_text)) {
+ msg_warn("bad PREPEND header text \"%s\" in %s map -- "
+ "need \"headername: headervalue\"",
+ optional_text, map_class);
+ } else {
+ VSTRING *temp;
+
+ cleanup_act_log(state, "prepend", context, buf, optional_text);
+ temp = vstring_strcpy(vstring_alloc(strlen(optional_text)),
+ optional_text);
+ cleanup_out_header(state, temp);
+ vstring_free(temp);
+ }
} else {
cleanup_act_log(state, "prepend", context, buf, optional_text);
cleanup_out_string(state, REC_TYPE_NORM, optional_text);
* Patches change both the patchlevel and the release date. Snapshots have no
* patchlevel; they change the release date only.
*/
-#define MAIL_RELEASE_DATE "20150720"
-#define MAIL_VERSION_NUMBER "2.9.14"
+#define MAIL_RELEASE_DATE "20151010"
+#define MAIL_VERSION_NUMBER "2.9.15"
#ifdef SNAPSHOT
# define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE
case 'e':
if ((code = EDIT_CMD_CODE(optarg)) < 0)
msg_fatal("Invalid '-e' edit action '%s'. Specify '%s', "
- "'%s', '%s', '%s', '%s', '%s', '%s', '%s' or '%s'",
+ "'%s', '%s', '%s', '%s', '%s', '%s' or '%s'",
optarg,
EDIT_CMD_STR(EDIT_CMD_CREATE),
EDIT_CMD_STR(EDIT_CMD_DESTROY),
EDIT_CMD_STR(EDIT_CMD_ENABLE),
EDIT_CMD_STR(EDIT_CMD_DISABLE),
EDIT_CMD_STR(EDIT_CMD_ASSIGN),
- EDIT_CMD_STR(EDIT_CMD_INIT),
- optarg);
+ EDIT_CMD_STR(EDIT_CMD_INIT));
if (cmd_mode != code)
command_mode_count++;
cmd_mode = code;
#endif
#endif
#include <string.h>
+#include <errno.h>
/* Utility library. */
#define STREQ(x,y) (strcmp((x),(y)) == 0)
if (info) {
+
+ /*
+ * Fix 20150421: readdir() does not reset errno after reaching the
+ * end-of-directory. This dates back all the way to the initial
+ * implementation of 19970309.
+ */
+ errno = 0;
while ((dp = readdir(info->dir)) != 0) {
if (STREQ(dp->d_name, ".") || STREQ(dp->d_name, "..")) {
if (msg_verbose > 1)