action when giving up. The defaults are backwards-compatible.
Files: global/mail_params.h, mantools/postlink,
proto/postconf.proto, smtpd/smtpd.c, smtpd/smtpd_check.c.
+
+20140708
+
+ Bugfix (introduced 20140701): did not restore jumpbuf
+ while evaluatingsmtpd_policy_service_default_action.
+ Viktor Dukhovni. File: smtpd/smtpd_check.c.
+
+20140709
+
+ Cleanup: bitrot in unused function. File: global/defer.c.
+
+ Cleanup: add SYSLIBS minus static libraries while building
+ Postfix shared-library objects. Files: makedefs, util/Makefile.in,
+ global/Makefile.in, dns/Makefile.in, master/Makefile.in/.
(mantools/srctoman - makedefs | nroff -man | less) with information
about build options that are not described in the INSTALL instructions.
+Major changes with snapshot 20140703
+====================================
+
+This release introduces three new configuration parameters that
+control error recovery for failed SMTPD policy requests.
+
+ * smtpd_policy_service_default_action (default: 451 4.3.5 Server
+ configuration problem): The default action when an SMTPD policy
+ service request fails.
+
+ * smtpd_policy_service_try_limit (default: 2): The maximal number
+ of attempts to send an SMTPD policy service request before
+ giving up. This must be a number greater than zero.
+
+ * smtpd_policy_service_retry_delay (default: 1s): The delay between
+ attempts to resend a failed SMTPD policy service request. This
+ must be a number greater than zero.
+
+See postconf(5) for details and limitations.
+
Incompatible changes with snapshot 20140701
===========================================
Things to do after the stable release:
+ Document and test restriction_classes example for
+ smtpd_policy_service_default_action.
+
Don't accept AUTH or other features that are not announced
in the EHLO response.
Per-Milter error action.
Suggested at Mailserver conference: Postscreen RDNS-based
- reputation (but this introduces dependency on random DNS
- servers).
+ reputation (but this makes postscreen performance highly
+ unpredicable because it introduces a dependency on random
+ DNS servers).
Discourage the use of "after 220" tests in POSTSCREEN_README
and the documentation of individual parameter settings.
SHLIB_CFLAGS=
SHLIB_SUFFIX=
SHLIB_LD=:
+ SHLIB_SYSLIBS=
SHLIB_RPATH=
SHLIB_ENV=
LIB_PREFIX=
done;;
esac
+# Remove static libraries from SYSLIBS when building shared objects,
+# Can't use the shell "case" patterns to detect names ending in *.a.
+
+case "$shared" in
+yes) SHLIB_SYSLIBS=`${AWK} '
+ BEGIN { wc = split("'"$SYSLIBS"'", words)
+ for (n = 1; n <= wc; n++)
+ if (words[n] !~ /\.a$/)
+ printf(" %s", words[n])
+ }
+ '`
+esac
+
+# Finally...
+
sed 's/ */ /g' <<EOF
# System-dependent settings and compiler/linker overrides.
SYSTYPE = $SYSTYPE
SHLIB_DIR = $shlib_directory
SHLIB_ENV = $SHLIB_ENV
SHLIB_LD = $SHLIB_LD
+SHLIB_SYSLIBS = $SHLIB_SYSLIBS
SHLIB_RPATH = $SHLIB_RPATH
# Switch between dynamicmaps.cf plugins and hard-linked databases.
NON_PLUGIN_MAP_OBJ = $NON_PLUGIN_MAP_OBJ
$(LIB): $(OBJS)
$(AR) $(ARFL) $(LIB) $?
$(RANLIB) $(LIB)
- $(SHLIB_LD) -o $(LIB) $(OBJS)
+ $(SHLIB_LD) -o $(LIB) $(OBJS) $(SHLIB_SYSLIBS)
$(LIB_DIR)/$(LIB): $(LIB)
cp $(LIB) $(LIB_DIR)
$(LIB): $(OBJS)
$(AR) $(ARFL) $(LIB) $?
$(RANLIB) $(LIB)
- $(SHLIB_LD) -o $(LIB) $(OBJS)
+ $(SHLIB_LD) -o $(LIB) $(OBJS) $(SHLIB_SYSLIBS)
$(LIB_DIR)/$(LIB): $(LIB)
cp $(LIB) $(LIB_DIR)
/* const char *dsn_envid;
/* int dsn_ret;
/*
-/* int defer_warn(flags, queue, id, sender, dsn_envid, dsn_ret)
+/* int defer_warn(flags, queue, id, encoding, sender,
+/* dsn_envid, dsn_ret)
/* int flags;
/* const char *queue;
/* const char *id;
+/* const char *encoding;
/* const char *sender;
/* const char *dsn_envid;
/* int dsn_ret;
* DSN filter (Postfix 2.12).
*/
if (delivery_status_filter != 0
- && (dsn_res = dsn_filter_lookup(delivery_status_filter, &my_dsn)) != 0) {
+ && (dsn_res = dsn_filter_lookup(delivery_status_filter, &my_dsn)) != 0) {
if (dsn_res->status[0] == '5')
return (bounce_append_intern(flags, id, stats, rcpt, relay, dsn_res));
my_dsn = *dsn_res;
* do not flush the log */
int defer_warn(int flags, const char *queue, const char *id,
- const char *sender, const char *envid, int dsn_ret)
+ const char *encoding, const char *sender,
+ const char *envid, int dsn_ret)
{
if (mail_command_client(MAIL_CLASS_PRIVATE, var_defer_service,
ATTR_TYPE_INT, MAIL_ATTR_NREQ, BOUNCE_CMD_WARN,
ATTR_TYPE_INT, MAIL_ATTR_FLAGS, flags,
ATTR_TYPE_STR, MAIL_ATTR_QUEUE, queue,
ATTR_TYPE_STR, MAIL_ATTR_QUEUEID, id,
+ ATTR_TYPE_STR, MAIL_ATTR_ENCODING, encoding,
ATTR_TYPE_STR, MAIL_ATTR_SENDER, sender,
ATTR_TYPE_STR, MAIL_ATTR_DSN_ENVID, envid,
ATTR_TYPE_INT, MAIL_ATTR_DSN_RET, dsn_ret,
* DSN filter (Postfix 2.12).
*/
if (delivery_status_filter != 0
- && (dsn_res = dsn_filter_lookup(delivery_status_filter, &my_dsn)) != 0) {
+ && (dsn_res = dsn_filter_lookup(delivery_status_filter, &my_dsn)) != 0) {
if (dsn_res->status[0] == '5')
return (bounce_one_intern(flags, queue, id, encoding, sender,
dsn_envid, dsn_ret, stats, rcpt,
extern int defer_flush(int, const char *, const char *, const char *,
const char *, const char *, int);
extern int defer_warn(int, const char *, const char *, const char *,
- const char *, int);
+ const char *, const char *, int);
extern int defer_one(int, const char *, const char *, const char *,
const char *, const char *,
int, MSG_STATS *, RECIPIENT *,
* Patches change both the patchlevel and the release date. Snapshots have no
* patchlevel; they change the release date only.
*/
-#define MAIL_RELEASE_DATE "20140703"
+#define MAIL_RELEASE_DATE "20140709"
#define MAIL_VERSION_NUMBER "2.12"
#ifdef SNAPSHOT
$(LIB): $(LIB_OBJ)
$(AR) $(ARFL) $(LIB) $?
$(RANLIB) $(LIB)
- $(SHLIB_LD) -o $(LIB) $(LIB_OBJ)
+ $(SHLIB_LD) -o $(LIB) $(LIB_OBJ) $(SHLIB_SYSLIBS)
$(LIB_DIR)/$(LIB): $(LIB)
cp $(LIB) $(LIB_DIR)/$(LIB)
"policy query", reply_name,
reply_class, def_acl);
nesting_level -= 1;
+ memcpy(ADDROF(smtpd_check_buf), ADDROF(savebuf),
+ sizeof(smtpd_check_buf));
} else {
/*
$(LIB): $(OBJS)
$(AR) $(ARFL) $(LIB) $?
$(RANLIB) $(LIB)
- $(SHLIB_LD) -o $(LIB) $(OBJS)
+ $(SHLIB_LD) -o $(LIB) $(OBJS) $(SHLIB_SYSLIBS)
$(LIB_DIR)/$(LIB): $(LIB)
cp $(LIB) $(LIB_DIR)