diff --git a/postfix/HISTORY b/postfix/HISTORY index 6833bcadc..a48b22ce5 100644 --- a/postfix/HISTORY +++ b/postfix/HISTORY @@ -16004,7 +16004,7 @@ Apologies for any names omitted. Workaround: better handling of pregreeting spambots. The postscreen built-in SMTP engine no longer sends a 220 banner - to a client that falls into the pregeet trap. This eliminates + to a client that falls into the pregreet trap. This eliminates many "NON-SMTP COMMAND" records in postscreen logging, as the SMTP client and server no longer get out of sync. It also results in better logging of sender/recipient information. @@ -16594,10 +16594,34 @@ Apologies for any names omitted. 20110213 - Workaround (problem introduced with Postfix TLS patch): the - TLS library passes the same information via different - function arguments, and this same information is maintained - by different functions, so things get out of step when code - is updated. As of 20110212, tls_client_start() needs to set - the VSTREAM property of the TLS session object. File: - tls/tls_client.c. + Workaround: the TLS library passes the same information via + different function arguments, and this same information is + maintained by different functions, so things get out of + step when code is updated. As of 20110212, tls_client_start() + needs to set the VSTREAM property of the TLS session object. + File: tls/tls_client.c. + +20110215 + + Human factors: the FCRDNS (forward-confirmed reverse DNS) + checking code now logs "hostname X does not resolve to + address Y", when a "reverse hostname" lookup result does + not resolve to the client IP address. Files: smtpd/smtpd_peer.c, + qmqpr/qmqpd_peer.c. + +20110216 + + Cleanup: don't log a "connection reset by peer" error when + postscreen(8) tries to send a server response. File: + postscreen/postscreen_send.c. + +20110218 + + Cleanup: Postfix now uses long integers for message_size_limit, + mailbox_size_limit and virtual_mailbox_limit. On LP64 (64-bit + long and pointer, but 32-bit integer) systems, these message + and mailbox limits can now exceed 2GB. Files: global/mail_params.c + global/mail_params.h local/local.c master/event_server.c + master/mail_server.h master/multi_server.c master/single_server.c + master/trigger_server.c virtual/virtual.c postconf/extract.awk + postconf/postconf.c. diff --git a/postfix/RELEASE_NOTES b/postfix/RELEASE_NOTES index 930f85f19..a09f1519b 100644 --- a/postfix/RELEASE_NOTES +++ b/postfix/RELEASE_NOTES @@ -14,7 +14,23 @@ specifies the release date of a stable release or snapshot release. If you upgrade from Postfix 2.7 or earlier, read RELEASE_NOTES-2.8 before proceeding. -Major changes with snapshot 20110130 +Incompatible changes with snapshot 20110219 +=========================================== + +The Postfix SMTP and QMQP servers now log "hostname X does not +resolve to address Y", when a "reverse hostname" lookup result does +not resolve to the client IP address. Until now these servers logged +"Y: hostname X verification failed" or "Y: address not listed for +hostname X" depending on the details of the error. + +Major changes with snapshot 20110219 +==================================== + +Postfix now uses long integers for message_size_limit, mailbox_size_limit +and virtual_mailbox_limit. On LP64 systems (64-bit long and pointer, +but 32-bit integer), these limits can now exceed 2GB. + +Major changes with snapshot 20110212 ==================================== Support for per-record deadlines. These change the behavior of diff --git a/postfix/WISHLIST b/postfix/WISHLIST index 7e39f54da..1098f4190 100644 --- a/postfix/WISHLIST +++ b/postfix/WISHLIST @@ -6,11 +6,11 @@ Wish list: Things to do after the stable release: + Make the rules for how to use close-on-exec more explicit. + Don't forget Apple's code donation for fetching mail from IMAP server. - Update MILTER_README with pointer to OpenDKIM. - postconf command-line option to show the compile-time settings (CCARGS, AUXLIBS) in case binary packages don't install the makedefs.out file. @@ -19,6 +19,8 @@ Wish list: etc. databases, i.e. set the owner property at open time; it can't be looked up at run-time with fstat(dict->stat_fd) because there is no open file. What about *SQL, LDAP, etc.? + Maybe use the source of the configuration file? We can reuse + that to enforce root ownership of main/master.cf files. events.c: cache the side effects of file descriptor event enable/disable operations in user space, and do bulk kernel diff --git a/postfix/html/mysql_table.5.html b/postfix/html/mysql_table.5.html index 0093226cb..52d4c46da 100644 --- a/postfix/html/mysql_table.5.html +++ b/postfix/html/mysql_table.5.html @@ -82,7 +82,7 @@ MYSQL_TABLE(5) MYSQL_TABLE(5) hosts The hosts that Postfix will try to connect to and query from. Specify unix: for UNIX domain sockets, inet: for TCP connections (default). Example: - hosts = host1.some.domain host2.some.domain + hosts = host1.some.domain host2.some.domain:port hosts = unix:/file/name The hosts are tried in random order, with all con- diff --git a/postfix/man/man5/mysql_table.5 b/postfix/man/man5/mysql_table.5 index b6f6caf7d..d79aa2330 100644 --- a/postfix/man/man5/mysql_table.5 +++ b/postfix/man/man5/mysql_table.5 @@ -95,7 +95,7 @@ The hosts that Postfix will try to connect to and query from. Specify \fIunix:\fR for UNIX domain sockets, \fIinet:\fR for TCP connections (default). Example: .nf - hosts = host1.some.domain host2.some.domain + hosts = host1.some.domain host2.some.domain:port hosts = unix:/file/name .fi diff --git a/postfix/proto/mysql_table b/postfix/proto/mysql_table index 23bdbb953..4e84316f6 100644 --- a/postfix/proto/mysql_table +++ b/postfix/proto/mysql_table @@ -83,7 +83,7 @@ # Specify \fIunix:\fR for UNIX domain sockets, \fIinet:\fR for TCP # connections (default). Example: # .nf -# hosts = host1.some.domain host2.some.domain +# hosts = host1.some.domain host2.some.domain:port # hosts = unix:/file/name # .fi # diff --git a/postfix/src/global/mail_params.c b/postfix/src/global/mail_params.c index f5350a1ac..dc744cf7a 100644 --- a/postfix/src/global/mail_params.c +++ b/postfix/src/global/mail_params.c @@ -45,7 +45,7 @@ /* char *var_double_bounce_sender; /* int var_line_limit; /* char *var_alias_db_map; -/* int var_message_limit; +/* long var_message_limit; /* char *var_mail_release; /* char *var_mail_version; /* int var_ipc_idle_limit; @@ -230,7 +230,7 @@ char *var_mynetworks; char *var_double_bounce_sender; int var_line_limit; char *var_alias_db_map; -int var_message_limit; +long var_message_limit; char *var_mail_release; char *var_mail_version; int var_ipc_idle_limit; @@ -579,7 +579,6 @@ void mail_params_init() VAR_MAX_USE, DEF_MAX_USE, &var_use_limit, 1, 0, VAR_DONT_REMOVE, DEF_DONT_REMOVE, &var_dont_remove, 0, 0, VAR_LINE_LIMIT, DEF_LINE_LIMIT, &var_line_limit, 512, 0, - VAR_MESSAGE_LIMIT, DEF_MESSAGE_LIMIT, &var_message_limit, 0, 0, VAR_HASH_QUEUE_DEPTH, DEF_HASH_QUEUE_DEPTH, &var_hash_queue_depth, 1, 0, VAR_FORK_TRIES, DEF_FORK_TRIES, &var_fork_tries, 1, 0, VAR_FLOCK_TRIES, DEF_FLOCK_TRIES, &var_flock_tries, 1, 0, @@ -595,6 +594,10 @@ void mail_params_init() VAR_INET_WINDOW, DEF_INET_WINDOW, &var_inet_windowsize, 0, 0, 0, }; + static const CONFIG_LONG_TABLE long_defaults[] = { + VAR_MESSAGE_LIMIT, DEF_MESSAGE_LIMIT, &var_message_limit, 0, 0, + 0, + }; static const CONFIG_TIME_TABLE time_defaults[] = { VAR_EVENT_DRAIN, DEF_EVENT_DRAIN, &var_event_drain, 1, 0, VAR_MAX_IDLE, DEF_MAX_IDLE, &var_idle_limit, 1, 0, @@ -681,6 +684,7 @@ void mail_params_init() } #endif get_mail_conf_int_table(other_int_defaults); + get_mail_conf_long_table(long_defaults); get_mail_conf_bool_table(bool_defaults); get_mail_conf_time_table(time_defaults); check_default_privs(); diff --git a/postfix/src/global/mail_params.h b/postfix/src/global/mail_params.h index 305358c1c..2403c437b 100644 --- a/postfix/src/global/mail_params.h +++ b/postfix/src/global/mail_params.h @@ -577,7 +577,7 @@ extern char *var_mailbox_lock; */ #define VAR_MAILBOX_LIMIT "mailbox_size_limit" #define DEF_MAILBOX_LIMIT (DEF_MESSAGE_LIMIT * 5) -extern int var_mailbox_limit; +extern long var_mailbox_limit; /* * Miscellaneous. @@ -1787,7 +1787,7 @@ extern int var_virt_expan_limit; */ #define VAR_MESSAGE_LIMIT "message_size_limit" #define DEF_MESSAGE_LIMIT 10240000 -extern int var_message_limit; +extern long var_message_limit; #define VAR_QUEUE_MINFREE "queue_minfree" #define DEF_QUEUE_MINFREE 0 @@ -2343,7 +2343,7 @@ extern char *var_virt_mailbox_base; #define VAR_VIRT_MAILBOX_LIMIT "virtual_mailbox_limit" #define DEF_VIRT_MAILBOX_LIMIT (5 * DEF_MESSAGE_LIMIT) -extern int var_virt_mailbox_limit; +extern long var_virt_mailbox_limit; #define VAR_VIRT_MAILBOX_LOCK "virtual_mailbox_lock" #define DEF_VIRT_MAILBOX_LOCK "fcntl, dotlock" @@ -3008,10 +3008,10 @@ extern bool var_tls_preempt_clist; #define TLS_BUG_TWEAK_B " " #endif -#else /* USE_TLS */ +#else /* USE_TLS */ #define TLS_BUG_TWEAK_A "" #define TLS_BUG_TWEAK_B " " -#endif /* USE_TLS */ +#endif /* USE_TLS */ #define VAR_TLS_BUG_TWEAKS "tls_disable_workarounds" #define DEF_TLS_BUG_TWEAKS ((TLS_BUG_TWEAK_A TLS_BUG_TWEAK_B)+1) diff --git a/postfix/src/global/mail_version.h b/postfix/src/global/mail_version.h index 4e568e835..467671c23 100644 --- a/postfix/src/global/mail_version.h +++ b/postfix/src/global/mail_version.h @@ -20,7 +20,7 @@ * Patches change both the patchlevel and the release date. Snapshots have no * patchlevel; they change the release date only. */ -#define MAIL_RELEASE_DATE "20110213" +#define MAIL_RELEASE_DATE "20110219" #define MAIL_VERSION_NUMBER "2.9" #ifdef SNAPSHOT diff --git a/postfix/src/local/local.c b/postfix/src/local/local.c index 92ccca898..cec231263 100644 --- a/postfix/src/local/local.c +++ b/postfix/src/local/local.c @@ -650,7 +650,7 @@ char *var_deliver_hdr; int var_stat_home_dir; int var_mailtool_compat; char *var_mailbox_lock; -int var_mailbox_limit; +long var_mailbox_limit; bool var_frozen_delivered; bool var_reset_owner_attr; bool var_strict_mbox_owner; @@ -872,6 +872,9 @@ int main(int argc, char **argv) }; static const CONFIG_INT_TABLE int_table[] = { VAR_DUP_FILTER_LIMIT, DEF_DUP_FILTER_LIMIT, &var_dup_filter_limit, 0, 0, + 0, + }; + static const CONFIG_LONG_TABLE long_table[] = { VAR_MAILBOX_LIMIT, DEF_MAILBOX_LIMIT, &var_mailbox_limit, 0, 0, 0, }; @@ -922,6 +925,7 @@ int main(int argc, char **argv) single_server_main(argc, argv, local_service, MAIL_SERVER_INT_TABLE, int_table, + MAIL_SERVER_LONG_TABLE, long_table, MAIL_SERVER_STR_TABLE, str_table, MAIL_SERVER_RAW_TABLE, raw_table, MAIL_SERVER_BOOL_TABLE, bool_table, diff --git a/postfix/src/master/event_server.c b/postfix/src/master/event_server.c index 3f80cf082..21ff0d5a9 100644 --- a/postfix/src/master/event_server.c +++ b/postfix/src/master/event_server.c @@ -50,6 +50,11 @@ /* global Postfix configuration file. Tables are loaded in the /* order as specified, and multiple instances of the same type /* are allowed. +/* .IP "MAIL_SERVER_LONG_TABLE (CONFIG_LONG_TABLE *)" +/* A table with configurable parameters, to be loaded from the +/* global Postfix configuration file. Tables are loaded in the +/* order as specified, and multiple instances of the same type +/* are allowed. /* .IP "MAIL_SERVER_STR_TABLE (CONFIG_STR_TABLE *)" /* A table with configurable parameters, to be loaded from the /* global Postfix configuration file. Tables are loaded in the @@ -673,6 +678,9 @@ NORETURN event_server_main(int argc, char **argv, MULTI_SERVER_FN service,...) case MAIL_SERVER_INT_TABLE: get_mail_conf_int_table(va_arg(ap, CONFIG_INT_TABLE *)); break; + case MAIL_SERVER_LONG_TABLE: + get_mail_conf_long_table(va_arg(ap, CONFIG_LONG_TABLE *)); + break; case MAIL_SERVER_STR_TABLE: get_mail_conf_str_table(va_arg(ap, CONFIG_STR_TABLE *)); break; diff --git a/postfix/src/master/mail_server.h b/postfix/src/master/mail_server.h index 793b64e02..267bdaf03 100644 --- a/postfix/src/master/mail_server.h +++ b/postfix/src/master/mail_server.h @@ -23,6 +23,7 @@ #define MAIL_SERVER_RAW_TABLE 5 #define MAIL_SERVER_NINT_TABLE 6 #define MAIL_SERVER_NBOOL_TABLE 7 +#define MAIL_SERVER_LONG_TABLE 8 #define MAIL_SERVER_PRE_INIT 10 #define MAIL_SERVER_POST_INIT 11 @@ -49,7 +50,7 @@ typedef void (*MAIL_SERVER_SLOW_EXIT_FN) (char *, char **); * single_server.c */ typedef void (*SINGLE_SERVER_FN) (VSTREAM *, char *, char **); -extern NORETURN single_server_main(int, char **, SINGLE_SERVER_FN, ...); +extern NORETURN single_server_main(int, char **, SINGLE_SERVER_FN,...); /* * multi_server.c @@ -71,7 +72,7 @@ extern int event_server_drain(void); * trigger_server.c */ typedef void (*TRIGGER_SERVER_FN) (char *, int, char *, char **); -extern NORETURN trigger_server_main(int, char **, TRIGGER_SERVER_FN, ...); +extern NORETURN trigger_server_main(int, char **, TRIGGER_SERVER_FN,...); #define TRIGGER_BUF_SIZE 1024 diff --git a/postfix/src/master/multi_server.c b/postfix/src/master/multi_server.c index 5a93c4c76..6477894f5 100644 --- a/postfix/src/master/multi_server.c +++ b/postfix/src/master/multi_server.c @@ -47,6 +47,11 @@ /* global Postfix configuration file. Tables are loaded in the /* order as specified, and multiple instances of the same type /* are allowed. +/* .IP "MAIL_SERVER_LONG_TABLE (CONFIG_LONG_TABLE *)" +/* A table with configurable parameters, to be loaded from the +/* global Postfix configuration file. Tables are loaded in the +/* order as specified, and multiple instances of the same type +/* are allowed. /* .IP "MAIL_SERVER_STR_TABLE (CONFIG_STR_TABLE *)" /* A table with configurable parameters, to be loaded from the /* global Postfix configuration file. Tables are loaded in the @@ -669,6 +674,9 @@ NORETURN multi_server_main(int argc, char **argv, MULTI_SERVER_FN service,...) case MAIL_SERVER_INT_TABLE: get_mail_conf_int_table(va_arg(ap, CONFIG_INT_TABLE *)); break; + case MAIL_SERVER_LONG_TABLE: + get_mail_conf_long_table(va_arg(ap, CONFIG_LONG_TABLE *)); + break; case MAIL_SERVER_STR_TABLE: get_mail_conf_str_table(va_arg(ap, CONFIG_STR_TABLE *)); break; diff --git a/postfix/src/master/single_server.c b/postfix/src/master/single_server.c index e2a9e7225..94937eb97 100644 --- a/postfix/src/master/single_server.c +++ b/postfix/src/master/single_server.c @@ -41,6 +41,11 @@ /* global Postfix configuration file. Tables are loaded in the /* order as specified, and multiple instances of the same type /* are allowed. +/* .IP "MAIL_SERVER_LONG_TABLE (CONFIG_LONG_TABLE *)" +/* A table with configurable parameters, to be loaded from the +/* global Postfix configuration file. Tables are loaded in the +/* order as specified, and multiple instances of the same type +/* are allowed. /* .IP "MAIL_SERVER_STR_TABLE (CONFIG_STR_TABLE *)" /* A table with configurable parameters, to be loaded from the /* global Postfix configuration file. Tables are loaded in the @@ -552,6 +557,9 @@ NORETURN single_server_main(int argc, char **argv, SINGLE_SERVER_FN service,...) case MAIL_SERVER_INT_TABLE: get_mail_conf_int_table(va_arg(ap, CONFIG_INT_TABLE *)); break; + case MAIL_SERVER_LONG_TABLE: + get_mail_conf_long_table(va_arg(ap, CONFIG_LONG_TABLE *)); + break; case MAIL_SERVER_STR_TABLE: get_mail_conf_str_table(va_arg(ap, CONFIG_STR_TABLE *)); break; diff --git a/postfix/src/master/trigger_server.c b/postfix/src/master/trigger_server.c index 5d9127362..10d6621a2 100644 --- a/postfix/src/master/trigger_server.c +++ b/postfix/src/master/trigger_server.c @@ -48,6 +48,11 @@ /* global Postfix configuration file. Tables are loaded in the /* order as specified, and multiple instances of the same type /* are allowed. +/* .IP "MAIL_SERVER_LONG_TABLE (CONFIG_LONG_TABLE *)" +/* A table with configurable parameters, to be loaded from the +/* global Postfix configuration file. Tables are loaded in the +/* order as specified, and multiple instances of the same type +/* are allowed. /* .IP "MAIL_SERVER_STR_TABLE (CONFIG_STR_TABLE *)" /* A table with configurable parameters, to be loaded from the /* global Postfix configuration file. Tables are loaded in the @@ -563,6 +568,9 @@ NORETURN trigger_server_main(int argc, char **argv, TRIGGER_SERVER_FN service,.. case MAIL_SERVER_INT_TABLE: get_mail_conf_int_table(va_arg(ap, CONFIG_INT_TABLE *)); break; + case MAIL_SERVER_LONG_TABLE: + get_mail_conf_long_table(va_arg(ap, CONFIG_LONG_TABLE *)); + break; case MAIL_SERVER_STR_TABLE: get_mail_conf_str_table(va_arg(ap, CONFIG_STR_TABLE *)); break; diff --git a/postfix/src/postconf/Makefile.in b/postfix/src/postconf/Makefile.in index bce82c0c9..220c089e0 100644 --- a/postfix/src/postconf/Makefile.in +++ b/postfix/src/postconf/Makefile.in @@ -8,7 +8,8 @@ CFLAGS = $(DEBUG) $(OPT) $(DEFS) TESTPROG= MAKES = bool_table.h bool_vars.h int_table.h int_vars.h str_table.h \ str_vars.h time_table.h time_vars.h raw_table.h raw_vars.h \ - nint_table.h nint_vars.h nbool_table.h nbool_vars.h + nint_table.h nint_vars.h nbool_table.h nbool_vars.h long_table.h \ + long_vars.h AUTOS = auto_table.h auto_vars.h DUMMIES = makes_dummy autos_dummy # for "make -j" PROG = postconf @@ -121,6 +122,8 @@ postconf.o: install_table.h postconf.o: install_vars.h postconf.o: int_table.h postconf.o: int_vars.h +postconf.o: long_table.h +postconf.o: long_vars.h postconf.o: nbool_table.h postconf.o: nbool_vars.h postconf.o: nint_table.h diff --git a/postfix/src/postconf/extract.awk b/postfix/src/postconf/extract.awk index 399c0248e..3b7a189ff 100644 --- a/postfix/src/postconf/extract.awk +++ b/postfix/src/postconf/extract.awk @@ -74,6 +74,14 @@ } } } +/^(static| )*(const +)?CONFIG_LONG_TABLE .*\{/,/\};/ { + if ($1 ~ /VAR/) { + long_vars["long " substr($3,2,length($3)-2) ";"] = 1 + if (++itab[$1 $2 $4 $5 $6 $7 $8 $9] == 1) { + long_table[$0] = 1 + } + } +} END { # Print parameter declarations without busting old AWK's file limit. @@ -112,6 +120,11 @@ END { print key print "EOF" + print "cat >long_vars.h <<'EOF'" + for (key in long_vars) + print key + print "EOF" + # Print parameter initializations without busting old AWK's file limit. print "sed 's/[ ][ ]*/ /g' >int_table.h <<'EOF'" for (key in int_table) @@ -148,6 +161,11 @@ END { print key print "EOF" + print "sed 's/[ ][ ]*/ /g' >long_table.h <<'EOF'" + for (key in long_table) + print key + print "EOF" + # Flush output nicely. exit(0); } diff --git a/postfix/src/postconf/postconf.c b/postfix/src/postconf/postconf.c index 82d8be07c..403add01f 100644 --- a/postfix/src/postconf/postconf.c +++ b/postfix/src/postconf/postconf.c @@ -330,6 +330,7 @@ DICT *text_table; #include "raw_vars.h" #include "nint_vars.h" #include "nbool_vars.h" +#include "long_vars.h" /* * Manually extracted. @@ -377,6 +378,11 @@ static const CONFIG_NBOOL_TABLE nbool_table[] = { 0, }; +static const CONFIG_LONG_TABLE long_table[] = { +#include "long_table.h" + 0, +}; + /* * Parameters with default values obtained via function calls. */ @@ -698,6 +704,7 @@ static void hash_parameters(void) const CONFIG_RAW_TABLE *rst; const CONFIG_NINT_TABLE *nst; const CONFIG_NBOOL_TABLE *bst; + const CONFIG_LONG_TABLE *lst; param_table = htable_create(100); @@ -719,6 +726,8 @@ static void hash_parameters(void) htable_enter(param_table, nst->name, (char *) nst); for (bst = nbool_table; bst->name; bst++) htable_enter(param_table, bst->name, (char *) bst); + for (lst = long_table; lst->name; lst++) + htable_enter(param_table, lst->name, (char *) lst); } /* show_strval - show string-valued parameter */ @@ -746,6 +755,17 @@ static void show_intval(int mode, const char *name, int value) } } +/* show_longval - show long-valued parameter */ + +static void show_longval(int mode, const char *name, long value) +{ + if (mode & SHOW_NAME) { + vstream_printf("%s = %ld\n", name, value); + } else { + vstream_printf("%ld\n", value); + } +} + /* print_bool - print boolean parameter */ static void print_bool(int mode, CONFIG_BOOL_TABLE *cbt) @@ -965,6 +985,29 @@ static void print_nbool(int mode, CONFIG_NBOOL_TABLE * bst) } } +/* print_long - print long parameter */ + +static void print_long(int mode, CONFIG_LONG_TABLE *clt) +{ + const char *value; + + if (mode & SHOW_DEFS) { + show_longval(mode, clt->name, clt->defval); + } else { + value = dict_lookup(CONFIG_DICT, clt->name); + if ((mode & SHOW_NONDEF) == 0) { + if (value == 0) { + show_longval(mode, clt->name, clt->defval); + } else { + show_strval(mode, clt->name, value); + } + } else { + if (value != 0) + show_strval(mode, clt->name, value); + } + } +} + /* print_parameter - show specific parameter */ static void print_parameter(int mode, char *ptr) @@ -993,6 +1036,8 @@ static void print_parameter(int mode, char *ptr) print_nint(mode, (CONFIG_NINT_TABLE *) ptr); if (INSIDE(ptr, nbool_table)) print_nbool(mode, (CONFIG_NBOOL_TABLE *) ptr); + if (INSIDE(ptr, long_table)) + print_long(mode, (CONFIG_LONG_TABLE *) ptr); if (msg_verbose) vstream_fflush(VSTREAM_OUT); } diff --git a/postfix/src/postscreen/postscreen_send.c b/postfix/src/postscreen/postscreen_send.c index dfb61cf99..f68a255d7 100644 --- a/postfix/src/postscreen/postscreen_send.c +++ b/postfix/src/postscreen/postscreen_send.c @@ -121,7 +121,7 @@ int psc_send_reply(PSC_STATE *state, const char *text) STR(state->send_buf), LEN(state->send_buf)); if (ret > 0) vstring_truncate(state->send_buf, ret - LEN(state->send_buf)); - if (ret < 0 && errno != EAGAIN && errno != EPIPE) + if (ret < 0 && errno != EAGAIN && errno != EPIPE && errno != ECONNRESET) msg_warn("write [%s]:%s: %m", state->smtp_client_addr, state->smtp_client_port); return (ret < 0 && errno != EAGAIN); diff --git a/postfix/src/qmqpd/qmqpd_peer.c b/postfix/src/qmqpd/qmqpd_peer.c index ba297117a..07c38c1e7 100644 --- a/postfix/src/qmqpd/qmqpd_peer.c +++ b/postfix/src/qmqpd/qmqpd_peer.c @@ -246,13 +246,13 @@ void qmqpd_peer_init(QMQPD_STATE *state) aierr = hostname_to_sockaddr_pf(state->name, state->addr_family, (char *) 0, 0, &res0); if (aierr) { - msg_warn("%s: hostname %s verification failed: %s", - state->addr, state->name, MAI_STRERROR(aierr)); + msg_warn("hostname %s does not resolve to address %s: %s", + state->name, state->addr, MAI_STRERROR(aierr)); REJECT_PEER_NAME(state); } else { for (res = res0; /* void */ ; res = res->ai_next) { if (res == 0) { - msg_warn("%s: address not listed for hostname %s", + msg_warn("hostname %s does not resolve to address %s", state->addr, state->name); REJECT_PEER_NAME(state); break; diff --git a/postfix/src/smtpd/smtpd_peer.c b/postfix/src/smtpd/smtpd_peer.c index af678b680..3ea89946b 100644 --- a/postfix/src/smtpd/smtpd_peer.c +++ b/postfix/src/smtpd/smtpd_peer.c @@ -340,15 +340,15 @@ void smtpd_peer_init(SMTPD_STATE *state) aierr = hostname_to_sockaddr_pf(state->name, state->addr_family, (char *) 0, 0, &res0); if (aierr) { - msg_warn("%s: hostname %s verification failed: %s", - state->addr, state->name, MAI_STRERROR(aierr)); + msg_warn("hostname %s does not resolve to address %s: %s", + state->name, state->addr, MAI_STRERROR(aierr)); REJECT_PEER_NAME(state, (TEMP_AI_ERROR(aierr) ? SMTPD_PEER_CODE_TEMP : SMTPD_PEER_CODE_FORGED)); } else { for (res = res0; /* void */ ; res = res->ai_next) { if (res == 0) { - msg_warn("%s: address not listed for hostname %s", - state->addr, state->name); + msg_warn("hostname %s does not resolve to address %s", + state->name, state->addr); REJECT_PEER_NAME(state, SMTPD_PEER_CODE_FORGED); break; } diff --git a/postfix/src/virtual/virtual.c b/postfix/src/virtual/virtual.c index 599be61c9..95eab2508 100644 --- a/postfix/src/virtual/virtual.c +++ b/postfix/src/virtual/virtual.c @@ -331,7 +331,7 @@ char *var_virt_gid_maps; int var_virt_minimum_uid; char *var_virt_mailbox_base; char *var_virt_mailbox_lock; -int var_virt_mailbox_limit; +long var_virt_mailbox_limit; char *var_mail_spool_dir; /* XXX dependency fix */ bool var_strict_mbox_owner; @@ -497,6 +497,9 @@ int main(int argc, char **argv) { static const CONFIG_INT_TABLE int_table[] = { VAR_VIRT_MINUID, DEF_VIRT_MINUID, &var_virt_minimum_uid, 1, 0, + 0, + }; + static const CONFIG_LONG_TABLE long_table[] = { VAR_VIRT_MAILBOX_LIMIT, DEF_VIRT_MAILBOX_LIMIT, &var_virt_mailbox_limit, 0, 0, 0, }; @@ -521,6 +524,7 @@ int main(int argc, char **argv) single_server_main(argc, argv, local_service, MAIL_SERVER_INT_TABLE, int_table, + MAIL_SERVER_LONG_TABLE, long_table, MAIL_SERVER_STR_TABLE, str_table, MAIL_SERVER_BOOL_TABLE, bool_table, MAIL_SERVER_PRE_INIT, pre_init,