]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
snapshot-20000529
authorWietse Venema <wietse@porcupine.org>
Mon, 29 May 2000 00:00:00 +0000 (00:00 +0000)
committerWietse Venema <wietse@porcupine.org>
Thu, 17 Jan 2013 23:10:49 +0000 (18:10 -0500)
20 files changed:
postfix/HISTORY
postfix/INSPECTION_README [new file with mode: 0644]
postfix/RELEASE_NOTES
postfix/SASL_README
postfix/conf/sample-filter.cf
postfix/global/mail_params.h
postfix/global/mail_version.h
postfix/global/rec_type.c
postfix/global/rec_type.h
postfix/html/pickup.8.html
postfix/html/smtp.8.html
postfix/html/smtpd.8.html
postfix/man/man8/pickup.8
postfix/man/man8/smtp.8
postfix/man/man8/smtpd.8
postfix/pickup/pickup.c
postfix/qmgr/qmgr.h
postfix/qmgr/qmgr_message.c
postfix/smtp/smtp.c
postfix/smtpd/smtpd.c

index 7db3e281760755a6c51f01d467e90f41132125f3..2169e9c81b360c1b7dd5625204b9864a3eb6c8f7 100644 (file)
@@ -4009,3 +4009,12 @@ Apologies for any names omitted.
        feature uses the same filtering syntax as the header_checks
        feature.  File:  cleanup/cleanup_message.c. See also the
        conf/sample-filter.cf file.
+
+20000529
+
+       Feature: full content inspection through external software.
+       This uses existing interfaces for sending and receiving mail
+       from and to the content inspector. Currently, only the SMTP
+       server is suitable for receiving inspected mail. Details
+       in INSPECTION_README. Files: pickup/pickup.c, smtpd/smtpd.c,
+       qmgr/qmgr_message.c.
diff --git a/postfix/INSPECTION_README b/postfix/INSPECTION_README
new file mode 100644 (file)
index 0000000..e9968c1
--- /dev/null
@@ -0,0 +1,77 @@
+This is a very first implementation of Postfix content inspection.
+It involves an incompatible change to queue file formats.  Older
+Postfix versions will move the mail aside to the "corrupt" mail
+queue subdirectory.
+
+The example uses content inspection software that can receive and
+deliver mail via SMTP. At present, Postfix can receive already
+inspected mail only via SMTP. In the future it may become possible
+to submit already filtered mail via the postdrop command. However,
+doing business over SMTP is much less inefficient.
+
+We will set up a content inspector program listening on localhost
+port 10025 that receives mail via the SMTP protocol, and that
+submits mail back into Postfix via localhost port 10026.
+
+      ..................................
+      .            Postfix             .
+   ------smtpd \                /local-----
+      .         -cleanup->queue-       .
+   -----pickup /    ^       |   \smtp------
+      .             |       v          .
+      .           smtpd    smtp        .
+      .           10026     |          .
+      ......................|...........
+                    ^       |
+                    |       v
+                ....|............
+                .   |     10025 .
+                .   inspector   .
+                .               .
+                .................
+
+To enable content inspection in this manner, specify in main.cf a
+new parameter:
+
+    /etc/postfix/main.cf:
+       content_inspector = smtp:localhost:10025
+
+This causes Postfix to add one extra content inspection record to
+each incoming mail message, with content smtp:localhost:10025.
+You can use the same syntax as in the right-hand side of a Postfix
+transport table.  The content inspection records are added by the
+smtpd and pickup servers.
+
+When a queue file has content inspection information, the queue
+manager will deliver the mail to the specified content inspector
+regardless of its final destination.
+
+Setting up the content inspector could be done with the Postfix
+spawn service, to instantiate up to 10 processes on demand:
+
+    /etc/postfix/master.cf:
+       localhost:10025     inet  -      n      n      -      10     spawn
+           user=inspect argv=/some/where/inspect localhost 10026
+
+The spawn server is part of Postfix but is not installed by default.
+Edit the top-level Makefile.in file, run "make makefiles", "make",
+and "make install".
+
+The /some/where/inspect command is most likely a PERL script. PERL
+has modules that make talking SMTP easy. The command-line specifies
+that mail shouldbe sent back into Postfix via localhost port 10026.
+
+The job of the content inspector is to either bounce mail with a
+suitable diagnostic, or to feed the mail back into Postfix through
+a dedicated listener on port localhost 10026:
+
+    /etc/postfix/master.cf:
+        localhost:10026     inet  n      -      n      -      0      smtpd
+           -o content_inspector= myhostname=localhost.domain.name
+
+This is just another SMTP server. It is configured NOT to request
+content inspection for incoming mail, has no process limit (so
+Postfix will not deadlock), and is configured to use a different
+hostname in the greeting message (this is necessary for testing
+when I simply use no inspector program and let the SMTP content
+inspection interfaces talk directly to each other).
index 0a00de788081240b42dfd4556d1c46bc2d5a8376..08047e365f1db9ad2a65fc3592d515b00008d9b0 100644 (file)
@@ -1,4 +1,24 @@
-Major changes with snapshot-20000526
+Incompatible changes with snapshot-20000529
+===========================================
+
+This version introduces an incompatible queue file format change
+when content inspection is enabled. Old Postfix queue files will
+work fine, but new queue files will not work with old Postfix
+versions. They log a warning and move incompatible queue files to
+the "corrupt" mail queue subdirectory.
+
+Major changes with snapshot-20000529
+====================================
+
+This version introduces full content inspection through an external
+process. This involves an incompatible change in queue file format.
+Mail is delivered to content inspection software via an existing
+mail delivery agent, and is re-injected into Postfix via an existing
+mail submission agent.  Presently, only the Postfix SMTP server is
+suitable for receiving already inspected mail. Details in the
+INSPECTION_README file.
+
+Major changes with snapshot-20000528
 ====================================
 
 Specify "body_checks = regexp:/etc/postfix/body_checks" for a quick
index 7c9f18ef70e24d4c25c62cbc820335cd75a83e61..2714879616fb600d05094e19437ce980a1946fa8 100644 (file)
@@ -137,8 +137,8 @@ Enabling SASL authentication in the Postfix SMTP client
 Turn on client-side SASL authentication, and specify a table with
 per-host or per-destination username and password information.
 Postfix first looks up the server hostname; if no entry is found,
-then Postfix looks up the destination domain name (the address
-remote part).
+then Postfix looks up the destination domain name (usually, the
+remote part of an email address).
 
     /etc/postfix/main.cf:
        smtp_sasl_auth_enable = yes
index 5c27373d03b20e219a791b1c19cdffc8b3382259..51903c68ac717e2cf76115f2d243b690e43f6a77 100644 (file)
 # When a pattern matches, and the associated action is REJECT, the
 # entire message is rejected.
 #
+# These patterns do not apply to MIME headers in the message body.
+#
 header_checks = regexp:/etc/postfix/header_checks
 
 # The body_checks parameter specifies an optional table with patterns
-# that each physical non-header line is matched against (including
-# MIME headers inside the message body).  Lines are matched one at
-# a time.  Long lines are matched in chunks of at most $line_length_limit
+# that each physical line in the message body is matched against
+# (including MIME headers inside the message body - Postfix does not
+# recognize multi-line MIME headers).  Lines are matched one at a
+# time.  Long lines are matched in chunks of at most $line_length_limit
 # characters. Patterns are matched in the specified order, and the
 # search stops upon the first match.  When a pattern matches, and
 # the associated action is REJECT, the entire message is rejected.
index 0238a04a5af82577e1e3f4b79820a920b28952d9..a802addf6bdf107544f946a71063286f170d581c 100644 (file)
@@ -1045,6 +1045,14 @@ extern bool var_allow_min_user;
 
 extern void mail_params_init(void);
 
+ /*
+  * Content inspection transport. The things we have to do because some
+  * over-paid peecee programmers could not do a proper job.
+  */
+#define VAR_INSPECT_XPORT              "content_inspector"
+#define DEF_INSPECT_XPORT              ""
+extern char *var_inspect_xport;
+
 /* LICENSE
 /* .ad
 /* .fi
index 3883d430dc42621b95456538ce05e64131244a48..56a44ccf6fe9213b0a6d0d46edc0c2f1c9206e9b 100644 (file)
@@ -15,7 +15,7 @@
   * Version of this program.
   */
 #define VAR_MAIL_VERSION       "mail_version"
-#define DEF_MAIL_VERSION       "Snapshot-20000528"
+#define DEF_MAIL_VERSION       "Snapshot-20000529"
 extern char *var_mail_version;
 
 /* LICENSE
index c03aa1dbabc0f8fec892edcb5a99370f858d2d3e..21684209c1babd1f6c733bac5f99a58f4fe9500c 100644 (file)
@@ -43,6 +43,7 @@ REC_TYPE_NAME rec_type_names[] = {
     REC_TYPE_SIZE, "message_size",
     REC_TYPE_TIME, "time",
     REC_TYPE_FULL, "fullname",
+    REC_TYPE_INSP, "content_inspector",
     REC_TYPE_FROM, "sender",
     REC_TYPE_DONE, "done",
     REC_TYPE_RCPT, "recipient",
index e0e32122e033a9de935418df3a5b94f6b1f5d6aa..135714bfed77b5ba71dfc1a634b86a9b1b94e383 100644 (file)
@@ -28,6 +28,7 @@
 #define REC_TYPE_SIZE  'C'             /* first record, created by cleanup */
 #define REC_TYPE_TIME  'T'             /* time stamp, required */
 #define REC_TYPE_FULL  'F'             /* full name, optional */
+#define REC_TYPE_INSP  'I'             /* inspector transport */
 #define REC_TYPE_FROM  'S'             /* sender, required */
 #define REC_TYPE_DONE  'D'             /* delivered recipient, optional */
 #define REC_TYPE_RCPT  'R'             /* todo recipient, optional */
@@ -51,7 +52,7 @@
   * record groups. The first member in each set is the record type that
   * indicates the end of that record group.
   */
-#define REC_TYPE_ENVELOPE      "MCTFSDRW"
+#define REC_TYPE_ENVELOPE      "MCTFISDRW"
 #define REC_TYPE_CONTENT       "XLN"
 #define REC_TYPE_EXTRACT       "EDRPre"
 #define REC_TYPE_NOEXTRACT     "E"
index bf92b71f82e4890b83837bbc5f7ae3048736931a..c372e6cfda56841e498ea3834b07c8001bff9ec5 100644 (file)
@@ -47,18 +47,18 @@ PICKUP(8)                                               PICKUP(8)
        details  and  for  default  values. Use the <b>postfix</b> <b>reload</b>
        command after a configuration change.
 
+<b>Content</b> <b>inspection</b> <b>controls</b>
+       <b>content</b><i>_</i><b>inspector</b>
+              The name of a mail delivery transport that inspects
+              mail  prior  to  delivery.  This parameter uses the
+              same syntax as the right-hand  side  of  a  Postfix
+              transport table.
+
 <b>Miscellaneous</b>
        <b>always</b><i>_</i><b>bcc</b>
-              Address to send a copy of each message that  enters
+              Address  to send a copy of each message that enters
               the system.
 
-       <b>mail</b><i>_</i><b>owner</b>
-              The  process  privileges  used  while not opening a
-              <b>maildrop</b> file.
-
-       <b>queue</b><i>_</i><b>directory</b>
-              Top-level directory of the Postfix queue.
-
 
 
 
@@ -71,13 +71,20 @@ PICKUP(8)                                               PICKUP(8)
 PICKUP(8)                                               PICKUP(8)
 
 
+       <b>mail</b><i>_</i><b>owner</b>
+              The process privileges used  while  not  opening  a
+              <b>maildrop</b> file.
+
+       <b>queue</b><i>_</i><b>directory</b>
+              Top-level directory of the Postfix queue.
+
 <b>SEE</b> <b>ALSO</b>
        <a href="cleanup.8.html">cleanup(8)</a> message canonicalization
        <a href="master.8.html">master(8)</a> process manager
        syslogd(8) system logging
 
 <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>
@@ -113,13 +120,6 @@ PICKUP(8)                                               PICKUP(8)
 
 
 
-
-
-
-
-
-
-
 
 
 
index 83c3aef76408280dabc1e51d028e31b026680788..05e2d06e6131e7f84c10e9e12446630d3cedc172 100644 (file)
@@ -155,9 +155,9 @@ SMTP(8)                                                   SMTP(8)
               support.
 
        <b>smtp</b><i>_</i><b>sasl</b><i>_</i><b>password</b><i>_</i><b>maps</b>
-              Lookup  tables with per-host <i>name</i>:<i>password</i> entries.
-              No entry for a host means no attempt  to  authenti-
-              cate.
+              Lookup tables with per-host or domain <i>name</i>:<i>password</i>
+              entries.  No entry for a host means no  attempt  to
+              authenticate.
 
        <b>smtp</b><i>_</i><b>sasl</b><i>_</i><b>security</b><i>_</i><b>options</b>
               Zero or more of the following.
index c61c758e989dc55ce176f39c4006a0d6b4d4c319..f0a013531de97e4f4f3fd5049c6e94fa2fbff19d 100644 (file)
@@ -80,10 +80,17 @@ SMTPD(8)                                                 SMTPD(8)
               For example, allow <a href="http://www.faqs.org/rfcs/rfc822.html">RFC822</a>-style address forms  with
               comments, like Sendmail does.
 
+<b>Content</b> <b>inspection</b> <b>controls</b>
+       <b>content</b><i>_</i><b>inspector</b>
+              The name of a mail delivery transport that inspects
+              mail prior to delivery.  This  parameter  uses  the
+              same  syntax  as  the  right-hand side of a Postfix
+              transport table.
+
 <b>Authenication</b> <b>controls</b>
        <b>enable</b><i>_</i><b>sasl</b><i>_</i><b>authentication</b>
-              Enable  per-session  authentication as per <a href="http://www.faqs.org/rfcs/rfc2554.html">RFC 2554</a>
-              (SASL).  This functionality is available only  when
+              Enable per-session authentication as per  <a href="http://www.faqs.org/rfcs/rfc2554.html">RFC  2554</a>
+              (SASL).   This functionality is available only when
               explicitly  selected  at  program  build  time  and
               explicitly enabled at runtime.
 
@@ -107,7 +114,7 @@ SMTPD(8)                                                 SMTPD(8)
 
 <b>Miscellaneous</b>
        <b>always</b><i>_</i><b>bcc</b>
-              Address to send a copy of each message that  enters
+              Address  to send a copy of each message that enters
               the system.
 
        <b>command</b><i>_</i><b>directory</b>
@@ -115,17 +122,10 @@ SMTPD(8)                                                 SMTPD(8)
               <b>$program</b><i>_</i><b>directory</b>).
 
        <b>debug</b><i>_</i><b>peer</b><i>_</i><b>level</b>
-              Increment in verbose logging level  when  a  remote
+              Increment  in  verbose  logging level when a remote
               host  matches  a  pattern  in  the  <b>debug</b><i>_</i><b>peer</b><i>_</i><b>list</b>
               parameter.
 
-       <b>debug</b><i>_</i><b>peer</b><i>_</i><b>list</b>
-              List of domain or network patterns. When  a  remote
-              host  matches  a pattern, increase the verbose log-
-              ging  level  by  the  amount   specified   in   the
-              <b>debug</b><i>_</i><b>peer</b><i>_</i><b>level</b> parameter.
-
-
 
 
                                                                 2
@@ -137,59 +137,59 @@ SMTPD(8)                                                 SMTPD(8)
 SMTPD(8)                                                 SMTPD(8)
 
 
+       <b>debug</b><i>_</i><b>peer</b><i>_</i><b>list</b>
+              List  of  domain or network patterns. When a remote
+              host matches a pattern, increase the  verbose  log-
+              ging   level   by   the  amount  specified  in  the
+              <b>debug</b><i>_</i><b>peer</b><i>_</i><b>level</b> parameter.
+
        <b>error</b><i>_</i><b>notice</b><i>_</i><b>recipient</b>
-              Recipient    of   protocol/policy/resource/software
+              Recipient   of    protocol/policy/resource/software
               error notices.
 
        <b>hopcount</b><i>_</i><b>limit</b>
               Limit the number of <b>Received:</b> message headers.
 
        <b>local</b><i>_</i><b>recipient</b><i>_</i><b>maps</b>
-              List of maps with user  names  that  are  local  to
+              List  of  maps  with  user  names that are local to
               <b>$myorigin</b> or <b>$inet</b><i>_</i><b>interfaces</b>. If this parameter is
-              defined, then the  SMTP  server  rejects  mail  for
+              defined,  then  the  SMTP  server  rejects mail for
               unknown local users.
 
        <b>notify</b><i>_</i><b>classes</b>
               List of error classes. Of special interest are:
 
-              <b>policy</b> When  a  client  violates any policy, mail a
+              <b>policy</b> When a client violates any  policy,  mail  a
                      transcript of the entire SMTP session to the
                      postmaster.
 
               <b>protocol</b>
-                     When  a client violates the SMTP protocol or
+                     When a client violates the SMTP protocol  or
                      issues  an  unimplemented  command,  mail  a
                      transcript of the entire SMTP session to the
                      postmaster.
 
        <b>smtpd</b><i>_</i><b>banner</b>
-              Text that follows the <b>220</b> status code in  the  SMTP
+              Text  that  follows the <b>220</b> status code in the SMTP
               greeting banner.
 
        <b>smtpd</b><i>_</i><b>recipient</b><i>_</i><b>limit</b>
-              Restrict  the  number  of  recipients that the SMTP
+              Restrict the number of  recipients  that  the  SMTP
               server accepts per message delivery.
 
        <b>smtpd</b><i>_</i><b>timeout</b>
-              Limit the time to send a  server  response  and  to
+              Limit  the  time  to  send a server response and to
               receive a client request.
 
 <b>Resource</b> <b>controls</b>
        <b>line</b><i>_</i><b>length</b><i>_</i><b>limit</b>
-              Limit  the  amount  of memory in bytes used for the
+              Limit the amount of memory in bytes  used  for  the
               handling of partial input lines.
 
        <b>message</b><i>_</i><b>size</b><i>_</i><b>limit</b>
               Limit the total size in bytes of a message, includ-
               ing on-disk storage for envelope information.
 
-       <b>queue</b><i>_</i><b>minfree</b>
-              Minimal  amount of free space in bytes in the queue
-              file system for the SMTP server to accept any  mail
-              at all.
-
-<b>Tarpitting</b>
 
 
 
@@ -203,23 +203,29 @@ SMTPD(8)                                                 SMTPD(8)
 SMTPD(8)                                                 SMTPD(8)
 
 
+       <b>queue</b><i>_</i><b>minfree</b>
+              Minimal amount of free space in bytes in the  queue
+              file  system for the SMTP server to accept any mail
+              at all.
+
+<b>Tarpitting</b>
        <b>smtpd</b><i>_</i><b>error</b><i>_</i><b>sleep</b><i>_</i><b>time</b>
               Time to wait in seconds before sending a 4xx or 5xx
               server error response.
 
        <b>smtpd</b><i>_</i><b>soft</b><i>_</i><b>error</b><i>_</i><b>limit</b>
               When an SMTP client has made this number of errors,
-              wait  <i>error_count</i>  seconds before responding to any
+              wait <i>error_count</i> seconds before responding  to  any
               client request.
 
        <b>smtpd</b><i>_</i><b>hard</b><i>_</i><b>error</b><i>_</i><b>limit</b>
-              Disconnect after a client has made this  number  of
+              Disconnect  after  a client has made this number of
               errors.
 
        <b>smtpd</b><i>_</i><b>junk</b><i>_</i><b>command</b><i>_</i><b>limit</b>
               Limit the number of times a client can issue a junk
-              command such as NOOP, VRFY, ETRN  or  RSET  in  one
-              SMTP  session  before  it  is penalized with tarpit
+              command  such  as  NOOP,  VRFY, ETRN or RSET in one
+              SMTP session before it  is  penalized  with  tarpit
               delays.
 
 <b>UCE</b> <b>control</b> <b>restrictions</b>
@@ -228,19 +234,19 @@ SMTPD(8)                                                 SMTPD(8)
               tem.
 
        <b>smtpd</b><i>_</i><b>helo</b><i>_</i><b>required</b>
-              Require  that  clients  introduce themselves at the
+              Require that clients introduce  themselves  at  the
               beginning of an SMTP session.
 
        <b>smtpd</b><i>_</i><b>helo</b><i>_</i><b>restrictions</b>
-              Restrict what client hostnames are allowed in  <b>HELO</b>
+              Restrict  what client hostnames are allowed in <b>HELO</b>
               and <b>EHLO</b> commands.
 
        <b>smtpd</b><i>_</i><b>sender</b><i>_</i><b>restrictions</b>
-              Restrict  what sender addresses are allowed in <b>MAIL</b>
+              Restrict what sender addresses are allowed in  <b>MAIL</b>
               <b>FROM</b> commands.
 
        <b>smtpd</b><i>_</i><b>recipient</b><i>_</i><b>restrictions</b>
-              Restrict what recipient addresses  are  allowed  in
+              Restrict  what  recipient  addresses are allowed in
               <b>RCPT</b> <b>TO</b> commands.
 
        <b>smtpd</b><i>_</i><b>etrn</b><i>_</i><b>restrictions</b>
@@ -248,15 +254,9 @@ SMTPD(8)                                                 SMTPD(8)
               mands, and what clients may issue <b>ETRN</b> commands.
 
        <b>allow</b><i>_</i><b>untrusted</b><i>_</i><b>routing</b>
-              Allow untrusted clients to specify  addresses  with
-              sender-specified  routing.   Enabling this opens up
-              nasty relay loopholes involving trusted  backup  MX
-              hosts.
-
-       <b>restriction</b><i>_</i><b>classes</b>
-              Declares  the  name of zero or more parameters that
-              contain a list of UCE restrictions.  The  names  of
-              these  parameters  can  then be used instead of the
+              Allow  untrusted  clients to specify addresses with
+              sender-specified routing.  Enabling this  opens  up
+              nasty  relay  loopholes involving trusted backup MX
 
 
 
@@ -269,48 +269,54 @@ SMTPD(8)                                                 SMTPD(8)
 SMTPD(8)                                                 SMTPD(8)
 
 
+              hosts.
+
+       <b>restriction</b><i>_</i><b>classes</b>
+              Declares the name of zero or more  parameters  that
+              contain  a  list  of UCE restrictions. The names of
+              these parameters can then be used  instead  of  the
               restriction lists that they represent.
 
        <b>maps</b><i>_</i><b>rbl</b><i>_</i><b>domains</b>
-              List of DNS domains that publish the  addresses  of
+              List  of  DNS domains that publish the addresses of
               blacklisted hosts.
 
        <b>relay</b><i>_</i><b>domains</b>
-              Restrict  what domains or networks this mail system
+              Restrict what domains or networks this mail  system
               will relay mail from or to.
 
 <b>UCE</b> <b>control</b> <b>responses</b>
        <b>access</b><i>_</i><b>map</b><i>_</i><b>reject</b><i>_</i><b>code</b>
-              Server response when a client  violates  an  access
+              Server  response  when  a client violates an access
               database restriction.
 
        <b>invalid</b><i>_</i><b>hostname</b><i>_</i><b>reject</b><i>_</i><b>code</b>
-              Server   response   when   a  client  violates  the
+              Server  response  when  a   client   violates   the
               <b>reject</b><i>_</i><b>invalid</b><i>_</i><b>hostname</b> restriction.
 
        <b>maps</b><i>_</i><b>rbl</b><i>_</i><b>reject</b><i>_</i><b>code</b>
-              Server  response  when  a   client   violates   the
+              Server   response   when   a  client  violates  the
               <b>maps</b><i>_</i><b>rbl</b><i>_</i><b>domains</b> restriction.
 
        <b>reject</b><i>_</i><b>code</b>
-              Response  code  when  the  client  matches a <b>reject</b>
+              Response code when  the  client  matches  a  <b>reject</b>
               restriction.
 
        <b>relay</b><i>_</i><b>domains</b><i>_</i><b>reject</b><i>_</i><b>code</b>
-              Server response when a client attempts  to  violate
+              Server  response  when a client attempts to violate
               the mail relay policy.
 
        <b>unknown</b><i>_</i><b>address</b><i>_</i><b>reject</b><i>_</i><b>code</b>
-              Server   response   when   a  client  violates  the
+              Server  response  when  a   client   violates   the
               <b>reject</b><i>_</i><b>unknown</b><i>_</i><b>address</b> restriction.
 
        <b>unknown</b><i>_</i><b>client</b><i>_</i><b>reject</b><i>_</i><b>code</b>
-              Server response when a client  without  address  to
-              name  mapping  violates  the <b>reject</b><i>_</i><b>unknown</b><i>_</i><b>clients</b>
+              Server  response  when  a client without address to
+              name mapping  violates  the  <b>reject</b><i>_</i><b>unknown</b><i>_</i><b>clients</b>
               restriction.
 
        <b>unknown</b><i>_</i><b>hostname</b><i>_</i><b>reject</b><i>_</i><b>code</b>
-              Server  response  when  a   client   violates   the
+              Server   response   when   a  client  violates  the
               <b>reject</b><i>_</i><b>unknown</b><i>_</i><b>hostname</b> restriction.
 
 <b>SEE</b> <b>ALSO</b>
@@ -318,12 +324,6 @@ SMTPD(8)                                                 SMTPD(8)
        <a href="master.8.html">master(8)</a> process manager
        syslogd(8) system logging
 
-<b>LICENSE</b>
-       The  Secure  Mailer  license must be distributed with this
-       software.
-
-
-
 
 
                                                                 5
@@ -335,6 +335,10 @@ SMTPD(8)                                                 SMTPD(8)
 SMTPD(8)                                                 SMTPD(8)
 
 
+<b>LICENSE</b>
+       The Secure Mailer license must be  distributed  with  this
+       software.
+
 <b>AUTHOR(S)</b>
        Wietse Venema
        IBM T.J. Watson Research
@@ -383,10 +387,6 @@ SMTPD(8)                                                 SMTPD(8)
 
 
 
-
-
-
-
 
 
 
index a54291acfa700aa12f1f7ce1aa924e8fcb2cbc45..9804d9a489e028adf925903e016d3ee9d8aa5aaa 100644 (file)
@@ -56,6 +56,12 @@ The following \fBmain.cf\fR parameters are especially relevant to
 this program. See the Postfix \fBmain.cf\fR file for syntax details
 and for default values. Use the \fBpostfix reload\fR command after
 a configuration change.
+.SH "Content inspection controls"
+.IP \fBcontent_inspector\fR
+The name of a mail delivery transport that inspects mail prior
+to delivery.
+This parameter uses the same syntax as the right-hand side of
+a Postfix transport table.
 .SH Miscellaneous
 .ad
 .fi
index c1177d3bb71e2d16f76ea55fbfa9bf4734bb4a28..bcf367a204424793eb0a4302799a9f337f3d628a 100644 (file)
@@ -117,7 +117,7 @@ Numerical network address to bind to when making a connection.
 Enable per-session authentication as per RFC 2554 (SASL).
 By default, Postfix is built without SASL support.
 .IP \fBsmtp_sasl_password_maps\fR
-Lookup tables with per-host \fIname\fR:\fIpassword\fR entries.
+Lookup tables with per-host or domain \fIname\fR:\fIpassword\fR entries.
 No entry for a host means no attempt to authenticate.
 .IP \fBsmtp_sasl_security_options\fR
 Zero or more of the following.
index 82aa2336e0f5161e08c784b962dfcefef7ad182a..dc974dd226a8c2c98c745e3cf26435c8a8c5fa44 100644 (file)
@@ -75,6 +75,12 @@ a configuration change.
 .IP \fBstrict_rfc821_envelopes\fR
 Disallow non-RFC 821 style addresses in envelopes. For example,
 allow RFC822-style address forms with comments, like Sendmail does.
+.SH "Content inspection controls"
+.IP \fBcontent_inspector\fR
+The name of a mail delivery transport that inspects mail prior
+to delivery.
+This parameter uses the same syntax as the right-hand side of
+a Postfix transport table.
 .SH "Authenication controls"
 .IP \fBenable_sasl_authentication\fR
 Enable per-session authentication as per RFC 2554 (SASL).
index dca0bbb44b7ed32b9d6481952aedbbc4480a17bf..e5b09c956045ec6d553b467622a989f133915f9d 100644 (file)
 /*     this program. See the Postfix \fBmain.cf\fR file for syntax details
 /*     and for default values. Use the \fBpostfix reload\fR command after
 /*     a configuration change.
+/* .SH "Content inspection controls"
+/* .IP \fBcontent_inspector\fR
+/*     The name of a mail delivery transport that inspects mail prior
+/*     to delivery.
+/*     This parameter uses the same syntax as the right-hand side of
+/*     a Postfix transport table.
 /* .SH Miscellaneous
 /* .ad
 /* .fi
 /* Application-specific. */
 
 char   *var_always_bcc;
+char   *var_inspect_xport;
 
  /*
   * Structure to bundle a bunch of information about a queue file.
@@ -173,6 +180,8 @@ static int copy_segment(VSTREAM *qfile, VSTREAM *cleanup, PICKUP_INFO *info,
                info->rcpt = mystrdup(vstring_str(buf));
        if (type == REC_TYPE_TIME)
            continue;
+       if (type == REC_TYPE_INSP)
+           continue;
        else {
 
            /*
@@ -223,6 +232,12 @@ static int pickup_copy(VSTREAM *qfile, VSTREAM *cleanup,
      */
     rec_fprintf(cleanup, REC_TYPE_TIME, "%ld", (long) info->st.st_mtime);
 
+    /*
+     * Add content inspection transport.
+     */
+    if (*var_inspect_xport)
+       rec_fprintf(cleanup, REC_TYPE_INSP, "%s", var_inspect_xport);
+
     /*
      * Copy the message envelope segment. Allow only those records that we
      * expect to see in the envelope section. The envelope segment must
@@ -442,6 +457,7 @@ int     main(int argc, char **argv)
 {
     static CONFIG_STR_TABLE str_table[] = {
        VAR_ALWAYS_BCC, DEF_ALWAYS_BCC, &var_always_bcc, 0, 0,
+       VAR_INSPECT_XPORT, DEF_INSPECT_XPORT, &var_inspect_xport, 0, 0,
        0,
     };
 
index c8cd69dec56c9bb89466392de523909f6c0db534..faefcf888a961969f9655e9eeb6ec418cf5905af 100644 (file)
@@ -229,6 +229,7 @@ struct QMGR_MESSAGE {
     char   *sender;                    /* complete address */
     char   *errors_to;                 /* error report address */
     char   *return_receipt;            /* confirm receipt address */
+    char   *inspect_xport;             /* inspection transport */
     long    data_size;                 /* message content size */
     long    rcpt_offset;               /* more recipients here */
     QMGR_RCPT_LIST rcpt_list;          /* complete addresses */
index 5ca2fa05757c91c92f401eddb84d8a94893e08ce..29f5a760f7d0ecae2a5b64baac96e4c4875fee07 100644 (file)
@@ -144,6 +144,7 @@ static QMGR_MESSAGE *qmgr_message_create(const char *queue_name,
     message->sender = 0;
     message->errors_to = 0;
     message->return_receipt = 0;
+    message->inspect_xport = 0;
     message->data_size = 0;
     message->warn_offset = 0;
     message->warn_time = 0;
@@ -246,6 +247,9 @@ static int qmgr_message_read(QMGR_MESSAGE *message)
        } else if (rec_type == REC_TYPE_TIME) {
            if (message->arrival_time == 0)
                message->arrival_time = atol(start);
+       } else if (rec_type == REC_TYPE_INSP) {
+           if (message->inspect_xport == 0)
+               message->inspect_xport = mystrdup(start);
        } else if (rec_type == REC_TYPE_FROM) {
            if (message->sender == 0) {
                message->sender = mystrdup(start);
@@ -428,6 +432,7 @@ static void qmgr_message_resolve(QMGR_MESSAGE *message)
     char  **cpp;
     char   *domain;
     const char *junk;
+    char   *nexthop;
 
 #define STREQ(x,y)     (strcasecmp(x,y) == 0)
 #define STR            vstring_str
@@ -457,9 +462,14 @@ static void qmgr_message_resolve(QMGR_MESSAGE *message)
         * result address may differ from the one specified by the sender.
         */
        resolve_clnt_query(recipient->address, &reply);
-       if (!STREQ(recipient->address, STR(reply.recipient)))
-           UPDATE(recipient->address, STR(reply.recipient));
-
+       if (message->inspect_xport) {
+           vstring_strcpy(reply.transport, message->inspect_xport);
+           if ((nexthop = split_at(STR(reply.transport), ':')) != 0)
+               vstring_strcpy(reply.nexthop, nexthop);
+       } else {
+           if (!STREQ(recipient->address, STR(reply.recipient)))
+               UPDATE(recipient->address, STR(reply.recipient));
+       }
 
        /*
         * Bounce recipients that have moved. We do it here instead of in the
@@ -692,6 +702,8 @@ void    qmgr_message_free(QMGR_MESSAGE *message)
        myfree(message->errors_to);
     if (message->return_receipt)
        myfree(message->return_receipt);
+    if (message->inspect_xport)
+       myfree(message->inspect_xport);
     qmgr_rcpt_list_free(&message->rcpt_list);
     qmgr_message_count--;
     myfree((char *) message);
index e7cfbb3164cfb520e0ee703b40f7b4abee7e666b..d9d54357e852b83a56273251fc4b6ef0fde5f915 100644 (file)
 /*     Enable per-session authentication as per RFC 2554 (SASL).
 /*     By default, Postfix is built without SASL support.
 /* .IP \fBsmtp_sasl_password_maps\fR
-/*     Lookup tables with per-host \fIname\fR:\fIpassword\fR entries.
+/*     Lookup tables with per-host or domain \fIname\fR:\fIpassword\fR entries.
 /*     No entry for a host means no attempt to authenticate.
 /* .IP \fBsmtp_sasl_security_options\fR
 /*     Zero or more of the following.
index 4ce6788edbdddeaf9553b2f6b71ca773d5c323c0..ecfde34404e94de96d646e6b087f587529cd3f66 100644 (file)
 /* .IP \fBstrict_rfc821_envelopes\fR
 /*     Disallow non-RFC 821 style addresses in envelopes. For example,
 /*     allow RFC822-style address forms with comments, like Sendmail does.
+/* .SH "Content inspection controls"
+/* .IP \fBcontent_inspector\fR
+/*     The name of a mail delivery transport that inspects mail prior
+/*     to delivery.
+/*     This parameter uses the same syntax as the right-hand side of
+/*     a Postfix transport table.
 /* .SH "Authenication controls"
 /* .IP \fBenable_sasl_authentication\fR
 /*     Enable per-session authentication as per RFC 2554 (SASL).
@@ -335,6 +341,7 @@ int     var_smtpd_junk_cmd_limit;
 bool    var_smtpd_sasl_enable;
 char   *var_smtpd_sasl_opts;
 char   *var_smtpd_sasl_realm;
+char   *var_inspect_xport;
 
  /*
   * Global state, for stand-alone mode queue file cleanup. When this is
@@ -660,6 +667,8 @@ static int mail_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv)
      */
     rec_fprintf(state->cleanup, REC_TYPE_TIME, "%ld",
                (long) time((time_t *) 0));
+    if (*var_inspect_xport)
+       rec_fprintf(state->cleanup, REC_TYPE_INSP, "%s", var_inspect_xport);
     rec_fputs(state->cleanup, REC_TYPE_FROM, argv[2].strval);
     state->sender = mystrdup(argv[2].strval);
     smtpd_chat_reply(state, "250 Ok");
@@ -1425,6 +1434,7 @@ int     main(int argc, char **argv)
        VAR_LOCAL_RCPT_MAPS, DEF_LOCAL_RCPT_MAPS, &var_local_rcpt_maps, 0, 0,
        VAR_SMTPD_SASL_OPTS, DEF_SMTPD_SASL_OPTS, &var_smtpd_sasl_opts, 0, 0,
        VAR_SMTPD_SASL_REALM, DEF_SMTPD_SASL_REALM, &var_smtpd_sasl_realm, 1, 0,
+       VAR_INSPECT_XPORT, DEF_INSPECT_XPORT, &var_inspect_xport, 0, 0,
        0,
     };