2
0
mirror of https://github.com/vdukhovni/postfix synced 2025-08-30 21:55:20 +00:00

postfix-2.9.15

This commit is contained in:
Wietse Venema
2015-10-10 00:00:00 -05:00
committed by Viktor Dukhovni
parent 0c804d19d5
commit f55d429ab2
6 changed files with 55 additions and 10 deletions

View File

@@ -17968,3 +17968,27 @@ Apologies for any names omitted.
SSLv2 or SSLv3. See the RELEASE_NOTES file for how to get SSLv2 or SSLv3. See the RELEASE_NOTES file for how to get
the old settings back. Files: global/mail_params.h, the old settings back. Files: global/mail_params.h,
proto/postconf.proto, and files derived from those. 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.

View File

@@ -127,6 +127,11 @@ create|import)
fatal "'$config_directory' lacks a master.cf file" 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 # Create instance-specific directories
# #
test -d $config_directory || test -d $config_directory ||

View File

@@ -385,11 +385,20 @@ static const char *cleanup_act(CLEANUP_STATE *state, char *context,
if (STREQUAL(value, "PREPEND", command_len)) { if (STREQUAL(value, "PREPEND", command_len)) {
if (*optional_text == 0) { if (*optional_text == 0) {
msg_warn("PREPEND action without text in %s map", map_class); msg_warn("PREPEND action without text in %s map", map_class);
} else if (strcmp(context, CLEANUP_ACT_CTXT_HEADER) == 0 } else if (strcmp(context, CLEANUP_ACT_CTXT_HEADER) == 0) {
&& !is_header(optional_text)) { if (!is_header(optional_text)) {
msg_warn("bad PREPEND header text \"%s\" in %s map -- " msg_warn("bad PREPEND header text \"%s\" in %s map -- "
"need \"headername: headervalue\"", "need \"headername: headervalue\"",
optional_text, map_class); 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 { } else {
cleanup_act_log(state, "prepend", context, buf, optional_text); cleanup_act_log(state, "prepend", context, buf, optional_text);
cleanup_out_string(state, REC_TYPE_NORM, optional_text); cleanup_out_string(state, REC_TYPE_NORM, optional_text);

View File

@@ -20,8 +20,8 @@
* Patches change both the patchlevel and the release date. Snapshots have no * Patches change both the patchlevel and the release date. Snapshots have no
* patchlevel; they change the release date only. * patchlevel; they change the release date only.
*/ */
#define MAIL_RELEASE_DATE "20150720" #define MAIL_RELEASE_DATE "20151010"
#define MAIL_VERSION_NUMBER "2.9.14" #define MAIL_VERSION_NUMBER "2.9.15"
#ifdef SNAPSHOT #ifdef SNAPSHOT
# define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE # define MAIL_VERSION_DATE "-" MAIL_RELEASE_DATE

View File

@@ -1685,7 +1685,7 @@ int main(int argc, char **argv)
case 'e': case 'e':
if ((code = EDIT_CMD_CODE(optarg)) < 0) if ((code = EDIT_CMD_CODE(optarg)) < 0)
msg_fatal("Invalid '-e' edit action '%s'. Specify '%s', " 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, optarg,
EDIT_CMD_STR(EDIT_CMD_CREATE), EDIT_CMD_STR(EDIT_CMD_CREATE),
EDIT_CMD_STR(EDIT_CMD_DESTROY), EDIT_CMD_STR(EDIT_CMD_DESTROY),
@@ -1694,8 +1694,7 @@ int main(int argc, char **argv)
EDIT_CMD_STR(EDIT_CMD_ENABLE), EDIT_CMD_STR(EDIT_CMD_ENABLE),
EDIT_CMD_STR(EDIT_CMD_DISABLE), EDIT_CMD_STR(EDIT_CMD_DISABLE),
EDIT_CMD_STR(EDIT_CMD_ASSIGN), EDIT_CMD_STR(EDIT_CMD_ASSIGN),
EDIT_CMD_STR(EDIT_CMD_INIT), EDIT_CMD_STR(EDIT_CMD_INIT));
optarg);
if (cmd_mode != code) if (cmd_mode != code)
command_mode_count++; command_mode_count++;
cmd_mode = code; cmd_mode = code;

View File

@@ -78,6 +78,7 @@
#endif #endif
#endif #endif
#include <string.h> #include <string.h>
#include <errno.h>
/* Utility library. */ /* Utility library. */
@@ -177,6 +178,13 @@ char *scan_dir_next(SCAN_DIR *scan)
#define STREQ(x,y) (strcmp((x),(y)) == 0) #define STREQ(x,y) (strcmp((x),(y)) == 0)
if (info) { 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) { while ((dp = readdir(info->dir)) != 0) {
if (STREQ(dp->d_name, ".") || STREQ(dp->d_name, "..")) { if (STREQ(dp->d_name, ".") || STREQ(dp->d_name, "..")) {
if (msg_verbose > 1) if (msg_verbose > 1)