]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-1.1.7-20020501
authorWietse Venema <wietse@porcupine.org>
Wed, 1 May 2002 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <viktor@dukhovni.org>
Tue, 5 Feb 2013 06:27:54 +0000 (06:27 +0000)
52 files changed:
postfix/HISTORY
postfix/INSTALL
postfix/Makefile.in
postfix/conf/pcre_table
postfix/conf/post-install
postfix/conf/regexp_table
postfix/conf/sample-misc.cf
postfix/conf/sample-pcre-body.cf
postfix/conf/sample-regexp-body.cf
postfix/conf/transport
postfix/html/access.5.html
postfix/html/flush.8.html
postfix/html/pcre_table.5.html
postfix/html/pickup.8.html
postfix/html/pipe.8.html
postfix/html/postalias.1.html
postfix/html/postconf.1.html
postfix/html/postdrop.1.html
postfix/html/postmap.1.html
postfix/html/regexp_table.5.html
postfix/html/trivial-rewrite.8.html
postfix/html/uce.html
postfix/makedefs
postfix/man/man1/postalias.1
postfix/man/man1/postconf.1
postfix/man/man1/postmap.1
postfix/man/man5/access.5
postfix/man/man5/pcre_table.5
postfix/man/man5/regexp_table.5
postfix/man/man8/pipe.8
postfix/proto/access
postfix/proto/pcre_table
postfix/proto/regexp_table
postfix/src/global/mail_version.h
postfix/src/global/mkmap_db.c
postfix/src/global/mkmap_dbm.c
postfix/src/pipe/pipe.c
postfix/src/postalias/postalias.c
postfix/src/postconf/postconf.c
postfix/src/postmap/postmap.c
postfix/src/postqueue/postqueue.c
postfix/src/smtp/smtp_proto.c
postfix/src/smtpd/smtpd.c
postfix/src/trivial-rewrite/transport.c
postfix/src/trivial-rewrite/transport.h
postfix/src/trivial-rewrite/trivial-rewrite.c
postfix/src/util/attr_scan0.c
postfix/src/util/attr_scan64.c
postfix/src/util/dict_db.c
postfix/src/util/dict_dbm.c
postfix/src/util/sys_defs.h
postfix/src/virtual/Makefile.in

index bd1c669c710bced572ccd32e6062a036a484c273..9efee19b06f528f0064c0f0bafbe4735404ad300 100644 (file)
@@ -6228,6 +6228,101 @@ Apologies for any names omitted.
        stripping in postqueue/postqueue.c. Problem reported by
        Victor Duchovni, Morgan Stanley.
 
+20020402
+
+       Workaround: recognize more headers that are sent instead
+       of SMTP commands. File: smtpd/smtpd.c.
+
+20020413
+
+       Feature: new pipe delivery agent "D" flag to prepend a
+       Delivered-To:  message header. This requires single recipient
+       deliveries. Based on code by Matthias Andree. File:
+       pipe/pipe.c.
+
+20020414
+
+       Portability: Postfix will no longer attempt to build with
+       gdbm support, because gdbm is broken. File:  makedefs.
+
+20020415
+
+       Cleanup: the attribute list IPC code did not distinguish
+       between "disconnect" and "timeout" while reading an attribute
+       list, making trouble shooting more difficult than necessary.
+       Files:  util/attr_scan0.c, util/attr_scan64.c.
+
+       Cleanup: install parameter defaults can now be overruled
+       from makedefs: sendmail_path, mailq_path, newaliases_path,
+       command_directory, daemon_directory. Based on code by
+       Victor Duchovni, Morgan Stanley. File: util/sys_defs.h.
+
+20020411
+
+       Cleanup: Use more robust quoting passing makedefs/Makefile
+       settings. This also simplifies the seven backslashes example
+       in the INSTALL file.  Victor Duchovni, Morgan Stanley.
+       Files: makedefs, INSTALL.
+
+20020417
+
+       Bugfix: the post-install script failed to upgrade master.cf
+       settings from private to public if the service was explicitly
+       configured as private.
+
+20020418
+
+       Documentation: added CPU saving patterns for quickly skipping
+       base 64 encoded text in message bodies.  Liviu Daia.
+       Files: {proto,conf}/pcre_table, {proto,conf}/regexp_table,
+       conf/sample_{regexp,pcre}_body.cf.
+
+20020426
+
+       Bugfix: the SMTP client forgot to quote whitespace etc.
+       in a sender/recipient address when DNS lookup was turned
+       off (disable_dns_lookups = yes). Problem experienced by
+       Chip Paswater. Files: smtp/smtp_proto.c.
+
+20020501
+
+       Feature: wildcard lookup in transport maps (lookup key
+       "*").  Code developed with Lamont Jones, HP.
+
+       Feature: a null transport:destination transport map entry
+       means proceed as if the transport map lookup failed.  Code
+       developed with Lamont Jones, HP.
+
+       Feature: more efficient use of cache memory when a process
+       opens multiple Berkeley DB tables. Files: util/dict_db.c,
+       global/mkmap_db.c. Victor Duchovni, Morgan Stanley.
+
+20020503
+
+       Cleanup: postqueue silently ignored command-line arguments
+       following -p or -f options, instead of complaining; postqueue
+       produced an incorrect error message (mail system down) when
+       the command was installed with incorrect privileges.  File:
+       postqueue/postqueue.c.
+
+       Bugfix: while reporting a domain name or IP address syntax
+       error, postqueue could dereference a dangling pointer with
+       some getopt() implementations. LaMont Jones, HP.  File:
+       postqueue/postqueue.c.
+
+       Safety: postalias and postmap now drop root privileges
+       while processing a non-root input file. Thus, the result
+       should be writable to the source file owner. Specify the
+       -o option if this is a problem. Files: postmap/postmap.c,
+       postalias/postalias.c.
+
+       Consistency: just like postmap, postalias now copies file
+       permissions from the source file when it creates a new
+       table for the first time. File: postalias/postalias.c.
+
+       Portability: run-time test to avoid GDBM trouble.  File:
+       util/dict_dbm.c.
+
 Open problems:
 
        Low: sendmail does not store null command-line recipients.
@@ -6252,7 +6347,8 @@ Open problems:
        Low: generic showq protocol, to allow for more intelligent
        processing than just mailq. Maybe marry this with postsuper.
 
-       Low: default domain for appending to unqualified recipients.
+       Low: default domain for appending to unqualified recipients,
+       so that unqualified names can be delivered locally.
 
        Low: The $process_id_directory setting is not used anywhere
        in Postfix. Problem reported by Michael Smith, texas.net.
index b3e3b246f9e194de7bddcf169aa069888839a8ce..ac9334f26bc2d1b8be4a432dc019a0b00614ed95 100644 (file)
@@ -135,10 +135,20 @@ and so on. In some cases, optimization is turned off automatically.
 In order to build with non-default settings, for example, with a
 configuration directory other than /etc/postfix, use:
 
-    % make makefiles CCARGS=-DDEF_CONFIG_DIR=\\\\\\\"/some/where\\\\\\\"
+    % make makefiles CCARGS='-DDEF_CONFIG_DIR=\"/some/where\"'
     % make
 
-That's seven backslashes :-) But at least this works with sh and csh.
+Be sure to get the quotes right. These details matter a lot.
+
+Other parameters whose defaults can be specified in this way are:
+
+    Macro name          default value for
+    -------------------------------------
+    DEF_COMMAND_DIR     command_directory
+    DEF_DAEMON_DIR      daemon_directory
+    DEF_SENDMAIL_PATH   sendmail_path
+    DEF_MAILQ_PATH      mailq_path
+    DEF_NEWALIAS_PATH   newaliases_path
 
 In order to build Postfix for very large applications, where you
 expect to run more than 1000 delivery processes, you may need to
@@ -209,16 +219,22 @@ In order to install or upgrade Postfix:
 
     postfix:*:12345:12345:postfix:/no/where:/no/shell
 
+  Note: there should be no whitespace before "postfix:".
+
 - Make sure there is a corresponding alias in /etc/aliases:
 
     postfix: root
 
+  Note: there should be no whitespace before "postfix:".
+
 - Create a group "postdrop" with a group id that is not used by
   any other user account. Not even by the postfix user account.
   My group file entry looks like:
 
     postdrop:*:54321:
 
+  Note: there should be no whitespace before "postdrop:".
+
   NB: this group was optional with older Postfix releases; it is
   now required.
 
@@ -285,7 +301,7 @@ In order to inspect the mail queue, use
 
     % sendmail -bp
 
-See also the "Care and feeding" section 13 below.
+See also the "Care and feeding" section 12 below.
 
 8 - Configuring Postfix to send and receive mail (virtual interface)
 ====================================================================
@@ -327,7 +343,7 @@ In order to inspect the mail queue, use
 
     % sendmail -bp
 
-See also the "Care and feeding" section 13 below.
+See also the "Care and feeding" section 12 below.
 
 9 - Turning off sendmail forever
 ================================
@@ -357,7 +373,7 @@ and watch the syslog file for any complaints from the mail system.
 Typical logfile names are: /var/log/maillog or /var/log/syslog.
 See /etc/syslog.conf for actual logfile names.
 
-See also the "Care and feeding" section 13 below.
+See also the "Care and feeding" section 12 below.
 
 10 - Mandatory configuration file edits
 =======================================
index 429d62f1c52cbe92ef6446ae9c7209f149f44757..a8fff873e351fd8b782f8ba67325e495144d1be9 100644 (file)
@@ -1,6 +1,6 @@
 SHELL  = /bin/sh
 WARN    = -Wmissing-prototypes -Wformat
-OPTS   = "CC=$(CC)"
+OPTS   = 'CC=$(CC)'
 DIRS   = src/util src/global src/dns src/master src/postfix src/smtpstone \
        src/sendmail src/error src/pickup src/cleanup src/smtpd src/local \
        src/lmtp src/trivial-rewrite src/qmgr src/smtp src/bounce src/pipe \
index ebedffe48c80ed43cddd1d90e8b54ad304b09e8a..423a31768228456bf180841ce02eb2f2a3fe340b 100644 (file)
@@ -1,4 +1,3 @@
-# 
 # PCRE_TABLE(5)                                       PCRE_TABLE(5)
 # 
 # NAME
 #        /^Subject: make money fast/     REJECT
 #        /^To: friend@public\.com/       REJECT
 # 
+# EXAMPLE BODY FILTER MAP
+#        # First skip over base 64 encoded text to save CPU cycles.
+#        # Requires PCRE version 3.
+#        ~^[[:alnum:]+/]{60,}$~          OK
+# 
+#        # Put your own body patterns here.
+# 
 # SEE ALSO
 #        regexp_table(5) format of POSIX regular expression tables
 # 
 #        P.O. Box 704
 #        Yorktown Heights, NY 10598, USA
 # 
-#                                                                 1
-# 
+#                                                     PCRE_TABLE(5)
index 3feeb4a2e97456fc0a42a0471a8f8941148f6137..4fd59c3124507c95318194d47313c8674f8fbf67 100644 (file)
@@ -487,12 +487,12 @@ EOF
 
     for name in cleanup flush
     do
-       grep "^$name[   ]*unix[         ]*-" \
+       grep "^$name[   ]*unix[         ]*[-y]" \
            $config_directory/master.cf >/dev/null && {
                echo Editing $config_directory/master.cf, making the $name service public
            ed $config_directory/master.cf <<EOF || exit 1
-/^$name[       ]*unix[         ]*-/
-s/-/n/
+/^$name[       ]*unix[         ]*[-y]/
+s/[-y]/n/
 p
 w
 q
index 40acc1a0bd76fcc59ebbd660b28b7d4d02dbc9b3..162ad09f68765f4a519e17bf69972f01ce20a354 100644 (file)
@@ -1,4 +1,3 @@
-# 
 # REGEXP_TABLE(5)                                   REGEXP_TABLE(5)
 # 
 # NAME
 #        /^Subject: make money fast/     REJECT
 #        /^To: friend@public\.com/       REJECT
 # 
+# EXAMPLE BODY FILTER MAP
+#        # First skip over base 64 encoded text to save CPU cycles.
+#        ~^[[:alnum:]+/]{60,}$~          OK
+# 
+#        # Put your own body patterns here.
+# 
 # SEE ALSO
 #        pcre_table(5) format of PCRE tables
 # 
 #        P.O. Box 704
 #        Yorktown Heights, NY 10598, USA
 # 
-#                                                                 1
-# 
+#                                                   REGEXP_TABLE(5)
index d848d911975293e66535ed3002c164f3ba901f11..900d11c73a1beef3f74835ff02801b35a8667042 100644 (file)
@@ -259,6 +259,20 @@ myorigin = $myhostname
 # policy (anti-UCE violations) and protocol error (broken mailers)
 # reports.
 #
+# The error classes are:
+#
+# bounce: Send the postmaster copies of the headers of bounced mail.
+# 2bounce: Send undeliverable bounced mail to the postmaster. 
+# delay: Send the postmaster copies of the headers of delayed mail.
+# policy: Send the postmaster a transcript of the entire SMTP session
+#      when a client request was rejected because of (UCE) policy.
+# protocol: Send the postmaster a transcript of the entire SMTP
+#       session in case of client or server protocol errors.
+# resource: Inform the postmaster of mail not delivered due to
+#      resource problems.
+# software: Inform the postmaster of mail not delivered due to
+#      software problems.
+#
 #notify_classes = bounce,delay,policy,protocol,resource,software
 #notify_classes = 2bounce,resource,software
 notify_classes = resource,software
index d6cf323e3dbc93461dd8a90196b3674312cb098e..bb98b6cb22d9b708ef3992dd3b605d0c1b5d6ea3 100644 (file)
 #      appended to the previous line (there should be no whitespace
 #      before your regular expression!)
 #
+
+# Skip over base 64 encoded blocks. This saves lots of CPU cycles.
+# Expressions by Liviu Daia, amended by Victor Duchovni.
+# Requires PCRE version 3.
+~^[[:alnum:]+/]{60,}\s*$~      OK
+
+# Your own body patterns go here.
index d340cf3f5d3dba006478e7f2fcfa30463746f7f3..67e6f5bb0150bafdac4e8c3954506ef75bebbd69 100644 (file)
@@ -22,3 +22,9 @@
 #   IGNORE          The header line is silently discarded.
 #   WARN            The header is logged (not rejected) with a warning.
 #   WARN text....   As above, and the text is logged, too.
+
+# Skip over base 64 encoded blocks. This saves lots of CPU cycles.
+# Expressions by Liviu Daia. Amended by Victor Duchovni.
+~^[[:alnum:]+/]{60,}[:space:]*$~       OK
+
+# Your own body patterns go here.
index 3d6e07f0dcb6b7d90a51a7b416a140c52ad12fb5..453617c65aef78bb6495ba1464d8c32e8c5f4f96 100644 (file)
@@ -34,7 +34,8 @@
 # 
 #        pattern result
 #               When pattern matches the  domain,  use  the  corre-
-#               sponding result.
+#               sponding result.  A pattern of `*' matches all
+#               entries.
 # 
 #        blank lines and comments
 #               Empty  lines and whitespace-only lines are ignored,
 #               parent_domain_matches_subdomains configuration set-
 #               ting.  Otherwise, a domain name matches itself  and
 #               its subdomains.
+#
+#        An empty result (`:' - default transport, default nexthop)
+#        behaves as  though the transport  map did not exist.  When
+#        combined with a wildcard (`*') entry,  this can be used to
+#        route internal mail directly, while  using a relay for all
+#        outbound  traffic.    (Note  that  you  should  _NOT_  set
+#        relayhost in this case.)
+#
+#             *                  smtp:outbound-relay.my.domain
+#             .my.domain         :
 # 
 #        Note:  transport  map entries take precedence over domains
 #        specified in the mydestination parameter. If you  use  the
index c393a7fee3e7e8d548973b13dba816719d0a9309..d75975ae23b8262464d68770e61fa78c757963e0 100644 (file)
@@ -122,7 +122,7 @@ ACCESS(5)                                               ACCESS(5)
               tion schemes.
 
        <i>restriction...</i>
-              Apply the named UCE restriction(s) (<b>permit</b>, reject,
+              Apply the named UCE restriction(s) (<b>permit</b>, <b>reject</b>,
               <b>reject</b><i>_</i><b>unauth</b><i>_</i><b>destination</b>, and so on).
 
 <b>REGULAR</b> <b>EXPRESSION</b> <b>TABLES</b>
index 93223e406a71a0b5250d9e7133ef7ab4bb1cdbcb..97aefe42a73e13386b73076c42ffdf76b1e5a0a9 100644 (file)
@@ -1,5 +1,4 @@
 <html> <head> </head> <body> <pre>
-
 FLUSH(8)                                                 FLUSH(8)
 
 <b>NAME</b>
@@ -156,6 +155,5 @@ FLUSH(8)                                                 FLUSH(8)
        P.O. Box 704
        Yorktown Heights, NY 10598, USA
 
-                                                                1
-
+                                                         FLUSH(8)
 </pre> </body> </html>
index 55d1e714830dbe192080190b76de79848ce01e77..29111019cc85f1104a72b846722d8c367901032a 100644 (file)
@@ -1,5 +1,4 @@
 <html> <head> </head> <body> <pre>
-
 PCRE_TABLE(5)                                       PCRE_TABLE(5)
 
 <b>NAME</b>
@@ -81,6 +80,13 @@ PCRE_TABLE(5)                                       PCRE_TABLE(5)
        /^Subject: make money fast/     REJECT
        /^To: friend@public\.com/       REJECT
 
+<b>EXAMPLE</b> <b>BODY</b> <b>FILTER</b> <b>MAP</b>
+       # First skip over base 64 encoded text to save CPU cycles.
+       # Requires PCRE version 3.
+       ~^[[:alnum:]+/]{60,}$~          OK
+
+       # Put your own body patterns here.
+
 <b>SEE</b> <b>ALSO</b>
        <a href="regexp_table.5.html">regexp_table(5)</a> format of POSIX regular expression tables
 
@@ -98,6 +104,5 @@ PCRE_TABLE(5)                                       PCRE_TABLE(5)
        P.O. Box 704
        Yorktown Heights, NY 10598, USA
 
-                                                                1
-
+                                                    PCRE_TABLE(5)
 </pre> </body> </html>
index 428f0e187f18ff62de59461d2a1623bab8ee8789..dfd20d5d779161da607c52e1906523c629000e15 100644 (file)
@@ -1,5 +1,4 @@
 <html> <head> </head> <body> <pre>
-
 PICKUP(8)                                               PICKUP(8)
 
 <b>NAME</b>
@@ -80,6 +79,5 @@ PICKUP(8)                                               PICKUP(8)
        P.O. Box 704
        Yorktown Heights, NY 10598, USA
 
-                                                                1
-
+                                                        PICKUP(8)
 </pre> </body> </html>
index 372fce1b6f2523785d6e3701a097ba1a1907d17b..46f3cc5db7524b7dd4f5506207cb2b1c5edaba60 100644 (file)
@@ -1,5 +1,4 @@
 <html> <head> </head> <body> <pre>
-
 PIPE(8)                                                   PIPE(8)
 
 <b>NAME</b>
@@ -44,7 +43,7 @@ PIPE(8)                                                   PIPE(8)
        file at the end of a service definition.  The syntax is as
        follows:
 
-       <b>flags=BFRhqu.</b>&gt; (optional)
+       <b>flags=BDFRhqu.</b>&gt; (optional)
               Optional message processing flags.  By  default,  a
               message is copied unchanged.
 
@@ -53,43 +52,48 @@ PIPE(8)                                                   PIPE(8)
                      agents  that  recognize  "<b>From</b>  " lines only
                      when preceded by a blank line.
 
-              <b>F</b>      Prepend a "<b>From</b> <i>sender</i> <i>time_stamp</i>"  envelope
-                     header  to  the  message  content.   This is
+              <b>D</b>      Prepend a "<b>Delivered-To:</b> <i>recipient</i>"  message
+                     header  with the envelope recipient address.
+                     Note: for this to work, the <i>transport_</i><b>desti-</b>
+                     <b>nation</b><i>_</i><b>recipient</b><i>_</i><b>limit</b> must be 1.
+
+              <b>F</b>      Prepend  a "<b>From</b> <i>sender</i> <i>time_stamp</i>" envelope
+                     header to  the  message  content.   This  is
                      expected by, for example, <b>UUCP</b> software.
 
-              <b>R</b>      Prepend a <b>Return-Path:</b> message  header  with
+              <b>R</b>      Prepend  a  <b>Return-Path:</b> message header with
                      the envelope sender address.
 
               <b>h</b>      Fold the command-line <b>$recipient</b> domain name
-                     and <b>$nexthop</b> host name to lower case.   This
+                     and  <b>$nexthop</b> host name to lower case.  This
                      is recommended for delivery via <b>UUCP</b>.
 
-              <b>q</b>      Quote  white space and other special charac-
+              <b>q</b>      Quote white space and other special  charac-
                      ters in the command-line <b>$sender</b> and <b>$recip-</b>
                      <b>ient</b> address localparts (text to the left of
                      the right-most <b>@</b> character), according to an
-                     8-bit  transparent version of <a href="http://www.faqs.org/rfcs/rfc822.html">RFC 822</a>.  This
-                     is recommended  for  delivery  via  <b>UUCP</b>  or
+                     8-bit transparent version of <a href="http://www.faqs.org/rfcs/rfc822.html">RFC 822</a>.   This
+                     is  recommended  for  delivery  via  <b>UUCP</b> or
                      <b>BSMTP</b>.
 
-                     The  result  is  compatible with the address
-                     parsing of command-line  recipients  by  the
+                     The result is compatible  with  the  address
+                     parsing  of  command-line  recipients by the
                      Postfix <b>sendmail</b> mail submission command.
 
-                     The  <b>q</b>  flag  affects only entire addresses,
+                     The <b>q</b> flag affects  only  entire  addresses,
                      not the partial address information from the
-                     <b>$user</b>,  <b>$extension</b>  or <b>$mailbox</b> command-line
+                     <b>$user</b>, <b>$extension</b> or  <b>$mailbox</b>  command-line
                      macros.
 
               <b>u</b>      Fold  the  command-line  <b>$recipient</b>  address
-                     localpart  (text  to  the left of the right-
-                     most <b>@</b> character) to lower  case.   This  is
+                     localpart (text to the left  of  the  right-
+                     most  <b>@</b>  character)  to lower case.  This is
                      recommended for delivery via <b>UUCP</b>.
 
-              <b>.</b>      Prepend  <b>.</b>  to lines starting with "<b>.</b>". This
+              <b>.</b>      Prepend <b>.</b> to lines starting with  "<b>.</b>".  This
                      is needed by, for example, <b>BSMTP</b> software.
 
-              &gt;      Prepend &gt; to lines starting  with  "<b>From</b>  ".
+              &gt;      Prepend  &gt;  to  lines starting with "<b>From</b> ".
                      This is expected by, for example, <b>UUCP</b> soft-
                      ware.
 
@@ -97,16 +101,16 @@ PIPE(8)                                                   PIPE(8)
 
        <b>user</b>=<i>username</i>:<i>groupname</i>
               The external command is executed with the rights of
-              the  specified  <i>username</i>.   The software refuses to
-              execute commands with root privileges, or with  the
-              privileges  of  the mail system owner. If <i>groupname</i>
-              is specified, the corresponding group  ID  is  used
+              the specified <i>username</i>.  The  software  refuses  to
+              execute  commands with root privileges, or with the
+              privileges of the mail system owner.  If  <i>groupname</i>
+              is  specified,  the  corresponding group ID is used
               instead of the group ID of <i>username</i>.
 
        <b>eol=string</b> (default: <b>\n</b>)
-              The  output  record  delimiter. Typically one would
-              use either <b>\r\n</b> or <b>\n</b>. The usual C-style  backslash
-              escape  sequences are recognized: <b>\a</b> <b>\b</b> <b>\f</b> <b>\n</b> <b>\r</b> <b>\t</b>
+              The output record delimiter.  Typically  one  would
+              use  either <b>\r\n</b> or <b>\n</b>. The usual C-style backslash
+              escape sequences are recognized: <b>\a</b> <b>\b</b> <b>\f</b> <b>\n</b> <b>\r</b>  <b>\t</b>
               <b>\v</b> <b>\</b><i>octal</i> and <b>\\</b>.
 
        <b>size</b>=<i>size_limit</i> (optional)
@@ -114,107 +118,107 @@ PIPE(8)                                                   PIPE(8)
               will be bounced back to the sender.
 
        <b>argv</b>=<i>command</i>... (required)
-              The  command to be executed. This must be specified
+              The command to be executed. This must be  specified
               as the last command attribute.  The command is exe-
               cuted  directly,  i.e.  without  interpretation  of
-              shell meta characters by  a  shell  command  inter-
+              shell  meta  characters  by  a shell command inter-
               preter.
 
               In  the  command  argument  vector,  the  following
               macros are recognized and replaced with correspond-
-              ing  information  from  the  Postfix  queue manager
+              ing information  from  the  Postfix  queue  manager
               delivery request:
 
               <b>${extension</b>}
-                     This macro expands to the extension part  of
-                     a  recipient  address.  For example, with an
+                     This  macro expands to the extension part of
+                     a recipient address.  For example,  with  an
                      address  <i>user+foo@domain</i>  the  extension  is
                      <i>foo</i>.
 
-                     A   command-line   argument   that  contains
-                     <b>${extension</b>} expands into as  many  command-
+                     A  command-line   argument   that   contains
+                     <b>${extension</b>}  expands  into as many command-
                      line arguments as there are recipients.
 
-                     This  information  is modified by the <b>u</b> flag
+                     This information is modified by the  <b>u</b>  flag
                      for case folding.
 
               <b>${mailbox</b>}
-                     This macro expands  to  the  complete  local
-                     part  of  a recipient address.  For example,
-                     with an address <i>user+foo@domain</i> the  mailbox
+                     This  macro  expands  to  the complete local
+                     part of a recipient address.   For  example,
+                     with  an address <i>user+foo@domain</i> the mailbox
                      is <i>user+foo</i>.
 
-                     A   command-line   argument   that  contains
+                     A  command-line   argument   that   contains
                      <b>${mailbox</b>} expands into as many command-line
                      arguments as there are recipients.
 
-                     This  information  is modified by the <b>u</b> flag
+                     This information is modified by the  <b>u</b>  flag
                      for case folding.
 
               <b>${nexthop</b>}
                      This macro expands to the next-hop hostname.
 
-                     This  information  is modified by the <b>h</b> flag
+                     This information is modified by the  <b>h</b>  flag
                      for case folding.
 
               <b>${recipient</b>}
                      This macro expands to the complete recipient
                      address.
 
-                     A   command-line   argument   that  contains
-                     <b>${recipient</b>} expands into as  many  command-
+                     A  command-line   argument   that   contains
+                     <b>${recipient</b>}  expands  into as many command-
                      line arguments as there are recipients.
 
-                     This  information  is  modified  by  the <b>hqu</b>
+                     This information  is  modified  by  the  <b>hqu</b>
                      flags for quoting and case folding.
 
               <b>${sender</b>}
-                     This macro expands to  the  envelope  sender
+                     This  macro  expands  to the envelope sender
                      address.
 
-                     This  information  is modified by the <b>q</b> flag
+                     This information is modified by the  <b>q</b>  flag
                      for quoting.
 
               <b>${size</b>}
-                     This macro expands to Postfix's idea of  the
-                     message  size,  which is an approximation of
+                     This  macro expands to Postfix's idea of the
+                     message size, which is an  approximation  of
                      the size of the message as delivered.
 
               <b>${user</b>}
                      This macro expands to the username part of a
-                     recipient  address.   For  example,  with an
+                     recipient address.   For  example,  with  an
                      address <i>user+foo@domain</i> the username part is
                      <i>user</i>.
 
-                     A   command-line   argument   that  contains
-                     <b>${user</b>} expands into  as  many  command-line
+                     A  command-line   argument   that   contains
+                     <b>${user</b>}  expands  into  as many command-line
                      arguments as there are recipients.
 
-                     This  information  is modified by the <b>u</b> flag
+                     This information is modified by the  <b>u</b>  flag
                      for case folding.
 
-       In addition to the  form  ${<i>name</i>},  the  forms  $<i>name</i>  and
-       $(<i>name</i>)  are also recognized.  Specify <b>$$</b> where a single <b>$</b>
+       In  addition  to  the  form  ${<i>name</i>},  the forms $<i>name</i> and
+       $(<i>name</i>) are also recognized.  Specify <b>$$</b> where a single  <b>$</b>
        is wanted.
 
 <b>DIAGNOSTICS</b>
-       Command exit status codes are expected to follow the  con-
+       Command  exit status codes are expected to follow the con-
        ventions defined in &lt;<b>sysexits.h</b>&gt;.
 
-       Problems  and transactions are logged to <b>syslogd</b>(8).  Cor-
-       rupted message files are marked so that the queue  manager
+       Problems and transactions are logged to <b>syslogd</b>(8).   Cor-
+       rupted  message files are marked so that the queue manager
        can move them to the <b>corrupt</b> queue for further inspection.
 
 <b>SECURITY</b>
-       This program needs a dual personality  1)  to  access  the
-       private  Postfix  queue and IPC mechanisms, and 2) to exe-
+       This  program  needs  a  dual personality 1) to access the
+       private Postfix queue and IPC mechanisms, and 2)  to  exe-
        cute external commands as the specified user. It is there-
        fore security sensitive.
 
 <b>CONFIGURATION</b> <b>PARAMETERS</b>
-       The  following  <b>main.cf</b> parameters are especially relevant
-       to this program. See the Postfix <b>main.cf</b> file  for  syntax
-       details  and  for  default  values. Use the <b>postfix</b> <b>reload</b>
+       The following <b>main.cf</b> parameters are  especially  relevant
+       to  this  program. See the Postfix <b>main.cf</b> file for syntax
+       details and for default values.  Use  the  <b>postfix</b>  <b>reload</b>
        command after a configuration change.
 
 <b>Miscellaneous</b>
@@ -223,32 +227,32 @@ PIPE(8)                                                   PIPE(8)
               exported to non-Postfix processes.
 
        <b>mail</b><i>_</i><b>owner</b>
-              The  process  privileges  used while not running an
+              The process privileges used while  not  running  an
               external command.
 
 <b>Resource</b> <b>controls</b>
-       In the text below, <i>transport</i> is the first field in a  <b>mas-</b>
+       In  the text below, <i>transport</i> is the first field in a <b>mas-</b>
        <b>ter.cf</b> entry.
 
        <i>transport_</i><b>destination</b><i>_</i><b>concurrency</b><i>_</i><b>limit</b>
               Limit the number of parallel deliveries to the same
-              destination, for delivery via the named  <i>transport</i>.
-              The  default limit is taken from the <b>default</b><i>_</i><b>desti-</b>
-              <b>nation</b><i>_</i><b>concurrency</b><i>_</i><b>limit</b> parameter.  The  limit  is
+              destination,  for delivery via the named <i>transport</i>.
+              The default limit is taken from the  <b>default</b><i>_</i><b>desti-</b>
+              <b>nation</b><i>_</i><b>concurrency</b><i>_</i><b>limit</b>  parameter.   The limit is
               enforced by the Postfix queue manager.
 
        <i>transport_</i><b>destination</b><i>_</i><b>recipient</b><i>_</i><b>limit</b>
-              Limit  the  number of recipients per message deliv-
-              ery, for delivery  via  the  named  <i>transport</i>.  The
-              default  limit  is  taken from the <b>default</b><i>_</i><b>destina-</b>
-              <b>tion</b><i>_</i><b>recipient</b><i>_</i><b>limit</b>  parameter.   The   limit   is
+              Limit the number of recipients per  message  deliv-
+              ery,  for  delivery  via  the  named <i>transport</i>. The
+              default limit is taken  from  the  <b>default</b><i>_</i><b>destina-</b>
+              <b>tion</b><i>_</i><b>recipient</b><i>_</i><b>limit</b>   parameter.    The  limit  is
               enforced by the Postfix queue manager.
 
        <i>transport_</i><b>time</b><i>_</i><b>limit</b>
-              Limit  the  time  for delivery to external command,
-              for delivery via the named <b>transport</b>.  The  default
-              limit  is taken from the <b>command</b><i>_</i><b>time</b><i>_</i><b>limit</b> parame-
-              ter.  The limit is enforced by  the  Postfix  queue
+              Limit the time for delivery  to  external  command,
+              for  delivery  via the named <b>transport</b>. The default
+              limit is taken from the <b>command</b><i>_</i><b>time</b><i>_</i><b>limit</b>  parame-
+              ter.   The  limit  is enforced by the Postfix queue
               manager.
 
 <b>SEE</b> <b>ALSO</b>
@@ -258,7 +262,7 @@ PIPE(8)                                                   PIPE(8)
        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>
@@ -267,6 +271,5 @@ PIPE(8)                                                   PIPE(8)
        P.O. Box 704
        Yorktown Heights, NY 10598, USA
 
-                                                                1
-
+                                                          PIPE(8)
 </pre> </body> </html>
index 75168f09ff90e07b0ef8f3fb5ebefb235b24301b..0b402dc5793cbb54fc9d73697e0390771aaa8230 100644 (file)
@@ -1,12 +1,11 @@
 <html> <head> </head> <body> <pre>
-
 POSTALIAS(1)                                         POSTALIAS(1)
 
 <b>NAME</b>
        postalias - Postfix alias database maintenance
 
 <b>SYNOPSIS</b>
-       <b>postalias</b> [<b>-Nfinrvw</b>] [<b>-c</b> <i>config_dir</i>] [<b>-d</b> <i>key</i>] [<b>-q</b> <i>key</i>]
+       <b>postalias</b> [<b>-Nfinorvw</b>] [<b>-c</b> <i>config_dir</i>] [<b>-d</b> <i>key</i>] [<b>-q</b> <i>key</i>]
        [<i>file_type</i>:]<i>file_name</i> ...
 
 <b>DESCRIPTION</b>
@@ -16,6 +15,10 @@ POSTALIAS(1)                                         POSTALIAS(1)
        Sendmail  version  8,  and are expected to be suitable for
        the use as NIS alias maps.
 
+       If the result files do not exist they will be created with
+       the  same  group  and other read permissions as the source
+       file.
+
        While a database update is in progress, signal delivery is
        postponed,  and  an exclusive, advisory, lock is placed on
        the entire database, in order to avoid surprises in  spec-
@@ -55,25 +58,30 @@ POSTALIAS(1)                                         POSTALIAS(1)
               Postfix  does  whatever is the default for the host
               operating system.
 
-       <b>-q</b> <i>key</i> Search the specified maps for  <i>key</i>  and  print  the
-              first  value  found  on the standard output stream.
+       <b>-o</b>     Do not release root privileges  when  processing  a
+              non-root  input  file.  By default, <b>postalias</b> drops
+              root privileges and runs as the source  file  owner
+              instead.
+
+       <b>-q</b> <i>key</i> Search  the  specified  maps  for <i>key</i> and print the
+              first value found on the  standard  output  stream.
               The exit status is zero when the requested informa-
               tion was found.
 
               If a key value of <b>-</b> is specified, the program reads
-              key values  from  the  standard  input  stream  and
-              prints  one  line of <i>key:</i> <i>value</i> output for each key
-              that was found. The exit status  is  zero  when  at
+              key  values  from  the  standard  input  stream and
+              prints one line of <i>key:</i> <i>value</i> output for  each  key
+              that  was  found.  The  exit status is zero when at
               least one of the requested keys was found.
 
-       <b>-r</b>     When  updating a table, do not warn about duplicate
+       <b>-r</b>     When updating a table, do not warn about  duplicate
               entries; silently replace them.
 
        <b>-v</b>     Enable verbose logging for debugging purposes. Mul-
-              tiple  <b>-v</b>  options  make  the software increasingly
+              tiple <b>-v</b> options  make  the  software  increasingly
               verbose.
 
-       <b>-w</b>     When updating a table, do not warn about  duplicate
+       <b>-w</b>     When  updating a table, do not warn about duplicate
               entries; silently ignore them.
 
        Arguments:
@@ -81,35 +89,35 @@ POSTALIAS(1)                                         POSTALIAS(1)
        <i>file_type</i>
               The type of database to be produced.
 
-              <b>btree</b>  The   output   is   a   btree   file,  named
-                     <i>file_name</i><b>.db</b>.  This  is  available  only  on
+              <b>btree</b>  The  output   is   a   btree   file,   named
+                     <i>file_name</i><b>.db</b>.   This  is  available  only on
                      systems with support for <b>db</b> databases.
 
-              <b>dbm</b>    The  output  consists  of  two  files, named
-                     <i>file_name</i><b>.pag</b> and  <i>file_name</i><b>.dir</b>.   This  is
-                     available  only  on systems with support for
+              <b>dbm</b>    The output  consists  of  two  files,  named
+                     <i>file_name</i><b>.pag</b>  and  <i>file_name</i><b>.dir</b>.   This is
+                     available only on systems with  support  for
                      <b>dbm</b> databases.
 
-              <b>hash</b>   The  output  is   a   hashed   file,   named
-                     <i>file_name</i><b>.db</b>.   This  is  available  only on
+              <b>hash</b>   The   output   is   a   hashed  file,  named
+                     <i>file_name</i><b>.db</b>.  This  is  available  only  on
                      systems with support for <b>db</b> databases.
 
-              When no <i>file_type</i> is specified, the  software  uses
-              the  database  type specified via the <b>database</b><i>_</i><b>type</b>
-              configuration parameter.   The  default  value  for
+              When  no  <i>file_type</i> is specified, the software uses
+              the database type specified via  the  <b>database</b><i>_</i><b>type</b>
+              configuration  parameter.   The  default  value for
               this parameter depends on the host environment.
 
        <i>file_name</i>
-              The  name  of  the  alias database source file when
+              The name of the alias  database  source  file  when
               rebuilding a database.
 
 <b>DIAGNOSTICS</b>
-       Problems are logged to the standard error stream. No  out-
+       Problems  are logged to the standard error stream. No out-
        put means no problems were detected. Duplicate entries are
        skipped and are flagged with a warning.
 
        <b>postalias</b> terminates with zero exit status in case of suc-
-       cess  (including  successful <b>postmap</b> <b>-q</b> lookup) and termi-
+       cess (including successful <b>postalias</b> <b>-q</b> lookup) and termi-
        nates with non-zero exit status in case of failure.
 
 <b>ENVIRONMENT</b>
@@ -120,12 +128,12 @@ POSTALIAS(1)                                         POSTALIAS(1)
               Enable verbose logging for debugging purposes.
 
 <b>CONFIGURATION</b> <b>PARAMETERS</b>
-       The following <b>main.cf</b> parameters are  especially  relevant
-       to  this  program. See the Postfix <b>main.cf</b> file for syntax
+       The  following  <b>main.cf</b> parameters are especially relevant
+       to this program. See the Postfix <b>main.cf</b> file  for  syntax
        details and for default values.
 
        <b>database</b><i>_</i><b>type</b>
-              Default alias database type. On many UNIX  systems,
+              Default  alias database type. On many UNIX systems,
               the default type is either <b>dbm</b> or <b>hash</b>.
 
 <b>STANDARDS</b>
@@ -136,7 +144,7 @@ POSTALIAS(1)                                         POSTALIAS(1)
        <a href="sendmail.1.html">sendmail(1)</a> mail posting and compatibility interface.
 
 <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>
@@ -145,6 +153,5 @@ POSTALIAS(1)                                         POSTALIAS(1)
        P.O. Box 704
        Yorktown Heights, NY 10598, USA
 
-                                                                1
-
+                                                     POSTALIAS(1)
 </pre> </body> </html>
index d43547e4527e307172d5c04c61dff5989cbb0275..2fa962840cd0f75d6f2ed8d3d1683819a1f32e88 100644 (file)
@@ -1,5 +1,4 @@
 <html> <head> </head> <body> <pre>
-
 POSTCONF(1)                                           POSTCONF(1)
 
 <b>NAME</b>
@@ -36,7 +35,23 @@ POSTCONF(1)                                           POSTCONF(1)
               label that normally precedes the value.
 
        <b>-l</b>     List the names of  all  supported  mailbox  locking
-              methods.
+              methods.  Postfix supports the following methods:
+
+              <b>flock</b>  A  kernel-based  advisory locking method for
+                     local files only.  This  locking  method  is
+                     available only on systems with a BSD compat-
+                     ible library.
+
+              <b>fcntl</b>  A kernel-based advisory locking  method  for
+                     local and remote files.
+
+              <b>dotlock</b>
+                     An   application-level  locking  method.  An
+                     application locks a file named  <i>filename</i>  by
+                     creating  a  file  named <i>filename</i><b>.lock</b>.  The
+                     application is expected to  remove  its  own
+                     lock  file, as well as stale lock files that
+                     were left behind after abnormal termination.
 
        <b>-m</b>     List the names of all supported lookup table types.
 
@@ -59,6 +74,5 @@ POSTCONF(1)                                           POSTCONF(1)
        P.O. Box 704
        Yorktown Heights, NY 10598, USA
 
-                                                                1
-
+                                                      POSTCONF(1)
 </pre> </body> </html>
index b1dd861d5da8c8e5716235e97dc80bdb1610876d..d45e5188f16dc9ed4d616777210ea0f2316fe05d 100644 (file)
@@ -1,5 +1,4 @@
 <html> <head> </head> <body> <pre>
-
 POSTDROP(1)                                           POSTDROP(1)
 
 <b>NAME</b>
@@ -87,6 +86,5 @@ POSTDROP(1)                                           POSTDROP(1)
        P.O. Box 704
        Yorktown Heights, NY 10598, USA
 
-                                                                1
-
+                                                      POSTDROP(1)
 </pre> </body> </html>
index 925818342458a31c5ba678e1de381e0126a36085..6c1eee82ef9872f244958769d2ded2938254aeca 100644 (file)
@@ -1,12 +1,11 @@
 <html> <head> </head> <body> <pre>
-
 POSTMAP(1)                                             POSTMAP(1)
 
 <b>NAME</b>
        postmap - Postfix lookup table management
 
 <b>SYNOPSIS</b>
-       <b>postmap</b> [<b>-Nfinrvw</b>] [<b>-c</b> <i>config_dir</i>] [<b>-d</b> <i>key</i>] [<b>-q</b> <i>key</i>]
+       <b>postmap</b> [<b>-Nfinorvw</b>] [<b>-c</b> <i>config_dir</i>] [<b>-d</b> <i>key</i>] [<b>-q</b> <i>key</i>]
        [<i>file_type</i>:]<i>file_name</i> ...
 
 <b>DESCRIPTION</b>
@@ -80,25 +79,30 @@ POSTMAP(1)                                             POSTMAP(1)
               Postfix does whatever is the default for  the  host
               operating system.
 
-       <b>-q</b> <i>key</i> Search  the  specified  maps  for <i>key</i> and print the
-              first value found on the  standard  output  stream.
+       <b>-o</b>     Do  not  release  root privileges when processing a
+              non-root input file. By default, <b>postmap</b> drops root
+              privileges  and  runs  as  the  source  file  owner
+              instead.
+
+       <b>-q</b> <i>key</i> Search the specified maps for  <i>key</i>  and  print  the
+              first  value  found  on the standard output stream.
               The exit status is zero when the requested informa-
               tion was found.
 
               If a key value of <b>-</b> is specified, the program reads
-              key  values  from  the  standard  input  stream and
-              prints one line of <i>key</i> <i>value</i> output  for  each  key
-              that  was  found.  The  exit status is zero when at
+              key values  from  the  standard  input  stream  and
+              prints  one  line  of <i>key</i> <i>value</i> output for each key
+              that was found. The exit status  is  zero  when  at
               least one of the requested keys was found.
 
-       <b>-r</b>     When updating a table, do not warn about  duplicate
+       <b>-r</b>     When  updating a table, do not warn about duplicate
               entries; silently replace them.
 
        <b>-v</b>     Enable verbose logging for debugging purposes. Mul-
-              tiple <b>-v</b> options  make  the  software  increasingly
+              tiple  <b>-v</b>  options  make  the software increasingly
               verbose.
 
-       <b>-w</b>     When  updating a table, do not warn about duplicate
+       <b>-w</b>     When updating a table, do not warn about  duplicate
               entries; silently ignore them.
 
        Arguments:
@@ -106,25 +110,25 @@ POSTMAP(1)                                             POSTMAP(1)
        <i>file_type</i>
               The type of database to be produced.
 
-              <b>btree</b>  The output  file  is  a  btree  file,  named
-                     <i>file_name</i><b>.db</b>.   This  is  available  only on
+              <b>btree</b>  The  output  file  is  a  btree  file, named
+                     <i>file_name</i><b>.db</b>.  This  is  available  only  on
                      systems with support for <b>db</b> databases.
 
-              <b>dbm</b>    The output  consists  of  two  files,  named
-                     <i>file_name</i><b>.pag</b>  and  <i>file_name</i><b>.dir</b>.   This is
-                     available only on systems with  support  for
+              <b>dbm</b>    The  output  consists  of  two  files, named
+                     <i>file_name</i><b>.pag</b> and  <i>file_name</i><b>.dir</b>.   This  is
+                     available  only  on systems with support for
                      <b>dbm</b> databases.
 
-              <b>hash</b>   The  output  file  is  a  hashed file, named
-                     <i>file_name</i><b>.db</b>.  This  is  available  only  on
+              <b>hash</b>   The output file  is  a  hashed  file,  named
+                     <i>file_name</i><b>.db</b>.   This  is  available  only on
                      systems with support for <b>db</b> databases.
 
-              When  no  <i>file_type</i> is specified, the software uses
-              the database type specified via  the  <b>database</b><i>_</i><b>type</b>
+              When no <i>file_type</i> is specified, the  software  uses
+              the  database  type specified via the <b>database</b><i>_</i><b>type</b>
               configuration parameter.
 
        <i>file_name</i>
-              The  name  of  the  lookup  table  source file when
+              The name of  the  lookup  table  source  file  when
               rebuilding a database.
 
 <b>DIAGNOSTICS</b>
@@ -132,8 +136,8 @@ POSTMAP(1)                                             POSTMAP(1)
        stream. No output means no problems. Duplicate entries are
        skipped and are flagged with a warning.
 
-       <b>postmap</b> terminates with zero exit status in case  of  suc-
-       cess  (including  successful <b>postmap</b> <b>-q</b> lookup) and termi-
+       <b>postmap</b>  terminates  with zero exit status in case of suc-
+       cess (including successful <b>postmap</b> <b>-q</b> lookup)  and  termi-
        nates with non-zero exit status in case of failure.
 
 <b>ENVIRONMENT</b>
@@ -145,12 +149,12 @@ POSTMAP(1)                                             POSTMAP(1)
 
 <b>CONFIGURATION</b> <b>PARAMETERS</b>
        <b>database</b><i>_</i><b>type</b>
-              Default output database type.  On  many  UNIX  sys-
-              tems,  the  default database type is either <b>hash</b> or
+              Default  output  database  type.  On many UNIX sys-
+              tems, the default database type is either  <b>hash</b>  or
               <b>dbm</b>.
 
 <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>
@@ -159,6 +163,5 @@ POSTMAP(1)                                             POSTMAP(1)
        P.O. Box 704
        Yorktown Heights, NY 10598, USA
 
-                                                                1
-
+                                                       POSTMAP(1)
 </pre> </body> </html>
index 704b8abc3d426a8baff3933f9ede7530d7b3208e..f93096c47310a7f00c9a6496b1da9ffb2830828c 100644 (file)
@@ -1,5 +1,4 @@
 <html> <head> </head> <body> <pre>
-
 REGEXP_TABLE(5)                                   REGEXP_TABLE(5)
 
 <b>NAME</b>
@@ -82,6 +81,12 @@ REGEXP_TABLE(5)                                   REGEXP_TABLE(5)
        /^Subject: make money fast/     REJECT
        /^To: friend@public\.com/       REJECT
 
+<b>EXAMPLE</b> <b>BODY</b> <b>FILTER</b> <b>MAP</b>
+       # First skip over base 64 encoded text to save CPU cycles.
+       ~^[[:alnum:]+/]{60,}$~          OK
+
+       # Put your own body patterns here.
+
 <b>SEE</b> <b>ALSO</b>
        <a href="pcre_table.5.html">pcre_table(5)</a> format of PCRE tables
 
@@ -103,6 +108,5 @@ REGEXP_TABLE(5)                                   REGEXP_TABLE(5)
        P.O. Box 704
        Yorktown Heights, NY 10598, USA
 
-                                                                1
-
+                                                  REGEXP_TABLE(5)
 </pre> </body> </html>
index 92f478d06aec2b18001a9362e10539a1f8777100..b5293eebfabc1b5c3a02977a256a2cb820b794b7 100644 (file)
@@ -1,5 +1,4 @@
 <html> <head> </head> <body> <pre>
-
 TRIVIAL-REWRITE(8)                             TRIVIAL-REWRITE(8)
 
 <b>NAME</b>
@@ -141,6 +140,5 @@ TRIVIAL-REWRITE(8)                             TRIVIAL-REWRITE(8)
        P.O. Box 704
        Yorktown Heights, NY 10598, USA
 
-                                                                1
-
+                                               TRIVIAL-REWRITE(8)
 </pre> </body> </html>
index bde7921b6fa15af0c1e215822cf6f338c214e212..47c5f44f01dba0bc2a6aa2ccf4adb08088a2bfe0 100644 (file)
@@ -379,7 +379,7 @@ UCE software can be stopped by being strict here.
 
 By default, this restriction is applied when the client sends the
 RCPT TO command. In order to have the restriction take effect
-as soon as possible, specify <b>smtpd_delay_reject = yes</b> in
+as soon as possible, specify <b>smtpd_delay_reject = no</b> in
 the Postfix <b>main.cf</b> configuration file. Doing so may cause
 unexpected results with poorly implemented client software.
 
@@ -550,7 +550,7 @@ addresses this system accepts in MAIL FROM commands.
 
 By default, this restriction is applied when the client sends the
 RCPT TO command. In order to have the restriction take effect
-as soon as possible, specify <b>smtpd_delay_reject = yes</b> in
+as soon as possible, specify <b>smtpd_delay_reject = no</b> in
 the Postfix <b>main.cf</b> configuration file. Doing so may cause
 unexpected results with poorly implemented client software.
 
index be453054a52d83160211c272619ebec2a45e145e..19b77ed74391aa34f65b94375d88a11dce7da280 100644 (file)
@@ -187,16 +187,16 @@ case "$SYSTEM.$RELEASE" in
                    echo "See the RELEASE_NOTES file for more information." 1>&2
                    exit 1
                fi
-               # See where GDBM's ndbm.h include file sits.
-               if [ -f /usr/include/gdbm-ndbm.h ]
-               then
-                   CCARGS="$CCARGS -DHAS_DBM -DPATH_NDBM_H='<gdbm-ndbm.h>'"
-                   GDBM_LIBS=gdbm
-               elif [ -f /usr/include/gdbm/ndbm.h ]
-               then
-                   CCARGS="$CCARGS -DHAS_DBM -DPATH_NDBM_H='<gdbm/ndbm.h>'"
-                   GDBM_LIBS=gdbm
-               fi
+               # GDBM locks the DBM .pag file after open. This breaks postmap.
+               if [ -f /usr/include/gdbm-ndbm.h ]
+               then
+                   CCARGS="$CCARGS -DHAS_DBM -DPATH_NDBM_H='<gdbm-ndbm.h>'"
+                   GDBM_LIBS=gdbm
+               elif [ -f /usr/include/gdbm/ndbm.h ]
+               then
+                   CCARGS="$CCARGS -DHAS_DBM -DPATH_NDBM_H='<gdbm/ndbm.h>'"
+                   GDBM_LIBS=gdbm
+               fi
                SYSLIBS="-ldb"
                for name in nsl resolv $GDBM_LIBS
                do
@@ -309,5 +309,5 @@ OPT = $OPT
 DEBUG  = $DEBUG
 AWK    = $AWK
 STRCASE = $STRCASE
-EXPORT = AUXLIBS="$AUXLIBS" CCARGS="$CCARGS" OPT="$OPT" DEBUG="$DEBUG"
+EXPORT = AUXLIBS='$AUXLIBS' CCARGS='$CCARGS' OPT='$OPT' DEBUG='$DEBUG'
 EOF
index 0917606ff6b840ec51f81d8222e577fee3e23bf0..f461d29a38a20dd03ae6d6a6b61645d959f09e2b 100644 (file)
@@ -9,7 +9,7 @@ Postfix alias database maintenance
 .na
 .nf
 .fi
-\fBpostalias\fR [\fB-Nfinrvw\fR] [\fB-c \fIconfig_dir\fR]
+\fBpostalias\fR [\fB-Nfinorvw\fR] [\fB-c \fIconfig_dir\fR]
 [\fB-d \fIkey\fR] [\fB-q \fIkey\fR]
 [\fIfile_type\fR:]\fIfile_name\fR ...
 .SH DESCRIPTION
@@ -20,6 +20,9 @@ alias databases, or updates an existing one. The input and output
 file formats are expected to be compatible with Sendmail version 8,
 and are expected to be suitable for the use as NIS alias maps.
 
+If the result files do not exist they will be created with the
+same group and other read permissions as the source file.
+
 While a database update is in progress, signal delivery is
 postponed, and an exclusive, advisory, lock is placed on the
 entire database, in order to avoid surprises in spectator
@@ -51,6 +54,10 @@ a new database from the entries in \fBfile_name\fR.
 Don't include the terminating null character that terminates lookup
 keys and values. By default, Postfix does whatever is the default for
 the host operating system.
+.IP \fB-o\fR
+Do not release root privileges when processing a non-root
+input file. By default, \fBpostalias\fR drops root privileges
+and runs as the source file owner instead.
 .IP "\fB-q \fIkey\fR"
 Search the specified maps for \fIkey\fR and print the first value
 found on the standard output stream. The exit status is zero
@@ -99,7 +106,7 @@ no problems were detected. Duplicate entries are skipped and are
 flagged with a warning.
 
 \fBpostalias\fR terminates with zero exit status in case of success
-(including successful \fBpostmap -q\fR lookup) and terminates
+(including successful \fBpostalias -q\fR lookup) and terminates
 with non-zero exit status in case of failure.
 .SH ENVIRONMENT
 .na
index 291bc0dd177a203d0ee58e92c9bc4576bbb44f2b..20689d4f3c5d3180434f08bd5c9941b2e5f06b98 100644 (file)
@@ -38,6 +38,20 @@ Show parameter values only, not the ``name = '' label
 that normally precedes the value.
 .IP \fB-l\fR
 List the names of all supported mailbox locking methods.
+Postfix supports the following methods:
+.RS
+.IP \fBflock\fR
+A kernel-based advisory locking method for local files only.
+This locking method is available only on systems with a BSD
+compatible library.
+.IP \fBfcntl\fR
+A kernel-based advisory locking method for local and remote files.
+.IP \fBdotlock\fR
+An application-level locking method. An application locks a file
+named \fIfilename\fR by creating a file named \fIfilename\fB.lock\fR.
+The application is expected to remove its own lock file, as well as
+stale lock files that were left behind after abnormal termination.
+.RE
 .IP \fB-m\fR
 List the names of all supported lookup table types.
 .IP \fB-n\fR
index d5385d407611eb2bdd370ff75ef3a2efb20b13d6..da50c768d7db60039f951ab46c0965a5a0afa565 100644 (file)
@@ -9,7 +9,7 @@ Postfix lookup table management
 .na
 .nf
 .fi
-\fBpostmap\fR [\fB-Nfinrvw\fR] [\fB-c \fIconfig_dir\fR]
+\fBpostmap\fR [\fB-Nfinorvw\fR] [\fB-c \fIconfig_dir\fR]
 [\fB-d \fIkey\fR] [\fB-q \fIkey\fR]
 [\fIfile_type\fR:]\fIfile_name\fR ...
 .SH DESCRIPTION
@@ -75,6 +75,10 @@ a new database from the entries in \fBfile_name\fR.
 Don't include the terminating null character that terminates lookup
 keys and values. By default, Postfix does whatever is the default for
 the host operating system.
+.IP \fB-o\fR
+Do not release root privileges when processing a non-root
+input file. By default, \fBpostmap\fR drops root privileges
+and runs as the source file owner instead.
 .IP "\fB-q \fIkey\fR"
 Search the specified maps for \fIkey\fR and print the first value
 found on the standard output stream. The exit status is zero
index 0c964490927ea75a53a8916d75345a12f0ba7a3b..8f7b99d6c1edfa7746d14db359f335ea435f0fcd 100644 (file)
@@ -119,7 +119,7 @@ Accept the address etc. that matches the pattern.
 An all-numerical result is treated as OK. This format is
 generated by address-based relay authorization schemes.
 .IP \fIrestriction...\fR
-Apply the named UCE restriction(s) (\fBpermit\fR, \fRreject\fR,
+Apply the named UCE restriction(s) (\fBpermit\fR, \fBreject\fR,
 \fBreject_unauth_destination\fR, and so on).
 .SH REGULAR EXPRESSION TABLES
 .na
index 598839ee0a36d914dfb4ae5387638f6b640551ca..f57d3f2c75c06fd9729f07853070321491deff5d 100644 (file)
@@ -77,6 +77,14 @@ or $(n) if they aren't followed by whitespace.
 .nf
 /^Subject: make money fast/     REJECT
 /^To: friend@public\\.com/       REJECT
+.SH EXAMPLE BODY FILTER MAP
+.na
+.nf
+# First skip over base 64 encoded text to save CPU cycles.
+# Requires PCRE version 3.
+~^[[:alnum:]+/]{60,}$~          OK
+
+# Put your own body patterns here.
 .SH SEE ALSO
 .na
 .nf
index b561a4b149aeb01501c25edca74da3909eed05ca..209bb8d07ef32583fa26cd928605c1b62acdd2ae 100644 (file)
@@ -78,6 +78,13 @@ by whitespace.
 # These were once common in junk mail.
 /^Subject: make money fast/     REJECT
 /^To: friend@public\\.com/       REJECT
+.SH EXAMPLE BODY FILTER MAP
+.na
+.nf
+# First skip over base 64 encoded text to save CPU cycles.
+~^[[:alnum:]+/]{60,}$~          OK
+
+# Put your own body patterns here.
 .SH SEE ALSO
 .na
 .nf
index 65e566e480c9872dcf3aec7f4b79c29c5a83a217..97a9e873efb1f9ddaeab295dabcc53e836793115 100644 (file)
@@ -50,7 +50,7 @@ entry for the pipe-based delivery transport.
 .fi
 The external command attributes are given in the \fBmaster.cf\fR
 file at the end of a service definition.  The syntax is as follows:
-.IP "\fBflags=BFRhqu.>\fR (optional)"
+.IP "\fBflags=BDFRhqu.>\fR (optional)"
 Optional message processing flags. By default, a message is
 copied unchanged.
 .RS
@@ -58,6 +58,10 @@ copied unchanged.
 Append a blank line at the end of each message. This is required
 by some mail user agents that recognize "\fBFrom \fR" lines only
 when preceded by a blank line.
+.IP \fBD\fR
+Prepend a "\fBDelivered-To: \fIrecipient\fR" message header with the
+envelope recipient address. Note: for this to work, the
+\fItransport\fB_destination_recipient_limit\fR must be 1.
 .IP \fBF\fR
 Prepend a "\fBFrom \fIsender time_stamp\fR" envelope header to
 the message content.
index 36713ab09a449bd76611d1f11b57e5d0a1d60ddc..cd77ecfe935fbd7cfdb610d2c6da154feb22a29c 100644 (file)
 #      An all-numerical result is treated as OK. This format is
 #      generated by address-based relay authorization schemes.
 # .IP \fIrestriction...\fR
-#      Apply the named UCE restriction(s) (\fBpermit\fR, \fRreject\fR,
+#      Apply the named UCE restriction(s) (\fBpermit\fR, \fBreject\fR,
 #      \fBreject_unauth_destination\fR, and so on).
 # REGULAR EXPRESSION TABLES
 # .ad
index 69c8488b2856a0daeeedbf8c8b6af71aca3a5ad9..5e6e5d5da8a56e33beac387e9ad0bf264e134dcd 100644 (file)
 # EXAMPLE HEADER FILTER MAP
 #      /^Subject: make money fast/     REJECT
 #      /^To: friend@public\\.com/       REJECT
+# EXAMPLE BODY FILTER MAP
+#      # First skip over base 64 encoded text to save CPU cycles.
+#      # Requires PCRE version 3.
+#      ~^[[:alnum:]+/]{60,}$~          OK
+#
+#      # Put your own body patterns here.
 # SEE ALSO
 #      regexp_table(5) format of POSIX regular expression tables
 # AUTHOR(S)
index bd6cb7f724f4d81f95265539f6a8761d2eea6824..18578a7e84e43740c72f02f53e7c11112e89b4ad 100644 (file)
 #      # These were once common in junk mail.
 #      /^Subject: make money fast/     REJECT
 #      /^To: friend@public\\.com/       REJECT
+# EXAMPLE BODY FILTER MAP
+#      # First skip over base 64 encoded text to save CPU cycles.
+#      ~^[[:alnum:]+/]{60,}$~          OK
+#
+#      # Put your own body patterns here.
 # SEE ALSO
 #      pcre_table(5) format of PCRE tables
 # AUTHOR(S)
index 6d75053046a682b25534d5f1771f2ac927ad5a36..e3c6863f9381460f4b34c4ee2ce85e426a8babf8 100644 (file)
   * Patches change the patchlevel and the release date. Snapshots change the
   * release date only, unless they include the same bugfix as a patch release.
   */
+#define MAIL_RELEASE_DATE      "20020501"
+
 #define VAR_MAIL_VERSION       "mail_version"
-#define DEF_MAIL_VERSION       "1.1.7-$mail_release_date"
+#define DEF_MAIL_VERSION       "1.1.7-" MAIL_RELEASE_DATE
 extern char *var_mail_version;
 
  /*
   * Release date.
   */
 #define VAR_MAIL_RELEASE       "mail_release_date"
-#define DEF_MAIL_RELEASE       "20020331"
+#define DEF_MAIL_RELEASE       MAIL_RELEASE_DATE
 extern char *var_mail_release;
 
 /* LICENSE
index fd216df084f0c659b11e9e6007b5196ab0c98b8b..0d7c9e7291888774a4352ea43bfce76b03d23383 100644 (file)
 
 #include <sys_defs.h>
 
+/* Global library. */
+
+#include "mail_conf.h"
+
 /* Utility library. */
 
 #include <msg.h>
 
 /* mkmap_db_open - create or open database */
 
+/*
+ * db_mpool_size" is defined in util/dict_db.c and defaults to 256K,
+ * which works well for the lookup code.
+ *
+ * We use a larger memory pool when building ".db" files.
+ * For "hash" files performance degrades rapidly unless the memory pool
+ * is O(file size).
+ *
+ * For "btree" files peformance is good with sorted input even for small
+ * memory pools, but with random input degrades rapidly unless the memory
+ * pool is O(file size).
+ */
+extern int db_mpool_size;
+
+#define VAR_MPOOL_SIZE "db_mkmap_mpool_size"
+#define DEF_MPOOL_SIZE 16777216        /* 16MB */
+
 static MKMAP *mkmap_db_open(const char *path,
                                  DICT *(*db_open) (const char *, int, int))
 {
     MKMAP  *mkmap = (MKMAP *) mymalloc(sizeof(*mkmap));
 
+    /* Override default mpool size for map rebuilds */
+    db_mpool_size = get_mail_conf_int(VAR_MPOOL_SIZE, DEF_MPOOL_SIZE, 0, 0);
+
     /*
      * Fill in the generic members.
      */
index c4b7b7b4ba4f10ec1b1a56350b237355b4f42217..cb6664b39cfdc675cb44ea1e14064375b7434d2a 100644 (file)
@@ -1,6 +1,6 @@
 /*++
 /* NAME
-/*     mkmap 3
+/*     mkmap_dbm 3
 /* SUMMARY
 /*     create or open database, DBM style
 /* SYNOPSIS
index 9794c697cfcbc97dd9552d16cece35787fa6939b..8061389a3ba6ee4b2bd354adf604271e2b1e7adc 100644 (file)
@@ -40,7 +40,7 @@
 /* .fi
 /*     The external command attributes are given in the \fBmaster.cf\fR
 /*     file at the end of a service definition.  The syntax is as follows:
-/* .IP "\fBflags=BFRhqu.>\fR (optional)"
+/* .IP "\fBflags=BDFRhqu.>\fR (optional)"
 /*     Optional message processing flags. By default, a message is
 /*     copied unchanged.
 /* .RS
 /*     Append a blank line at the end of each message. This is required
 /*     by some mail user agents that recognize "\fBFrom \fR" lines only
 /*     when preceded by a blank line.
+/* .IP \fBD\fR
+/*     Prepend a "\fBDelivered-To: \fIrecipient\fR" message header with the
+/*     envelope recipient address. Note: for this to work, the
+/*     \fItransport\fB_destination_recipient_limit\fR must be 1.
 /* .IP \fBF\fR
 /*     Prepend a "\fBFrom \fIsender time_stamp\fR" envelope header to
 /*     the message content.
@@ -580,6 +584,9 @@ static void get_service_attr(PIPE_ATTR *attr, char **argv)
                case 'R':
                    attr->flags |= MAIL_COPY_RETURN_PATH;
                    break;
+               case 'D':
+                   attr->flags |= MAIL_COPY_DELIVERED;
+                   break;
                case 'h':
                    attr->flags |= PIPE_OPT_FOLD_HOST;
                    break;
@@ -781,6 +788,19 @@ static int deliver_message(DELIVER_REQUEST *request, char *service, char **argv)
        get_service_attr(&attr, argv);
     }
 
+    /*
+     * The D flag cannot be specified for multi-recipient deliveries.
+     */
+    if ((attr.flags & MAIL_COPY_DELIVERED) && (rcpt_list->len > 1)) {
+       deliver_status = eval_command_status(PIPE_STAT_DEFER, service,
+                                            request, request->fp,
+                                            "mailer configuration error");
+       msg_warn("pipe flag `D' requires %s_destination_recipient_limit = 1",
+                service);
+       DELIVER_MSG_CLEANUP();
+       return (deliver_status);
+    }
+
     /*
      * Check that this agent accepts messages this large.
      */
@@ -831,6 +851,7 @@ static int deliver_message(DELIVER_REQUEST *request, char *service, char **argv)
                                  PIPE_CMD_TIME_LIMIT, conf.time_limit,
                                  PIPE_CMD_EOL, STR(attr.eol),
                                  PIPE_CMD_EXPORT, export_env->argv,
+                            PIPE_CMD_DELIVERED, rcpt_list->info[0].address,
                                  PIPE_CMD_END);
     argv_free(export_env);
 
index 6daf0fff6d4b74ae3ccf69efd4711fc24fadd4b8..83eb23e959ffab4d617a2c1e49d3c57307f002c5 100644 (file)
@@ -5,7 +5,7 @@
 /*     Postfix alias database maintenance
 /* SYNOPSIS
 /* .fi
-/*     \fBpostalias\fR [\fB-Nfinrvw\fR] [\fB-c \fIconfig_dir\fR]
+/*     \fBpostalias\fR [\fB-Nfinorvw\fR] [\fB-c \fIconfig_dir\fR]
 /*             [\fB-d \fIkey\fR] [\fB-q \fIkey\fR]
 /*             [\fIfile_type\fR:]\fIfile_name\fR ...
 /* DESCRIPTION
@@ -14,6 +14,9 @@
 /*     file formats are expected to be compatible with Sendmail version 8,
 /*     and are expected to be suitable for the use as NIS alias maps.
 /*
+/*     If the result files do not exist they will be created with the
+/*     same group and other read permissions as the source file.
+/*
 /*     While a database update is in progress, signal delivery is
 /*     postponed, and an exclusive, advisory, lock is placed on the
 /*     entire database, in order to avoid surprises in spectator
 /*     Don't include the terminating null character that terminates lookup
 /*     keys and values. By default, Postfix does whatever is the default for
 /*     the host operating system.
+/* .IP \fB-o\fR
+/*     Do not release root privileges when processing a non-root
+/*     input file. By default, \fBpostalias\fR drops root privileges
+/*     and runs as the source file owner instead.
 /* .IP "\fB-q \fIkey\fR"
 /*     Search the specified maps for \fIkey\fR and print the first value
 /*     found on the standard output stream. The exit status is zero
@@ -91,7 +98,7 @@
 /*     flagged with a warning.
 /*
 /*     \fBpostalias\fR terminates with zero exit status in case of success
-/*     (including successful \fBpostmap -q\fR lookup) and terminates
+/*     (including successful \fBpostalias -q\fR lookup) and terminates
 /*     with non-zero exit status in case of failure.
 /* ENVIRONMENT
 /* .ad
 #include <split_at.h>
 #include <get_hostname.h>
 #include <vstring_vstream.h>
+#include <set_eugid.h>
 
 /* Global library. */
 
 
 #define STR    vstring_str
 
+#define POSTALIAS_FLAG_AS_OWNER        (1<<0)  /* open dest as owner of source */
+
 /* postalias - create or update alias database */
 
-static void postalias(char *map_type, char *path_name,
+static void postalias(char *map_type, char *path_name, int postalias_flags,
                              int open_flags, int dict_flags)
 {
     VSTREAM *source_fp;
@@ -174,6 +184,8 @@ static void postalias(char *map_type, char *path_name,
     TOK822 *key_list;
     TOK822 *colon;
     TOK822 *value_list;
+    struct stat st;
+    mode_t  saved_mask;
 
     /*
      * Initialize.
@@ -187,6 +199,24 @@ static void postalias(char *map_type, char *path_name,
     } else if ((source_fp = vstream_fopen(path_name, O_RDONLY, 0)) == 0) {
        msg_fatal("open %s: %m", path_name);
     }
+    if (fstat(vstream_fileno(source_fp), &st) < 0)
+       msg_fatal("fstat %s: %m", path_name);
+
+    /*
+     * Turn off group/other read permissions as indicated in the source file.
+     */
+    if (S_ISREG(st.st_mode))
+       saved_mask = umask(022 | (~st.st_mode & 077));
+
+    /*
+     * If running as root, run as the owner of the source file, so that the
+     * result shows proper ownership, and so that a bug in postalias does not
+     * allow privilege escalation.
+     */
+    if ((postalias_flags & POSTALIAS_FLAG_AS_OWNER) && getuid() == 0
+       && (st.st_uid != geteuid() || st.st_gid != getegid()))
+       set_eugid(st.st_uid, st.st_gid);
+
 
     /*
      * Open the database, create it when it does not exist, truncate it when
@@ -194,6 +224,12 @@ static void postalias(char *map_type, char *path_name,
      */
     mkmap = mkmap_open(map_type, path_name, open_flags, dict_flags);
 
+    /*
+     * And restore the umask, in case it matters.
+     */
+    if (S_ISREG(st.st_mode))
+       umask(saved_mask);
+
     /*
      * Add records to the database.
      */
@@ -439,7 +475,7 @@ static int postalias_delete(const char *map_type, const char *map_name,
 
 static NORETURN usage(char *myname)
 {
-    msg_fatal("usage: %s [-Nfinrvw] [-c config_dir] [-d key] [-q key] [map_type:]file...",
+    msg_fatal("usage: %s [-Nfinorvw] [-c config_dir] [-d key] [-q key] [map_type:]file...",
              myname);
 }
 
@@ -450,6 +486,7 @@ int     main(int argc, char **argv)
     int     fd;
     char   *slash;
     struct stat st;
+    int     postalias_flags = POSTALIAS_FLAG_AS_OWNER;
     int     open_flags = O_RDWR | O_CREAT | O_TRUNC;
     int     dict_flags = DICT_FLAG_DUP_WARN | DICT_FLAG_FOLD_KEY;
     char   *query = 0;
@@ -489,7 +526,7 @@ int     main(int argc, char **argv)
     /*
      * Parse JCL.
      */
-    while ((ch = GETOPT(argc, argv, "Nc:d:finq:rvw")) > 0) {
+    while ((ch = GETOPT(argc, argv, "Nc:d:finoq:rvw")) > 0) {
        switch (ch) {
        default:
            usage(argv[0]);
@@ -517,6 +554,9 @@ int     main(int argc, char **argv)
            dict_flags |= DICT_FLAG_TRY0NULL;
            dict_flags &= ~DICT_FLAG_TRY1NULL;
            break;
+       case 'o':
+           postalias_flags &= ~POSTALIAS_FLAG_AS_OWNER;
+           break;
        case 'q':
            if (query || delkey)
                msg_fatal("specify only one of -q or -d");
@@ -580,9 +620,11 @@ int     main(int argc, char **argv)
            usage(argv[0]);
        while (optind < argc) {
            if ((path_name = split_at(argv[optind], ':')) != 0) {
-               postalias(argv[optind], path_name, open_flags, dict_flags);
+               postalias(argv[optind], path_name, postalias_flags,
+                         open_flags, dict_flags);
            } else {
-               postalias(var_db_type, argv[optind], open_flags, dict_flags);
+               postalias(var_db_type, argv[optind], postalias_flags,
+                         open_flags, dict_flags);
            }
            optind++;
        }
index ffcc7fbd86c97581053ab175ea0b070a0753b2e0..3eae38b0dc041f6907e7ea57fd681dedbbfe5cc3 100644 (file)
 /*     that normally precedes the value.
 /* .IP \fB-l\fR
 /*     List the names of all supported mailbox locking methods.
+/*     Postfix supports the following methods:
+/* .RS
+/* .IP \fBflock\fR
+/*     A kernel-based advisory locking method for local files only.
+/*     This locking method is available only on systems with a BSD
+/*     compatible library.
+/* .IP \fBfcntl\fR
+/*     A kernel-based advisory locking method for local and remote files.
+/* .IP \fBdotlock\fR
+/*     An application-level locking method. An application locks a file
+/*     named \fIfilename\fR by creating a file named \fIfilename\fB.lock\fR.
+/*     The application is expected to remove its own lock file, as well as
+/*     stale lock files that were left behind after abnormal termination.
+/* .RE
 /* .IP \fB-m\fR
 /*     List the names of all supported lookup table types.
 /* .IP \fB-n\fR
@@ -303,7 +317,7 @@ static void edit_parameters(int argc, char **argv)
        if (strchr(cp, '\n') != 0)
            msg_fatal("edit accepts no multi-line input");
        while (ISSPACE(*cp))
-            cp++;
+           cp++;
        if (*cp == '#')
            msg_fatal("edit accepts no comment input");
        if ((err = split_nameval(cp, &edit_key, &edit_val)) != 0)
@@ -352,7 +366,7 @@ static void edit_parameters(int argc, char **argv)
     interesting = 0;
     while (vstring_get(buf, src) != VSTREAM_EOF) {
        for (cp = STR(buf); ISSPACE(*cp) /* including newline */ ; cp++)
-             /* void */ ;
+            /* void */ ;
        /* Copy comment, all-whitespace, or empty line. */
        if (*cp == '#' || *cp == 0) {
            vstream_fputs(STR(buf), dst);
@@ -800,7 +814,7 @@ int     main(int argc, char **argv)
     /*
      * Parse JCL.
      */
-    while ((ch = GETOPT(argc, argv, "c:dehmlnv")) > 0) {
+    while ((ch = GETOPT(argc, argv, "c:deEhmlnv")) > 0) {
        switch (ch) {
        case 'c':
            if (setenv(CONF_ENV_PATH, optarg, 1) < 0)
@@ -812,6 +826,18 @@ int     main(int argc, char **argv)
        case 'e':
            mode |= EDIT_MAIN;
            break;
+
+           /*
+            * People, this does not work unless you properly handle default
+            * settings. For example, fast_flush_domains = $relay_domains
+            * must not evaluate to the empty string when relay_domains is
+            * left at its default setting of $mydestination.
+            */
+#if 0
+       case 'E':
+           mode |= SHOW_EVAL;
+           break;
+#endif
        case 'h':
            mode &= ~SHOW_NAME;
            break;
index 40579938e7a7d728b6d30ed773ac5819b442eca3..fe85e21ee459072398de40d54f1241f87b954cb1 100644 (file)
@@ -5,7 +5,7 @@
 /*     Postfix lookup table management
 /* SYNOPSIS
 /* .fi
-/*     \fBpostmap\fR [\fB-Nfinrvw\fR] [\fB-c \fIconfig_dir\fR]
+/*     \fBpostmap\fR [\fB-Nfinorvw\fR] [\fB-c \fIconfig_dir\fR]
 /*             [\fB-d \fIkey\fR] [\fB-q \fIkey\fR]
 /*             [\fIfile_type\fR:]\fIfile_name\fR ...
 /* DESCRIPTION
 /*     Don't include the terminating null character that terminates lookup
 /*     keys and values. By default, Postfix does whatever is the default for
 /*     the host operating system.
+/* .IP \fB-o\fR
+/*     Do not release root privileges when processing a non-root
+/*     input file. By default, \fBpostmap\fR drops root privileges
+/*     and runs as the source file owner instead.
 /* .IP "\fB-q \fIkey\fR"
 /*     Search the specified maps for \fIkey\fR and print the first value
 /*     found on the standard output stream. The exit status is zero
 #include <stringops.h>
 #include <split_at.h>
 #include <vstring_vstream.h>
+#include <set_eugid.h>
 
 /* Global library. */
 
 
 #define STR    vstring_str
 
+#define POSTMAP_FLAG_AS_OWNER  (1<<0)  /* open dest as owner of source */
+
 /* postmap - create or update mapping database */
 
-static void postmap(char *map_type, char *path_name,
+static void postmap(char *map_type, char *path_name, int postmap_flags,
                            int open_flags, int dict_flags)
 {
     VSTREAM *source_fp;
@@ -206,6 +213,15 @@ static void postmap(char *map_type, char *path_name,
     if (S_ISREG(st.st_mode))
        saved_mask = umask(022 | (~st.st_mode & 077));
 
+    /*
+     * If running as root, run as the owner of the source file, so that the
+     * result shows proper ownership, and so that a bug in postmap does not
+     * allow privilege escalation.
+     */
+    if ((postmap_flags & POSTMAP_FLAG_AS_OWNER) && getuid() == 0
+       && (st.st_uid != geteuid() || st.st_gid != getegid()))
+       set_eugid(st.st_uid, st.st_gid);
+
     /*
      * Open the database, optionally create it when it does not exist,
      * optionally truncate it when it does exist, and lock out any
@@ -410,7 +426,7 @@ static int postmap_delete(const char *map_type, const char *map_name,
 
 static NORETURN usage(char *myname)
 {
-    msg_fatal("usage: %s [-Nfinrvw] [-c config_dir] [-d key] [-q key] [map_type:]file...",
+    msg_fatal("usage: %s [-Nfinorvw] [-c config_dir] [-d key] [-q key] [map_type:]file...",
              myname);
 }
 
@@ -421,6 +437,7 @@ int     main(int argc, char **argv)
     int     fd;
     char   *slash;
     struct stat st;
+    int     postmap_flags = POSTMAP_FLAG_AS_OWNER;
     int     open_flags = O_RDWR | O_CREAT | O_TRUNC;
     int     dict_flags = DICT_FLAG_DUP_WARN | DICT_FLAG_FOLD_KEY;
     char   *query = 0;
@@ -460,7 +477,7 @@ int     main(int argc, char **argv)
     /*
      * Parse JCL.
      */
-    while ((ch = GETOPT(argc, argv, "Nc:d:finq:rvw")) > 0) {
+    while ((ch = GETOPT(argc, argv, "Nc:d:finoq:rvw")) > 0) {
        switch (ch) {
        default:
            usage(argv[0]);
@@ -488,6 +505,9 @@ int     main(int argc, char **argv)
            dict_flags |= DICT_FLAG_TRY0NULL;
            dict_flags &= ~DICT_FLAG_TRY1NULL;
            break;
+       case 'o':
+           postmap_flags &= ~POSTMAP_FLAG_AS_OWNER;
+           break;
        case 'q':
            if (query || delkey)
                msg_fatal("specify only one of -q or -d");
@@ -551,9 +571,11 @@ int     main(int argc, char **argv)
            usage(argv[0]);
        while (optind < argc) {
            if ((path_name = split_at(argv[optind], ':')) != 0) {
-               postmap(argv[optind], path_name, open_flags, dict_flags);
+               postmap(argv[optind], path_name, postmap_flags,
+                       open_flags, dict_flags);
            } else {
-               postmap(var_db_type, argv[optind], open_flags, dict_flags);
+               postmap(var_db_type, argv[optind], postmap_flags,
+                       open_flags, dict_flags);
            }
            optind++;
        }
index 80a97aed73177ff8b78412c1eaa3a81a79c184ee..c7e06a811752b0bf7000a63f9529b20890eb8ef8 100644 (file)
@@ -184,6 +184,16 @@ static void show_queue(void)
            msg_warn("close: %m");
     }
 
+    /*
+     * Don't assume that the mail system is down when the user has
+     * insufficient permission to access the showq socket.
+     */
+    else if (errno != ECONNREFUSED && errno != ENOENT) {
+       msg_fatal_status(EX_SOFTWARE,
+                        "Connect to the %s %s service: %m",
+                        var_mail_name, var_showq_service);
+    }
+
     /*
      * When the mail system is down, the superuser can still access the queue
      * directly. Just run the showq program in stand-alone mode.
@@ -255,7 +265,7 @@ static void flush_site(const char *site)
 
 static NORETURN usage(void)
 {
-    msg_fatal_status(EX_USAGE, "usage: specify one of -f, -p, or -s");
+    msg_fatal_status(EX_USAGE, "usage: postqueue -f | postqueue -p | postqueue -s site");
 }
 
 /* main - the main program */
@@ -270,6 +280,7 @@ int     main(int argc, char **argv)
     char   *site_to_flush = 0;
     ARGV   *import_env;
     char   *last;
+    int     bad_site;
 
     /*
      * Be consistent with file permissions.
@@ -319,7 +330,6 @@ int     main(int argc, char **argv)
                usage();
            mode = PQ_MODE_MAILQ_LIST;
            break;
-           break;
        case 's':                               /* flush site */
            if (mode != PQ_MODE_DEFAULT)
                usage();
@@ -333,6 +343,8 @@ int     main(int argc, char **argv)
            usage();
        }
     }
+    if (argc > optind)
+       usage();
 
     /*
      * Further initialization...
@@ -362,21 +374,20 @@ int     main(int argc, char **argv)
      * Further input validation.
      */
     if (site_to_flush != 0) {
+       bad_site = 0;
        if (*site_to_flush == '['
            && *(last = site_to_flush + strlen(site_to_flush) - 1) == ']') {
            *last = 0;
-           if (!valid_hostaddr(site_to_flush + 1, DONT_GRIPE))
-               site_to_flush = 0;
+           bad_site = !valid_hostaddr(site_to_flush + 1, DONT_GRIPE);
            *last = ']';
        } else {
-           if (!valid_hostname(site_to_flush, DONT_GRIPE)
-               && !valid_hostaddr(site_to_flush, DONT_GRIPE))
-               site_to_flush = 0;
+           bad_site = (!valid_hostname(site_to_flush, DONT_GRIPE)
+                       && !valid_hostaddr(site_to_flush, DONT_GRIPE));
        }
-       if (site_to_flush == 0)
+       if (bad_site)
            msg_fatal_status(EX_USAGE,
              "Cannot flush mail queue - invalid destination: \"%.100s%s\"",
-                            optarg, strlen(optarg) > 100 ? "..." : "");
+                  site_to_flush, strlen(site_to_flush) > 100 ? "..." : "");
     }
 
     /*
index 6745c66611f2ced733762bcaa9e3b55952797191..6cebfec53495bc48f63aad69955e08c4261f20b5 100644 (file)
@@ -312,6 +312,14 @@ int     smtp_xfer(SMTP_STATE *state)
        } \
     } while (0)
 
+#define QUOTE_ADDRESS(addr) do { \
+       if (*(addr)) { \
+           quote_821_local(state->scratch, addr); \
+           myfree(addr); \
+           addr = mystrdup(vstring_str(state->scratch)); \
+       } \
+    } while (0)
+
 #define RETURN(x) do { vstring_free(next_command); return (x); } while (0)
 
 #define SENDER_IS_AHEAD \
@@ -399,9 +407,11 @@ int     smtp_xfer(SMTP_STATE *state)
             * Build the MAIL FROM command.
             */
        case SMTP_STATE_MAIL:
-           if (*request->sender)
-               if (var_disable_dns == 0)
-                   REWRITE_ADDRESS(request->sender);
+           if (var_disable_dns == 0) {
+               REWRITE_ADDRESS(request->sender);
+           } else {
+               QUOTE_ADDRESS(request->sender);
+           }
            vstring_sprintf(next_command, "MAIL FROM:<%s>", request->sender);
            if (state->features & SMTP_FEATURE_SIZE)
                vstring_sprintf_append(next_command, " SIZE=%lu",
@@ -415,8 +425,11 @@ int     smtp_xfer(SMTP_STATE *state)
             */
        case SMTP_STATE_RCPT:
            rcpt = request->rcpt_list.info + send_rcpt;
-           if (var_disable_dns == 0)
+           if (var_disable_dns == 0) {
                REWRITE_ADDRESS(rcpt->address);
+           } else {
+               QUOTE_ADDRESS(rcpt->address);
+           }
            vstring_sprintf(next_command, "RCPT TO:<%s>", rcpt->address);
            if ((next_rcpt = send_rcpt + 1) == request->rcpt_list.len)
                next_state = SMTP_STATE_DATA;
index 1e68eaa4a49510c6295edd5dc190a7c061d38ad2..497907ea84c16f9998f80c0b23875dec0798618e 100644 (file)
@@ -1314,6 +1314,8 @@ static SMTPD_CMD smtpd_cmd_table[] = {
     "ETRN", etrn_cmd, SMTPD_CMD_FLAG_LIMIT,
     "QUIT", quit_cmd, 0,
     "Received:", 0, SMTPD_CMD_FLAG_HEADER,
+    "Reply-To:", 0, SMTPD_CMD_FLAG_HEADER,
+    "Message-ID:", 0, SMTPD_CMD_FLAG_HEADER,
     "Subject:", 0, SMTPD_CMD_FLAG_HEADER,
     "From:", 0, SMTPD_CMD_FLAG_HEADER,
     0,
index 379e2395f0a43c0b6f2ced7aa0b216bbcda348ba..5d02309061db95fb441f82e7d233565a0bf6cd85 100644 (file)
@@ -70,6 +70,8 @@
 
 static MAPS *transport_path;
 static int transport_match_parent_style;
+static VSTRING *wildcard_channel;
+static VSTRING *wildcard_nexthop;
 
 /* transport_init - pre-jail initialization */
 
@@ -80,6 +82,21 @@ void    transport_init(void)
     transport_path = maps_create("transport", var_transport_maps,
                                 DICT_FLAG_LOCK);
     transport_match_parent_style = match_parent_style(VAR_TRANSPORT_MAPS);
+
+}
+
+void    transport_wildcard_init(void)
+{
+    wildcard_channel = vstring_alloc(10);
+    wildcard_nexthop = vstring_alloc(10);
+    if (!transport_lookup("*", wildcard_channel, wildcard_nexthop)) {
+       vstring_free(wildcard_channel);
+       vstring_free(wildcard_nexthop);
+    }
+    if (msg_verbose) {
+       msg_info("wildcard_{chan,hop}={%s %s}",
+             vstring_str(wildcard_channel), vstring_str(wildcard_nexthop));
+    }
 }
 
 /* transport_lookup - map a transport domain */
@@ -94,6 +111,7 @@ int     transport_lookup(const char *domain, VSTRING *channel, VSTRING *nexthop)
     char   *saved_value;
     char   *transport;
     int     found = 0;
+    int     null_found = 0;
 
 #define FULL   0
 #define PARTIAL                DICT_FLAG_FIXED
@@ -105,7 +123,9 @@ int     transport_lookup(const char *domain, VSTRING *channel, VSTRING *nexthop)
 
     /*
      * Keep stripping domain components until nothing is left or until a
-     * matching entry is found.
+     * matching entry is found.  If a NULL entry (either no RHS, or ':'),
+     * then pretend we got no match, and return.  If we really got no match,
+     * then return the wildcard transport, if any.
      * 
      * After checking the full name, check for .upper.domain, to distinguish
      * between the upper domain and it's decendants, ala sendmail and tcp
@@ -117,11 +137,17 @@ int     transport_lookup(const char *domain, VSTRING *channel, VSTRING *nexthop)
      * Specify if a key is partial or full, to avoid matching partial keys with
      * regular expressions.
      */
-    for (name = low_domain; /* void */; name = next) {
+    for (name = low_domain; /* void */ ; name = next) {
        if ((value = maps_find(transport_path, name, maps_flag)) != 0) {
            saved_value = mystrdup(value);
-           if ((host = split_at(saved_value, ':')) == 0 || *host == 0)
+           if ((host = split_at(saved_value, ':')) == 0 || *host == 0) {
+               if (*saved_value == 0) {
+                   myfree(saved_value);
+                   null_found = 1;
+                   break;
+               }
                host = domain;
+           }
            if (*(transport = saved_value) == 0)
                transport = var_def_transport;
            vstring_strcpy(channel, transport);
@@ -143,5 +169,14 @@ int     transport_lookup(const char *domain, VSTRING *channel, VSTRING *nexthop)
        maps_flag = PARTIAL;
     }
     myfree(low_domain);
+
+    if (wildcard_channel && !null_found) {
+       vstring_strcpy(channel, vstring_str(wildcard_channel));
+       if (vstring_str(wildcard_nexthop))
+           vstring_strcpy(nexthop, vstring_str(wildcard_nexthop));
+       else
+           vstring_strcpy(nexthop, domain);
+       found = 1;
+    }
     return (found);
 }
index 2747ec2157b4b1f777917fcbb948b1589d935956..2ebe3def400cfb791dbc7a6aafed2f6c670c4fdc 100644 (file)
@@ -17,6 +17,7 @@
   * External interface.
   */
 extern void transport_init(void);
+extern void transport_wildcard_init(void);
 extern int transport_lookup(const char *, VSTRING *, VSTRING *);
 
 /* LICENSE
index 71dc8b2f1dd048cfc615dc11c10a958b6aab145b..1411d7b0e0cd8e51db9583df23bc1ec73cb5a139 100644 (file)
@@ -220,6 +220,11 @@ static void pre_jail_init(char *unused_name, char **unused_argv)
     transport_init();
 }
 
+static void post_jail_init(char *unused_name, char **unused_argv)
+{
+    transport_wildcard_init();
+}
+
 /* main - pass control to the multi-threaded skeleton code */
 
 int     main(int argc, char **argv)
@@ -241,6 +246,7 @@ int     main(int argc, char **argv)
                      MAIL_SERVER_STR_TABLE, str_table,
                      MAIL_SERVER_BOOL_TABLE, bool_table,
                      MAIL_SERVER_PRE_INIT, pre_jail_init,
+                     MAIL_SERVER_POST_INIT, post_jail_init,
                      MAIL_SERVER_PRE_ACCEPT, pre_accept,
                      0);
 }
index ea4cf880886df41579fe1fd66f7199c5255b9712..0ccfc040faff67944974310338f0cd2d8cba59c3 100644 (file)
@@ -161,7 +161,8 @@ static int attr_scan0_string(VSTREAM *fp, VSTRING *plain_buf, const char *contex
     int     ch;
 
     if ((ch = vstring_get_null(plain_buf, fp)) == VSTREAM_EOF) {
-       msg_warn("premature end-of-input from %s while reading %s",
+       msg_warn("%s on %s while reading %s",
+                vstream_ftimeout(fp) ? "timeout" : "premature end-of-input",
                 VSTREAM_PATH(fp), context);
        return (-1);
     }
index d8631ef1cacde253c8a6a063c10c8d56284cff37..0c38c5ea5967f32da1630c393367fd04e6c7af59 100644 (file)
@@ -170,7 +170,8 @@ static int attr_scan64_string(VSTREAM *fp, VSTRING *plain_buf, const char *conte
     VSTRING_RESET(base64_buf);
     while ((ch = VSTREAM_GETC(fp)) != ':' && ch != '\n') {
        if (ch == VSTREAM_EOF) {
-           msg_warn("premature end-of-input from %s while reading %s",
+           msg_warn("%s on %s while reading %s",
+               vstream_ftimeout(fp) ? "timeout" : "premature end-of-input",
                     VSTREAM_PATH(fp), context);
            return (-1);
        }
index 9eeb3a780bcedd70bfa998d370838d3667d4678b..004e6579372e4d8263988636c1d609406beb1d98 100644 (file)
@@ -104,8 +104,17 @@ typedef struct {
     DB     *db;                                /* open db file */
 } DICT_DB;
 
-#define DICT_DB_CACHE_SIZE     (1024 * 1024)
+ /*
+  * db_mpool_size is initialized when the first database is opened. The
+  * parameter can be preempted by setting db_mpool_size != 0 before calling
+  * dict_hash_open() or dict_btree_open(). This is done in mkmap_db_open()
+  * via "db_mkmap_mpool_size" to set a larger memory pool for database
+  * rebuilds.
+  */
+#define VAR_MPOOL_SIZE         "db_mpool_size"
+#define DEF_MPOOL_SIZE         262144  /* 256K default memory pool */
 #define DICT_DB_NELM           4096
+int     db_mpool_size;
 
 #if DB_VERSION_MAJOR > 1
 
@@ -138,6 +147,86 @@ static int sanitize(int status)
 
 #endif
 
+#if DB_VERSION_MAJOR > 1
+
+static DB_ENV *dict_db_env;
+static int dict_db_refcount;
+
+static int dict_db_env_alloc(DB_ENV ** env)
+{
+    int     err;
+
+    /*
+     * Allocate a new environment if this is the first database. Bump the
+     * reference count so we can deallocate the environment when the last
+     * database is closed.
+     */
+    if (dict_db_env != 0) {
+       ++dict_db_refcount;
+       *env = dict_db_env;
+       return 0;
+    }
+#if DB_VERSION_MAJOR == 2
+#define DICT_DB_ENV_FLAGS      (DB_CREATE|DB_INIT_MPOOL|DB_MPOOL_PRIVATE)
+
+    dict_db_env = (DB_ENV *) mymalloc(sizeof(DB_ENV));
+    memset((char *) dict_db_env, 0, sizeof(DB_ENV));
+    dict_db_env->mp_size = db_mpool_size;
+
+    if ((err = db_appinit(0, 0, dict_db_env, DICT_DB_ENV_FLAGS)) != 0) {
+       myfree((char *) dict_db_env);
+       dict_db_env = 0;
+       return err;
+    }
+#endif                                         /* DB_VERSION_MAJOR == 2 */
+
+#if DB_VERSION_MAJOR > 2
+#define DICT_DB_ENV_FLAGS      (DB_CREATE|DB_INIT_MPOOL|DB_PRIVATE)
+
+    err = db_env_create(&dict_db_env, 0);
+    if (err == 0)
+       err = dict_db_env->set_cachesize(dict_db_env, 0, db_mpool_size, 1);
+    if (err == 0)
+       err = dict_db_env->open(dict_db_env, 0, DICT_DB_ENV_FLAGS, 0644);
+
+    if (err != 0) {
+       if (dict_db_env)
+           dict_db_env->close(dict_db_env, 0);
+       dict_db_env = 0;
+       return err;
+    }
+#endif                                         /* DB_VERSION_MAJOR > 2 */
+
+    ++dict_db_refcount;
+    *env = dict_db_env;
+    return 0;
+}
+
+static void dict_db_env_free(void)
+{
+
+    /*
+     * Deallocate a database within the environment Free the environment when
+     * the last database is closed
+     */
+
+#if DB_VERSION_MAJOR == 2
+    if (dict_db_env && dict_db_refcount > 0 && --dict_db_refcount == 0) {
+       db_appexit(dict_db_env);
+       dict_db_env = 0;
+    }
+#endif
+
+#if DB_VERSION_MAJOR > 2
+    if (dict_db_env && dict_db_refcount > 0 && --dict_db_refcount == 0) {
+       dict_db_env->close(dict_db_env, 0);
+       dict_db_env = 0;
+    }
+#endif
+}
+
+#endif                                 /* DB_VERSION_MAJOR > 1 */
+
 /* dict_db_lookup - find database entry */
 
 static const char *dict_db_lookup(DICT *dict, const char *name)
@@ -417,6 +506,11 @@ static void dict_db_close(DICT *dict)
        msg_fatal("flush database %s: %m", dict_db->dict.name);
     if (DICT_DB_CLOSE(dict_db->db) < 0)
        msg_fatal("close database %s: %m", dict_db->dict.name);
+
+#if DB_VERSION_MAJOR > 1
+    dict_db_env_free();
+#endif
+
     dict_free(dict);
 }
 
@@ -434,6 +528,7 @@ static DICT *dict_db_open(const char *class, const char *path, int open_flags,
 
 #if DB_VERSION_MAJOR > 1
     int     db_flags;
+    DB_ENV *env;
 
 #endif
 
@@ -493,7 +588,9 @@ static DICT *dict_db_open(const char *class, const char *path, int open_flags,
        db_flags |= DB_CREATE;
     if (open_flags & O_TRUNC)
        db_flags |= DB_TRUNCATE;
-    if ((errno = db_open(db_path, type, db_flags, 0644, 0, tweak, &db)) != 0)
+    if ((errno = dict_db_env_alloc(&env)) != 0)
+       msg_fatal("create DB environment: %m");
+    if ((errno = db_open(db_path, type, db_flags, 0644, env, tweak, &db)) != 0)
        msg_fatal("open database %s: %m", db_path);
     if (db == 0)
        msg_panic("db_open null result");
@@ -512,12 +609,12 @@ static DICT *dict_db_open(const char *class, const char *path, int open_flags,
        db_flags |= DB_CREATE;
     if (open_flags & O_TRUNC)
        db_flags |= DB_TRUNCATE;
-    if ((errno = db_create(&db, 0, 0)) != 0)
+    if ((errno = dict_db_env_alloc(&env)) != 0)
+       msg_fatal("create DB environment: %m");
+    if ((errno = db_create(&db, env, 0)) != 0)
        msg_fatal("create DB database: %m");
     if (db == 0)
        msg_panic("db_create null result");
-    if ((errno = db->set_cachesize(db, 0, DICT_DB_CACHE_SIZE, 0)) != 0)
-       msg_fatal("set DB cache size %d: %m", DICT_DB_CACHE_SIZE);
     if (type == DB_HASH && db->set_h_nelem(db, DICT_DB_NELM) != 0)
        msg_fatal("set DB hash element count %d: %m", DICT_DB_NELM);
     if ((errno = db->open(db, db_path, 0, type, db_flags, 0644)) != 0)
@@ -570,22 +667,31 @@ DICT   *dict_hash_open(const char *path, int open_flags, int dict_flags)
 #if DB_VERSION_MAJOR < 2
     HASHINFO tweak;
 
-    memset((char *) &tweak, 0, sizeof(tweak));
-    tweak.nelem = DICT_DB_NELM;
-    tweak.cachesize = DICT_DB_CACHE_SIZE;
 #endif
 #if DB_VERSION_MAJOR == 2
     DB_INFO tweak;
 
-    memset((char *) &tweak, 0, sizeof(tweak));
-    tweak.h_nelem = DICT_DB_NELM;
-    tweak.db_cachesize = DICT_DB_CACHE_SIZE;
 #endif
 #if DB_VERSION_MAJOR > 2
     void   *tweak;
 
-    tweak = 0;
 #endif
+
+    /* Set the mpool size if not already set in mkmap_db_open() */
+    if (db_mpool_size == 0)
+       db_mpool_size = get_mail_conf_int(VAR_MPOOL_SIZE, DEF_MPOOL_SIZE, 0, 0);
+
+    memset((char *) &tweak, 0, sizeof(tweak));
+
+#if DB_VERSION_MAJOR < 2
+    tweak.nelem = DICT_DB_NELM;
+    tweak.cachesize = db_mpool_size;
+#endif
+#if DB_VERSION_MAJOR == 2
+    tweak.h_nelem = DICT_DB_NELM;
+    tweak.db_cachesize = 0;
+#endif
+
     return (dict_db_open(DICT_TYPE_HASH, path, open_flags, DB_HASH,
                         (void *) &tweak, dict_flags));
 }
@@ -597,19 +703,24 @@ DICT   *dict_btree_open(const char *path, int open_flags, int dict_flags)
 #if DB_VERSION_MAJOR < 2
     BTREEINFO tweak;
 
-    memset((char *) &tweak, 0, sizeof(tweak));
-    tweak.cachesize = DICT_DB_CACHE_SIZE;
 #endif
 #if DB_VERSION_MAJOR == 2
     DB_INFO tweak;
 
-    memset((char *) &tweak, 0, sizeof(tweak));
-    tweak.db_cachesize = DICT_DB_CACHE_SIZE;
 #endif
 #if DB_VERSION_MAJOR > 2
     void   *tweak;
 
-    tweak = 0;
+#endif
+
+    /* Set the mpool size if not already set in mkmap_db_open() */
+    if (db_mpool_size == 0)
+       db_mpool_size = get_mail_conf_int(VAR_MPOOL_SIZE, DEF_MPOOL_SIZE, 0, 0);
+
+    memset((char *) &tweak, 0, sizeof(tweak));
+
+#if DB_VERSION_MAJOR < 2
+    tweak.cachesize = db_mpool_size;
 #endif
 
     return (dict_db_open(DICT_TYPE_BTREE, path, open_flags, DB_BTREE,
index 23e1d58d2e7d59130e69908b057cc713d7bf63d4..8949a8cbffcfd9d6ccf42eaedf1f784a7061c1db 100644 (file)
@@ -406,6 +406,8 @@ DICT   *dict_dbm_open(const char *path, int open_flags, int dict_flags)
     dict_dbm->dict.close = dict_dbm_close;
     dict_dbm->dict.lock_fd = dbm_dirfno(dbm);
     dict_dbm->dict.stat_fd = dbm_pagfno(dbm);
+    if (dict_dbm->dict.lock_fd == dict_dbm->dict.stat_fd)
+       msg_fatal("open database %s: cannot support GDBM", path);
     if (fstat(dict_dbm->dict.stat_fd, &st) < 0)
        msg_fatal("dict_dbm_open: fstat: %m");
     dict_dbm->dict.mtime = st.st_mtime;
index 19d10d61726863b2a7d792e093f6de475cb65ec4..37a4d8acf9afa106ed91923b4f99f17b789c087b 100644 (file)
 #define STATFS_IN_SYS_MOUNT_H
 #define HAS_POSIX_REGEXP
 #define HAS_ST_GEN     /* struct stat contains inode generation number */
-#define DEF_SENDMAIL_PATH "/usr/sbin/sendmail"
-#define DEF_MAILQ_PATH "/usr/bin/mailq"
-#define DEF_NEWALIAS_PATH "/usr/bin/newaliases"
-#define DEF_COMMAND_DIR        "/usr/sbin"
-#define DEF_DAEMON_DIR "/usr/libexec/postfix"
+#define NATIVE_SENDMAIL_PATH "/usr/sbin/sendmail"
+#define NATIVE_MAILQ_PATH "/usr/bin/mailq"
+#define NATIVE_NEWALIAS_PATH "/usr/bin/newaliases"
+#define NATIVE_COMMAND_DIR "/usr/sbin"
+#define NATIVE_DAEMON_DIR "/usr/libexec/postfix"
 #endif
 
 #if defined(FREEBSD2) || defined(FREEBSD3) || defined(FREEBSD4)
 #define PRINTFLIKE(x,y)
 #define SCANFLIKE(x,y)
 #define HAS_NETINFO
-#define DEF_SENDMAIL_PATH "/usr/sbin/sendmail"
-#define DEF_MAILQ_PATH "/usr/bin/mailq"
-#define DEF_NEWALIAS_PATH "/usr/bin/newaliases"
-#define DEF_COMMAND_DIR        "/usr/sbin"
-#define DEF_DAEMON_DIR "/usr/libexec/postfix"
+#define NATIVE_SENDMAIL_PATH "/usr/sbin/sendmail"
+#define NATIVE_MAILQ_PATH "/usr/bin/mailq"
+#define NATIVE_NEWALIAS_PATH "/usr/bin/newaliases"
+#define NATIVE_COMMAND_DIR "/usr/sbin"
+#define NATIVE_DAEMON_DIR "/usr/libexec/postfix"
 #endif
 
  /*
@@ -152,9 +152,9 @@ extern int h_errno;
 #define DUP2_DUPS_CLOSE_ON_EXEC
 #define MISSING_USLEEP
 #define NO_HERRNO
-#define DEF_SENDMAIL_PATH "/usr/lib/sendmail"
-#define DEF_COMMAND_DIR        "/usr/etc"
-#define DEF_DAEMON_DIR "/usr/libexec/postfix"
+#define NATIVE_SENDMAIL_PATH "/usr/lib/sendmail"
+#define NATIVE_COMMAND_DIR "/usr/etc"
+#define NATIVE_DAEMON_DIR "/usr/libexec/postfix"
 #endif
 
  /*
@@ -221,11 +221,11 @@ extern int opterr;
 #define STATFS_IN_SYS_VFS_H
 #define memmove(d,s,l) bcopy(s,d,l)
 #define NO_HERRNO
-#define DEF_SENDMAIL_PATH "/usr/lib/sendmail"
-#define DEF_MAILQ_PATH "/usr/ucb/mailq"
-#define DEF_NEWALIAS_PATH "/usr/ucb/newaliases"
-#define DEF_COMMAND_DIR        "/usr/etc"
-#define DEF_DAEMON_DIR "/usr/libexec/postfix"
+#define NATIVE_SENDMAIL_PATH "/usr/lib/sendmail"
+#define NATIVE_MAILQ_PATH "/usr/ucb/mailq"
+#define NATIVE_NEWALIAS_PATH "/usr/ucb/newaliases"
+#define NATIVE_COMMAND_DIR "/usr/etc"
+#define NATIVE_DAEMON_DIR "/usr/libexec/postfix"
 #endif
 
  /*
@@ -260,11 +260,14 @@ extern int opterr;
 #define LOCAL_CONNECT  stream_connect
 #define LOCAL_TRIGGER  stream_trigger
 #define HAS_VOLATILE_LOCKS
-#define DEF_SENDMAIL_PATH "/usr/lib/sendmail"
-#define DEF_MAILQ_PATH "/usr/bin/mailq"
-#define DEF_NEWALIAS_PATH "/usr/bin/newaliases"
-#define DEF_COMMAND_DIR        "/usr/sbin"
-#define DEF_DAEMON_DIR "/usr/libexec/postfix"
+/*
+ * Allow build environment to override paths.
+ */
+#define NATIVE_SENDMAIL_PATH "/usr/lib/sendmail"
+#define NATIVE_MAILQ_PATH "/usr/bin/mailq"
+#define NATIVE_NEWALIAS_PATH "/usr/bin/newaliases"
+#define NATIVE_COMMAND_DIR "/usr/sbin"
+#define NATIVE_DAEMON_DIR "/usr/libexec/postfix"
 #endif
 
  /*
@@ -353,11 +356,11 @@ extern int opterr;
 #define USE_STATVFS
 #define STATVFS_IN_SYS_STATVFS_H
 #define STRCASECMP_IN_STRINGS_H
-#define DEF_SENDMAIL_PATH "/usr/lib/sendmail"
-#define DEF_MAILQ_PATH "/usr/sbin/mailq"
-#define DEF_NEWALIAS_PATH "/usr/sbin/newaliases"
-#define DEF_COMMAND_DIR        "/usr/sbin"
-#define DEF_DAEMON_DIR "/usr/libexec/postfix"
+#define NATIVE_SENDMAIL_PATH "/usr/lib/sendmail"
+#define NATIVE_MAILQ_PATH "/usr/sbin/mailq"
+#define NATIVE_NEWALIAS_PATH "/usr/sbin/newaliases"
+#define NATIVE_COMMAND_DIR "/usr/sbin"
+#define NATIVE_DAEMON_DIR "/usr/libexec/postfix"
 #endif
 
 #ifdef AIX4
@@ -392,11 +395,11 @@ extern int seteuid(uid_t);
 extern int setegid(gid_t);
 extern int initgroups(const char *, int);
 #endif
-#define DEF_SENDMAIL_PATH "/usr/lib/sendmail"
-#define DEF_MAILQ_PATH "/usr/sbin/mailq"
-#define DEF_NEWALIAS_PATH "/usr/sbin/newaliases"
-#define DEF_COMMAND_DIR        "/usr/sbin"
-#define DEF_DAEMON_DIR "/usr/libexec/postfix"
+#define NATIVE_SENDMAIL_PATH "/usr/lib/sendmail"
+#define NATIVE_MAILQ_PATH "/usr/sbin/mailq"
+#define NATIVE_NEWALIAS_PATH "/usr/sbin/newaliases"
+#define NATIVE_COMMAND_DIR "/usr/sbin"
+#define NATIVE_DAEMON_DIR "/usr/libexec/postfix"
 
 #endif
 
@@ -430,7 +433,7 @@ extern time_t time(time_t *);
 extern int seteuid(uid_t);
 extern int setegid(gid_t);
 extern int initgroups(const char *, int);
-#define DEF_SENDMAIL_PATH "/usr/lib/sendmail"
+#define NATIVE_SENDMAIL_PATH "/usr/lib/sendmail"
 
 #endif
 
@@ -494,11 +497,11 @@ extern int initgroups(const char *, int);
 #define UNIX_DOMAIN_CONNECT_BLOCKS_FOR_ACCEPT
 #define PREPEND_PLUS_TO_OPTSTRING
 #define HAS_POSIX_REGEXP
-#define DEF_SENDMAIL_PATH "/usr/sbin/sendmail"
-#define DEF_MAILQ_PATH "/usr/bin/mailq"
-#define DEF_NEWALIAS_PATH "/usr/bin/newaliases"
-#define DEF_COMMAND_DIR        "/usr/sbin"
-#define DEF_DAEMON_DIR "/usr/libexec/postfix"
+#define NATIVE_SENDMAIL_PATH "/usr/sbin/sendmail"
+#define NATIVE_MAILQ_PATH "/usr/bin/mailq"
+#define NATIVE_NEWALIAS_PATH "/usr/bin/newaliases"
+#define NATIVE_COMMAND_DIR "/usr/sbin"
+#define NATIVE_DAEMON_DIR "/usr/libexec/postfix"
 #endif
 
  /*
@@ -532,11 +535,11 @@ extern int h_errno;                       /* <netdb.h> imports too much stuff */
 #define USE_STATFS
 #define STATFS_IN_SYS_VFS_H
 #define HAS_POSIX_REGEXP
-#define DEF_SENDMAIL_PATH "/usr/sbin/sendmail"
-#define DEF_MAILQ_PATH "/usr/bin/mailq"
-#define DEF_NEWALIAS_PATH "/usr/bin/newaliases"
-#define DEF_COMMAND_DIR        "/usr/sbin"
-#define DEF_DAEMON_DIR "/usr/libexec/postfix"
+#define NATIVE_SENDMAIL_PATH "/usr/sbin/sendmail"
+#define NATIVE_MAILQ_PATH "/usr/bin/mailq"
+#define NATIVE_NEWALIAS_PATH "/usr/bin/newaliases"
+#define NATIVE_COMMAND_DIR "/usr/sbin"
+#define NATIVE_DAEMON_DIR "/usr/libexec/postfix"
 #endif
 
 #ifdef HPUX10
@@ -567,11 +570,11 @@ extern int h_errno;                       /* <netdb.h> imports too much stuff */
 #define USE_STATFS
 #define STATFS_IN_SYS_VFS_H
 #define HAS_POSIX_REGEXP
-#define DEF_SENDMAIL_PATH "/usr/sbin/sendmail"
-#define DEF_MAILQ_PATH "/usr/bin/mailq"
-#define DEF_NEWALIAS_PATH "/usr/bin/newaliases"
-#define DEF_COMMAND_DIR        "/usr/sbin"
-#define DEF_DAEMON_DIR "/usr/libexec/postfix"
+#define NATIVE_SENDMAIL_PATH "/usr/sbin/sendmail"
+#define NATIVE_MAILQ_PATH "/usr/bin/mailq"
+#define NATIVE_NEWALIAS_PATH "/usr/bin/newaliases"
+#define NATIVE_COMMAND_DIR "/usr/sbin"
+#define NATIVE_DAEMON_DIR "/usr/libexec/postfix"
 #endif
 
 #ifdef HPUX9
@@ -604,10 +607,10 @@ extern int h_errno;
 #define USE_STATFS
 #define STATFS_IN_SYS_VFS_H
 #define HAS_POSIX_REGEXP
-#define DEF_SENDMAIL_PATH "/usr/bin/sendmail"
-#define DEF_MAILQ_PATH "/usr/bin/mailq"
-#define DEF_NEWALIAS_PATH "/usr/bin/newaliases"
-#define DEF_DAEMON_DIR "/usr/libexec/postfix"
+#define NATIVE_SENDMAIL_PATH "/usr/bin/sendmail"
+#define NATIVE_MAILQ_PATH "/usr/bin/mailq"
+#define NATIVE_NEWALIAS_PATH "/usr/bin/newaliases"
+#define NATIVE_DAEMON_DIR "/usr/libexec/postfix"
 #endif
 
  /*
@@ -809,6 +812,39 @@ extern int h_errno;
   */
 #ifndef SUPPORTED
 #error "unsupported platform"
+#endif
+
+ /*
+  * Allow command line flags to override native settings
+  */
+#ifndef DEF_COMMAND_DIR
+#ifdef NATIVE_COMMAND_DIR
+#define DEF_COMMAND_DIR NATIVE_COMMAND_DIR
+#endif
+#endif
+
+#ifndef DEF_DAEMON_DIR
+#ifdef NATIVE_DAEMON_DIR
+#define DEF_DAEMON_DIR NATIVE_DAEMON_DIR
+#endif
+#endif
+
+#ifndef DEF_SENDMAIL_PATH
+#ifdef NATIVE_SENDMAIL_PATH
+#define DEF_SENDMAIL_PATH NATIVE_SENDMAIL_PATH
+#endif
+#endif
+
+#ifndef DEF_MAILQ_PATH
+#ifdef NATIVE_MAILQ_PATH
+#define DEF_MAILQ_PATH NATIVE_MAILQ_PATH
+#endif
+#endif
+
+#ifndef DEF_NEWALIAS_PATH
+#ifdef NATIVE_NEWALIAS_PATH
+#define DEF_NEWALIAS_PATH NATIVE_NEWALIAS_PATH
+#endif
 #endif
 
 #define CAST_CHAR_PTR_TO_INT(cptr)     ((int) (long) (cptr))
index 8bf523ed3f86b9766334353596ce4d9cfd23aa7f..40b501a0bf479892c00b75ba0dcc3c5eb5221bf2 100644 (file)
@@ -51,7 +51,7 @@ depend: $(MAKES)
            $(CC) -E $(DEFS) $(INCL) $$i | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \
            -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \
        done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in
-       @make -f Makefile.in Makefile
+       @$(EXPORT) @make -f Makefile.in Makefile
 
 # do not edit below this line - it is generated by 'make depend'
 deliver_attr.o: deliver_attr.c