]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-2.3-20050630
authorWietse Venema <wietse@porcupine.org>
Thu, 30 Jun 2005 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <viktor@dukhovni.org>
Tue, 5 Feb 2013 06:31:19 +0000 (06:31 +0000)
postfix/HISTORY
postfix/RELEASE_NOTES
postfix/examples/smtpd-policy/spf.pl [changed mode: 0755->0644]
postfix/html/smtp-sink.1.html
postfix/man/man1/smtp-sink.1
postfix/src/global/mail_version.h
postfix/src/scache/scache.c
postfix/src/smtpstone/smtp-sink.c
postfix/src/util/unix_recv_fd.c
postfix/src/util/unix_send_fd.c

index 3ee2150d707c401804039aeeb97a080d59839e65..aba7fed550904dc76d70544780aff527741d825b 100644 (file)
@@ -10935,13 +10935,13 @@ Apologies for any names omitted.
        the base64 and plain attribute I/O encodings. Files:
        util/attr_scan_plain.c util/attr_print_plain.c.
 
-20040624
+20050624
 
        Added "." to the list commands that smtp-sink can "break"
        (by disconnecting, or by responding with a 4XX or 5XX reply
        code). File: smtpstone/smtp-sink.c.
 
-20040625
+20050625
 
        Safety: allow only 4.x.x and 5.x.x enhanced status codes
        in header/body_checks REJECT actions. File:
@@ -10959,6 +10959,14 @@ Apologies for any names omitted.
        to complete the TCP, SMTP, EHLO or TLS handshake (was: TCP
        and SMTP).  File: smtp/smtp_proto.c.
 
+20050630
+
+       Updated the example spf.pl script to version 1.06.
+
+       Portability: the file descriptor passing code broke on LP64
+       systems (inherited from Stevens Network Programming).  Files:
+       util/unix_send_fd.c, util/unix_recv_fd.c.
+
 Open problems:
 
        Look for systems with XPG basename() declared in <libgen.h>,
index ffca91291d407ac96b97ceff869ebd4beccb7310..9e87262eef589883c183a289ee41c9202aa55525 100644 (file)
@@ -33,7 +33,7 @@ disabled by default. The new limit prevents Postfix from spending
 lots of time trying to connect to lots of bogus MX servers.
 
 The Postfix SMTP error handling of [45]XX server greetings was
-cleaned up. The server reply is now properly reported. 
+cleaned up. The server reply is now properly reported.
 
 Incompatibility with snapshot 20050615
 ======================================
old mode 100755 (executable)
new mode 100644 (file)
index f48b8ac..eb5d368
@@ -3,7 +3,7 @@
 # mengwong@pobox.com
 # Wed Dec 10 03:52:04 EST 2003
 # postfix-policyd-spf
-# version 1.03
+# version 1.06
 # see http://spf.pobox.com/
 
 use Fcntl;
@@ -15,11 +15,10 @@ use strict;
 # ----------------------------------------------------------
 
 # to use SPF, install Mail::SPF::Query from CPAN or from the SPF website at http://spf.pobox.com/downloads.html
-# then uncomment the SPF line.
 
   my @HANDLERS;
   push @HANDLERS, "testing";
-# push @HANDLERS, "sender_permitted_from"; use Mail::SPF::Query;
+  push @HANDLERS, "sender_permitted_from"; use Mail::SPF::Query;
 
 my $VERBOSE = 1;
 
@@ -72,6 +71,7 @@ my $syslog_ident    = "postfix/policy-spf";
 #
 #    smtpd_recipient_restrictions =
 #      ...
+#       reject_unknown_sender_domain
 #      reject_unauth_destination
 #      check_policy_service unix:private/policy
 #      ...
@@ -123,7 +123,7 @@ my $syslog_ident    = "postfix/policy-spf";
 #
 sub fatal_exit {
   syslog(err  => "fatal_exit: @_");
-  syslog(warn => "fatal_exit: @_");
+  syslog(warning => "fatal_exit: @_");
   syslog(info => "fatal_exit: @_");
   die "fatal: @_";
 }
@@ -151,7 +151,7 @@ my %attr;
 while (<STDIN>) {
   chomp;
   if (/=/)       { my ($k, $v) = split (/=/, $_, 2); $attr{$k} = $v; next }
-  elsif (length) { syslog(warn=>sprintf("warning: ignoring garbage: %.100s", $_)); next; }
+  elsif (length) { syslog(warning=>sprintf("warning: ignoring garbage: %.100s", $_)); next; }
 
   if ($VERBOSE) {
     for (sort keys %attr) {
@@ -186,9 +186,14 @@ sub sender_permitted_from {
   local %_ = @_;
   my %attr = %{ $_{attr} };
 
-  my $query = new Mail::SPF::Query (ip    =>$attr{client_address},
-                                   sender=>$attr{sender},
-                                   helo  =>$attr{helo_name});
+  my $query = eval { new Mail::SPF::Query (ip    =>$attr{client_address},
+                                          sender=>$attr{sender},
+                                          helo  =>$attr{helo_name}) };
+  if ($@) {
+    syslog(info=>"%s: Mail::SPF::Query->new(%s, %s, %s) failed: %s",
+          $attr{queue_id}, $attr{client_address}, $attr{sender}, $attr{helo_name}, $@); 
+    return "DUNNO";
+  }
   my ($result, $smtp_comment, $header_comment) = $query->result();
 
   syslog(info=>"%s: SPF %s: smtp_comment=%s, header_comment=%s",
@@ -198,7 +203,7 @@ sub sender_permitted_from {
   elsif ($result eq "fail")  { return "REJECT " . ($smtp_comment || $header_comment); }
   elsif ($result eq "error") { return "450 temporary failure: $smtp_comment"; }
   else                       { return "DUNNO"; }
-  # unknown, softfail, and none all return DUNNO
+  # unknown, softfail, neutral and none all return DUNNO
 
   # TODO XXX: prepend Received-SPF header.  Wietse says he will add that functionality soon.
 }
index 6110c80655e7e62dbae951ec394f64135cdf5c25..3dfe0f56fa21dd2cfe7ef1f5b884582203d3b4ed 100644 (file)
@@ -37,8 +37,9 @@ SMTP-SINK(1)                                                      SMTP-SINK(1)
 
        <b>-a</b>     Do not announce SASL authentication support.
 
-       <b>-c</b>     Display  a running counter that is updated whenever
-              an SMTP QUIT command is executed.
+       <b>-c</b>     Display  running counters that are updated whenever
+              an SMTP session ends, a QUIT command  is  executed,
+              or when "." is received.
 
        <b>-C</b>     Disable XCLIENT support.
 
@@ -47,20 +48,20 @@ SMTP-SINK(1)                                                      SMTP-SINK(1)
        <b>-E</b>     Do not announce ENHANCEDSTATUSCODES support.
 
        <b>-f</b> <i>command,command,...</i>
-              Reject the specified commands  with  a  hard  (5xx)
+              Reject  the  specified  commands  with a hard (5xx)
               error code.  This option implies <b>-p</b>.
 
-              Examples  of  commands  are HELO, EHLO, LHLO, MAIL,
+              Examples of commands are HELO,  EHLO,  LHLO,  MAIL,
               RCPT, VRFY, DATA, ., RSET, NOOP, and QUIT. Separate
-              command  names  by  white  space or commas, and use
-              quotes to protect white space from the shell.  Com-
+              command names by white space  or  commas,  and  use
+              quotes  to protect white space from the shell. Com-
               mand names are case-insensitive.
 
        <b>-F</b>     Disable XFORWARD support.
 
        <b>-h</b> <i>hostname</i>
-              Use  <i>hostname</i>  in  the  SMTP  greeting, in the HELO
-              response, and in the  EHLO  response.  The  default
+              Use <i>hostname</i> in the  SMTP  greeting,  in  the  HELO
+              response,  and  in  the  EHLO response. The default
               hostname is "smtp-sink".
 
        <b>-L</b>     Enable LMTP instead of SMTP.
@@ -69,44 +70,44 @@ SMTP-SINK(1)                                                      SMTP-SINK(1)
               Terminate after <i>count</i> sessions. This is for testing
               purposes.
 
-       <b>-p</b>     Do not announce support for ESMTP command  pipelin-
+       <b>-p</b>     Do  not announce support for ESMTP command pipelin-
               ing.
 
-       <b>-P</b>     Change  the  server  greeting so that it appears to
+       <b>-P</b>     Change the server greeting so that  it  appears  to
               come through a CISCO PIX system. Implies <b>-e</b>.
 
        <b>-q</b> <i>command,command,...</i>
-              Disconnect (without replying) after  receiving  one
+              Disconnect  (without  replying) after receiving one
               of the specified commands.
 
-              Examples  of  commands  are HELO, EHLO, LHLO, MAIL,
+              Examples of commands are HELO,  EHLO,  LHLO,  MAIL,
               RCPT, VRFY, DATA, ., RSET, NOOP, and QUIT. Separate
-              command  names  by  white  space or commas, and use
-              quotes to protect white space from the shell.  Com-
+              command names by white space  or  commas,  and  use
+              quotes  to protect white space from the shell. Com-
               mand names are case-insensitive.
 
        <b>-r</b> <i>command,command,...</i>
-              Reject  the  specified  commands  with a soft (4xx)
+              Reject the specified commands  with  a  soft  (4xx)
               error code.  This option implies <b>-p</b>.
 
-              Examples of commands are HELO,  EHLO,  LHLO,  MAIL,
+              Examples  of  commands  are HELO, EHLO, LHLO, MAIL,
               RCPT, VRFY, DATA, ., RSET, NOOP, and QUIT. Separate
-              command names by white space  or  commas,  and  use
-              quotes  to protect white space from the shell. Com-
+              command  names  by  white  space or commas, and use
+              quotes to protect white space from the shell.  Com-
               mand names are case-insensitive.
 
        <b>-s</b> <i>command,command,...</i>
               Log the named commands to syslogd.
 
-              Examples of commands are HELO,  EHLO,  LHLO,  MAIL,
+              Examples  of  commands  are HELO, EHLO, LHLO, MAIL,
               RCPT, VRFY, DATA, ., RSET, NOOP, and QUIT. Separate
-              command names by white space  or  commas,  and  use
-              quotes  to protect white space from the shell. Com-
+              command  names  by  white  space or commas, and use
+              quotes to protect white space from the shell.  Com-
               mand names are case-insensitive.
 
        <b>-t</b> <i>timeout</i> (default: 100)
               Limit the time for receiving a command or sending a
-              response.   The time limit is specified in seconds.
+              response.  The time limit is specified in  seconds.
 
        <b>-v</b>     Show the SMTP conversations.
 
@@ -115,7 +116,7 @@ SMTP-SINK(1)                                                      SMTP-SINK(1)
               mand.
 
        [<b>inet:</b>][<i>host</i>]:<i>port</i>
-              Listen  on  network  interface  <i>host</i>  (default: any
+              Listen on  network  interface  <i>host</i>  (default:  any
               interface) TCP port <i>port</i>. Both <i>host</i> and <i>port</i> may be
               specified in numeric or symbolic form.
 
@@ -123,14 +124,14 @@ SMTP-SINK(1)                                                      SMTP-SINK(1)
               Listen on the UNIX-domain socket at <i>pathname</i>.
 
        <i>backlog</i>
-              The  maximum  length  the  queue of pending connec-
+              The maximum length the  queue  of  pending  connec-
               tions, as defined by the <b>listen</b>(2) system call.
 
 <b>SEE ALSO</b>
        <a href="smtp-source.1.html">smtp-source(1)</a>, SMTP/LMTP message generator
 
 <b>LICENSE</b>
-       The Secure Mailer license must be  distributed  with  this
+       The  Secure  Mailer  license must be distributed with this
        software.
 
 <b>AUTHOR(S)</b>
index 77cd22c5e3614be16b36a2607679598b0178a590..9d84729f0cdf415c898cb49a8ae476d0f916a374 100644 (file)
@@ -38,8 +38,9 @@ Do not announce 8BITMIME support.
 .IP \fB-a\fR
 Do not announce SASL authentication support.
 .IP \fB-c\fR
-Display a running counter that is updated whenever an SMTP
-QUIT command is executed.
+Display running counters that are updated whenever an SMTP
+session ends, a QUIT command is executed, or when "." is
+received.
 .IP \fB-C\fR
 Disable XCLIENT support.
 .IP \fB-e\fR
index bd8e503cd4f09a74aa0c606df29ed4191a29de68..9db66ece7bfc3423688e34c622c70349d6c44cbb 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      "20050629"
+#define MAIL_RELEASE_DATE      "20050630"
 #define MAIL_VERSION_NUMBER    "2.3"
 
 #define VAR_MAIL_VERSION       "mail_version"
index f3d27fa62ed35f13f65d7959a4d20ec36fc399f1..8687a8ab21c7e929edad4ea0628f1dbcfc34331d 100644 (file)
@@ -240,7 +240,7 @@ static void scache_save_endp_service(VSTREAM *client_stream)
               ||
 #endif
               (fd = LOCAL_RECV_FD(vstream_fileno(client_stream))) < 0) {
-       msg_warn("%s: unable to receive file descriptor", myname);
+       msg_warn("%s: unable to receive file descriptor: %m", myname);
        attr_print(client_stream, ATTR_FLAG_NONE,
                   ATTR_TYPE_NUM, MAIL_ATTR_STATUS, SCACHE_STAT_FAIL,
                   ATTR_TYPE_END);
index a497885c1db5665a75e0e9555cbe70e0f18508dc..024eb0c7dccd6b5e727629c9c4c0a9cfb04e52dc 100644 (file)
@@ -32,8 +32,9 @@
 /* .IP \fB-a\fR
 /*     Do not announce SASL authentication support.
 /* .IP \fB-c\fR
-/*     Display a running counter that is updated whenever an SMTP
-/*     QUIT command is executed.
+/*     Display running counters that are updated whenever an SMTP
+/*     session ends, a QUIT command is executed, or when "." is
+/*     received.
 /* .IP \fB-C\fR
 /*     Disable XCLIENT support.
 /* .IP \fB-e\fR
@@ -178,8 +179,10 @@ static int command_read(SINK_STATE *);
 static int data_read(SINK_STATE *);
 static void disconnect(SINK_STATE *);
 static int count;
-static int counter;
-static int max_count;
+static int sess_count;
+static int quit_count;
+static int mesg_count;
+static int max_quit_count;
 static int disable_pipelining;
 static int disable_8bitmime;
 static int fixed_delay;
@@ -194,6 +197,15 @@ static int disable_enh_status;
 #define SOFT_ERROR_RESP                "450 4.3.0 Error: command failed"
 #define HARD_ERROR_RESP                "500 5.3.0 Error: command failed"
 
+/* do_stats - show counters */
+
+static void do_stats(void)
+{
+    vstream_printf("sess=%d quit=%d mesg=%d\r",
+                  sess_count, quit_count, mesg_count);
+    vstream_fflush(VSTREAM_OUT);
+}
+
 /* hard_err_resp - generic hard error response */
 
 static void hard_err_resp(SINK_STATE *state)
@@ -329,11 +341,8 @@ static void quit_response(SINK_STATE *state)
 {
     smtp_printf(state->stream, "221 Bye");
     smtp_flush(state->stream);
-    if (count) {
-       counter++;
-       vstream_printf("%d\r", counter);
-       vstream_fflush(VSTREAM_OUT);
-    }
+    if (count)
+       quit_count++;
 }
 
 /* data_read - read data from socket */
@@ -381,6 +390,10 @@ static int data_read(SINK_STATE *state)
            PUSH_BACK_SET(state, ".\r\n");
            state->read_fn = command_read;
            state->data_state = ST_ANY;
+           if (count) {
+               mesg_count++;
+               do_stats();
+           }
            break;
        }
 
@@ -665,10 +678,14 @@ static void disconnect(SINK_STATE *state)
 {
     event_disable_readwrite(vstream_fileno(state->stream));
     event_cancel_timer(read_timeout, (char *) state);
+    if (count) {
+       sess_count++;
+       do_stats();
+    }
     vstream_fclose(state->stream);
     vstring_free(state->buffer);
     myfree((char *) state);
-    if (max_count > 0 && counter >= max_count)
+    if (max_quit_count > 0 && quit_count >= max_quit_count)
        exit(0);
 }
 
@@ -805,7 +822,7 @@ int     main(int argc, char **argv)
            enable_lmtp = 1;
            break;
        case 'n':
-           if ((max_count = atoi(optarg)) <= 0)
+           if ((max_quit_count = atoi(optarg)) <= 0)
                msg_fatal("bad count: %s", optarg);
            break;
        case 'p':
index 3fdc5bfcc3e6a9b124db9e404c26631626e25d31..d7fbb7ebab7e0fb7664660a788b5788b7eec7380 100644 (file)
@@ -61,17 +61,18 @@ int     unix_recv_fd(int fd)
 
     /*
      * Adapted from: W. Richard Stevens, UNIX Network Programming, Volume 1,
-     * Second edition.
+     * Second edition. Except that we use CMSG_LEN instead of CMSG_SPACE, for
+     * portability to LP64 environments.
      */
 #if defined(CMSG_SPACE) && !defined(NO_MSGHDR_MSG_CONTROL)
     union {
-       struct msghdr just_for_alignment;
+       struct cmsghdr just_for_alignment;
        char    control[CMSG_SPACE(sizeof(newfd))];
     }       control_un;
     struct cmsghdr *cmptr;
 
     msg.msg_control = control_un.control;
-    msg.msg_controllen = sizeof(control_un.control);
+    msg.msg_controllen = CMSG_LEN(sizeof(newfd));      /* Fix 200506 */
 #else
     msg.msg_accrights = (char *) &newfd;
     msg.msg_accrightslen = sizeof(newfd);
@@ -123,6 +124,8 @@ int     unix_recv_fd(int fd)
   * unix_send_fd test program) and copy its content until EOF.
   */
 #include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
 #include <split_at.h>
 #include <listen.h>
 
index 7c555b77a846ea8ea73903d4cd17017e46cace0f..f913de53e4a5ba7cbdfc6222b05676082330b370 100644 (file)
@@ -63,17 +63,18 @@ int     unix_send_fd(int fd, int sendfd)
 
     /*
      * Adapted from: W. Richard Stevens, UNIX Network Programming, Volume 1,
-     * Second edition.
+     * Second edition. Except that we use CMSG_LEN instead of CMSG_SPACE; the
+     * latter breaks on LP64 systems.
      */
 #if defined(CMSG_SPACE) && !defined(NO_MSGHDR_MSG_CONTROL)
     union {
-       struct msghdr just_for_alignment;
+       struct cmsghdr just_for_alignment;
        char    control[CMSG_SPACE(sizeof(sendfd))];
     }       control_un;
     struct cmsghdr *cmptr;
 
     msg.msg_control = control_un.control;
-    msg.msg_controllen = sizeof(control_un.control);
+    msg.msg_controllen = CMSG_LEN(sizeof(sendfd));     /* Fix 200506 */
 
     cmptr = CMSG_FIRSTHDR(&msg);
     cmptr->cmsg_len = CMSG_LEN(sizeof(sendfd));
@@ -109,6 +110,8 @@ int     unix_send_fd(int fd, int sendfd)
   * to the unix_recv_fd test program.
   */
 #include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
 #include <fcntl.h>
 #include <split_at.h>
 #include <connect.h>