EX_UNAVAILABLE=69
STATUS=$EX_TEMPFAIL
- cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }
-
# Clean up when done or when aborting.
trap "rm -f in.$$; exit $STATUS" 0 1 2 3 15
- cat >in.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }
+ quit() { STATUS=${1-$?}; exit; }
+
+ # Start processing.
+ cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist; quit $EX_TEMPFAIL; }
+
+ cat >in.$$ || { echo Cannot save mail to file; quit $EX_TEMPFAIL; }
- # filter <in.$$ || { echo Message content rejected; exit $EX_UNAVAILABLE; }
+ # filter <in.$$ || { echo Message content rejected; quit $EX_UNAVAILABLE; }
$SENDMAIL "$@" <in.$$
for unimplemented operations, causing "postmap -d" to dump
core instead if issuing an error message. This is what I
get for accepting code that I cannot test myself.
+
+20001220
+
+ Feature: merged in Andrew McNamara's virtual delivery agent
+ (a table-driven agent that does not require recipients to
+ have UNIX accounts, and that implements a safe subset of
+ the default local delivery agent). Files: virtual/*.
+
+20001221
+
+ Code cleanup: configuration parameters that are $name
+ expanded at run-time now have their own data type hierarchy
+ instead of being piggy-backed on top of strings that are
+ $name expanded at program initialization time. Files:
+ global/mail_conf.h, global/mail_conf_raw.c, and code that
+ calls it.
+
+20001230
+
+ Update: replaced the default rbl.maps.vix.com setting by
+ the current blackholes.mail-abuse.org.
+
+20010102
+
+ Code cleanup: the queue manager is a bit greedier with
+ allocating a delivery agent. Problem pointed out by Patrik
+ Rak. All bugs in the solution are mine. Files:
+ *qmgr/qmgr_active.c.
+
+20010105
+
+ Bugfix: the FILTER_README shell script example did not
+ correctly pass exit status to the parent.
+
+ Bugfix: soft errors in client hostname lookups would be
+ treated as hard errors. Fix by Michael Herrmann
+ (informatik.tu-muenchen.de). File: smtpd/smtpd_peer.c.
If you installed the Cyrus SASL libraries as per the default, you
will have to symlink /usr/lib/sasl -> /usr/local/lib/sasl.
-See conf/sample-sasl.cf for examples.
+See conf/sample-auth.cf for examples.
In order to enable SASL support in the SMTP server:
# network address, and reject service if it is listed below any of
# the following domains.
#
-maps_rbl_domains = rbl.maps.vix.com
+#maps_rbl_domains = blackholes.mail-abuse.org dialups.mail-abuse.org
+maps_rbl_domains = blackholes.mail-abuse.org
# The relay_domains parameter restricts what client hostname domains
# (and subdomains thereof) this mail system will relay mail from,
extern int var_maps_rbl_code;
#define VAR_MAPS_RBL_DOMAINS "maps_rbl_domains"
-#define DEF_MAPS_RBL_DOMAINS "rbl.maps.vix.com"
+#define DEF_MAPS_RBL_DOMAINS "blackholes.mail-abuse.org"
extern char *var_maps_rbl_domains;
#define VAR_SMTPD_DELAY_REJECT "smtpd_delay_reject"
* Version of this program.
*/
#define VAR_MAIL_VERSION "mail_version"
-#define DEF_MAIL_VERSION "Snapshot-20001224"
+#define DEF_MAIL_VERSION "Snapshot-20010105"
extern char *var_mail_version;
/* LICENSE
QMGR_TRANSPORT *transport;
/*
- * Use round-robin search to find a transport with pending mail. Allocate
- * a delivery process. The process allocation completes asynchronously.
+ * Allocate one delivery process for every transport with pending mail.
+ * The process allocation completes asynchronously.
*/
- if ((transport = qmgr_transport_select()) != 0) {
+ while ((transport = qmgr_transport_select()) != 0) {
if (msg_verbose)
msg_info("qmgr_active_drain: allocate %s", transport->name);
qmgr_transport_alloc(transport, qmgr_deliver);
QMGR_TRANSPORT *transport;
/*
- * Use round-robin search to find a transport with pending mail. Allocate
- * a delivery process. The process allocation completes asynchronously.
+ * Allocate one delivery process for every transport with pending mail.
+ * The process allocation completes asynchronously.
*/
- if ((transport = qmgr_transport_select()) != 0) {
+ while ((transport = qmgr_transport_select()) != 0) {
if (msg_verbose)
msg_info("qmgr_active_drain: allocate %s", transport->name);
qmgr_transport_alloc(transport, qmgr_deliver);
* reset the saved set-userid, which would be a security vulnerability.
*/
if (geteuid() == 0 && getuid() != 0) {
- msg_warn("sendmail is set-uid root, or is run from a set-uid root process");
+ msg_warn("sendmail has set-uid root file permissions, or is run from a set-uid root process");
+ msg_warn("the Postfix sendmail command must be installed without set-uid root file permissions");
set_ugid(getuid(), getgid());
}
#define REJECT_PEER_NAME(state, code) { \
myfree(state->name); \
state->name = mystrdup("unknown"); \
- state->peer_code = 5; \
+ state->peer_code = code; \
}
hp = gethostbyname(state->name); /* clobbers hp->name!! */