2
0
mirror of https://github.com/vdukhovni/postfix synced 2025-08-22 09:57:34 +00:00

postfix-2.8-20101210

This commit is contained in:
Wietse Venema 2010-12-10 00:00:00 -05:00 committed by Viktor Dukhovni
parent d87d8c1c0f
commit 3828e1ddd9
18 changed files with 158 additions and 85 deletions

View File

@ -16220,7 +16220,7 @@ Apologies for any names omitted.
ignore the excess recipients and deliver the message. File: ignore the excess recipients and deliver the message. File:
cleanup/cleanup_map1n.c. cleanup/cleanup_map1n.c.
20101204 20101205
Cleanup: sache_clnt_create() had an unnecessary data Cleanup: sache_clnt_create() had an unnecessary data
dependency on the non-library var_scache_service variable, dependency on the non-library var_scache_service variable,
@ -16236,5 +16236,17 @@ Apologies for any names omitted.
20101206 20101206
postscreen hung up due to incorrect output error test. File: Bugfix (introduced 20101205): postscreen hung up due to
postscreen/postscreen_send.c. incorrect output error test. File: postscreen/postscreen_send.c.
20101207
Cleanup: the undisclosed_recipients_header default value
is now the empty string. The Internet mail RFCs have supported
messages without recipient header for almost 10 years now.
File: global/mail_params.h.
Cleanup: use strtol() instead of sscanf() for consistent
handling of out-of-range numbers. Files: global/cfg_parser.c,
global/conv_time.c, global/mail_conf_int.c,
global/mail_conf_long.c, global/mail_conf_nint.c.

View File

@ -33,6 +33,21 @@ This is supported only when the default value is stress-dependent
postscreen parameters always evaluate as if the stress value is postscreen parameters always evaluate as if the stress value is
equal to the empty string. equal to the empty string.
Incompatibility with snapshot 20101206
======================================
Postfix by default no longer adds a "To: undisclosed-recipients:;"
header when no recipient specified in the message header. The
Internet mail RFCs have supported messages without recipient header
for almost 10 years now.
For backwards compatibility, specify:
/etc/postfix/main.cf
To: undisclosed-recipients:;
Note: both the ":" and ";" are required.
Incompatibility with snapshot 20101202 Incompatibility with snapshot 20101202
====================================== ======================================

View File

@ -15224,12 +15224,21 @@ The default time unit is s (seconds).
</DD> </DD>
<DT><b><a name="undisclosed_recipients_header">undisclosed_recipients_header</a> <DT><b><a name="undisclosed_recipients_header">undisclosed_recipients_header</a>
(default: To: undisclosed-recipients:;)</b></DT><DD> (default: see "postconf -d" output)</b></DT><DD>
<p> <p>
Message header that the Postfix <a href="cleanup.8.html">cleanup(8)</a> server inserts when a Message header that the Postfix <a href="cleanup.8.html">cleanup(8)</a> server inserts when a
message contains no To: or Cc: message header. With Postfix 2.4 message contains no To: or Cc: message header. With Postfix 2.8
and later, specify an empty value to disable this feature. </p> and later, the default value is empty. With Postfix 2.4-2.7,
specify an empty value to disable this feature. </p>
<p> Example: </p>
<pre>
# Default value before Postfix 2.8.
# Note: the ":" and ";" are both required.
<a href="postconf.5.html#undisclosed_recipients_header">undisclosed_recipients_header</a> = To: undisclosed-recipients:;
</pre>
</DD> </DD>

View File

@ -55,12 +55,12 @@ POSTSCREEN(8) POSTSCREEN(8)
Problems and transactions are logged to <b>syslogd</b>(8). Problems and transactions are logged to <b>syslogd</b>(8).
<b>BUGS</b> <b>BUGS</b>
The <a href="postscreen.8.html"><b>postscreen</b>(8)</a> built-in SMTP protocol engine does not The <a href="postscreen.8.html"><b>postscreen</b>(8)</a> built-in SMTP protocol engine currently
announce support for STARTTLS, AUTH, XCLIENT or XFORWARD. does not announce support for STARTTLS, AUTH, XCLIENT or
Support for STARTTLS and AUTH may be added in the future. XFORWARD. Support for STARTTLS and AUTH may be added in
In the mean time, if you need to make these services the future. In the mean time, if you need to make these
available on port 25, then do not enable the optional services available on port 25, then do not enable the
"after 220 server greeting" tests. optional "after 220 server greeting" tests.
The optional "after 220 server greeting" tests involve The optional "after 220 server greeting" tests involve
<a href="postscreen.8.html"><b>postscreen</b>(8)</a>'s built-in SMTP protocol engine. When these <a href="postscreen.8.html"><b>postscreen</b>(8)</a>'s built-in SMTP protocol engine. When these

View File

@ -9656,10 +9656,23 @@ load.
.PP .PP
Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks). Time units: s (seconds), m (minutes), h (hours), d (days), w (weeks).
The default time unit is s (seconds). The default time unit is s (seconds).
.SH undisclosed_recipients_header (default: To: undisclosed-recipients:;) .SH undisclosed_recipients_header (default: see "postconf -d" output)
Message header that the Postfix \fBcleanup\fR(8) server inserts when a Message header that the Postfix \fBcleanup\fR(8) server inserts when a
message contains no To: or Cc: message header. With Postfix 2.4 message contains no To: or Cc: message header. With Postfix 2.8
and later, specify an empty value to disable this feature. and later, the default value is empty. With Postfix 2.4-2.7,
specify an empty value to disable this feature.
.PP
Example:
.PP
.nf
.na
.ft C
# Default value before Postfix 2.8.
# Note: the ":" and ";" are both required.
undisclosed_recipients_header = To: undisclosed-recipients:;
.fi
.ad
.ft R
.SH unknown_address_reject_code (default: 450) .SH unknown_address_reject_code (default: 450)
The numerical Postfix SMTP server response code when a sender or The numerical Postfix SMTP server response code when a sender or
recipient address is rejected by the reject_unknown_sender_domain recipient address is rejected by the reject_unknown_sender_domain

View File

@ -60,8 +60,9 @@ Problems and transactions are logged to \fBsyslogd\fR(8).
.SH BUGS .SH BUGS
.ad .ad
.fi .fi
The \fBpostscreen\fR(8) built-in SMTP protocol engine does The \fBpostscreen\fR(8) built-in SMTP protocol engine
not announce support for STARTTLS, AUTH, XCLIENT or XFORWARD. currently does not announce support for STARTTLS, AUTH,
XCLIENT or XFORWARD.
Support for STARTTLS and AUTH may be added in the future. Support for STARTTLS and AUTH may be added in the future.
In the mean time, if you need to make these services available In the mean time, if you need to make these services available
on port 25, then do not enable the optional "after 220 on port 25, then do not enable the optional "after 220

View File

@ -8150,12 +8150,21 @@ delivery is requested with "<b>sendmail -v</b>".
This feature is available in Postfix 2.1 and later. This feature is available in Postfix 2.1 and later.
</p> </p>
%PARAM undisclosed_recipients_header To: undisclosed-recipients:; %PARAM undisclosed_recipients_header see "postconf -d" output
<p> <p>
Message header that the Postfix cleanup(8) server inserts when a Message header that the Postfix cleanup(8) server inserts when a
message contains no To: or Cc: message header. With Postfix 2.4 message contains no To: or Cc: message header. With Postfix 2.8
and later, specify an empty value to disable this feature. </p> and later, the default value is empty. With Postfix 2.4-2.7,
specify an empty value to disable this feature. </p>
<p> Example: </p>
<pre>
# Default value before Postfix 2.8.
# Note: the ":" and ";" are both required.
undisclosed_recipients_header = To: undisclosed-recipients:;
</pre>
%PARAM unknown_relay_recipient_reject_code 550 %PARAM unknown_relay_recipient_reject_code 550

View File

@ -82,7 +82,8 @@
#include "sys_defs.h" #include "sys_defs.h"
#include <stdio.h> #include <stdlib.h>
#include <errno.h>
#include <string.h> #include <string.h>
#ifdef STRCASECMP_IN_STRINGS_H #ifdef STRCASECMP_IN_STRINGS_H
@ -146,11 +147,14 @@ static int get_dict_int(const struct CFG_PARSER *parser,
const char *name, int defval, int min, int max) const char *name, int defval, int min, int max)
{ {
const char *strval; const char *strval;
char *end;
int intval; int intval;
char junk; long longval;
if ((strval = (char *) dict_lookup(parser->name, name)) != 0) { if ((strval = (char *) dict_lookup(parser->name, name)) != 0) {
if (sscanf(strval, "%d%c", &intval, &junk) != 1) errno = 0;
intval = longval = strtol(strval, &end, 10);
if (*strval == 0 || *end != 0 || errno == ERANGE || longval != intval)
msg_fatal("%s: bad numerical configuration: %s = %s", msg_fatal("%s: bad numerical configuration: %s = %s",
parser->name, name, strval); parser->name, name, strval);
} else } else

View File

@ -41,7 +41,8 @@
#include <sys_defs.h> #include <sys_defs.h>
#include <limits.h> /* INT_MAX */ #include <limits.h> /* INT_MAX */
#include <stdio.h> /* sscanf() */ #include <stdlib.h>
#include <errno.h>
/* Utility library. */ /* Utility library. */
@ -60,50 +61,48 @@
int conv_time(const char *strval, int *timval, int def_unit) int conv_time(const char *strval, int *timval, int def_unit)
{ {
char unit; char *end;
char junk;
int intval; int intval;
long longval;
switch (sscanf(strval, "%d%c%c", &intval, &unit, &junk)) { errno = 0;
case 1: intval = longval = strtol(strval, &end, 10);
unit = def_unit; if (*strval == 0 || errno == ERANGE || longval != intval || intval < 0
/* FALLTHROUGH */ || (*end != 0 && end[1] != 0))
case 2: return (0);
if (intval < 0)
return (0); switch (*end ? *end : def_unit) {
switch (unit) { case 'w':
case 'w': if (intval < INT_MAX / WEEK) {
if (intval < INT_MAX / WEEK) { *timval = intval * WEEK;
*timval = intval * WEEK;
return (1);
} else {
return (0);
}
case 'd':
if (intval < INT_MAX / DAY) {
*timval = intval * DAY;
return (1);
} else {
return (0);
}
case 'h':
if (intval < INT_MAX / HOUR) {
*timval = intval * HOUR;
return (1);
} else {
return (0);
}
case 'm':
if (intval < INT_MAX / MINUTE) {
*timval = intval * MINUTE;
return (1);
} else {
return (0);
}
case 's':
*timval = intval;
return (1); return (1);
} else {
return (0);
} }
case 'd':
if (intval < INT_MAX / DAY) {
*timval = intval * DAY;
return (1);
} else {
return (0);
}
case 'h':
if (intval < INT_MAX / HOUR) {
*timval = intval * HOUR;
return (1);
} else {
return (0);
}
case 'm':
if (intval < INT_MAX / MINUTE) {
*timval = intval * MINUTE;
return (1);
} else {
return (0);
}
case 's':
*timval = intval;
return (1);
} }
return (0); return (0);
} }

View File

@ -79,7 +79,8 @@
#include <sys_defs.h> #include <sys_defs.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> /* sscanf() */ #include <stdio.h> /* BUFSIZ */
#include <errno.h>
/* Utility library. */ /* Utility library. */
@ -97,10 +98,13 @@
static int convert_mail_conf_int(const char *name, int *intval) static int convert_mail_conf_int(const char *name, int *intval)
{ {
const char *strval; const char *strval;
char junk; char *end;
long longval;
if ((strval = mail_conf_lookup_eval(name)) != 0) { if ((strval = mail_conf_lookup_eval(name)) != 0) {
if (sscanf(strval, "%d%c", intval, &junk) != 1) errno = 0;
*intval = longval = strtol(strval, &end, 10);
if (*strval == 0 || *end != 0 || errno == ERANGE || longval != *intval)
msg_fatal("bad numerical configuration: %s = %s", name, strval); msg_fatal("bad numerical configuration: %s = %s", name, strval);
return (1); return (1);
} }
@ -132,7 +136,7 @@ int get_mail_conf_int(const char *name, int defval, int min, int max)
/* get_mail_conf_int2 - evaluate integer-valued configuration variable */ /* get_mail_conf_int2 - evaluate integer-valued configuration variable */
int get_mail_conf_int2(const char *name1, const char *name2, int defval, int get_mail_conf_int2(const char *name1, const char *name2, int defval,
int min, int max) int min, int max)
{ {
int intval; int intval;
char *name; char *name;
@ -150,7 +154,7 @@ int get_mail_conf_int2(const char *name1, const char *name2, int defval,
typedef int (*stupid_indent_int) (void); typedef int (*stupid_indent_int) (void);
int get_mail_conf_int_fn(const char *name, stupid_indent_int defval, int get_mail_conf_int_fn(const char *name, stupid_indent_int defval,
int min, int max) int min, int max)
{ {
int intval; int intval;
@ -176,7 +180,7 @@ void get_mail_conf_int_table(const CONFIG_INT_TABLE *table)
{ {
while (table->name) { while (table->name) {
table->target[0] = get_mail_conf_int(table->name, table->defval, table->target[0] = get_mail_conf_int(table->name, table->defval,
table->min, table->max); table->min, table->max);
table++; table++;
} }
} }
@ -187,7 +191,7 @@ void get_mail_conf_int_fn_table(const CONFIG_INT_FN_TABLE *table)
{ {
while (table->name) { while (table->name) {
table->target[0] = get_mail_conf_int_fn(table->name, table->defval, table->target[0] = get_mail_conf_int_fn(table->name, table->defval,
table->min, table->max); table->min, table->max);
table++; table++;
} }
} }

View File

@ -79,7 +79,8 @@
#include <sys_defs.h> #include <sys_defs.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> /* sscanf() */ #include <stdio.h> /* BUFSIZ */
#include <errno.h>
/* Utility library. */ /* Utility library. */
@ -97,10 +98,12 @@
static int convert_mail_conf_long(const char *name, long *longval) static int convert_mail_conf_long(const char *name, long *longval)
{ {
const char *strval; const char *strval;
char junk; char *end;
if ((strval = mail_conf_lookup_eval(name)) != 0) { if ((strval = mail_conf_lookup_eval(name)) != 0) {
if (sscanf(strval, "%ld%c", longval, &junk) != 1) errno = 0;
*longval = strtol(strval, &end, 10);
if (*strval == 0 || *end != 0 || errno == ERANGE)
msg_fatal("bad numerical configuration: %s = %s", name, strval); msg_fatal("bad numerical configuration: %s = %s", name, strval);
return (1); return (1);
} }

View File

@ -84,7 +84,8 @@
#include <sys_defs.h> #include <sys_defs.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> /* sscanf() */ #include <stdio.h> /* BUFSIZ */
#include <errno.h>
/* Utility library. */ /* Utility library. */
@ -102,10 +103,13 @@
static int convert_mail_conf_nint(const char *name, int *intval) static int convert_mail_conf_nint(const char *name, int *intval)
{ {
const char *strval; const char *strval;
char junk; char *end;
long longval;
if ((strval = mail_conf_lookup_eval(name)) != 0) { if ((strval = mail_conf_lookup_eval(name)) != 0) {
if (sscanf(strval, "%d%c", intval, &junk) != 1) errno = 0;
*intval = longval = strtol(strval, &end, 10);
if (*strval == 0 || *end != 0 || errno == ERANGE || longval != *intval)
msg_fatal("bad numerical configuration: %s = %s", name, strval); msg_fatal("bad numerical configuration: %s = %s", name, strval);
return (1); return (1);
} }

View File

@ -75,7 +75,7 @@
#include <sys_defs.h> #include <sys_defs.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> /* sscanf() */ #include <stdio.h> /* BUFSIZ */
#include <ctype.h> #include <ctype.h>
/* Utility library. */ /* Utility library. */

View File

@ -338,7 +338,7 @@ extern char *var_always_bcc;
* MTAs routinely strip Bcc: headers from message headers. * MTAs routinely strip Bcc: headers from message headers.
*/ */
#define VAR_RCPT_WITHELD "undisclosed_recipients_header" #define VAR_RCPT_WITHELD "undisclosed_recipients_header"
#define DEF_RCPT_WITHELD "To: undisclosed-recipients:;" #define DEF_RCPT_WITHELD ""
extern char *var_rcpt_witheld; extern char *var_rcpt_witheld;
/* /*

View File

@ -20,7 +20,7 @@
* 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 "20101206" #define MAIL_RELEASE_DATE "20101210"
#define MAIL_VERSION_NUMBER "2.8" #define MAIL_VERSION_NUMBER "2.8"
#ifdef SNAPSHOT #ifdef SNAPSHOT

View File

@ -46,8 +46,9 @@
/* DIAGNOSTICS /* DIAGNOSTICS
/* Problems and transactions are logged to \fBsyslogd\fR(8). /* Problems and transactions are logged to \fBsyslogd\fR(8).
/* BUGS /* BUGS
/* The \fBpostscreen\fR(8) built-in SMTP protocol engine does /* The \fBpostscreen\fR(8) built-in SMTP protocol engine
/* not announce support for STARTTLS, AUTH, XCLIENT or XFORWARD. /* currently does not announce support for STARTTLS, AUTH,
/* XCLIENT or XFORWARD.
/* Support for STARTTLS and AUTH may be added in the future. /* Support for STARTTLS and AUTH may be added in the future.
/* In the mean time, if you need to make these services available /* In the mean time, if you need to make these services available
/* on port 25, then do not enable the optional "after 220 /* on port 25, then do not enable the optional "after 220

View File

@ -21,8 +21,7 @@
/* ps_send_reply() sends the specified text to the specified /* ps_send_reply() sends the specified text to the specified
/* remote SMTP client. In case of an immediate error, it logs /* remote SMTP client. In case of an immediate error, it logs
/* a warning (except EPIPE) with the client address and port, /* a warning (except EPIPE) with the client address and port,
/* and returns -1 (including EPIPE). Otherwise, the result /* and returns a non-zero result (all errors including EPIPE).
/* value is the number of bytes sent.
/* /*
/* PS_SEND_REPLY() is a convenience wrapper for ps_send_reply(). /* PS_SEND_REPLY() is a convenience wrapper for ps_send_reply().
/* It is an unsafe macro that evaluates its arguments multiple /* It is an unsafe macro that evaluates its arguments multiple

View File

@ -180,7 +180,7 @@ PS_STATE *ps_new_session_state(VSTREAM *stream,
if ((ht = htable_locate(ps_client_concurrency, addr)) == 0) if ((ht = htable_locate(ps_client_concurrency, addr)) == 0)
ht = htable_enter(ps_client_concurrency, addr, (char *) 0); ht = htable_enter(ps_client_concurrency, addr, (char *) 0);
ht->value += 1; ht->value += 1;
state->client_concurrency = (int) ht->value; state->client_concurrency = CAST_CHAR_PTR_TO_INT(ht->value);
return (state); return (state);
} }