Postfix version 1.1 Patch 03 eliminates one case of too defensive programming, adds one safety net, adds several workarounds, and cleans up some more documentation. - The Postfix SMTP server could abort with a fatal error message because some Berkeley DB versions cannot handle SMTPD access map lookups of the null address. The workaround is to use <> as lookup key. This patch changes the smtpd_null_access_lookup_key default value from the empty string to <>. - The Postfix cleanup daemon could abort with a panic message when a malformed address (user@.) was run through a canonical map. This patch eliminates some overly defensive code. The "problem" is now ignored like it used to be. - On Linux, local mail submission could fail with mysterious error messages because either /usr/lib/sendmail or /usr/sbin/sendmail came from an obsolete Postfix release. This patch adds an extra test to "postfix check", and suggests a fix when a problem is found. - On SCO UNIX, the queue manager would abort with a fatal error. This patch turns off the input rate control mechanism for SCO, because of unexpected limitations in the SCO kernel. As usual, the patch and a patched source code will be made available via ftp://ftp.porcupine.org/mirrors/postfix-release/official: 7812 Feb 2 17:01 postfix-1.1-patch03.gz 208584 Feb 1 12:51 postfix-1.1.3.HISTORY 51319 Feb 1 13:55 postfix-1.1.3.RELEASE_NOTES 1180166 Feb 2 10:41 postfix-1.1.3.tar.gz 152 Feb 2 10:41 postfix-1.1.3.tar.gz.sig Soon to appear on the mirror sites listed on http://www.postfix.org. Wietse Prereq: "1.1.2" diff -cr /tmp/postfix-1.1.2/src/global/mail_version.h ./src/global/mail_version.h *** /tmp/postfix-1.1.2/src/global/mail_version.h Fri Jan 25 10:30:37 2002 --- ./src/global/mail_version.h Fri Feb 1 09:09:40 2002 *************** *** 22,30 **** */ #define VAR_MAIL_VERSION "mail_version" #ifdef SNAPSHOT ! #define DEF_MAIL_VERSION "1.1.2-$mail_release_date" #else ! #define DEF_MAIL_VERSION "1.1.2" #endif extern char *var_mail_version; --- 22,30 ---- */ #define VAR_MAIL_VERSION "mail_version" #ifdef SNAPSHOT ! #define DEF_MAIL_VERSION "1.1.3-$mail_release_date" #else ! #define DEF_MAIL_VERSION "1.1.3" #endif extern char *var_mail_version; *************** *** 32,38 **** * Release date. */ #define VAR_MAIL_RELEASE "mail_release_date" ! #define DEF_MAIL_RELEASE "20020125" extern char *var_mail_release; /* LICENSE --- 32,38 ---- * Release date. */ #define VAR_MAIL_RELEASE "mail_release_date" ! #define DEF_MAIL_RELEASE "20020201" extern char *var_mail_release; /* LICENSE diff -cr /tmp/postfix-1.1.2/HISTORY ./HISTORY *** /tmp/postfix-1.1.2/HISTORY Fri Jan 25 10:32:54 2002 --- ./HISTORY Fri Feb 1 12:51:03 2002 *************** *** 6007,6013 **** file. Based on code by LaMont Jones, HP. File: postmap/postmap.c. ! 20020124 Portability: some Linux systems install libnsl.so without libnsl.a file, causing an yp_match undefined reference --- 6007,6013 ---- file. Based on code by LaMont Jones, HP. File: postmap/postmap.c. ! 20020123 Portability: some Linux systems install libnsl.so without libnsl.a file, causing an yp_match undefined reference *************** *** 6030,6035 **** --- 6030,6056 ---- Documentation: the postmap manual page described an out of date input file format. + + 20020129 + + Workaround: SCO version 3.2 can't ioctl(FIONREAD) a pipe. + Therefore, input mail flow control is disabled by default. + Files: makedefs, global/mail_params.h, conf/main.cf. + Problem reported by Kurt Andersen, Agilent. + + 20020201 + + Workaround: changed the default smtpd_null_access_lookup_key + setting to <>, because some Bezerkeloid DB implementations + can't handle null-length lookup keys. File: global/mail_params.h. + + Bugfix: backed out a null-length address panic call by + ignoring the problem, like Postfix did in the past. File: + global/resolve_local.c. + + Safety: "postfix check" will now warn if /usr/lib/sendmail + and /usr/sbin/sendmail differ, and will propose to replace + one by a symlink to the other. File: conf/postfix-script. Open problems: diff -cr /tmp/postfix-1.1.2/RELEASE_NOTES ./RELEASE_NOTES *** /tmp/postfix-1.1.2/RELEASE_NOTES Fri Jan 25 10:44:27 2002 --- ./RELEASE_NOTES Fri Feb 1 13:55:45 2002 *************** *** 12,17 **** --- 12,28 ---- date. Snapshots change only the release date, unless they include the same bugfix as a patch release. + Incompatible changes with Postfix version 1.1.3 (released 20020201) + =================================================================== + + In Postfix SMTPD access tables, Postfix now uses <> as the default + lookup key for the null address, in order to work around bugs in + some Berkeley DB implementations. This behavior is controlled with + the smtpd_null_access_lookup_key configuration parameter. + + On SCO #.2 UNIX, the input rate flow control is now turned off by + default, because of limitations in the SCO UNIX kernel. + Incompatible changes with Postfix version 1.1.2 (released 20020125) =================================================================== diff -cr /tmp/postfix-1.1.2/conf/access ./conf/access *** /tmp/postfix-1.1.2/conf/access Fri Jan 25 09:52:43 2002 --- ./conf/access Fri Feb 1 12:41:59 2002 *************** *** 1,4 **** - # # ACCESS(5) ACCESS(5) # # NAME --- 1,3 ---- *************** *** 68,98 **** # user@ Matches all mail addresses with the specified user # part. # ! # Note: lookup of the null sender address may not be possi- ! # ble with all supported types of lookup table. A workaround ! # is to specify smtpd_null_access_lookup_key = <> in the ! # Postfix main.cf file, and to specify <> as the left-hand ! # field in the access table. # # ADDRESS EXTENSION # When a mail address localpart contains the optional recip- ! # ient delimiter (e.g., user+foo@domain), the lookup order ! # becomes: user+foo@domain, user@domain, domain, user+foo@, # and user@. # # HOST NAME/ADDRESS PATTERNS # With lookups from indexed files such as DB or DBM, or from ! # networked tables such as NIS, LDAP or SQL, the following # lookup patterns are examined in the order as listed: # # domain.name # Matches domain.name. # ! # The pattern domain.name also matches subdomains, # but only when the string smtpd_access_maps is ! # listed in the Postfix parent_domain_matches_subdo- ! # mains configuration setting. Otherwise, specify ! # .domain.name (note the initial dot) in order to # match subdomains. # # net.work.addr.ess --- 67,98 ---- # user@ Matches all mail addresses with the specified user # part. # ! # Note: lookup of the null sender address is not possible ! # with some types of lookup table. By default, Postfix uses ! # <> as the lookup key for such addresses. The value is ! # specified with the workaround is to specify ! # smtpd_null_access_lookup_key parameter in the Postfix ! # main.cf file. # # ADDRESS EXTENSION # When a mail address localpart contains the optional recip- ! # ient delimiter (e.g., user+foo@domain), the lookup order ! # becomes: user+foo@domain, user@domain, domain, user+foo@, # and user@. # # HOST NAME/ADDRESS PATTERNS # With lookups from indexed files such as DB or DBM, or from ! # networked tables such as NIS, LDAP or SQL, the following # lookup patterns are examined in the order as listed: # # domain.name # Matches domain.name. # ! # The pattern domain.name also matches subdomains, # but only when the string smtpd_access_maps is ! # listed in the Postfix parent_domain_matches_subdo- ! # mains configuration setting. Otherwise, specify ! # .domain.name (note the initial dot) in order to # match subdomains. # # net.work.addr.ess *************** *** 101,113 **** # # net.work # ! # net Matches any host address in the specified network. ! # A network address is a sequence of one or more # octets separated by ".". # # ACTIONS # [45]NN text ! # Reject the address etc. that matches the pattern, # and respond with the numerical code and text. # # REJECT Reject the address etc. that matches the pattern. A --- 101,113 ---- # # net.work # ! # net Matches any host address in the specified network. ! # A network address is a sequence of one or more # octets separated by ".". # # ACTIONS # [45]NN text ! # Reject the address etc. that matches the pattern, # and respond with the numerical code and text. # # REJECT Reject the address etc. that matches the pattern. A *************** *** 115,149 **** # # OK Accept the address etc. that matches the pattern. # # restriction... # Apply the named UCE restriction(s) (permit, reject, # reject_unauth_destination, and so on). # # REGULAR EXPRESSION TABLES ! # This section describes how the table lookups change when # the table is given in the form of regular expressions. For ! # a description of regular expression lookup table syntax, # see regexp_table(5) or pcre_table(5). # ! # Each pattern is a regular expression that is applied to # the entire string being looked up. Depending on the appli- ! # cation, that string is an entire client hostname, an # entire client IP address, or an entire mail address. Thus, # no parent domain or parent network search is done, ! # user@domain mail addresses are not broken up into their # user@ and domain constituent parts, nor is user+foo broken # up into user and foo. # ! # Patterns are applied in the order as specified in the ! # table, until a pattern is found that matches the search # string. # ! # Actions are the same as with indexed file lookups, with ! # the additional feature that parenthesized substrings from # the pattern can be interpolated as $1, $2 and so on. # # BUGS ! # The table format does not understand quoting conventions. # # SEE ALSO # postmap(1) create mapping table --- 115,154 ---- # # OK Accept the address etc. that matches the pattern. # + # all-numerical + # An all-numerical result is treated as OK. This for- + # mat is generated by address-based relay authoriza- + # tion schemes. + # # restriction... # Apply the named UCE restriction(s) (permit, reject, # reject_unauth_destination, and so on). # # REGULAR EXPRESSION TABLES ! # This section describes how the table lookups change when # the table is given in the form of regular expressions. For ! # a description of regular expression lookup table syntax, # see regexp_table(5) or pcre_table(5). # ! # Each pattern is a regular expression that is applied to # the entire string being looked up. Depending on the appli- ! # cation, that string is an entire client hostname, an # entire client IP address, or an entire mail address. Thus, # no parent domain or parent network search is done, ! # user@domain mail addresses are not broken up into their # user@ and domain constituent parts, nor is user+foo broken # up into user and foo. # ! # Patterns are applied in the order as specified in the ! # table, until a pattern is found that matches the search # string. # ! # Actions are the same as with indexed file lookups, with ! # the additional feature that parenthesized substrings from # the pattern can be interpolated as $1, $2 and so on. # # BUGS ! # The table format does not understand quoting conventions. # # SEE ALSO # postmap(1) create mapping table *************** *** 152,158 **** # regexp_table(5) format of POSIX regular expression tables # # LICENSE ! # The Secure Mailer license must be distributed with this # software. # # AUTHOR(S) --- 157,163 ---- # regexp_table(5) format of POSIX regular expression tables # # LICENSE ! # The Secure Mailer license must be distributed with this # software. # # AUTHOR(S) *************** *** 161,165 **** # P.O. Box 704 # Yorktown Heights, NY 10598, USA # ! # 1 ! # --- 166,169 ---- # P.O. Box 704 # Yorktown Heights, NY 10598, USA # ! # ACCESS(5) diff -cr /tmp/postfix-1.1.2/conf/main.cf ./conf/main.cf *** /tmp/postfix-1.1.2/conf/main.cf Tue Jan 15 09:27:55 2002 --- ./conf/main.cf Thu Jan 31 21:12:04 2002 *************** *** 238,252 **** # #local_recipient_maps = $alias_maps unix:passwd.byname - # If you use both the Postfix local and virtual delivery agents, specify: - # - #local_recipient_maps = $alias_maps unix:passwd.byname $virtual_mailbox_maps - # INPUT RATE CONTROL # # The in_flow_delay configuration parameter implements mail input ! # flow control. This feature is turned off by default because it ! # needs further development. # # A Postfix process will pause for $in_flow_delay seconds before # accepting a new message, when the message arrival rate exceeds the --- 238,249 ---- # #local_recipient_maps = $alias_maps unix:passwd.byname # INPUT RATE CONTROL # # The in_flow_delay configuration parameter implements mail input ! # flow control. This feature is turned on by default, although it ! # still needs further development (it's disabled on SCO UNIX due ! # to an SCO bug). # # A Postfix process will pause for $in_flow_delay seconds before # accepting a new message, when the message arrival rate exceeds the *************** *** 256,262 **** # # Specify 0 to disable the feature. Valid delays are 0..10. # ! #in_flow_delay = 1 # ADDRESS REWRITING # --- 253,259 ---- # # Specify 0 to disable the feature. Valid delays are 0..10. # ! #in_flow_delay = 1s # ADDRESS REWRITING # diff -cr /tmp/postfix-1.1.2/conf/postfix-script ./conf/postfix-script *** /tmp/postfix-1.1.2/conf/postfix-script Fri Jan 11 09:36:27 2002 --- ./conf/postfix-script Fri Feb 1 13:51:38 2002 *************** *** 212,217 **** --- 212,225 ---- find corrupt -type f -exec $WARN damaged message: {} \; # XXX also: look for weird stuff, weird permissions, etc. + + test -f /usr/sbin/sendmail -a -f /usr/lib/sendmail && { + cmp -s /usr/sbin/sendmail /usr/lib/sendmail || { + $WARN /usr/lib/sendmail and /usr/sbin/sendmail differ + $WARN Replace one by a symbolic link to the other + } + } + exit 0 ;; *) diff -cr /tmp/postfix-1.1.2/html/access.5.html ./html/access.5.html *** /tmp/postfix-1.1.2/html/access.5.html Sun Jan 6 18:25:48 2002 --- ./html/access.5.html Fri Feb 1 12:42:00 2002 *************** *** 1,5 ****
- ACCESS(5) ACCESS(5) NAME --- 1,4 ---- *************** *** 69,99 **** user@ Matches all mail addresses with the specified user part. ! Note: lookup of the null sender address may not be possi- ! ble with all supported types of lookup table. A workaround ! is to specify smtpd_null_access_lookup_key = <> in the ! Postfix main.cf file, and to specify <> as the left-hand ! field in the access table. ADDRESS EXTENSION When a mail address localpart contains the optional recip- ! ient delimiter (e.g., user+foo@domain), the lookup order ! becomes: user+foo@domain, user@domain, domain, user+foo@, and user@. HOST NAME/ADDRESS PATTERNS With lookups from indexed files such as DB or DBM, or from ! networked tables such as NIS, LDAP or SQL, the following lookup patterns are examined in the order as listed: domain.name Matches domain.name. ! The pattern domain.name also matches subdomains, but only when the string smtpd_access_maps is ! listed in the Postfix parent_domain_matches_subdo- ! mains configuration setting. Otherwise, specify ! .domain.name (note the initial dot) in order to match subdomains. net.work.addr.ess --- 68,99 ---- user@ Matches all mail addresses with the specified user part. ! Note: lookup of the null sender address is not possible ! with some types of lookup table. By default, Postfix uses ! <> as the lookup key for such addresses. The value is ! specified with the workaround is to specify ! smtpd_null_access_lookup_key parameter in the Postfix ! main.cf file. ADDRESS EXTENSION When a mail address localpart contains the optional recip- ! ient delimiter (e.g., user+foo@domain), the lookup order ! becomes: user+foo@domain, user@domain, domain, user+foo@, and user@. HOST NAME/ADDRESS PATTERNS With lookups from indexed files such as DB or DBM, or from ! networked tables such as NIS, LDAP or SQL, the following lookup patterns are examined in the order as listed: domain.name Matches domain.name. ! The pattern domain.name also matches subdomains, but only when the string smtpd_access_maps is ! listed in the Postfix parent_domain_matches_subdo- ! mains configuration setting. Otherwise, specify ! .domain.name (note the initial dot) in order to match subdomains. net.work.addr.ess *************** *** 102,114 **** net.work ! net Matches any host address in the specified network. ! A network address is a sequence of one or more octets separated by ".". ACTIONS [45]NN text ! Reject the address etc. that matches the pattern, and respond with the numerical code and text. REJECT Reject the address etc. that matches the pattern. A --- 102,114 ---- net.work ! net Matches any host address in the specified network. ! A network address is a sequence of one or more octets separated by ".". ACTIONS [45]NN text ! Reject the address etc. that matches the pattern, and respond with the numerical code and text. REJECT Reject the address etc. that matches the pattern. A *************** *** 116,150 **** OK Accept the address etc. that matches the pattern. restriction... Apply the named UCE restriction(s) (permit, reject, reject_unauth_destination, and so on). REGULAR EXPRESSION TABLES ! This section describes how the table lookups change when the table is given in the form of regular expressions. For ! a description of regular expression lookup table syntax, see regexp_table(5) or pcre_table(5). ! Each pattern is a regular expression that is applied to the entire string being looked up. Depending on the appli- ! cation, that string is an entire client hostname, an entire client IP address, or an entire mail address. Thus, no parent domain or parent network search is done, ! user@domain mail addresses are not broken up into their user@ and domain constituent parts, nor is user+foo broken up into user and foo. ! Patterns are applied in the order as specified in the ! table, until a pattern is found that matches the search string. ! Actions are the same as with indexed file lookups, with ! the additional feature that parenthesized substrings from the pattern can be interpolated as $1, $2 and so on. BUGS ! The table format does not understand quoting conventions. SEE ALSO postmap(1) create mapping table --- 116,155 ---- OK Accept the address etc. that matches the pattern. + all-numerical + An all-numerical result is treated as OK. This for- + mat is generated by address-based relay authoriza- + tion schemes. + restriction... Apply the named UCE restriction(s) (permit, reject, reject_unauth_destination, and so on). REGULAR EXPRESSION TABLES ! This section describes how the table lookups change when the table is given in the form of regular expressions. For ! a description of regular expression lookup table syntax, see regexp_table(5) or pcre_table(5). ! Each pattern is a regular expression that is applied to the entire string being looked up. Depending on the appli- ! cation, that string is an entire client hostname, an entire client IP address, or an entire mail address. Thus, no parent domain or parent network search is done, ! user@domain mail addresses are not broken up into their user@ and domain constituent parts, nor is user+foo broken up into user and foo. ! Patterns are applied in the order as specified in the ! table, until a pattern is found that matches the search string. ! Actions are the same as with indexed file lookups, with ! the additional feature that parenthesized substrings from the pattern can be interpolated as $1, $2 and so on. BUGS ! The table format does not understand quoting conventions. SEE ALSO postmap(1) create mapping table *************** *** 153,159 **** regexp_table(5) format of POSIX regular expression tables LICENSE ! The Secure Mailer license must be distributed with this software. AUTHOR(S) --- 158,164 ---- regexp_table(5) format of POSIX regular expression tables LICENSE ! The Secure Mailer license must be distributed with this software. AUTHOR(S) *************** *** 162,167 **** P.O. Box 704 Yorktown Heights, NY 10598, USA ! 1 !--- 167,171 ---- P.O. Box 704 Yorktown Heights, NY 10598, USA ! ACCESS(5)