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

postfix-2.10-20120404

This commit is contained in:
Wietse Venema 2012-04-04 00:00:00 -05:00 committed by Viktor Dukhovni
parent 99ff75430d
commit bcce9ba4be
15 changed files with 74 additions and 95 deletions

View File

@ -17697,3 +17697,23 @@ Apologies for any names omitted.
template to suppress the line break between the reply text
and the footer text. Files: global/smtp_reply_footer.c,
proto/postconf.proto.
20120401
Bugfix (introduced Postfix 2.6): irrelevant memory leak
that was introduced with postconf -#. File:
postconf/postconf_edit.c.
Bitrot: shut up useless warnings about Cyrus SASL call-back
function pointer type mis-matches. Files: xsasl/xsasl_cyrus.h,
xsasl/xsasl_cyrus_server.c, xsasl/xsasl_client.c.
20120404
Cleanup: added smtpd_sender_login_maps to the default
proxy_read_maps value. Files: global/mail_params.h,
proxymap/proxymap.c.
Cleanup: weed out stale TODO's from the WISHLIST, and moved
some CYA text from WISHLIST into the code. Files: WISHLIST,
smtpd/smtpd_proxy.c.

View File

@ -6,13 +6,8 @@ Wish list:
Things to do after the stable release:
Connection cache protocol: avoid mixing mail streams
with different source IP address reputations. For example,
allow additional tags upon store operations that can be
specified in requests.
smtpd: make implicit sender/recipient checks play along
with defer_if_reject.
Don't forget Apple's code donation for fetching mail from
IMAP server.
postscreen: in the dummy SMTP engine, log the protocol state
at time of violation (like smtpd, set state->where initially
@ -23,10 +18,14 @@ Wish list:
wrong place (how whitelisting works). Move it to the section
about configuring postscreen.
Before proxymap can be exposed to the network to share,
e.g., postscreen or verify caches, need to enforce limits
on attribute string length in IPC protocols. 10-20KB seems
OK. The VSTREAM library already supports read/write deadlines.
Before proxymap can be exposed to the network (primarily
to share postscreen or verify caches), need to enforce
limits on attribute string name and value length in IPC
protocols. 10-20KB seems OK. We need to enforce content
sanity checks (for example, no control characters; Postfix
does not pass around multi-line data in table lookups). The
VSTREAM library already supports read/write deadlines. We
need to use attack-resistant code for numeric conversion.
move flush_init() etc. from defer service clients to the
bounce daemon?
@ -81,8 +80,7 @@ Wish list:
of the performance gain of a queue based on append/truncate
instead of the much more expensive create/delete.
Investigate viability of Sendmail socket maps (the moral
equivalent of tcp_table(5)), and dns maps.
Investigate viability of Sendmail dns maps.
Check if FILTER_README has the "postsuper -r" workaround
@ -148,9 +146,6 @@ Wish list:
whitelisting database before the primary MX connection is
closed, because a client may still make a mistake.
Don't forget Apple's code donation for fetching mail from
IMAP server.
Simplify postscreen logic. Individual "fail" flags help to
avoid repeated testing/logging the same mistake. Individual
"pass" flags provide evidence that the client didn't skip
@ -262,24 +257,6 @@ Wish list:
IF/ENDIF support for CIDR tables.
Make postconf aware of local_, smtp_, etc. parameter names
that have prefixes derived from mail delivery transport
names, LDAP/SQL table names, spawn(8) services, and so on.
Clearly, it is wrong to assume that all "unix" master.cf
entries are delivery agents (though it may be OK for postconf
to peek in master.cf when given a parameter with an unknown
prefix). This requires a new main.cf parameter (delivery_prefixes?)
that lists all known mail delivery transport names. postconf
can safely ignore names that don't exist in master.cf, and
qmgr_transport_create() can safely warn about a name that
isn't listed in that new main.cf parameter. A similar
parameter would be needed for spawn(8) services (spawn_prefixes?)
and for legacy-style database "sources" (database_prefixes?).
The spawn(8) daemon could warn if the service name is not
listed in main.cf, and the LDAP/SQL/etc. drivers could
warn if a legacy-style database source is not listed in
main.cf.
Need a regular expression table to translate address
verification responses into hard/soft/accept reply codes.
@ -315,12 +292,6 @@ Wish list:
to the error or retry mailer; and bounce-after-delivery is
asynchrounous so it can't block the queue manager, either.
Add smtpd_sender_login_maps to proxy_read_maps, and make
sure that defaults are set before proxy_read_maps is
evaluated. What other parameters are worthy of being
whitelisted for proxy access? Is there a way to automate
this decision?
How to ensure that proxy_read_maps is processed after all
its dependencies are initialized, or just bite the bullet
and rewrite the parameter initialization code.
@ -381,22 +352,10 @@ Wish list:
SMTP connection caching without storing connections, to
improve TLS mail delivery performance.
postscreen has separate socket budgets for whitelisted
clients and for other clients. If we add a dummy SMTP engine
then we extend the session length for non-whitelisted clients
and need to increase the socket budget (or create a new
budget class, which complicates the user interface).
Should not milter8_mail_event() unset the "hold" default
reply? Better, the default reply should not be used for
this purpose.
Unescape the pregreeter's HELO command argument so that
<CR><LF> don't show up as ??.
Make postscreen logging easier. Always log connect, then log
why the connection is or is not forwarded.
Don't send MASTER_STAT_TAKEN/MASTER_STAT_AVAIL when a server
runs with process limit of 1. But this means the master
never learns that the process is successful and will always
@ -407,21 +366,6 @@ Wish list:
lockfile is to avoid thundering herd problems when the kernel
wakes up multiple processes for each new client connection.
Concurrency/speed-matching: invoke a before-queue (smtpd_proxy)
filter after the entire message is received, so that fewer
filter processes will be running simultaneously. In some
parts of the world, after-queue filtering is problematic.
This is different than the MailChannels patented solution
to multiplex many slow SMTP connections over a few fast
SMTP connections. We simply postpone opening the connection
to the filter, and rely on the before-filter SMTP server
to reject invalid recipients. MailChannels uses one
connection-to-MTA to discover invalid recipients, receives
the email message with a potentially reduced bitrate, and
then uses another connection-to-MTA to deliver the message
quickly.
Implement PREPEND action for milter_header_checks. Save the
to-be-prepended text to buffer, then emit it along with the
new header.
@ -441,10 +385,6 @@ Wish list:
Either document or remove the internal_mail_filter_classes
feature (it's disabled by default).
"postconf -N" option to print user-defined parameter names
(these have no defaults, since they exist only when
specified in main.cf or with "-o name=value").
Make the "unknown recipient" test configurable as
first|last|never, with "yes"=="last" for backwards
compatibility. The "first" setting is good for performance
@ -534,9 +474,6 @@ Wish list:
pieces of code when a client attribute is added. Ditto for
SASL and TLS context.
Make TLS_BIO_BUFSIZE run-time adjustable, to future-proof
Postfix for remote connections with MSS > 8 kbytes.
Don't log "warning: XXXXX: undeliverable postmaster
notification discarded" for spam from outside.
@ -575,16 +512,9 @@ Wish list:
Need scache size limit.
Make postcat header/body aware so people can grep headers.
What headers? primary, mime, nested? What body? Does it
include the mime and attached headers?
REDIRECT should override original recipient info, and
probably override DSN as well.
Find out if with Sendmail, a Milter "add recipient" request
results in NOTIFY=NONE as Postfix does now.
Update FILTER_README with mailing list suggestions to tag
with a badness indicator and then filter down-stream.
@ -792,8 +722,6 @@ Wish list:
This should be documented, or better, the code should warn
about attempts to set read-only parameters.
Low: postconf -e edits parameters that postconf won't list.
Low: while converting 8bit text to quoted-printable, perhaps
use =46rom to avoid having to produce >From when delivering
to mailbox.

View File

@ -13538,7 +13538,9 @@ server
<p> The following example uses "\c" at the start of the template
(supported in Postfix 2.10 and later) to suppress the line break
between the reply text and the footer text. </p>
between the reply text and the footer text. With earlier Postfix
versions, the footer text always begins on a new line, and the "\c"
is output literally. </p>
<pre>
/etc/postfix/<a href="postconf.5.html">main.cf</a>:

View File

@ -8551,7 +8551,9 @@ server
.PP
The following example uses "\ec" at the start of the template
(supported in Postfix 2.10 and later) to suppress the line break
between the reply text and the footer text.
between the reply text and the footer text. With earlier Postfix
versions, the footer text always begins on a new line, and the "\ec"
is output literally.
.PP
.nf
.na

View File

@ -14158,7 +14158,9 @@ server
<p> The following example uses "\c" at the start of the template
(supported in Postfix 2.10 and later) to suppress the line break
between the reply text and the footer text. </p>
between the reply text and the footer text. With earlier Postfix
versions, the footer text always begins on a new line, and the "\c"
is output literally. </p>
<pre>
/etc/postfix/main.cf:

View File

@ -2232,6 +2232,7 @@ extern int var_local_rcpt_code;
" $" VAR_RELOCATED_MAPS \
" $" VAR_TRANSPORT_MAPS \
" $" VAR_MYNETWORKS \
" $" VAR_SMTPD_SND_AUTH_MAPS \
" $" VAR_SEND_BCC_MAPS \
" $" VAR_RCPT_BCC_MAPS \
" $" VAR_SMTP_GENERIC_MAPS \

View File

@ -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 "20120330"
#define MAIL_RELEASE_DATE "20120404"
#define MAIL_VERSION_NUMBER "2.10"
#ifdef SNAPSHOT

View File

@ -101,7 +101,7 @@ void edit_parameters(int mode, int argc, char **argv)
msg_fatal("-X or -# requires non-blank parameter names");
if (strchr(cp, '=') != 0)
msg_fatal("-X or -# requires parameter names only");
edit_key = mystrdup(cp);
edit_key = cp;
trimblanks(edit_key, 0);
edit_val = 0;
} else {

View File

@ -256,6 +256,7 @@ char *var_rcpt_canon_maps;
char *var_relocated_maps;
char *var_transport_maps;
char *var_verify_map;
char *var_smtpd_snd_auth_maps;
char *var_psc_cache_map;
char *var_proxy_read_maps;
char *var_proxy_write_maps;
@ -730,6 +731,7 @@ int main(int argc, char **argv)
VAR_RELOCATED_MAPS, DEF_RELOCATED_MAPS, &var_relocated_maps, 0, 0,
VAR_TRANSPORT_MAPS, DEF_TRANSPORT_MAPS, &var_transport_maps, 0, 0,
VAR_VERIFY_MAP, DEF_VERIFY_MAP, &var_verify_map, 0, 0,
VAR_SMTPD_SND_AUTH_MAPS, DEF_SMTPD_SND_AUTH_MAPS, &var_smtpd_snd_auth_maps, 0, 0,
VAR_PSC_CACHE_MAP, DEF_PSC_CACHE_MAP, &var_psc_cache_map, 0, 0,
/* The following two must be last for $mapname to work as expected. */
VAR_PROXY_READ_MAPS, DEF_PROXY_READ_MAPS, &var_proxy_read_maps, 0, 0,

View File

@ -24,6 +24,10 @@
/* This module implements the SMTP client specific interface to
/* the generic session cache infrastructure.
/*
/* Each cached connection identifier includes the name of the
/* mail delivery service. Thus, cached connections are not
/* shared between different services.
/*
/* smtp_save_session() stores the current session under the
/* next-hop logical destination (if available) and under the
/* remote server address. The SMTP_SESSION object is destroyed.

View File

@ -581,6 +581,21 @@ static int smtpd_proxy_replay_send(SMTPD_STATE *state)
* Replay the speed-match log. We do sanity check record content, but we
* don't implement a protocol state engine here, since we are reading
* from a file that we just wrote ourselves.
*
* This is different than the MailChannels patented solution that
* multiplexes a large number of slowed-down inbound connections over a
* small number of fast connections to a local MTA.
*
* - MailChannels receives mail directly from the Internet. It uses one
* connection to the local MTA to reject invalid recipients before
* receiving the entire email message at reduced bit rates, and then uses
* a different connection to quickly deliver the message to the local
* MTA.
*
* - Postfix receives mail directly from the Internet. The Postfix SMTP
* server rejects invalid recipients before receiving the entire message
* over the Internet, and then delivers the message quickly to a local
* SMTP-based content filter.
*/
if (replay_buf == 0)
replay_buf = vstring_alloc(100);

View File

@ -63,8 +63,6 @@ extern const NAME_CODE tls_level_table[];
#include <name_mask.h>
#include <name_code.h>
#define TLS_BIO_BUFSIZE 8192
/*
* Names of valid tlsmgr(8) session caches.
*/

View File

@ -26,6 +26,11 @@
extern XSASL_SERVER_IMPL *xsasl_cyrus_server_init(const char *, const char *);
extern XSASL_CLIENT_IMPL *xsasl_cyrus_client_init(const char *, const char *);
/*
* Internal definitions for client and server module.
*/
typedef int (*XSASL_CYRUS_CB) (void);
#endif
/* LICENSE

View File

@ -223,7 +223,7 @@ XSASL_CLIENT_IMPL *xsasl_cyrus_client_init(const char *unused_client_type,
* Global callbacks. These have no per-session context.
*/
static sasl_callback_t callbacks[] = {
{SASL_CB_LOG, &xsasl_cyrus_log, 0},
{SASL_CB_LOG, (XSASL_CYRUS_CB) &xsasl_cyrus_log, 0},
{SASL_CB_LIST_END, 0, 0}
};
@ -302,9 +302,9 @@ XSASL_CLIENT *xsasl_cyrus_client_create(XSASL_CLIENT_IMPL *unused_impl,
{
XSASL_CYRUS_CLIENT *client = 0;
static sasl_callback_t callbacks[] = {
{SASL_CB_USER, &xsasl_cyrus_client_get_user, 0},
{SASL_CB_AUTHNAME, &xsasl_cyrus_client_get_user, 0},
{SASL_CB_PASS, &xsasl_cyrus_client_get_passwd, 0},
{SASL_CB_USER, (XSASL_CYRUS_CB) &xsasl_cyrus_client_get_user, 0},
{SASL_CB_AUTHNAME, (XSASL_CYRUS_CB) &xsasl_cyrus_client_get_user, 0},
{SASL_CB_PASS, (XSASL_CYRUS_CB) &xsasl_cyrus_client_get_passwd, 0},
{SASL_CB_LIST_END, 0, 0}
};
sasl_conn_t *sasl_conn = 0;

View File

@ -170,7 +170,7 @@ static const char *xsasl_cyrus_server_get_username(XSASL_SERVER *);
#define NO_CALLBACK_CONTEXT 0
static sasl_callback_t callbacks[] = {
{SASL_CB_LOG, &xsasl_cyrus_log, NO_CALLBACK_CONTEXT},
{SASL_CB_LOG, (XSASL_CYRUS_CB) &xsasl_cyrus_log, NO_CALLBACK_CONTEXT},
{SASL_CB_LIST_END, 0, 0}
};