]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-2.9-20110605
authorWietse Venema <wietse@porcupine.org>
Sun, 5 Jun 2011 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <viktor@dukhovni.org>
Tue, 5 Feb 2013 06:37:21 +0000 (06:37 +0000)
16 files changed:
postfix/HISTORY
postfix/README_FILES/POSTSCREEN_README
postfix/WISHLIST
postfix/html/POSTSCREEN_README.html
postfix/html/postconf.5.html
postfix/html/postdrop.1.html
postfix/man/man5/postconf.5
postfix/proto/POSTSCREEN_README.html
postfix/proto/postconf.proto
postfix/src/global/mail_version.h
postfix/src/master/master_ent.c
postfix/src/postdrop/postdrop.c
postfix/src/postscreen/postscreen.h
postfix/src/postscreen/postscreen_state.c
postfix/src/postscreen/postscreen_tests.c
postfix/src/smtpd/smtpd_check.c

index 35735c497792ae28e4ec08cd7effc6c178b2401f..0b653fac56fb5b3835fe23bd112e3cc852806c98 100644 (file)
@@ -16804,3 +16804,27 @@ Apologies for any names omitted.
        bouncing mail to alias) alias owner lookup. Problem reported
        by William Ono. Files: local/command.c, local/mailbox.c,
        local/unknown.c, local/bounce_workaround.c.
+
+20110516
+
+       Update the warning when permit_naked_ip_address is used,
+       and add permit_sasl_authenticated to the list of suggested
+       alternatives.  File: smtpd/smtpd_check.c.
+
+20110601
+
+       Bugfix (introduced Postfix 2.6 with master_service_disable)
+       loop control error when parsing a malformed master.cf file.
+       Found by Coverity. File: master/master_ent.c.
+
+20110602
+
+       Bugfix (introduced: Postfix 2.7): "sendmail -t" reported
+       "protocol error" after queue file write error.  File:
+       postdrop/postdrop.c.
+
+20110605
+
+       Cleanup: removed the PSC_STATE_FLAG_CACHE_EXPIRED flag.
+       Nothing uses this anymore. Files: postscreen/postscreen.h,
+       postscreen/postscreen_state.c, postscreen/postscreen_tests.c.
index 71fb3eb335224cd24bb6f5d893735aeda011931b..99977285865f8ff7fb94d1cc5904d2377c302da3 100644 (file)
@@ -15,7 +15,8 @@ impact on legitimate email traffic.
 
 postscreen(8) should not be used on SMTP ports that receive mail from end-user
 clients (MUAs). In a typical deployment, postscreen(8) is used on the "port 25"
-service, while MUA clients submit mail via the submission service.
+service, while MUA clients submit mail via the submission service (port 587)
+which normally requires client authentication.
 
 postscreen(8) is part of a multi-layer defense.
 
@@ -36,8 +37,8 @@ postscreen(8) is part of a multi-layer defense.
     applications.
 
 Each layer reduces the spam volume. The general strategy is to use the less
-expensive defenses first, and to use the more expensive defenses for the spam
-that remains.
+expensive defenses first, and to use the more expensive defenses only for the
+spam that remains.
 
 Topics in this document:
 
@@ -171,22 +172,14 @@ parameters. Expired entries are silently renewed if possible.
 M\bMX\bX P\bPo\bol\bli\bic\bcy\by t\bte\bes\bst\bt
 
 When the remote SMTP client is not on the static access list or temporary
-whitelist, postscreen(8) can implement a number of whitelist tests before it
-grants the client a temporary whitelist status to talk to a Postfix SMTP server
-process.
+whitelist, postscreen(8) can implement a number of whitelist tests, before it
+grants the client a temporary whitelist status that allows it to talk to a
+Postfix SMTP server process.
 
 By listening on both primary and backup MX addresses, postscreen(8) can deny
 the temporary whitelist status to clients that connect only to backup MX hosts
-(an old trick to take advantage of backup MX hosts with weaker anti-spam
-policies).
-
-Note 1: The status of this feature is still experimental, and implementation
-details are likely to change.
-
-Note 2: MX policy enforcement is currently supported only for domains with one
-Postfix MTA. Support for domains with multiple Postfix MTAs will have to wait
-until Postfix has a database client that can update a shared postscreen(8)
-database.
+(an old spammer trick to take advantage of backup MX hosts with weaker anti-
+spam policies than primary MX hosts).
 
   * First, configure the host to listen on both primary and backup MX
     addresses. Use the appropriate ifconfig command for the local operating
index f2a13b73f164d1d4ac248fbc86a852eb799f95a8..2bc3bc7161c8be6c876cfb5333a0140d3cdfe6fe 100644 (file)
@@ -8,6 +8,33 @@ Wish list:
 
        Make the rules for how to use close-on-exec more explicit.
 
+       Trick from amavisd: save listen socket/fifo/etc state, clear
+       their close-on-exec flags, exec the same program file to
+       re-initialize (with saved socket state on command line or
+       in environment), then restore the listen socket/fifo/etc
+       close-on-exec flags.  This could be a way to mitigate the
+       impact of memory/file leaks, and to implement "postfix
+       reload" support for master(8) features that currently don't
+       support this.
+
+       postscreen: wait for DNS completion after early HANGUP
+       and log DNSBL.
+
+       Some Sendmail configurations trigger sub-optimal behavior
+       when the postscreen_whitelist_interfaces parameter lists
+       primary MX addresses only.  When postscreen's "deep protocol
+       tests" are successful on the primary MX address (i.e. they
+       result in 4XX responses to RCPT TO), some Sendmail
+       configurations keep the primary MX connection open until
+       AFTER they finish talking to the backup MX address.  The
+       problem is that the backup connection runs into a WHITELIST
+       VETO condition because the whitelisting database has not
+       yet been updated with the PASS NEW result for the primary
+       MX connection.  Unfortunately postscreen can't update the
+       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.
 
index 6b501fdeca780a3eddc3dc1461f241fff46185b6..bd4e666777d254679f9f0c82e3f4f5b2625cc09f 100644 (file)
@@ -31,7 +31,8 @@ pass its tests; by allowing whitelisted clients to skip tests,
 <p> <a href="postscreen.8.html">postscreen(8)</a> should not be used on SMTP ports that receive
 mail from end-user clients (MUAs). In a typical deployment,
 <a href="postscreen.8.html">postscreen(8)</a> is used on the "port 25" service, while MUA clients
-submit mail via the submission service. </p>
+submit mail via the submission service (port 587) which normally
+requires client authentication. </p>
 
 <p> <a href="postscreen.8.html">postscreen(8)</a> is part of a multi-layer defense. <p>
 
@@ -59,7 +60,7 @@ SpamAssassin, and Milter applications. </p>
 
 <p> Each layer reduces the spam volume. The general strategy is to
 use the less expensive defenses first, and to use the more expensive
-defenses for the spam that remains. </p>
+defenses only for the spam that remains. </p>
 
 <p> Topics in this document: </p>
 
@@ -233,21 +234,14 @@ parameters.  Expired entries are silently renewed if possible. </p>
 
 <p> When the remote SMTP client is not on the static access list
 or temporary whitelist, <a href="postscreen.8.html">postscreen(8)</a> can implement a number of
-whitelist tests before it grants the client a temporary whitelist
-status to talk to a Postfix SMTP server process. </p>
+whitelist tests, before it grants the client a temporary whitelist
+status that allows it to talk to a Postfix SMTP server process. </p>
 
 <p> By listening on both primary and backup MX addresses, <a href="postscreen.8.html">postscreen(8)</a>
 can deny the temporary whitelist status to clients that connect
-only to backup MX hosts (an old trick to take advantage of backup
-MX hosts with weaker anti-spam policies). </p>
-
-<p> Note 1: The status of this feature is still experimental, and
-implementation details are likely to change. </p>
-
-<p> Note 2: MX policy enforcement is currently supported only for
-domains with one Postfix MTA. Support for domains with multiple
-Postfix MTAs will have to wait until Postfix has a database client
-that can update a shared <a href="postscreen.8.html">postscreen(8)</a> database.  </p>
+only to backup MX hosts (an old spammer trick to take advantage of
+backup MX hosts with weaker anti-spam policies than primary MX
+hosts). </p>
 
 <ul>
 
index a9bf5e565298b02848f245b7fb4515f8ae3e3bc1..44e6ebf5d6cde2d410b93ac882a454f52eb59261 100644 (file)
@@ -7568,16 +7568,19 @@ one-letter suffix that specifies the time unit).  Time units: s
 
 <p> A list of local <a href="postscreen.8.html">postscreen(8)</a> server IP addresses where a
 non-whitelisted SMTP client can obtain <a href="postscreen.8.html">postscreen(8)</a>'s temporary
-whitelist status to talk to a Postfix SMTP server process.  By
-default, a client can pass <a href="postscreen.8.html">postscreen(8)</a>'s whitelist tests on any
-local <a href="postscreen.8.html">postscreen(8)</a> server IP address. </p>
+whitelist status. This status is required before the client can
+talk to a Postfix SMTP server process.  By default, a client can
+obtain <a href="postscreen.8.html">postscreen(8)</a>'s whitelist status on any local <a href="postscreen.8.html">postscreen(8)</a>
+server IP address. </p>
 
 <p> When <a href="postscreen.8.html">postscreen(8)</a> listens on both primary and backup MX
 addresses, the <a href="postconf.5.html#postscreen_whitelist_interfaces">postscreen_whitelist_interfaces</a> parameter can be
-used to disable whitelisting on backup MX addresses.  With this
-configuration, <a href="postscreen.8.html">postscreen(8)</a> denies whitelisting status to clients
-that connect only to backup MX addresses, and prevents them from
-talking to a Postfix SMTP server process.  </p>
+configured to give the temporary whitelist status only when a client
+connects to a primary MX address. Once a client is whitelisted it
+can talk to a Postfix SMTP server on any address. Thus, clients
+that connect only to backup MX addresses will never become whitelisted,
+and will never be allowed to talk to a Postfix SMTP server process.
+</p>
 
 <p> Example: </p>
 
index 2756476d01dd239cdc5d6d6b80821ce9887f79ac..f06fa329fb80f350656945907e28333a5ede9d88 100644 (file)
@@ -99,7 +99,7 @@ POSTDROP(1)                                                        POSTDROP(1)
 
        Available in Postfix version 2.2 and later:
 
-       <b><a href="postconf.5.html#authorized_submit_users">authorized_submit_users</a> (static:anyone)</b>
+       <b><a href="postconf.5.html#authorized_submit_users">authorized_submit_users</a> (<a href="DATABASE_README.html#types">static</a>:anyone)</b>
               List of users who are  authorized  to  submit  mail
               with  the  <a href="sendmail.1.html"><b>sendmail</b>(1)</a> command (and with the privi-
               leged <a href="postdrop.1.html"><b>postdrop</b>(1)</a> helper command).
index 50630574b917e85498c6bb32e6b7d225af1e7916..4aecf46e19a7a3c6a87799ec1e26c63ffeaf0088 100644 (file)
@@ -4361,16 +4361,18 @@ This feature is available in Postfix 2.8.
 .SH postscreen_whitelist_interfaces (default: static:all)
 A list of local \fBpostscreen\fR(8) server IP addresses where a
 non-whitelisted SMTP client can obtain \fBpostscreen\fR(8)'s temporary
-whitelist status to talk to a Postfix SMTP server process.  By
-default, a client can pass \fBpostscreen\fR(8)'s whitelist tests on any
-local \fBpostscreen\fR(8) server IP address.
+whitelist status. This status is required before the client can
+talk to a Postfix SMTP server process.  By default, a client can
+obtain \fBpostscreen\fR(8)'s whitelist status on any local \fBpostscreen\fR(8)
+server IP address.
 .PP
 When \fBpostscreen\fR(8) listens on both primary and backup MX
 addresses, the postscreen_whitelist_interfaces parameter can be
-used to disable whitelisting on backup MX addresses.  With this
-configuration, \fBpostscreen\fR(8) denies whitelisting status to clients
-that connect only to backup MX addresses, and prevents them from
-talking to a Postfix SMTP server process.
+configured to give the temporary whitelist status only when a client
+connects to a primary MX address. Once a client is whitelisted it
+can talk to a Postfix SMTP server on any address. Thus, clients
+that connect only to backup MX addresses will never become whitelisted,
+and will never be allowed to talk to a Postfix SMTP server process.
 .PP
 Example:
 .PP
index c3249e6e80e37a6dc03ce63bade0605c36db19da..6de1e7286544268191d34fddeb78809d977d8157 100644 (file)
@@ -31,7 +31,8 @@ postscreen(8) minimizes its impact on legitimate email traffic.
 <p> postscreen(8) should not be used on SMTP ports that receive
 mail from end-user clients (MUAs). In a typical deployment,
 postscreen(8) is used on the "port 25" service, while MUA clients
-submit mail via the submission service. </p>
+submit mail via the submission service (port 587) which normally
+requires client authentication. </p>
 
 <p> postscreen(8) is part of a multi-layer defense. <p>
 
@@ -59,7 +60,7 @@ SpamAssassin, and Milter applications. </p>
 
 <p> Each layer reduces the spam volume. The general strategy is to
 use the less expensive defenses first, and to use the more expensive
-defenses for the spam that remains. </p>
+defenses only for the spam that remains. </p>
 
 <p> Topics in this document: </p>
 
@@ -233,21 +234,14 @@ parameters.  Expired entries are silently renewed if possible. </p>
 
 <p> When the remote SMTP client is not on the static access list
 or temporary whitelist, postscreen(8) can implement a number of
-whitelist tests before it grants the client a temporary whitelist
-status to talk to a Postfix SMTP server process. </p>
+whitelist tests, before it grants the client a temporary whitelist
+status that allows it to talk to a Postfix SMTP server process. </p>
 
 <p> By listening on both primary and backup MX addresses, postscreen(8)
 can deny the temporary whitelist status to clients that connect
-only to backup MX hosts (an old trick to take advantage of backup
-MX hosts with weaker anti-spam policies). </p>
-
-<p> Note 1: The status of this feature is still experimental, and
-implementation details are likely to change. </p>
-
-<p> Note 2: MX policy enforcement is currently supported only for
-domains with one Postfix MTA. Support for domains with multiple
-Postfix MTAs will have to wait until Postfix has a database client
-that can update a shared postscreen(8) database.  </p>
+only to backup MX hosts (an old spammer trick to take advantage of
+backup MX hosts with weaker anti-spam policies than primary MX
+hosts). </p>
 
 <ul>
 
index c88ae25d997409cd716ad1bb81258cb47298945a..b27389ec35787a004b726c53c3c77303e2a6f3ed 100644 (file)
@@ -14084,16 +14084,19 @@ configuration parameter.  See there for details. </p>
 
 <p> A list of local postscreen(8) server IP addresses where a
 non-whitelisted SMTP client can obtain postscreen(8)'s temporary
-whitelist status to talk to a Postfix SMTP server process.  By
-default, a client can pass postscreen(8)'s whitelist tests on any
-local postscreen(8) server IP address. </p>
+whitelist status. This status is required before the client can
+talk to a Postfix SMTP server process.  By default, a client can
+obtain postscreen(8)'s whitelist status on any local postscreen(8)
+server IP address. </p>
 
 <p> When postscreen(8) listens on both primary and backup MX
 addresses, the postscreen_whitelist_interfaces parameter can be
-used to disable whitelisting on backup MX addresses.  With this
-configuration, postscreen(8) denies whitelisting status to clients
-that connect only to backup MX addresses, and prevents them from
-talking to a Postfix SMTP server process.  </p>
+configured to give the temporary whitelist status only when a client
+connects to a primary MX address. Once a client is whitelisted it
+can talk to a Postfix SMTP server on any address. Thus, clients
+that connect only to backup MX addresses will never become whitelisted,
+and will never be allowed to talk to a Postfix SMTP server process.
+</p>
 
 <p> Example: </p>
 
index 6327695a6d2a987fed0289a8a44af208cd4ffeb6..efb44e55a2bd7dbae6c04a09de1f3491d6668d65 100644 (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      "20110501"
+#define MAIL_RELEASE_DATE      "20110605"
 #define MAIL_VERSION_NUMBER    "2.9"
 
 #ifdef SNAPSHOT
index 4723251bdedaf508c56e7bd1aaa6139c96875901..cc0bb56d72902a2d27edaafbcfa2be6e11863851 100644 (file)
@@ -272,7 +272,7 @@ MASTER_SERV *get_master_ent()
     /*
      * Skip blank lines and comment lines.
      */
-    do {
+    for (;;) {
        if (readlline(buf, master_fp, &master_line) == 0) {
            vstring_free(buf);
            vstring_free(junk);
@@ -284,7 +284,9 @@ MASTER_SERV *get_master_ent()
        name = cp;
        transport = get_str_ent(&bufp, "transport type", (char *) 0);
        vstring_sprintf(junk, "%s.%s", name, transport);
-    } while (match_service_match(master_disable, vstring_str(junk)) != 0);
+       if (match_service_match(master_disable, vstring_str(junk)) == 0)
+           break;
+    }
 
     /*
      * Parse one logical line from the configuration file. Initialize service
index 34e4fdf8ea1b784a4fdd3bc088fdfb53d7c098fe..a2df01ecec9ea7e5eee987f920d753e7541e8336 100644 (file)
@@ -235,6 +235,7 @@ int     main(int argc, char **argv)
     int     saved_errno;
     int     from_count = 0;
     int     rcpt_count = 0;
+    int     validate_input = 1;
 
     /*
      * Fingerprint executables and core dumps.
@@ -453,6 +454,7 @@ int     main(int argc, char **argv)
                   && rec_type != REC_TYPE_EOF)
                if (rec_type == REC_TYPE_ERROR)
                    msg_fatal("uid=%ld: malformed input", (long) uid);
+           validate_input = 0;
            errno = saved_errno;
            break;
        }
@@ -478,7 +480,7 @@ int     main(int argc, char **argv)
      * the segment terminator records, there aren't any other mandatory
      * records in a Postfix submission queue file.
      */
-    if (from_count == 0 || rcpt_count == 0) {
+    if (validate_input && (from_count == 0 || rcpt_count == 0)) {
        status = CLEANUP_STAT_BAD;
        mail_stream_cleanup(dst);
     }
index 7a82b3697653c93a78936d2f3977b7e229ff996e..b378aaad4026bbec27fcc63514fb93a2fa483d1e 100644 (file)
@@ -81,7 +81,7 @@ typedef struct {
 #define PSC_STATE_FLAG_NEW             (1<<3)  /* some test was never passed */
 #define PSC_STATE_FLAG_BLIST_FAIL      (1<<4)  /* blacklisted */
 #define PSC_STATE_FLAG_HANGUP          (1<<5)  /* NOT a test failure */
-#define PSC_STATE_FLAG_CACHE_EXPIRED   (1<<6)  /* cache retention expired */
+/* unused */
 #define PSC_STATE_FLAG_WLIST_FAIL      (1<<7)  /* do not whitelist */
 
  /*
index 51c3bf0c923decfd87a1585f7c6847e8e463f687..581647b6f9a6fb5d222a83bdc36e0c18c0a9ff86 100644 (file)
@@ -255,7 +255,7 @@ const char *psc_print_state_flags(int flags, const char *context)
        "NEW", PSC_STATE_FLAG_NEW,
        "BLIST_FAIL", PSC_STATE_FLAG_BLIST_FAIL,
        "HANGUP", PSC_STATE_FLAG_HANGUP,
-       "CACHE_EXPIRED", PSC_STATE_FLAG_CACHE_EXPIRED,
+       /* unused */
        "WLIST_FAIL", PSC_STATE_FLAG_WLIST_FAIL,
 
        "PENAL_UPDATE", PSC_STATE_FLAG_PENAL_UPDATE,
index ccc3241baec6436bec2c9000f30663e4b85969a1..57bfd69991d9e15f745799c0d96f0cbdc266a8ce 100644 (file)
@@ -215,37 +215,44 @@ void    psc_parse_tests(PSC_STATE *state,
        state->flags |= PSC_STATE_FLAG_NEW;
 
     /*
-     * Don't flag a cache entry as expired just because some test was never
-     * passed.
-     * 
      * Don't flag disabled tests as "todo", because there would be no way to
      * make those bits go away.
      */
-    if (PSC_PREGR_TEST_ENABLE() && time_value > state->pregr_stamp) {
+    if (PSC_PREGR_TEST_ENABLE() && time_value > state->pregr_stamp)
        state->flags |= PSC_STATE_FLAG_PREGR_TODO;
-       if (state->pregr_stamp > PSC_TIME_STAMP_DISABLED)
-           state->flags |= PSC_STATE_FLAG_CACHE_EXPIRED;
-    }
-    if (PSC_DNSBL_TEST_ENABLE() && time_value > state->dnsbl_stamp) {
+    if (PSC_DNSBL_TEST_ENABLE() && time_value > state->dnsbl_stamp)
        state->flags |= PSC_STATE_FLAG_DNSBL_TODO;
-       if (state->dnsbl_stamp > PSC_TIME_STAMP_DISABLED)
-           state->flags |= PSC_STATE_FLAG_CACHE_EXPIRED;
-    }
-    if (var_psc_pipel_enable && time_value > state->pipel_stamp) {
+    if (var_psc_pipel_enable && time_value > state->pipel_stamp)
        state->flags |= PSC_STATE_FLAG_PIPEL_TODO;
-       if (state->pipel_stamp > PSC_TIME_STAMP_DISABLED)
-           state->flags |= PSC_STATE_FLAG_CACHE_EXPIRED;
-    }
-    if (var_psc_nsmtp_enable && time_value > state->nsmtp_stamp) {
+    if (var_psc_nsmtp_enable && time_value > state->nsmtp_stamp)
        state->flags |= PSC_STATE_FLAG_NSMTP_TODO;
-       if (state->nsmtp_stamp > PSC_TIME_STAMP_DISABLED)
-           state->flags |= PSC_STATE_FLAG_CACHE_EXPIRED;
-    }
-    if (var_psc_barlf_enable && time_value > state->barlf_stamp) {
+    if (var_psc_barlf_enable && time_value > state->barlf_stamp)
        state->flags |= PSC_STATE_FLAG_BARLF_TODO;
-       if (state->barlf_stamp > PSC_TIME_STAMP_DISABLED)
-           state->flags |= PSC_STATE_FLAG_CACHE_EXPIRED;
+
+    /*
+     * If any test has expired, proactively refresh tests that will expire
+     * soon. This can increase the occurrence of client-visible delays, but
+     * avoids questions about why a client can pass some test and then fail
+     * within seconds. The proactive refresh time is really a surrogate for
+     * the user's curiosity level, and therefore hard to choose optimally.
+     */
+#ifdef VAR_PSC_REFRESH_TIME
+    if ((state->flags & PSC_STATE_MASK_ANY_TODO) != 0
+       && var_psc_refresh_time > 0) {
+       time_t  refresh_time = time_value + var_psc_refresh_time;
+
+       if (PSC_PREGR_TEST_ENABLE() && refresh_time > state->pregr_stamp)
+           state->flags |= PSC_STATE_FLAG_PREGR_TODO;
+       if (PSC_DNSBL_TEST_ENABLE() && refresh_time > state->dnsbl_stamp)
+           state->flags |= PSC_STATE_FLAG_DNSBL_TODO;
+       if (var_psc_pipel_enable && refresh_time > state->pipel_stamp)
+           state->flags |= PSC_STATE_FLAG_PIPEL_TODO;
+       if (var_psc_nsmtp_enable && refresh_time > state->nsmtp_stamp)
+           state->flags |= PSC_STATE_FLAG_NSMTP_TODO;
+       if (var_psc_barlf_enable && refresh_time > state->barlf_stamp)
+           state->flags |= PSC_STATE_FLAG_BARLF_TODO;
     }
+#endif
 
     /*
      * Gratuitously make postscreen logging more useful by turning on all
index e381a36f3bddd9f418135b5c606abf45879f8c6e..0768c61b782c2621a2da03cce325bc47c1bdba47 100644 (file)
@@ -3796,8 +3796,8 @@ static int generic_checks(SMTPD_STATE *state, ARGV *restrictions,
                                         state->helo_name, SMTPD_NAME_HELO);
            }
        } else if (strcasecmp(name, PERMIT_NAKED_IP_ADDR) == 0) {
-           msg_warn("restriction %s is deprecated. Use %s instead",
-                    PERMIT_NAKED_IP_ADDR, PERMIT_MYNETWORKS);
+           msg_warn("restriction %s is deprecated. Use %s or %s instead",
+                    PERMIT_NAKED_IP_ADDR, PERMIT_MYNETWORKS, PERMIT_SASL_AUTH);
            if (state->helo_name) {
                if (state->helo_name[strspn(state->helo_name, "0123456789.:")] == 0
                && (status = reject_invalid_hostaddr(state, state->helo_name,