]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-2.2-20040616
authorWietse Venema <wietse@porcupine.org>
Wed, 16 Jun 2004 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <viktor@dukhovni.org>
Tue, 5 Feb 2013 06:29:40 +0000 (06:29 +0000)
15 files changed:
postfix/HISTORY
postfix/README_FILES/BASIC_CONFIGURATION_README
postfix/html/BASIC_CONFIGURATION_README.html
postfix/html/postconf.5.html
postfix/man/man5/postconf.5
postfix/proto/BASIC_CONFIGURATION_README.html
postfix/proto/postconf.proto
postfix/src/global/mail_version.h
postfix/src/global/mynetworks.c
postfix/src/global/resolve_clnt.c
postfix/src/global/resolve_clnt.in
postfix/src/global/resolve_clnt.ref
postfix/src/global/rewrite_clnt.c
postfix/src/global/verify.c
postfix/src/smtpd/smtpd.c

index 0e38da29b4ffcb30991f5b8678cbc1b42756dc2f..67c97aebb154303af1f32884f9a4e3875162e863 100644 (file)
@@ -9398,6 +9398,22 @@ Apologies for any names omitted.
 
        Documentation: typo fixes by IKEDA Nozomu.
 
+20040616
+
+       Bugfix: one missed variadic argument list fix. Victor
+       Duchovni, Morgan Stanley. File: global/verify.c.
+
+       Bugfix: the resolver client cache should be context dependent
+       because address verification probes may use a different
+       route than normal mail deliveries. File: global/resolve_clnt.c.
+
+       Safety: added similar context dependence to the address
+       rewriting client in order to avoid trouble when Postfix is
+       changed. File: global/rewrite_clnt.c.
+
+       Bugfix: space in HELO commands could end up in XFORWARD
+       commands.  File: smtpd/smtpd.c.
+
 Open problems:
 
        Low: make sure CCARGS -I options come at the end.
index dd17c5282d819c02cba47ee10721f188579c664a..9883e6567163a687532bce81c5e8f5724fcb8efc 100644 (file)
@@ -116,8 +116,8 @@ small site, you probably want to change that into $mydomain, which defaults to
 the parent domain of the machine name.
 
 For the sake of consistency between sender and recipient addresses, myorigin
-also specifies the default domain name that is appended to an unqualified
-recipient address.
+also specifies the domain name that is appended to an unqualified recipient
+address.
 
 Examples (specify only one of the following):
 
index 59c1442c1c6debaae484b34fb65f131eb14c0f70..cee19766287133b98074961be81699d78d58564d 100644 (file)
@@ -187,7 +187,7 @@ want to change that into $<a href="postconf.5.html#mydomain">mydomain</a>, which
 domain of the machine name. </p>
 
 <p> For the sake of consistency between sender and recipient addresses,
-<a href="postconf.5.html#myorigin">myorigin</a> also specifies the <a href="ADDRESS_CLASS_README.html#default_domain_class">default domain</a> name that is appended
+<a href="postconf.5.html#myorigin">myorigin</a> also specifies the domain name that is appended
 to an unqualified recipient address. </p>
 
 <p> Examples (specify only one of the following): </p>
index fa7adaa4b1144e43e4c64a0086794900095c9076..ec6ac71ed8a81f810cbf222e865f44df00b8ede8 100644 (file)
@@ -3335,7 +3335,7 @@ What addresses are subject to address masquerading.
 </p>
 
 <p>
-By default, address masquerading is limited to envelope recipient
+By default, address masquerading is limited to envelope sender
 addresses, and to header sender and header recipient addresses.
 This allows you to use address masquerading on a mail gateway while
 still being able to forward mail to users on individual machines.
index 2f96c402800511a5784837ca911d29e275cbbaa4..3c0ebc2438339891df1088a4d6a809cf1b168c38 100644 (file)
@@ -1670,7 +1670,7 @@ Do not change this unless you have a complete understanding of RFC 821.
 .SH masquerade_classes (default: envelope_sender, header_sender, header_recipient)
 What addresses are subject to address masquerading.
 .PP
-By default, address masquerading is limited to envelope recipient
+By default, address masquerading is limited to envelope sender
 addresses, and to header sender and header recipient addresses.
 This allows you to use address masquerading on a mail gateway while
 still being able to forward mail to users on individual machines.
index d658123bb7118d28ce3e667e79214e5a3c777480..24576b87f59ea6274e0b8fd7cacc4e67f909c836 100644 (file)
@@ -187,7 +187,7 @@ want to change that into $mydomain, which defaults to the parent
 domain of the machine name. </p>
 
 <p> For the sake of consistency between sender and recipient addresses,
-myorigin also specifies the default domain name that is appended
+myorigin also specifies the domain name that is appended
 to an unqualified recipient address. </p>
 
 <p> Examples (specify only one of the following): </p>
index 25de6729666ead6ef377fdd76a4061d042142684..fa132d941ca2b036076a00ecc8b2667b0968b6ef 100644 (file)
@@ -2064,7 +2064,7 @@ What addresses are subject to address masquerading.
 </p>
 
 <p>
-By default, address masquerading is limited to envelope recipient
+By default, address masquerading is limited to envelope sender
 addresses, and to header sender and header recipient addresses.
 This allows you to use address masquerading on a mail gateway while
 still being able to forward mail to users on individual machines.
index 952acb0c9b79bfd508a79bd9179d32abf9093ef7..891c2fca5f0e438c83fc0fa32af79bc27e75a8bd 100644 (file)
@@ -20,7 +20,7 @@
   * Patches change the patchlevel and the release date. Snapshots change the
   * release date only.
   */
-#define MAIL_RELEASE_DATE      "20040615"
+#define MAIL_RELEASE_DATE      "20040616"
 #define MAIL_VERSION_NUMBER    "2.2"
 
 #define VAR_MAIL_VERSION       "mail_version"
index 5eb649ba344d6584a740e89ba5bf099ff833395d..a40fea4d0ef6f1e2735308966284cb10b45d6f16 100644 (file)
@@ -91,6 +91,17 @@ const char *mynetworks(void)
        mask_style = name_mask("mynetworks mask style", mask_styles,
                               var_mynetworks_style);
 
+       /*
+        * XXX Workaround: name_mask() needs a flags argument so that we can
+        * require exactly one value, or we need to provide an API that is
+        * dedicated for single-valued flags.
+        */
+       for (i = 0, junk = mask_style; junk != 0; junk >>= 1)
+           i += (junk & 1);
+       if (i != 1)
+           msg_fatal("bad %s value: %s; specify exactly one value",
+                     VAR_MYNETWORKS_STYLE, var_mynetworks_style);
+
        result = vstring_alloc(20);
        my_addr_list = own_inet_addr_list();
        my_mask_list = own_inet_mask_list();
index 566983e812037f3ad65abcaabf1d9c3068057dfa..358bc932adfbc456217db35b1194f6b26fd7e576 100644 (file)
   */
 extern CLNT_STREAM *rewrite_clnt_stream;
 
+static VSTRING *last_class;
 static VSTRING *last_addr;
 static RESOLVE_REPLY last_reply;
 
@@ -151,6 +152,7 @@ void    resolve_clnt(const char *class, const char *addr, RESOLVE_REPLY *reply)
      * One-entry cache.
      */
     if (last_addr == 0) {
+       last_class = vstring_alloc(10);
        last_addr = vstring_alloc(100);
        resolve_clnt_init(&last_reply);
     }
@@ -169,7 +171,8 @@ void    resolve_clnt(const char *class, const char *addr, RESOLVE_REPLY *reply)
      */
 #define IFSET(flag, text) ((reply->flags & (flag)) ? (text) : "")
 
-    if (*addr && strcmp(addr, STR(last_addr)) == 0) {
+    if (*addr && strcmp(addr, STR(last_addr)) == 0
+       && strcmp(class, STR(last_class)) == 0) {
        vstring_strcpy(reply->transport, STR(last_reply.transport));
        vstring_strcpy(reply->nexthop, STR(last_reply.nexthop));
        vstring_strcpy(reply->recipient, STR(last_reply.recipient));
@@ -246,6 +249,7 @@ void    resolve_clnt(const char *class, const char *addr, RESOLVE_REPLY *reply)
     /*
      * Update the cache.
      */
+    vstring_strcpy(last_class, class);
     vstring_strcpy(last_addr, addr);
     vstring_strcpy(last_reply.transport, STR(reply->transport));
     vstring_strcpy(last_reply.nexthop, STR(reply->nexthop));
@@ -267,6 +271,7 @@ void    resolve_clnt_free(RESOLVE_REPLY *reply)
 #include <stdlib.h>
 #include <msg_vstream.h>
 #include <vstring_vstream.h>
+#include <split_at.h>
 #include <mail_conf.h>
 
 static NORETURN usage(char *myname)
@@ -274,7 +279,7 @@ static NORETURN usage(char *myname)
     msg_fatal("usage: %s [-v] [address...]", myname);
 }
 
-static void resolve(char *addr, RESOLVE_REPLY *reply)
+static void resolve(char *class, char *addr, RESOLVE_REPLY *reply)
 {
     struct RESOLVE_FLAG_TABLE {
        int     flag;
@@ -294,10 +299,11 @@ static void resolve(char *addr, RESOLVE_REPLY *reply)
     };
     struct RESOLVE_FLAG_TABLE *fp;
 
-    resolve_clnt_query(addr, reply);
+    resolve_clnt(class, addr, reply);
     if (reply->flags & RESOLVE_FLAG_FAIL) {
        vstream_printf("request failed\n");
     } else {
+       vstream_printf("%-10s %s\n", "class", class);
        vstream_printf("%-10s %s\n", "address", addr);
        vstream_printf("%-10s %s\n", "transport", STR(reply->transport));
        vstream_printf("%-10s %s\n", "nexthop", *STR(reply->nexthop) ?
@@ -320,6 +326,7 @@ static void resolve(char *addr, RESOLVE_REPLY *reply)
 int     main(int argc, char **argv)
 {
     RESOLVE_REPLY reply;
+    char   *addr;
     int     ch;
 
     msg_vstream_init(argv[0], VSTREAM_ERR);
@@ -341,15 +348,17 @@ int     main(int argc, char **argv)
     resolve_clnt_init(&reply);
 
     if (argc > optind) {
-       while (argv[optind]) {
-           resolve(argv[optind], &reply);
-           optind++;
+       while (argv[optind] && argv[optind + 1]) {
+           resolve(argv[optind], argv[optind + 1], &reply);
+           optind += 2;
        }
     } else {
        VSTRING *buffer = vstring_alloc(1);
 
        while (vstring_fgets_nonl(buffer, VSTREAM_IN)) {
-           resolve(STR(buffer), &reply);
+           if ((addr = split_at(STR(buffer), ' ')) == 0 || *STR(buffer) == 0)
+               msg_fatal("need as input: class address");
+           resolve(STR(buffer), addr, &reply);
        }
        vstring_free(buffer);
     }
index d44aa3d6be2600c6e4cdb6b2306d97a1063c10d4..8368a42ff2d5c338c18aa06aff129ce4ffc6efdf 100644 (file)
@@ -1,45 +1,49 @@
-
-@
-@@
-@a.
-@..
-@.@.
-!
-a!
-!b
-a!b
-!@
-a!@
-!b@
-a!b@
-%
-a%
-%b
-a%b
-%@
-a%@
-%b@
-@@
-a@@
-@b@
-a@b@
-a%b@
-a%b@MYHOSTNAME
-a!b@MYHOSTNAME
-a@b@MYHOSTNAME
-a[b]@MYHOSTNAME@MYHOSTNAME
-a[b]%MYHOSTNAME@MYHOSTNAME
-a[b]%MYHOSTNAME%MYHOSTNAME
-MYHOSTNAME!a[b]@MYHOSTNAME
-MYHOSTNAME!a[b]%MYHOSTNAME
-MYHOSTNAME!MYHOSTNAME!a[b]
-user@dom.ain1@dom.ain2
-user%dom.ain1@dom.ain2
-dom.ain1!user@dom.ain2
-user@[1.2.3.4]@dom.ain2
-user%[1.2.3.4]@dom.ain2
-[1.2.3.4]!user@dom.ain2
-user@localhost.MYDOMAIN
-user@[321.1.2.3]
-user@1.2.3
-user@host:port
+resolve 
+resolve @
+resolve @@
+resolve @a.
+resolve @..
+resolve @.@.
+resolve !
+resolve a!
+resolve !b
+resolve a!b
+resolve !@
+resolve a!@
+resolve !b@
+resolve a!b@
+resolve %
+resolve a%
+resolve %b
+resolve a%b
+resolve %@
+resolve a%@
+resolve %b@
+resolve @@
+resolve a@@
+resolve @b@
+resolve a@b@
+resolve a%b@
+resolve a%b@MYHOSTNAME
+resolve a!b@MYHOSTNAME
+resolve a@b@MYHOSTNAME
+resolve a[b]@MYHOSTNAME@MYHOSTNAME
+resolve a[b]%MYHOSTNAME@MYHOSTNAME
+resolve a[b]%MYHOSTNAME%MYHOSTNAME
+resolve MYHOSTNAME!a[b]@MYHOSTNAME
+resolve MYHOSTNAME!a[b]%MYHOSTNAME
+resolve MYHOSTNAME!MYHOSTNAME!a[b]
+resolve user@dom.ain1@dom.ain2
+resolve user%dom.ain1@dom.ain2
+resolve dom.ain1!user@dom.ain2
+resolve user@[1.2.3.4]@dom.ain2
+resolve user%[1.2.3.4]@dom.ain2
+resolve [1.2.3.4]!user@dom.ain2
+resolve user@localhost.MYDOMAIN
+resolve user@[321.1.2.3]
+resolve user@1.2.3
+resolve user@host:port
+resolve user@host
+resolve user@host
+verify user@host
+verify user@host
index c4d69084e7000b400f44553b2bc3afa6af7aaf2e..4a28f50c4dd88256dfd9fe8eb923da0b29131af9 100644 (file)
+class      resolve
 address    
 transport  local
-nexthop    MYHOSTNAME
-recipient  MAILER-DAEMON@MYHOSTNAME
+nexthop    tail.porcupine.org
+recipient  MAILER-DAEMON@tail.porcupine.org
 flags      CLASS_LOCAL 
 
+class      resolve
 address    @
 transport  local
-nexthop    MYHOSTNAME
-recipient  MAILER-DAEMON@MYHOSTNAME
+nexthop    tail.porcupine.org
+recipient  MAILER-DAEMON@tail.porcupine.org
 flags      CLASS_LOCAL 
 
+class      resolve
 address    @@
 transport  local
-nexthop    MYHOSTNAME
-recipient  MAILER-DAEMON@MYHOSTNAME
+nexthop    tail.porcupine.org
+recipient  MAILER-DAEMON@tail.porcupine.org
 flags      CLASS_LOCAL 
 
+class      resolve
 address    @a.
 transport  smtp
-nexthop    RELAYHOST
+nexthop    porcupine.org
 recipient  @a
 flags      CLASS_DEFAULT 
 
+class      resolve
 address    @..
-transport  smtp
-nexthop    RELAYHOST
+transport  CHANNEL NOT UPDATED
+nexthop    NEXTHOP NOT UPDATED
 recipient  @..
 flags      FLAG_ERROR CLASS_DEFAULT 
 
+class      resolve
 address    @.@.
-transport  smtp
-nexthop    RELAYHOST
+transport  CHANNEL NOT UPDATED
+nexthop    NEXTHOP NOT UPDATED
 recipient  @.@.
-flags      FLAG_ROUTED FLAG_ERROR CLASS_DEFAULT 
+flags      FLAG_ERROR CLASS_DEFAULT 
 
+class      resolve
 address    !
 transport  local
-nexthop    MYHOSTNAME
-recipient  MAILER-DAEMON@MYHOSTNAME
+nexthop    tail.porcupine.org
+recipient  MAILER-DAEMON@tail.porcupine.org
 flags      CLASS_LOCAL 
 
+class      resolve
 address    a!
 transport  smtp
-nexthop    RELAYHOST
-recipient  @a.MYDOMAIN
+nexthop    porcupine.org
+recipient  @a.porcupine.org
 flags      CLASS_DEFAULT 
 
+class      resolve
 address    !b
 transport  local
-nexthop    MYHOSTNAME
-recipient  b@MYHOSTNAME
+nexthop    tail.porcupine.org
+recipient  b@tail.porcupine.org
 flags      CLASS_LOCAL 
 
+class      resolve
 address    a!b
 transport  smtp
-nexthop    RELAYHOST
-recipient  b@a.MYDOMAIN
+nexthop    porcupine.org
+recipient  b@a.porcupine.org
 flags      CLASS_DEFAULT 
 
+class      resolve
 address    !@
 transport  local
-nexthop    MYHOSTNAME
-recipient  MAILER-DAEMON@MYHOSTNAME
+nexthop    tail.porcupine.org
+recipient  MAILER-DAEMON@tail.porcupine.org
 flags      CLASS_LOCAL 
 
+class      resolve
 address    a!@
 transport  smtp
-nexthop    RELAYHOST
-recipient  @a.MYDOMAIN
+nexthop    porcupine.org
+recipient  @a.porcupine.org
 flags      CLASS_DEFAULT 
 
+class      resolve
 address    !b@
 transport  local
-nexthop    MYHOSTNAME
-recipient  b@MYHOSTNAME
+nexthop    tail.porcupine.org
+recipient  b@tail.porcupine.org
 flags      CLASS_LOCAL 
 
+class      resolve
 address    a!b@
 transport  smtp
-nexthop    RELAYHOST
-recipient  b@a.MYDOMAIN
+nexthop    porcupine.org
+recipient  b@a.porcupine.org
 flags      CLASS_DEFAULT 
 
+class      resolve
 address    %
 transport  local
-nexthop    MYHOSTNAME
-recipient  MAILER-DAEMON@MYHOSTNAME
+nexthop    tail.porcupine.org
+recipient  MAILER-DAEMON@tail.porcupine.org
 flags      CLASS_LOCAL 
 
+class      resolve
 address    a%
 transport  local
-nexthop    MYHOSTNAME
-recipient  a@MYHOSTNAME
+nexthop    tail.porcupine.org
+recipient  a@tail.porcupine.org
 flags      CLASS_LOCAL 
 
+class      resolve
 address    %b
 transport  smtp
-nexthop    RELAYHOST
-recipient  @b.MYDOMAIN
+nexthop    porcupine.org
+recipient  @b.porcupine.org
 flags      CLASS_DEFAULT 
 
+class      resolve
 address    a%b
 transport  smtp
-nexthop    RELAYHOST
-recipient  a@b.MYDOMAIN
+nexthop    porcupine.org
+recipient  a@b.porcupine.org
 flags      CLASS_DEFAULT 
 
+class      resolve
 address    %@
 transport  local
-nexthop    MYHOSTNAME
-recipient  MAILER-DAEMON@MYHOSTNAME
+nexthop    tail.porcupine.org
+recipient  MAILER-DAEMON@tail.porcupine.org
 flags      CLASS_LOCAL 
 
+class      resolve
 address    a%@
 transport  local
-nexthop    MYHOSTNAME
-recipient  a@MYHOSTNAME
+nexthop    tail.porcupine.org
+recipient  a@tail.porcupine.org
 flags      CLASS_LOCAL 
 
+class      resolve
 address    %b@
 transport  smtp
-nexthop    RELAYHOST
-recipient  @b.MYDOMAIN
+nexthop    porcupine.org
+recipient  @b.porcupine.org
 flags      CLASS_DEFAULT 
 
+class      resolve
 address    @@
 transport  local
-nexthop    MYHOSTNAME
-recipient  MAILER-DAEMON@MYHOSTNAME
+nexthop    tail.porcupine.org
+recipient  MAILER-DAEMON@tail.porcupine.org
 flags      CLASS_LOCAL 
 
+class      resolve
 address    a@@
 transport  local
-nexthop    MYHOSTNAME
-recipient  a@MYHOSTNAME
+nexthop    tail.porcupine.org
+recipient  a@tail.porcupine.org
 flags      CLASS_LOCAL 
 
+class      resolve
 address    @b@
 transport  smtp
-nexthop    RELAYHOST
-recipient  @b.MYDOMAIN
+nexthop    porcupine.org
+recipient  @b.porcupine.org
 flags      CLASS_DEFAULT 
 
+class      resolve
 address    a@b@
 transport  smtp
-nexthop    RELAYHOST
-recipient  a@b.MYDOMAIN
+nexthop    porcupine.org
+recipient  a@b.porcupine.org
 flags      CLASS_DEFAULT 
 
+class      resolve
 address    a%b@
 transport  smtp
-nexthop    RELAYHOST
-recipient  a@b.MYDOMAIN
+nexthop    porcupine.org
+recipient  a@b.porcupine.org
 flags      CLASS_DEFAULT 
 
-address    a%b@MYHOSTNAME
+class      resolve
+address    a%b@tail.porcupine.org
 transport  smtp
-nexthop    RELAYHOST
-recipient  a@b.MYDOMAIN
+nexthop    porcupine.org
+recipient  a@b.porcupine.org
 flags      CLASS_DEFAULT 
 
-address    a!b@MYHOSTNAME
+class      resolve
+address    a!b@tail.porcupine.org
 transport  smtp
-nexthop    RELAYHOST
-recipient  b@a.MYDOMAIN
+nexthop    porcupine.org
+recipient  b@a.porcupine.org
 flags      CLASS_DEFAULT 
 
-address    a@b@MYHOSTNAME
+class      resolve
+address    a@b@tail.porcupine.org
 transport  smtp
-nexthop    RELAYHOST
-recipient  a@b.MYDOMAIN
+nexthop    porcupine.org
+recipient  a@b.porcupine.org
 flags      CLASS_DEFAULT 
 
-address    a[b]@MYHOSTNAME@MYHOSTNAME
+class      resolve
+address    a[b]@tail.porcupine.org@tail.porcupine.org
 transport  local
-nexthop    MYHOSTNAME
-recipient  a[b]@MYHOSTNAME
+nexthop    tail.porcupine.org
+recipient  a[b]@tail.porcupine.org
 flags      CLASS_LOCAL 
 
-address    a[b]%MYHOSTNAME@MYHOSTNAME
+class      resolve
+address    a[b]%tail.porcupine.org@tail.porcupine.org
 transport  local
-nexthop    MYHOSTNAME
-recipient  a[b]@MYHOSTNAME
+nexthop    tail.porcupine.org
+recipient  a[b]@tail.porcupine.org
 flags      CLASS_LOCAL 
 
-address    a[b]%MYHOSTNAME%MYHOSTNAME
+class      resolve
+address    a[b]%tail.porcupine.org%tail.porcupine.org
 transport  local
-nexthop    MYHOSTNAME
-recipient  a[b]@MYHOSTNAME
+nexthop    tail.porcupine.org
+recipient  a[b]@tail.porcupine.org
 flags      CLASS_LOCAL 
 
-address    MYHOSTNAME!a[b]@MYHOSTNAME
+class      resolve
+address    tail.porcupine.org!a[b]@tail.porcupine.org
 transport  local
-nexthop    MYHOSTNAME
-recipient  a [b]@MYHOSTNAME
+nexthop    tail.porcupine.org
+recipient  a [b]@tail.porcupine.org
 flags      CLASS_LOCAL 
 
-address    MYHOSTNAME!a[b]%MYHOSTNAME
+class      resolve
+address    tail.porcupine.org!a[b]%tail.porcupine.org
 transport  local
-nexthop    MYHOSTNAME
-recipient  a [b]@MYHOSTNAME
+nexthop    tail.porcupine.org
+recipient  a [b]@tail.porcupine.org
 flags      CLASS_LOCAL 
 
-address    MYHOSTNAME!MYHOSTNAME!a[b]
+class      resolve
+address    tail.porcupine.org!tail.porcupine.org!a[b]
 transport  local
-nexthop    MYHOSTNAME
-recipient  a [b]@MYHOSTNAME
+nexthop    tail.porcupine.org
+recipient  a [b]@tail.porcupine.org
 flags      CLASS_LOCAL 
 
+class      resolve
 address    user@dom.ain1@dom.ain2
 transport  smtp
-nexthop    RELAYHOST
+nexthop    porcupine.org
 recipient  user@dom.ain1@dom.ain2
 flags      FLAG_ROUTED CLASS_DEFAULT 
 
+class      resolve
 address    user%dom.ain1@dom.ain2
 transport  smtp
-nexthop    RELAYHOST
+nexthop    porcupine.org
 recipient  user%dom.ain1@dom.ain2
 flags      FLAG_ROUTED CLASS_DEFAULT 
 
+class      resolve
 address    dom.ain1!user@dom.ain2
 transport  smtp
-nexthop    RELAYHOST
+nexthop    porcupine.org
 recipient  dom.ain1!user@dom.ain2
 flags      FLAG_ROUTED CLASS_DEFAULT 
 
+class      resolve
 address    user@[1.2.3.4]@dom.ain2
 transport  smtp
-nexthop    RELAYHOST
+nexthop    porcupine.org
 recipient  user@[1.2.3.4]@dom.ain2
 flags      FLAG_ROUTED CLASS_DEFAULT 
 
+class      resolve
 address    user%[1.2.3.4]@dom.ain2
 transport  smtp
-nexthop    RELAYHOST
+nexthop    porcupine.org
 recipient  user%[1.2.3.4]@dom.ain2
 flags      FLAG_ROUTED CLASS_DEFAULT 
 
+class      resolve
 address    [1.2.3.4]!user@dom.ain2
 transport  smtp
-nexthop    RELAYHOST
+nexthop    porcupine.org
 recipient  [1.2.3.4]!user@dom.ain2
 flags      FLAG_ROUTED CLASS_DEFAULT 
 
-address    user@localhost.MYDOMAIN
+class      resolve
+address    user@localhost.porcupine.org
 transport  local
-nexthop    MYHOSTNAME
-recipient  user@localhost.MYDOMAIN
+nexthop    tail.porcupine.org
+recipient  user@localhost.porcupine.org
 flags      CLASS_LOCAL 
 
+class      resolve
 address    user@[321.1.2.3]
-transport  smtp
-nexthop    RELAYHOST
+transport  CHANNEL NOT UPDATED
+nexthop    NEXTHOP NOT UPDATED
 recipient  user@[321.1.2.3]
 flags      FLAG_ERROR CLASS_DEFAULT 
 
+class      resolve
 address    user@1.2.3
 transport  smtp
-nexthop    RELAYHOST
+nexthop    porcupine.org
 recipient  user@1.2.3
 flags      CLASS_DEFAULT 
 
+class      resolve
 address    user@host:port
-transport  smtp
-nexthop    RELAYHOST
+transport  CHANNEL NOT UPDATED
+nexthop    NEXTHOP NOT UPDATED
 recipient  user@host:port
 flags      FLAG_ERROR CLASS_DEFAULT 
 
+class      resolve
+address    user@host
+transport  smtp
+nexthop    porcupine.org
+recipient  user@host
+flags      CLASS_DEFAULT 
+
+class      resolve
+address    user@host
+transport  smtp
+nexthop    porcupine.org
+recipient  user@host
+flags      CLASS_DEFAULT 
+
+class      verify
+address    user@host
+transport  smtp
+nexthop    porcupine.org
+recipient  user@host
+flags      CLASS_DEFAULT 
+
+class      verify
+address    user@host
+transport  smtp
+nexthop    porcupine.org
+recipient  user@host
+flags      CLASS_DEFAULT 
+
index 6b70baaef29fc75982022515a40c634311704ebf..ac28d25463c2129ac07cb9002b8e5748cbc0afad 100644 (file)
@@ -72,6 +72,7 @@
   */
 CLNT_STREAM *rewrite_clnt_stream = 0;
 
+static VSTRING *last_rule;
 static VSTRING *last_addr;
 static VSTRING *last_result;
 
@@ -85,6 +86,7 @@ VSTRING *rewrite_clnt(const char *rule, const char *addr, VSTRING *result)
      * One-entry cache.
      */
     if (last_addr == 0) {
+       last_rule = vstring_alloc(10);
        last_addr = vstring_alloc(100);
        last_result = vstring_alloc(100);
     }
@@ -102,10 +104,9 @@ VSTRING *rewrite_clnt(const char *rule, const char *addr, VSTRING *result)
 
     /*
      * Peek at the cache.
-     * 
-     * XXX Must be made "rule" specific.
      */
-    if (strcmp(addr, STR(last_addr)) == 0) {
+    if (strcmp(addr, STR(last_addr)) == 0
+       && strcmp(rule, STR(last_rule)) == 0) {
        vstring_strcpy(result, STR(last_result));
        if (msg_verbose)
            msg_info("rewrite_clnt: cached: %s: %s -> %s",
@@ -152,6 +153,7 @@ VSTRING *rewrite_clnt(const char *rule, const char *addr, VSTRING *result)
     /*
      * Update the cache.
      */
+    vstring_strcpy(last_rule, rule);
     vstring_strcpy(last_addr, addr);
     vstring_strcpy(last_result, STR(result));
 
index e2829406f0f463e33e879a7ed6e92e99ea1f0652..623013be5346a689d62faaf6a65180fe9a41d34b 100644 (file)
@@ -142,7 +142,8 @@ int     vverify_append(const char *queue_id, const char *orig_rcpt,
      */
     vstring_vsprintf(text, fmt, ap);
     if (var_verify_neg_cache || rcpt_stat == DEL_RCPT_STAT_OK) {
-       req_stat = verify_clnt_vupdate(orig_rcpt, rcpt_stat, fmt, ap);
+       req_stat = verify_clnt_update(orig_rcpt, rcpt_stat,
+                                     "%s", vstring_str(text));
        if (req_stat == VRFY_STAT_OK && strcasecmp(recipient, orig_rcpt) != 0)
            req_stat = verify_clnt_update(recipient, rcpt_stat,
                                          "%s", vstring_str(text));
index b9e61f542ae02adcd1f31cd0dfbeeb0b2a684645..2f41f29dd8557576be12c42abb082b76e021ce82 100644 (file)
@@ -811,6 +811,11 @@ static void mail_reset(SMTPD_STATE *);
 static void rcpt_reset(SMTPD_STATE *);
 static void chat_reset(SMTPD_STATE *, int);
 
+ /*
+  * This filter is applied after printable().
+  */
+#define NEUTER_CHARACTERS " <>()\\\";:@"
+
 #ifdef USE_SASL_AUTH
 
  /*
@@ -882,7 +887,7 @@ static int helo_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv)
     mail_reset(state);
     rcpt_reset(state);
     state->helo_name = mystrdup(printable(argv[1].strval, '?'));
-    neuter(state->helo_name, "<>()\\\";:@", '?');
+    neuter(state->helo_name, NEUTER_CHARACTERS, '?');
     /* Downgrading the protocol name breaks the unauthorized pipelining test. */
     if (strcasecmp(state->protocol, MAIL_PROTO_ESMTP) != 0
        && strcasecmp(state->protocol, MAIL_PROTO_SMTP) != 0) {
@@ -923,7 +928,7 @@ static int ehlo_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv)
     mail_reset(state);
     rcpt_reset(state);
     state->helo_name = mystrdup(printable(argv[1].strval, '?'));
-    neuter(state->helo_name, "<>()\\\";:@", '?');
+    neuter(state->helo_name, NEUTER_CHARACTERS, '?');
     if (strcasecmp(state->protocol, MAIL_PROTO_ESMTP) != 0) {
        myfree(state->protocol);
        state->protocol = mystrdup(MAIL_PROTO_ESMTP);
@@ -2012,7 +2017,6 @@ static int xclient_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv)
            if (s) myfree(s); \
            s = (v) ? mystrdup(v) : 0; \
        } while(0)
-#define NEUTER_CHARACTERS "<>()\\\";:@"
 
     /*
      * Iterate over all attribute=value elements.