From: Wietse Venema Date: Sun, 27 Mar 2005 05:00:00 +0000 (-0500) Subject: postfix-2.3-20050327 X-Git-Tag: v2.3-RC1~91 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=da30144878cbd2abdc021baea00ffead3cfed140;p=thirdparty%2Fpostfix.git postfix-2.3-20050327 --- diff --git a/postfix/.indent.pro b/postfix/.indent.pro index 7b958be89..06d5e2538 100644 --- a/postfix/.indent.pro +++ b/postfix/.indent.pro @@ -20,6 +20,7 @@ -TCFG_PARSER -TCIDR_MATCH -TCLEANUP_STATE +-TCLEANUP_STAT_DETAIL -TCLIENT_LIST -TCLNT_STREAM -TCONFIG_BOOL_FN_TABLE @@ -76,6 +77,8 @@ -TDNS_REPLY -TDNS_RR -TDOMAIN_LIST +-TDSN_SPLIT +-TDSN_VSTRING -TEXPAND_ATTR -TFILE -TFORWARD_INFO @@ -194,7 +197,7 @@ -TSSL_SESSION -TSTRING_LIST -TSTRING_TABLE --TSYS_EXITS_TABLE +-TSYS_EXITS_DETAIL -TTLS_PRNG_SEED_INFO -TTLS_PRNG_SRC -TTLS_SCACHE diff --git a/postfix/ENHANCED_STATUS_README b/postfix/ENHANCED_STATUS_README new file mode 100644 index 000000000..73451f377 --- /dev/null +++ b/postfix/ENHANCED_STATUS_README @@ -0,0 +1,61 @@ +Postfix enhanced status code implementation notes +================================================= + +Enhanced status code support is implemented in stages. In the first +stage, the goal is to minimize code changes (it's several hundred +pages of context diffs already). For this reason, the pre-existing +status variables (success, defer, etc.) are not updated atomically +with the enhanced status code; instead, enhanced status codes are +updated separately. This means one has to be careful when making +updates to the code, so that things won't go out of sync. + +Specific issues that one should be aware of: + +- In the SMTP client, either update the enhanced status code and +text whenever smtp_errno or resp->code are updated, or place an +explicit comment that no update is needed. + +- In the SMTP client, don't worry about the first enhanced status +digit when reporting failure to look up or connect to a host. For +convenience, the SMTP client top-level code automatically changes +it into '4' or '5' as appropriate. + +- The above two points also apply to the LMTP client; this delivery +agent is on life support until its functionality is merged with the +SMTP client. + +- In the SMTP server, don't worry about the first enhanced status +digit when a restriction rejects access. For convenience, the +smtpd_check_reject() routine automatically changes it into '4' or +'5' as appropriate. + +- The pipe, local and virtual delivery agents never update the +diagnostic text without also updating the enhanced status code. The +main chore here is to choose appropriate enhanced status codes. + +- Don't rely on the system errno value after calling a routine that +updates the enhanced status code upon failure. Use the enhanced +status code (and diagnostic text) instead. Currently there are two +exceptions to this rule: mail_copy() for historical reasons may or +may not return explicit error reports (fixing this requires that +pipe_command() be restructured); and the maildir delivery routines +log a helpful warning when delivery fails with EACCES. This just +happens to work because maildir needs no file locking. + +- Some low-level support routines update the diagnostic text but +not the enhanced status code. To identify these, search for functions +that are called with why->vstring as output parameter, and make +sure that the caller updates the enhanced status code in all +appropriate cases. + +- Avoid passing around strings that combine enhanced status code +and diagnostic text, because the compiler can't help to enforce +consistency. Currently there are two exceptions to this rule: the +cleanup server status reply, and the delivery agent status reply. +Once these protocols are updated we can remove the dns_prepend() +routine. + +- The bounce/defer/sent modules will catch the cases where an +enhanced status code does not match the reject/defer/success status. +These discrepancies are logged as a warning, and the enhanced status +code is replaced by a generic one. diff --git a/postfix/HISTORY b/postfix/HISTORY index 1a4ff531d..7cc78da8e 100644 --- a/postfix/HISTORY +++ b/postfix/HISTORY @@ -10485,6 +10485,62 @@ Apologies for any names omitted. Bugfix: when is included, read is a reserved identifier. File: smtpstone/smtp-source.c. +20050321-27 + + Support for RFC 1893 enhanced status codes. See also the + ENHANCED_STATUS_README file for background. + + New module to pass around (status code + text) instead of + just text. File: Files: global/dsn_util.c. + + Status-related lookup tables now have an extra column for + enhanced status codes. Files: global/sys_exits.c, + global/cleanup_strerror.c. + + Incompatible change: centralized mapping of errno values + to delivery status codes after failed delivery to mailbox, + maildir, or file. Error codes EACCES, EAGAIN, ESTALE are + 4.2.0 temporary errors, ENOSPC is a 4.3.0 temporary error, + EDQUOT and EFBIG are 5.2.2 hard errors, and everything else + is a 5.2.0 hard error. This means that local(8) will bounce + less mail, while virtual(8) will defer less mail. File: + global/mbox_open.c. + +20050324 + + Workaround: gcc -W (version 3.4.2 [FreeBSD] 20040728) no + longer warns about missing return statements. What a time + waste. + + Workaround: gcc -E (version 3.4.2 [FreeBSD] 20040728) output + has changed, causing too much "make depend" output. + +20050325 + + Bugfix: when bouncing mail that was submitted with Postfix + sendmail, the cleanup daemon ignored the reason specified + in header/body_checks, and always produced a generic reason. + File: cleanup/cleanup_api.c. + + Workaround: don't announce pipelining support when the + smtp-sink test program is configured to fail specific + commands with -r or -f (the fix is to build a proper SMTP + state engine into the smtp-sink test program). File: + smtpstone/smtp-sink.c. + +20050326 + + Update: more PCRE error codes. File: util/dict_pcre.c. + +20050327 + + Bugfix: the SMTP client did not ask the queue manager to + reduce destination concurrency after a "lost connection" + or "connection timed out" errror. File: smtp/smtp_trouble.c. + + Workaround: FreeBSD has incompatibly changed the output + format from "od", breaking regression test portability. + Open problems: Med: disable header address rewriting after XCLIENT? @@ -10521,8 +10577,8 @@ Open problems: really try all the possibilities that one might expect to be tried. For now, this gotcha is documented in access(5). - Med: the TLS certificate verification depth parameters - never worked. + Med: the TLS certificate verification depth parameters never + worked. Med: eliminate the tls_info data structure. @@ -10533,8 +10589,8 @@ Open problems: Low: make mail_addr_find() lookup configurable. - Low: update events.c so that 1-second timer requests do - not suffer from rounding errors. This is needed for 1-second + Low: update events.c so that 1-second timer requests do not + suffer from rounding errors. This is needed for 1-second SMTP session caching time limits. A 1-second interval would become arbitrarily short when an event is scheduled just before the current second rolls over. @@ -10596,8 +10652,8 @@ Open problems: Low: all table lookups should consistently use internalized (unquoted) or externalized (quoted) forms as lookup keys. - smtpd, qmgr, local, etc. use unquoted address forms as - keys. cleanup uses quoted forms. + smtpd, qmgr, local, etc. use unquoted address forms as keys. + cleanup uses quoted forms. Low: have a configurable list of errno values for mailbox or maildir delivery that result in deferral rather than @@ -10606,9 +10662,9 @@ Open problems: Low: after reorganizing configuration parameters, add flags to all parameters whose value can be read from file. - Medium: need in-process caching for map lookups. LDAP - servers seem to need this in particular. Need a way to - expire cached results that are too old. + Medium: need in-process caching for map lookups. LDAP servers + seem to need this in particular. Need a way to expire cached + results that are too old. Low: generic showq protocol, to allow for more intelligent processing than just mailq. Maybe marry this with postsuper. diff --git a/postfix/README_FILES/DB_README b/postfix/README_FILES/DB_README index 2f2638fd3..3d2236971 100644 --- a/postfix/README_FILES/DB_README +++ b/postfix/README_FILES/DB_README @@ -44,12 +44,19 @@ To build Postfix after you installed the Berkeley DB from http:// www.sleepycat.com/, use something like: % make tidy - % make makefiles CCARGS="-DHAS_DB -I/usr/local/BerkeleyDB.3.1/include" \ - AUXLIBS="-L/usr/local/BerkeleyDB.3.1/lib -ldb" + % make makefiles CCARGS="-DHAS_DB -I/usr/local/BerkeleyDB/include" \ + AUXLIBS="-L/usr/local/BerkeleyDB/lib -ldb" % make -The exact pathnames depend on the DB version that you installed. For example, -Berkeley DB version 2 installs in /usr/local/BerkeleyDB. +Solaris needs this: + + % make tidy + % make makefiles CCARGS="-DHAS_DB -I/usr/local/BerkeleyDB/include" \ + AUXLIBS="-R/usr/local/BerkeleyDB/lib -L/usr/local/BerkeleyDB/lib -ldb" + % make + +The exact pathnames depend on the Berkeley DB version, and on how it was +installed. Warning: the file format produced by Berkeley DB version 1 is not compatible with that of versions 2 and 3 (versions 2 and 3 have the same format). If you diff --git a/postfix/RELEASE_NOTES b/postfix/RELEASE_NOTES index e5df96359..63b26e4a5 100644 --- a/postfix/RELEASE_NOTES +++ b/postfix/RELEASE_NOTES @@ -13,3 +13,36 @@ specifies the release date of a stable release or snapshot release. See RELEASE_NOTES-2.2 for changes introduced during the development of Postfix version 2.2. + +Incompatible changes with snapshot 20050327 +=========================================== + +local(8) and virtual(8) now handle the same errors in the same way. +This means that local(8) will defer some mail that it older versions +would bounce, and that virtual(8) will bounce some mail that older +versions would defer. + +Specifically, error codes EACCES, EAGAIN, ESTALE are soft (4.2.0) +errors, ENOSPC is a soft (4.3.0) error, EDQUOT and EFBIG are hard +(5.2.2) errors, and everything else is a hard (5.2.0) error. + +Major changes with snapshot 20050327 +==================================== + +This release introduces support for RFC 1893 enhanced status codes. +For example, status code "5.1.1" means "recipient unknown". Postfix +recognizes enhanced status codes in remote server replies, and +generates enhanced status codes when it responds to mail delivery +requests. This improves the communication with mail clients that +hide error messages from users. + +You can, but don't have to, specify RFC 1893 enhanced status codes +in Postfix access maps or header/body_checks. Example: + + REJECT 5.7.1 You can't go here from there + +(5.7.1 means "no authorization, message refused"). Enhanced status +code support is also available in RBL reply templates. + +If you do specify an enhanced status code, Postfix will automatically +change the first digit into a '4' or '5' as appropriate. diff --git a/postfix/conf/access b/postfix/conf/access index a424ea598..112b13664 100644 --- a/postfix/conf/access +++ b/postfix/conf/access @@ -1,4 +1,4 @@ -# ACCESS(5) ACCESS(5) +# ACCESS(5) ACCESS(5) # # NAME # access - Postfix access table format @@ -167,6 +167,12 @@ # tion schemes. # # REJECT ACTIONS +# Postfix version 2.3 and later support enhanced status +# codes. When no code is specified at the beginning of the +# text below, Postfix inserts a default enhanced status code +# of "5.7.1" in the case of reject actions, and "4.7.1" in +# the case of defer actions. +# # 4NN text # # 5NN text @@ -297,8 +303,8 @@ # 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 +# Patterns are applied in the order as specified in the ta- +# ble, until a pattern is found that matches the search # string. # # Actions are the same as with indexed file lookups, with @@ -308,9 +314,9 @@ # TCP-BASED TABLES # This section describes how the table lookups change when # lookups are directed to a TCP-based server. For a descrip- -# tion of the TCP client/server lookup protocol, see -# tcp_table(5). This feature is not available up to and -# including Postfix version 2.2. +# tion of the TCP client/server lookup protocol, see tcp_ta- +# ble(5). This feature is not available up to and including +# Postfix version 2.2. # # Each lookup operation uses the entire query string once. # Depending on the application, that string is an entire @@ -367,4 +373,4 @@ # P.O. Box 704 # Yorktown Heights, NY 10598, USA # -# ACCESS(5) +# ACCESS(5) diff --git a/postfix/conf/header_checks b/postfix/conf/header_checks index 14b7d6f3c..b48bac2e2 100644 --- a/postfix/conf/header_checks +++ b/postfix/conf/header_checks @@ -1,4 +1,4 @@ -# HEADER_CHECKS(5) HEADER_CHECKS(5) +# HEADER_CHECKS(5) HEADER_CHECKS(5) # # NAME # header_checks - Postfix built-in header/body inspection @@ -243,27 +243,32 @@ # body_checks inspection of the current message and # affects all recipients. # +# Postfix version 2.3 and later support enhanced sta- +# tus codes. When no code is specified at the begin- +# ning of optional text..., Postfix inserts a default +# enhanced status code of "5.7.1". +# # WARN optional text... -# Log a warning with the optional text... (or log a -# generic message) and inspect the next input line. +# Log a warning with the optional text... (or log a +# generic message) and inspect the next input line. # This action is useful for debugging and for testing # a pattern before applying more drastic actions. # # BUGS -# Many people overlook the main limitations of header and -# body_checks rules. These rules operate on one logical -# message header or one body line at a time, and a decision -# made for one line is not carried over to the next line. +# Many people overlook the main limitations of header and +# body_checks rules. These rules operate on one logical +# message header or one body line at a time, and a decision +# made for one line is not carried over to the next line. # If text in the message body is encoded (RFC 2045) then the -# rules have to specified for the encoded form. Likewise, +# rules have to specified for the encoded form. Likewise, # when message headers are encoded (RFC 2047) then the rules # need to be specified for the encoded form. # -# Message headers added by the cleanup(8) daemon itself are +# Message headers added by the cleanup(8) daemon itself are # excluded from inspection. Examples of such message headers # are From:, To:, Message-ID:, Date:. # -# Message headers deleted by the cleanup(8) daemon will be +# Message headers deleted by the cleanup(8) daemon will be # examined before they are deleted. Examples are: Bcc:, Con- # tent-Length:, Return-Path:. # @@ -271,11 +276,11 @@ # body_checks # Lookup tables with content filter rules for message # body lines. These filters see one physical line at -# a time, in chunks of at most $line_length_limit +# a time, in chunks of at most $line_length_limit # bytes. # # body_checks_size_limit -# The amount of content per message body segment +# The amount of content per message body segment # (attachment) that is subjected to $body_checks fil- # tering. # @@ -285,32 +290,32 @@ # # nested_header_checks (default: $header_checks) # Lookup tables with content filter rules for message -# header lines: respectively, these are applied to -# the initial message headers (not including MIME -# headers), to the MIME headers anywhere in the mes- -# sage, and to the initial headers of attached mes- +# header lines: respectively, these are applied to +# the initial message headers (not including MIME +# headers), to the MIME headers anywhere in the mes- +# sage, and to the initial headers of attached mes- # sages. # -# Note: these filters see one logical message header -# at a time, even when a message header spans multi- -# ple lines. Message headers that are longer than +# Note: these filters see one logical message header +# at a time, even when a message header spans multi- +# ple lines. Message headers that are longer than # $header_size_limit characters are truncated. # # disable_mime_input_processing -# While receiving mail, give no special treatment to -# MIME related message headers; all text after the +# While receiving mail, give no special treatment to +# MIME related message headers; all text after the # initial message headers is considered to be part of -# the message body. This means that header_checks is -# applied to all the initial message headers, and +# the message body. This means that header_checks is +# applied to all the initial message headers, and # that body_checks is applied to the remainder of the # message. # -# Note: when used in this manner, body_checks will -# process a multi-line message header one line at a +# Note: when used in this manner, body_checks will +# process a multi-line message header one line at a # time. # # EXAMPLES -# Header pattern to block attachments with bad file name +# Header pattern to block attachments with bad file name # extensions. # # /etc/postfix/main.cf: @@ -342,7 +347,7 @@ # RFC 2047, message header encoding for non-ASCII text # # README FILES -# Use "postconf readme_directory" or "postconf html_direc- +# Use "postconf readme_directory" or "postconf html_direc- # tory" to locate this information. # DATABASE_README, Postfix lookup table overview # CONTENT_INSPECTION_README, Postfix content inspection overview @@ -350,7 +355,7 @@ # BACKSCATTER_README, blocking returned forged mail # # LICENSE -# The Secure Mailer license must be distributed with this +# The Secure Mailer license must be distributed with this # software. # # AUTHOR(S) @@ -359,4 +364,4 @@ # P.O. Box 704 # Yorktown Heights, NY 10598, USA # -# HEADER_CHECKS(5) +# HEADER_CHECKS(5) diff --git a/postfix/html/DB_README.html b/postfix/html/DB_README.html index 514590933..3c803d077 100644 --- a/postfix/html/DB_README.html +++ b/postfix/html/DB_README.html @@ -72,15 +72,25 @@ falling apart.

 % make tidy
-% make makefiles CCARGS="-DHAS_DB -I/usr/local/BerkeleyDB.3.1/include" \
-    AUXLIBS="-L/usr/local/BerkeleyDB.3.1/lib -ldb"
+% make makefiles CCARGS="-DHAS_DB -I/usr/local/BerkeleyDB/include" \
+    AUXLIBS="-L/usr/local/BerkeleyDB/lib -ldb"
 % make
 
-

The exact pathnames depend on the DB version that you installed. -For example, Berkeley DB version 2 installs in /usr/local/BerkeleyDB. -

+

Solaris needs this:

+ +
+
+% make tidy
+% make makefiles CCARGS="-DHAS_DB -I/usr/local/BerkeleyDB/include" \
+    AUXLIBS="-R/usr/local/BerkeleyDB/lib -L/usr/local/BerkeleyDB/lib -ldb"
+% make
+
+
+ +

The exact pathnames depend on the Berkeley DB version, and on +how it was installed.

Warning: the file format produced by Berkeley DB version 1 is not compatible with that of versions 2 and 3 (versions 2 and 3 have diff --git a/postfix/html/access.5.html b/postfix/html/access.5.html index efed8c1b9..0405bb40d 100644 --- a/postfix/html/access.5.html +++ b/postfix/html/access.5.html @@ -173,6 +173,12 @@ ACCESS(5) ACCESS(5) tion schemes. REJECT ACTIONS + Postfix version 2.3 and later support enhanced status + codes. When no code is specified at the beginning of the + text below, Postfix inserts a default enhanced status code + of "5.7.1" in the case of reject actions, and "4.7.1" in + the case of defer actions. + 4NN text 5NN text diff --git a/postfix/html/discard.8.html b/postfix/html/discard.8.html index 61b2f5494..29a314943 100644 --- a/postfix/html/discard.8.html +++ b/postfix/html/discard.8.html @@ -17,13 +17,14 @@ DISCARD(8) DISCARD(8) requests from the queue manager. Each request specifies a queue file, a sender address, a domain or host name that is treated as the reason for discarding the mail, and - recipient information. This program expects to be run - from the master(8) process manager. - - The discard(8) delivery agent pretends to deliver all - recipients in the delivery request, logs the "next-hop" - domain or host information as the reason for discarding - the mail, updates the queue file and marks recipients as + recipient information. The reason may be prefixed with an + RFC 1893-compatible detail code. This program expects to + be run from the master(8) process manager. + + The discard(8) delivery agent pretends to deliver all + recipients in the delivery request, logs the "next-hop" + domain or host information as the reason for discarding + the mail, updates the queue file and marks recipients as finished or informs the queue manager that delivery should be tried again at a later time. @@ -31,8 +32,8 @@ DISCARD(8) DISCARD(8) appropriate. SECURITY - The discard(8) mailer is not security-sensitive. It does - not talk to the network, and can be run chrooted at fixed + The discard(8) mailer is not security-sensitive. It does + not talk to the network, and can be run chrooted at fixed low privilege. STANDARDS @@ -41,25 +42,25 @@ DISCARD(8) DISCARD(8) DIAGNOSTICS Problems and transactions are logged to syslogd(8). - Depending on the setting of the notify_classes parameter, - the postmaster is notified of bounces and of other trou- + Depending on the setting of the notify_classes parameter, + the postmaster is notified of bounces and of other trou- ble. CONFIGURATION PARAMETERS - Changes to main.cf are picked up automatically as dis- - card(8) processes run for only a limited amount of time. + Changes to main.cf are picked up automatically as dis- + card(8) processes run for only a limited amount of time. Use the command "postfix reload" to speed up a change. - The text below provides only a parameter summary. See + The text below provides only a parameter summary. See postconf(5) for more details including examples. config_directory (see 'postconf -d' output) - The default location of the Postfix main.cf and + The default location of the Postfix main.cf and master.cf configuration files. daemon_timeout (18000s) - How much time a Postfix daemon process may take to - handle a request before it is terminated by a + How much time a Postfix daemon process may take to + handle a request before it is terminated by a built-in watchdog timer. double_bounce_sender (double-bounce) @@ -71,32 +72,32 @@ DISCARD(8) DISCARD(8) over an internal communication channel. max_idle (100s) - The maximum amount of time that an idle Postfix - daemon process waits for the next service request + The maximum amount of time that an idle Postfix + daemon process waits for the next service request before exiting. max_use (100) - The maximal number of connection requests before a + The maximal number of connection requests before a Postfix daemon process terminates. process_id (read-only) - The process ID of a Postfix command or daemon + The process ID of a Postfix command or daemon process. process_name (read-only) - The process name of a Postfix command or daemon + The process name of a Postfix command or daemon process. queue_directory (see 'postconf -d' output) - The location of the Postfix top-level queue direc- + The location of the Postfix top-level queue direc- tory. syslog_facility (mail) The syslog facility of Postfix logging. syslog_name (postfix) - The mail system name that is prepended to the - process name in syslog records, so that "smtpd" + The mail system name that is prepended to the + process name in syslog records, so that "smtpd" becomes, for example, "postfix/smtpd". SEE ALSO @@ -109,7 +110,7 @@ DISCARD(8) DISCARD(8) syslogd(8), system logging LICENSE - The Secure Mailer license must be distributed with this + The Secure Mailer license must be distributed with this software. HISTORY diff --git a/postfix/html/error.8.html b/postfix/html/error.8.html index 9dfadec5e..cc17b3488 100644 --- a/postfix/html/error.8.html +++ b/postfix/html/error.8.html @@ -17,22 +17,23 @@ ERROR(8) ERROR(8) requests from the queue manager. Each request specifies a queue file, a sender address, a domain or host name that is treated as the reason for non-delivery, and recipient - information. This program expects to be run from the mas- - ter(8) process manager. + information. The reason may be prefixed with an RFC + 1893-compatible detail code. This program expects to be + run from the master(8) process manager. - The error(8) delivery agent bounces all recipients in the - delivery request using the "next-hop" domain or host - information as the reason for non-delivery, updates the + The error(8) delivery agent bounces all recipients in the + delivery request using the "next-hop" domain or host + information as the reason for non-delivery, updates the queue file and marks recipients as finished or informs the - queue manager that delivery should be tried again at a + queue manager that delivery should be tried again at a later time. - Delivery status reports are sent to the bounce(8), + Delivery status reports are sent to the bounce(8), defer(8) or trace(8) daemon as appropriate. SECURITY The error(8) mailer is not security-sensitive. It does not - talk to the network, and can be run chrooted at fixed low + talk to the network, and can be run chrooted at fixed low privilege. STANDARDS @@ -41,35 +42,35 @@ ERROR(8) ERROR(8) DIAGNOSTICS Problems and transactions are logged to syslogd(8). - Depending on the setting of the notify_classes parameter, - the postmaster is notified of bounces and of other trou- + Depending on the setting of the notify_classes parameter, + the postmaster is notified of bounces and of other trou- ble. CONFIGURATION PARAMETERS Changes to main.cf are picked up automatically as error(8) - processes run for only a limited amount of time. Use the + processes run for only a limited amount of time. Use the command "postfix reload" to speed up a change. - The text below provides only a parameter summary. See + The text below provides only a parameter summary. See postconf(5) for more details including examples. 2bounce_notice_recipient (postmaster) - The recipient of undeliverable mail that cannot be + The recipient of undeliverable mail that cannot be returned to the sender. bounce_notice_recipient (postmaster) - The recipient of postmaster notifications with the + The recipient of postmaster notifications with the message headers of mail that Postfix did not - deliver and of SMTP conversation transcripts of + deliver and of SMTP conversation transcripts of mail that Postfix did not receive. config_directory (see 'postconf -d' output) - The default location of the Postfix main.cf and + The default location of the Postfix main.cf and master.cf configuration files. daemon_timeout (18000s) - How much time a Postfix daemon process may take to - handle a request before it is terminated by a + How much time a Postfix daemon process may take to + handle a request before it is terminated by a built-in watchdog timer. double_bounce_sender (double-bounce) @@ -81,36 +82,36 @@ ERROR(8) ERROR(8) over an internal communication channel. max_idle (100s) - The maximum amount of time that an idle Postfix - daemon process waits for the next service request + The maximum amount of time that an idle Postfix + daemon process waits for the next service request before exiting. max_use (100) - The maximal number of connection requests before a + The maximal number of connection requests before a Postfix daemon process terminates. notify_classes (resource, software) - The list of error classes that are reported to the + The list of error classes that are reported to the postmaster. process_id (read-only) - The process ID of a Postfix command or daemon + The process ID of a Postfix command or daemon process. process_name (read-only) - The process name of a Postfix command or daemon + The process name of a Postfix command or daemon process. queue_directory (see 'postconf -d' output) - The location of the Postfix top-level queue direc- + The location of the Postfix top-level queue direc- tory. syslog_facility (mail) The syslog facility of Postfix logging. syslog_name (postfix) - The mail system name that is prepended to the - process name in syslog records, so that "smtpd" + The mail system name that is prepended to the + process name in syslog records, so that "smtpd" becomes, for example, "postfix/smtpd". SEE ALSO @@ -123,7 +124,7 @@ ERROR(8) ERROR(8) syslogd(8), system logging LICENSE - The Secure Mailer license must be distributed with this + The Secure Mailer license must be distributed with this software. AUTHOR(S) diff --git a/postfix/html/header_checks.5.html b/postfix/html/header_checks.5.html index 9354d3b25..d372a9019 100644 --- a/postfix/html/header_checks.5.html +++ b/postfix/html/header_checks.5.html @@ -249,27 +249,32 @@ HEADER_CHECKS(5) HEADER_CHECKS(5) body_checks inspection of the current message and affects all recipients. + Postfix version 2.3 and later support enhanced sta- + tus codes. When no code is specified at the begin- + ning of optional text..., Postfix inserts a default + enhanced status code of "5.7.1". + WARN optional text... - Log a warning with the optional text... (or log a - generic message) and inspect the next input line. + Log a warning with the optional text... (or log a + generic message) and inspect the next input line. This action is useful for debugging and for testing a pattern before applying more drastic actions. BUGS - Many people overlook the main limitations of header and - body_checks rules. These rules operate on one logical - message header or one body line at a time, and a decision - made for one line is not carried over to the next line. + Many people overlook the main limitations of header and + body_checks rules. These rules operate on one logical + message header or one body line at a time, and a decision + made for one line is not carried over to the next line. If text in the message body is encoded (RFC 2045) then the - rules have to specified for the encoded form. Likewise, + rules have to specified for the encoded form. Likewise, when message headers are encoded (RFC 2047) then the rules need to be specified for the encoded form. - Message headers added by the cleanup(8) daemon itself are + Message headers added by the cleanup(8) daemon itself are excluded from inspection. Examples of such message headers are From:, To:, Message-ID:, Date:. - Message headers deleted by the cleanup(8) daemon will be + Message headers deleted by the cleanup(8) daemon will be examined before they are deleted. Examples are: Bcc:, Con- tent-Length:, Return-Path:. @@ -277,11 +282,11 @@ HEADER_CHECKS(5) HEADER_CHECKS(5) body_checks Lookup tables with content filter rules for message body lines. These filters see one physical line at - a time, in chunks of at most $line_length_limit + a time, in chunks of at most $line_length_limit bytes. body_checks_size_limit - The amount of content per message body segment + The amount of content per message body segment (attachment) that is subjected to $body_checks fil- tering. @@ -291,32 +296,32 @@ HEADER_CHECKS(5) HEADER_CHECKS(5) nested_header_checks (default: $header_checks) Lookup tables with content filter rules for message - header lines: respectively, these are applied to - the initial message headers (not including MIME - headers), to the MIME headers anywhere in the mes- - sage, and to the initial headers of attached mes- + header lines: respectively, these are applied to + the initial message headers (not including MIME + headers), to the MIME headers anywhere in the mes- + sage, and to the initial headers of attached mes- sages. - Note: these filters see one logical message header - at a time, even when a message header spans multi- - ple lines. Message headers that are longer than + Note: these filters see one logical message header + at a time, even when a message header spans multi- + ple lines. Message headers that are longer than $header_size_limit characters are truncated. disable_mime_input_processing - While receiving mail, give no special treatment to - MIME related message headers; all text after the + While receiving mail, give no special treatment to + MIME related message headers; all text after the initial message headers is considered to be part of - the message body. This means that header_checks is - applied to all the initial message headers, and + the message body. This means that header_checks is + applied to all the initial message headers, and that body_checks is applied to the remainder of the message. - Note: when used in this manner, body_checks will - process a multi-line message header one line at a + Note: when used in this manner, body_checks will + process a multi-line message header one line at a time. EXAMPLES - Header pattern to block attachments with bad file name + Header pattern to block attachments with bad file name extensions. /etc/postfix/main.cf: @@ -354,7 +359,7 @@ HEADER_CHECKS(5) HEADER_CHECKS(5) BACKSCATTER_README, blocking returned forged mail LICENSE - The Secure Mailer license must be distributed with this + The Secure Mailer license must be distributed with this software. AUTHOR(S) diff --git a/postfix/html/lmtp.8.html b/postfix/html/lmtp.8.html index 3ba0eddd4..2a36548b9 100644 --- a/postfix/html/lmtp.8.html +++ b/postfix/html/lmtp.8.html @@ -63,6 +63,7 @@ LMTP(8) LMTP(8) RFC 1652 (8bit-MIME transport) RFC 1870 (Message Size Declaration) RFC 2033 (LMTP protocol) + RFC 2034 (Enhanced Error Codes) RFC 2554 (AUTH command) RFC 2821 (SMTP protocol) RFC 2920 (SMTP Pipelining) diff --git a/postfix/html/smtp-sink.1.html b/postfix/html/smtp-sink.1.html index 7e977c7a8..cedecd4b3 100644 --- a/postfix/html/smtp-sink.1.html +++ b/postfix/html/smtp-sink.1.html @@ -44,7 +44,7 @@ SMTP-SINK(1) SMTP-SINK(1) -f command,command,... Reject the specified commands with a hard (5xx) - error code. + error code. This option implies -p. -F Disable XFORWARD support. @@ -71,7 +71,7 @@ SMTP-SINK(1) SMTP-SINK(1) -r command,command,... Reject the specified commands with a soft (4xx) - error code. + error code. This option implies -p. -s command,command,... Log the named commands to syslogd. Examples of diff --git a/postfix/html/smtp.8.html b/postfix/html/smtp.8.html index 95c51c2a9..6d2f13dc8 100644 --- a/postfix/html/smtp.8.html +++ b/postfix/html/smtp.8.html @@ -56,6 +56,7 @@ SMTP(8) SMTP(8) RFC 1652 (8bit-MIME transport) RFC 1870 (Message Size Declaration) RFC 2045 (MIME: Format of Internet Message Bodies) + RFC 2034 (Enhanced Error Codes) RFC 2046 (MIME: Media Types) RFC 2554 (AUTH command) RFC 2821 (SMTP protocol) diff --git a/postfix/html/smtpd.8.html b/postfix/html/smtpd.8.html index a6362559e..7eedc495c 100644 --- a/postfix/html/smtpd.8.html +++ b/postfix/html/smtpd.8.html @@ -43,6 +43,7 @@ SMTPD(8) SMTPD(8) RFC 1869 (SMTP service extensions) RFC 1870 (Message Size Declaration) RFC 1985 (ETRN command) + RFC 2034 (Enhanced Error Codes) RFC 2554 (AUTH command) RFC 2821 (SMTP protocol) RFC 2920 (SMTP Pipelining) diff --git a/postfix/man/man1/smtp-sink.1 b/postfix/man/man1/smtp-sink.1 index e2b845449..c24833afb 100644 --- a/postfix/man/man1/smtp-sink.1 +++ b/postfix/man/man1/smtp-sink.1 @@ -44,6 +44,7 @@ Disable XCLIENT support. Do not announce ESMTP support. .IP "\fB-f \fIcommand,command,...\fR" Reject the specified commands with a hard (5xx) error code. +This option implies \fB-p\fR. .IP \fB-F\fR Disable XFORWARD support. .IP "\fB-h\fI hostname\fR" @@ -63,6 +64,7 @@ Disconnect (without replying) after receiving one of the specified commands. .IP "\fB-r \fIcommand,command,...\fR" Reject the specified commands with a soft (4xx) error code. +This option implies \fB-p\fR. .IP "\fB-s \fIcommand,command,...\fR" Log the named commands to syslogd. Examples of commands that can be logged are HELO, EHLO, LHLO, MAIL, diff --git a/postfix/man/man5/access.5 b/postfix/man/man5/access.5 index 7f9cfb821..00d336bc7 100644 --- a/postfix/man/man5/access.5 +++ b/postfix/man/man5/access.5 @@ -165,6 +165,11 @@ generated by address-based relay authorization schemes. .nf .ad .fi +Postfix version 2.3 and later support enhanced status codes. +When no code is specified at the beginning of the \fItext\fR +below, Postfix inserts a default enhanced status code of "5.7.1" +in the case of reject actions, and "4.7.1" in the case of +defer actions. .IP "\fB4\fINN text\fR" .IP "\fB5\fINN text\fR" Reject the address etc. that matches the pattern, and respond with diff --git a/postfix/man/man5/header_checks.5 b/postfix/man/man5/header_checks.5 index 71a48372d..bd794663d 100644 --- a/postfix/man/man5/header_checks.5 +++ b/postfix/man/man5/header_checks.5 @@ -227,6 +227,11 @@ message. .sp Note: this action disables further header or body_checks inspection of the current message and affects all recipients. +.sp +Postfix version 2.3 and later support enhanced status codes. +When no code is specified at the beginning of \fIoptional +text...\fR, Postfix inserts a default enhanced status code of +"5.7.1". .IP "\fBWARN \fIoptional text...\fR Log a warning with the \fIoptional text...\fR (or log a generic message) and inspect the next input line. This diff --git a/postfix/man/man8/discard.8 b/postfix/man/man8/discard.8 index 19be8c370..215ee975d 100644 --- a/postfix/man/man8/discard.8 +++ b/postfix/man/man8/discard.8 @@ -17,6 +17,7 @@ delivery requests from the queue manager. Each request specifies a queue file, a sender address, a domain or host name that is treated as the reason for discarding the mail, and recipient information. +The reason may be prefixed with an RFC 1893-compatible detail code. This program expects to be run from the \fBmaster\fR(8) process manager. diff --git a/postfix/man/man8/error.8 b/postfix/man/man8/error.8 index 45df13163..a0f0b996f 100644 --- a/postfix/man/man8/error.8 +++ b/postfix/man/man8/error.8 @@ -17,6 +17,7 @@ requests from the queue manager. Each request specifies a queue file, a sender address, a domain or host name that is treated as the reason for non-delivery, and recipient information. +The reason may be prefixed with an RFC 1893-compatible detail code. This program expects to be run from the \fBmaster\fR(8) process manager. diff --git a/postfix/man/man8/lmtp.8 b/postfix/man/man8/lmtp.8 index 725338f25..13077bd88 100644 --- a/postfix/man/man8/lmtp.8 +++ b/postfix/man/man8/lmtp.8 @@ -60,6 +60,7 @@ RFC 1651 (SMTP service extensions) RFC 1652 (8bit-MIME transport) RFC 1870 (Message Size Declaration) RFC 2033 (LMTP protocol) +RFC 2034 (Enhanced Error Codes) RFC 2554 (AUTH command) RFC 2821 (SMTP protocol) RFC 2920 (SMTP Pipelining) diff --git a/postfix/man/man8/smtp.8 b/postfix/man/man8/smtp.8 index 136b509a8..8cbc7ca51 100644 --- a/postfix/man/man8/smtp.8 +++ b/postfix/man/man8/smtp.8 @@ -57,6 +57,7 @@ RFC 1651 (SMTP service extensions) RFC 1652 (8bit-MIME transport) RFC 1870 (Message Size Declaration) RFC 2045 (MIME: Format of Internet Message Bodies) +RFC 2034 (Enhanced Error Codes) RFC 2046 (MIME: Media Types) RFC 2554 (AUTH command) RFC 2821 (SMTP protocol) diff --git a/postfix/man/man8/smtpd.8 b/postfix/man/man8/smtpd.8 index 1a5b2b35a..f6fb56d4e 100644 --- a/postfix/man/man8/smtpd.8 +++ b/postfix/man/man8/smtpd.8 @@ -46,6 +46,7 @@ RFC 1652 (8bit-MIME transport) RFC 1869 (SMTP service extensions) RFC 1870 (Message Size Declaration) RFC 1985 (ETRN command) +RFC 2034 (Enhanced Error Codes) RFC 2554 (AUTH command) RFC 2821 (SMTP protocol) RFC 2920 (SMTP Pipelining) diff --git a/postfix/proto/DB_README.html b/postfix/proto/DB_README.html index 886789887..505cbba8c 100644 --- a/postfix/proto/DB_README.html +++ b/postfix/proto/DB_README.html @@ -72,15 +72,25 @@ http://www.sleepycat.com/, use something like:

 % make tidy
-% make makefiles CCARGS="-DHAS_DB -I/usr/local/BerkeleyDB.3.1/include" \
-    AUXLIBS="-L/usr/local/BerkeleyDB.3.1/lib -ldb"
+% make makefiles CCARGS="-DHAS_DB -I/usr/local/BerkeleyDB/include" \
+    AUXLIBS="-L/usr/local/BerkeleyDB/lib -ldb"
 % make
 
-

The exact pathnames depend on the DB version that you installed. -For example, Berkeley DB version 2 installs in /usr/local/BerkeleyDB. -

+

Solaris needs this:

+ +
+
+% make tidy
+% make makefiles CCARGS="-DHAS_DB -I/usr/local/BerkeleyDB/include" \
+    AUXLIBS="-R/usr/local/BerkeleyDB/lib -L/usr/local/BerkeleyDB/lib -ldb"
+% make
+
+
+ +

The exact pathnames depend on the Berkeley DB version, and on +how it was installed.

Warning: the file format produced by Berkeley DB version 1 is not compatible with that of versions 2 and 3 (versions 2 and 3 have diff --git a/postfix/proto/access b/postfix/proto/access index 405ba1f3f..783786fdf 100644 --- a/postfix/proto/access +++ b/postfix/proto/access @@ -147,6 +147,11 @@ # REJECT ACTIONS # .ad # .fi +# Postfix version 2.3 and later support enhanced status codes. +# When no code is specified at the beginning of the \fItext\fR +# below, Postfix inserts a default enhanced status code of "5.7.1" +# in the case of reject actions, and "4.7.1" in the case of +# defer actions. # .IP "\fB4\fINN text\fR" # .IP "\fB5\fINN text\fR" # Reject the address etc. that matches the pattern, and respond with diff --git a/postfix/proto/header_checks b/postfix/proto/header_checks index 289acac25..51220d4e6 100644 --- a/postfix/proto/header_checks +++ b/postfix/proto/header_checks @@ -213,6 +213,11 @@ # .sp # Note: this action disables further header or body_checks inspection # of the current message and affects all recipients. +# .sp +# Postfix version 2.3 and later support enhanced status codes. +# When no code is specified at the beginning of \fIoptional +# text...\fR, Postfix inserts a default enhanced status code of +# "5.7.1". # .IP "\fBWARN \fIoptional text...\fR # Log a warning with the \fIoptional text...\fR (or log a # generic message) and inspect the next input line. This diff --git a/postfix/src/anvil/Makefile.in b/postfix/src/anvil/Makefile.in index 5e4035fb1..5ff109e3a 100644 --- a/postfix/src/anvil/Makefile.in +++ b/postfix/src/anvil/Makefile.in @@ -47,26 +47,27 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -anvil.o: anvil.c -anvil.o: ../../include/sys_defs.h -anvil.o: ../../include/msg.h -anvil.o: ../../include/mymalloc.h -anvil.o: ../../include/htable.h -anvil.o: ../../include/stringops.h -anvil.o: ../../include/vstring.h -anvil.o: ../../include/vbuf.h +anvil.o: ../../include/anvil_clnt.h +anvil.o: ../../include/attr.h +anvil.o: ../../include/attr_clnt.h anvil.o: ../../include/events.h +anvil.o: ../../include/htable.h +anvil.o: ../../include/iostuff.h anvil.o: ../../include/mail_conf.h anvil.o: ../../include/mail_params.h anvil.o: ../../include/mail_proto.h -anvil.o: ../../include/vstream.h -anvil.o: ../../include/iostuff.h -anvil.o: ../../include/attr.h -anvil.o: ../../include/anvil_clnt.h -anvil.o: ../../include/attr_clnt.h anvil.o: ../../include/mail_server.h +anvil.o: ../../include/msg.h +anvil.o: ../../include/mymalloc.h +anvil.o: ../../include/stringops.h +anvil.o: ../../include/sys_defs.h +anvil.o: ../../include/vbuf.h +anvil.o: ../../include/vstream.h +anvil.o: ../../include/vstring.h +anvil.o: anvil.c diff --git a/postfix/src/bounce/Makefile.in b/postfix/src/bounce/Makefile.in index 7c802a6da..1d89b537b 100644 --- a/postfix/src/bounce/Makefile.in +++ b/postfix/src/bounce/Makefile.in @@ -52,172 +52,173 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -bounce.o: bounce.c -bounce.o: ../../include/sys_defs.h -bounce.o: ../../include/msg.h -bounce.o: ../../include/vstring.h -bounce.o: ../../include/vbuf.h -bounce.o: ../../include/vstream.h -bounce.o: ../../include/stringops.h -bounce.o: ../../include/mail_proto.h -bounce.o: ../../include/iostuff.h bounce.o: ../../include/attr.h -bounce.o: ../../include/mail_queue.h -bounce.o: ../../include/mail_params.h -bounce.o: ../../include/mail_conf.h bounce.o: ../../include/bounce.h +bounce.o: ../../include/bounce_log.h bounce.o: ../../include/deliver_request.h -bounce.o: ../../include/recipient_list.h +bounce.o: ../../include/iostuff.h bounce.o: ../../include/mail_addr.h +bounce.o: ../../include/mail_conf.h +bounce.o: ../../include/mail_params.h +bounce.o: ../../include/mail_proto.h +bounce.o: ../../include/mail_queue.h bounce.o: ../../include/mail_server.h +bounce.o: ../../include/msg.h +bounce.o: ../../include/recipient_list.h +bounce.o: ../../include/stringops.h +bounce.o: ../../include/sys_defs.h +bounce.o: ../../include/vbuf.h +bounce.o: ../../include/vstream.h +bounce.o: ../../include/vstring.h +bounce.o: bounce.c bounce.o: bounce_service.h -bounce.o: ../../include/bounce_log.h -bounce_append_service.o: bounce_append_service.c -bounce_append_service.o: ../../include/sys_defs.h -bounce_append_service.o: ../../include/msg.h -bounce_append_service.o: ../../include/vstring.h -bounce_append_service.o: ../../include/vbuf.h -bounce_append_service.o: ../../include/vstream.h -bounce_append_service.o: ../../include/stringops.h +bounce_append_service.o: ../../include/attr.h +bounce_append_service.o: ../../include/bounce_log.h +bounce_append_service.o: ../../include/deliver_flock.h +bounce_append_service.o: ../../include/iostuff.h bounce_append_service.o: ../../include/mail_params.h +bounce_append_service.o: ../../include/mail_proto.h bounce_append_service.o: ../../include/mail_queue.h +bounce_append_service.o: ../../include/msg.h +bounce_append_service.o: ../../include/myflock.h bounce_append_service.o: ../../include/quote_822_local.h bounce_append_service.o: ../../include/quote_flags.h -bounce_append_service.o: ../../include/deliver_flock.h -bounce_append_service.o: ../../include/myflock.h -bounce_append_service.o: ../../include/mail_proto.h -bounce_append_service.o: ../../include/iostuff.h -bounce_append_service.o: ../../include/attr.h +bounce_append_service.o: ../../include/stringops.h +bounce_append_service.o: ../../include/sys_defs.h +bounce_append_service.o: ../../include/vbuf.h +bounce_append_service.o: ../../include/vstream.h +bounce_append_service.o: ../../include/vstring.h +bounce_append_service.o: bounce_append_service.c bounce_append_service.o: bounce_service.h -bounce_append_service.o: ../../include/bounce_log.h -bounce_cleanup.o: bounce_cleanup.c -bounce_cleanup.o: ../../include/sys_defs.h +bounce_cleanup.o: ../../include/bounce_log.h +bounce_cleanup.o: ../../include/mail_queue.h bounce_cleanup.o: ../../include/msg.h bounce_cleanup.o: ../../include/mymalloc.h -bounce_cleanup.o: ../../include/vstring.h +bounce_cleanup.o: ../../include/sys_defs.h bounce_cleanup.o: ../../include/vbuf.h -bounce_cleanup.o: ../../include/mail_queue.h bounce_cleanup.o: ../../include/vstream.h +bounce_cleanup.o: ../../include/vstring.h +bounce_cleanup.o: bounce_cleanup.c bounce_cleanup.o: bounce_service.h -bounce_cleanup.o: ../../include/bounce_log.h -bounce_notify_service.o: bounce_notify_service.c -bounce_notify_service.o: ../../include/sys_defs.h -bounce_notify_service.o: ../../include/msg.h -bounce_notify_service.o: ../../include/vstream.h -bounce_notify_service.o: ../../include/vbuf.h -bounce_notify_service.o: ../../include/name_mask.h -bounce_notify_service.o: ../../include/mail_params.h -bounce_notify_service.o: ../../include/mail_queue.h -bounce_notify_service.o: ../../include/vstring.h -bounce_notify_service.o: ../../include/post_mail.h +bounce_notify_service.o: ../../include/bounce.h +bounce_notify_service.o: ../../include/bounce_log.h bounce_notify_service.o: ../../include/cleanup_user.h +bounce_notify_service.o: ../../include/deliver_request.h bounce_notify_service.o: ../../include/mail_addr.h bounce_notify_service.o: ../../include/mail_error.h -bounce_notify_service.o: ../../include/bounce.h -bounce_notify_service.o: ../../include/deliver_request.h +bounce_notify_service.o: ../../include/mail_params.h +bounce_notify_service.o: ../../include/mail_queue.h +bounce_notify_service.o: ../../include/msg.h +bounce_notify_service.o: ../../include/name_mask.h +bounce_notify_service.o: ../../include/post_mail.h bounce_notify_service.o: ../../include/recipient_list.h +bounce_notify_service.o: ../../include/sys_defs.h +bounce_notify_service.o: ../../include/vbuf.h +bounce_notify_service.o: ../../include/vstream.h +bounce_notify_service.o: ../../include/vstring.h +bounce_notify_service.o: bounce_notify_service.c bounce_notify_service.o: bounce_service.h -bounce_notify_service.o: ../../include/bounce_log.h -bounce_notify_util.o: bounce_notify_util.c -bounce_notify_util.o: ../../include/sys_defs.h -bounce_notify_util.o: ../../include/msg.h -bounce_notify_util.o: ../../include/mymalloc.h +bounce_notify_util.o: ../../include/attr.h +bounce_notify_util.o: ../../include/bounce_log.h +bounce_notify_util.o: ../../include/cleanup_user.h +bounce_notify_util.o: ../../include/deliver_completed.h bounce_notify_util.o: ../../include/events.h -bounce_notify_util.o: ../../include/vstring.h -bounce_notify_util.o: ../../include/vbuf.h -bounce_notify_util.o: ../../include/vstream.h +bounce_notify_util.o: ../../include/iostuff.h +bounce_notify_util.o: ../../include/is_header.h +bounce_notify_util.o: ../../include/lex_822.h bounce_notify_util.o: ../../include/line_wrap.h -bounce_notify_util.o: ../../include/stringops.h -bounce_notify_util.o: ../../include/xtext.h -bounce_notify_util.o: ../../include/myflock.h +bounce_notify_util.o: ../../include/mail_addr.h +bounce_notify_util.o: ../../include/mail_date.h +bounce_notify_util.o: ../../include/mail_error.h +bounce_notify_util.o: ../../include/mail_params.h +bounce_notify_util.o: ../../include/mail_proto.h bounce_notify_util.o: ../../include/mail_queue.h +bounce_notify_util.o: ../../include/msg.h +bounce_notify_util.o: ../../include/myflock.h +bounce_notify_util.o: ../../include/mymalloc.h +bounce_notify_util.o: ../../include/name_mask.h +bounce_notify_util.o: ../../include/post_mail.h bounce_notify_util.o: ../../include/quote_822_local.h bounce_notify_util.o: ../../include/quote_flags.h -bounce_notify_util.o: ../../include/mail_params.h -bounce_notify_util.o: ../../include/is_header.h -bounce_notify_util.o: ../../include/record.h bounce_notify_util.o: ../../include/rec_type.h -bounce_notify_util.o: ../../include/post_mail.h -bounce_notify_util.o: ../../include/cleanup_user.h -bounce_notify_util.o: ../../include/mail_addr.h -bounce_notify_util.o: ../../include/mail_error.h -bounce_notify_util.o: ../../include/name_mask.h -bounce_notify_util.o: ../../include/bounce_log.h -bounce_notify_util.o: ../../include/mail_date.h -bounce_notify_util.o: ../../include/mail_proto.h -bounce_notify_util.o: ../../include/iostuff.h -bounce_notify_util.o: ../../include/attr.h -bounce_notify_util.o: ../../include/lex_822.h -bounce_notify_util.o: ../../include/deliver_completed.h +bounce_notify_util.o: ../../include/record.h +bounce_notify_util.o: ../../include/stringops.h +bounce_notify_util.o: ../../include/sys_defs.h +bounce_notify_util.o: ../../include/vbuf.h +bounce_notify_util.o: ../../include/vstream.h +bounce_notify_util.o: ../../include/vstring.h +bounce_notify_util.o: ../../include/xtext.h +bounce_notify_util.o: bounce_notify_util.c bounce_notify_util.o: bounce_service.h -bounce_notify_verp.o: bounce_notify_verp.c -bounce_notify_verp.o: ../../include/sys_defs.h -bounce_notify_verp.o: ../../include/msg.h -bounce_notify_verp.o: ../../include/vstream.h -bounce_notify_verp.o: ../../include/vbuf.h -bounce_notify_verp.o: ../../include/name_mask.h -bounce_notify_verp.o: ../../include/mail_params.h -bounce_notify_verp.o: ../../include/mail_queue.h -bounce_notify_verp.o: ../../include/vstring.h -bounce_notify_verp.o: ../../include/post_mail.h +bounce_notify_verp.o: ../../include/bounce.h +bounce_notify_verp.o: ../../include/bounce_log.h bounce_notify_verp.o: ../../include/cleanup_user.h +bounce_notify_verp.o: ../../include/deliver_request.h bounce_notify_verp.o: ../../include/mail_addr.h bounce_notify_verp.o: ../../include/mail_error.h -bounce_notify_verp.o: ../../include/verp_sender.h -bounce_notify_verp.o: ../../include/bounce.h -bounce_notify_verp.o: ../../include/deliver_request.h +bounce_notify_verp.o: ../../include/mail_params.h +bounce_notify_verp.o: ../../include/mail_queue.h +bounce_notify_verp.o: ../../include/msg.h +bounce_notify_verp.o: ../../include/name_mask.h +bounce_notify_verp.o: ../../include/post_mail.h bounce_notify_verp.o: ../../include/recipient_list.h +bounce_notify_verp.o: ../../include/sys_defs.h +bounce_notify_verp.o: ../../include/vbuf.h +bounce_notify_verp.o: ../../include/verp_sender.h +bounce_notify_verp.o: ../../include/vstream.h +bounce_notify_verp.o: ../../include/vstring.h +bounce_notify_verp.o: bounce_notify_verp.c bounce_notify_verp.o: bounce_service.h -bounce_notify_verp.o: ../../include/bounce_log.h -bounce_one_service.o: bounce_one_service.c -bounce_one_service.o: ../../include/sys_defs.h -bounce_one_service.o: ../../include/msg.h -bounce_one_service.o: ../../include/vstream.h -bounce_one_service.o: ../../include/vbuf.h -bounce_one_service.o: ../../include/name_mask.h -bounce_one_service.o: ../../include/mail_params.h -bounce_one_service.o: ../../include/post_mail.h +bounce_one_service.o: ../../include/bounce.h +bounce_one_service.o: ../../include/bounce_log.h bounce_one_service.o: ../../include/cleanup_user.h +bounce_one_service.o: ../../include/deliver_request.h bounce_one_service.o: ../../include/mail_addr.h bounce_one_service.o: ../../include/mail_error.h -bounce_one_service.o: ../../include/bounce.h -bounce_one_service.o: ../../include/deliver_request.h -bounce_one_service.o: ../../include/vstring.h +bounce_one_service.o: ../../include/mail_params.h +bounce_one_service.o: ../../include/msg.h +bounce_one_service.o: ../../include/name_mask.h +bounce_one_service.o: ../../include/post_mail.h bounce_one_service.o: ../../include/recipient_list.h +bounce_one_service.o: ../../include/sys_defs.h +bounce_one_service.o: ../../include/vbuf.h +bounce_one_service.o: ../../include/vstream.h +bounce_one_service.o: ../../include/vstring.h +bounce_one_service.o: bounce_one_service.c bounce_one_service.o: bounce_service.h -bounce_one_service.o: ../../include/bounce_log.h -bounce_trace_service.o: bounce_trace_service.c -bounce_trace_service.o: ../../include/sys_defs.h -bounce_trace_service.o: ../../include/msg.h -bounce_trace_service.o: ../../include/vstream.h -bounce_trace_service.o: ../../include/vbuf.h -bounce_trace_service.o: ../../include/mail_params.h -bounce_trace_service.o: ../../include/mail_queue.h -bounce_trace_service.o: ../../include/vstring.h -bounce_trace_service.o: ../../include/post_mail.h +bounce_trace_service.o: ../../include/bounce_log.h bounce_trace_service.o: ../../include/cleanup_user.h bounce_trace_service.o: ../../include/mail_addr.h bounce_trace_service.o: ../../include/mail_error.h +bounce_trace_service.o: ../../include/mail_params.h +bounce_trace_service.o: ../../include/mail_queue.h +bounce_trace_service.o: ../../include/msg.h bounce_trace_service.o: ../../include/name_mask.h +bounce_trace_service.o: ../../include/post_mail.h +bounce_trace_service.o: ../../include/sys_defs.h +bounce_trace_service.o: ../../include/vbuf.h +bounce_trace_service.o: ../../include/vstream.h +bounce_trace_service.o: ../../include/vstring.h bounce_trace_service.o: bounce_service.h -bounce_trace_service.o: ../../include/bounce_log.h -bounce_warn_service.o: bounce_warn_service.c -bounce_warn_service.o: ../../include/sys_defs.h -bounce_warn_service.o: ../../include/msg.h -bounce_warn_service.o: ../../include/vstream.h -bounce_warn_service.o: ../../include/vbuf.h -bounce_warn_service.o: ../../include/name_mask.h -bounce_warn_service.o: ../../include/mail_params.h -bounce_warn_service.o: ../../include/mail_queue.h -bounce_warn_service.o: ../../include/vstring.h -bounce_warn_service.o: ../../include/post_mail.h +bounce_trace_service.o: bounce_trace_service.c +bounce_warn_service.o: ../../include/bounce_log.h bounce_warn_service.o: ../../include/cleanup_user.h bounce_warn_service.o: ../../include/mail_addr.h bounce_warn_service.o: ../../include/mail_error.h +bounce_warn_service.o: ../../include/mail_params.h +bounce_warn_service.o: ../../include/mail_queue.h +bounce_warn_service.o: ../../include/msg.h +bounce_warn_service.o: ../../include/name_mask.h +bounce_warn_service.o: ../../include/post_mail.h +bounce_warn_service.o: ../../include/sys_defs.h +bounce_warn_service.o: ../../include/vbuf.h +bounce_warn_service.o: ../../include/vstream.h +bounce_warn_service.o: ../../include/vstring.h bounce_warn_service.o: bounce_service.h -bounce_warn_service.o: ../../include/bounce_log.h +bounce_warn_service.o: bounce_warn_service.c diff --git a/postfix/src/bounce/bounce_append_service.c b/postfix/src/bounce/bounce_append_service.c index a72b92c95..69970cea6 100644 --- a/postfix/src/bounce/bounce_append_service.c +++ b/postfix/src/bounce/bounce_append_service.c @@ -6,12 +6,14 @@ /* SYNOPSIS /* #include "bounce_service.h" /* -/* int bounce_append_service(flags, queue_id, orig_rcpt, recipient, -/* status, action, why) +/* int bounce_append_service(flags, service, queue_id, orig_rcpt, +/* recipient, offset, status, action, why) /* int flags; +/* char *service; /* char *queue_id; /* char *orig_rcpt; /* char *recipient; +/* long offset; /* char *status; /* char *action; /* char *why; diff --git a/postfix/src/cleanup/Makefile.in b/postfix/src/cleanup/Makefile.in index 233baab16..66212f8e5 100644 --- a/postfix/src/cleanup/Makefile.in +++ b/postfix/src/cleanup/Makefile.in @@ -76,428 +76,431 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -cleanup.o: cleanup.c -cleanup.o: ../../include/sys_defs.h -cleanup.o: ../../include/msg.h -cleanup.o: ../../include/vstring.h -cleanup.o: ../../include/vbuf.h -cleanup.o: ../../include/dict.h -cleanup.o: ../../include/vstream.h cleanup.o: ../../include/argv.h -cleanup.o: ../../include/mail_conf.h +cleanup.o: ../../include/attr.h +cleanup.o: ../../include/been_here.h cleanup.o: ../../include/cleanup_user.h -cleanup.o: ../../include/mail_proto.h +cleanup.o: ../../include/dict.h +cleanup.o: ../../include/header_opts.h +cleanup.o: ../../include/htable.h cleanup.o: ../../include/iostuff.h -cleanup.o: ../../include/attr.h +cleanup.o: ../../include/mail_conf.h cleanup.o: ../../include/mail_params.h -cleanup.o: ../../include/record.h -cleanup.o: ../../include/rec_type.h +cleanup.o: ../../include/mail_proto.h cleanup.o: ../../include/mail_server.h -cleanup.o: cleanup.h -cleanup.o: ../../include/nvtable.h -cleanup.o: ../../include/htable.h -cleanup.o: ../../include/mymalloc.h -cleanup.o: ../../include/maps.h -cleanup.o: ../../include/tok822.h -cleanup.o: ../../include/resolve_clnt.h -cleanup.o: ../../include/been_here.h cleanup.o: ../../include/mail_stream.h -cleanup.o: ../../include/mime_state.h -cleanup.o: ../../include/header_opts.h -cleanup.o: ../../include/string_list.h +cleanup.o: ../../include/maps.h cleanup.o: ../../include/match_list.h cleanup.o: ../../include/match_ops.h -cleanup_addr.o: cleanup_addr.c -cleanup_addr.o: ../../include/sys_defs.h -cleanup_addr.o: ../../include/msg.h -cleanup_addr.o: ../../include/vstring.h -cleanup_addr.o: ../../include/vbuf.h -cleanup_addr.o: ../../include/vstream.h -cleanup_addr.o: ../../include/mymalloc.h -cleanup_addr.o: ../../include/stringops.h -cleanup_addr.o: ../../include/rec_type.h +cleanup.o: ../../include/mime_state.h +cleanup.o: ../../include/msg.h +cleanup.o: ../../include/mymalloc.h +cleanup.o: ../../include/nvtable.h +cleanup.o: ../../include/rec_type.h +cleanup.o: ../../include/record.h +cleanup.o: ../../include/resolve_clnt.h +cleanup.o: ../../include/string_list.h +cleanup.o: ../../include/sys_defs.h +cleanup.o: ../../include/tok822.h +cleanup.o: ../../include/vbuf.h +cleanup.o: ../../include/vstream.h +cleanup.o: ../../include/vstring.h +cleanup.o: cleanup.c +cleanup.o: cleanup.h +cleanup_addr.o: ../../include/argv.h +cleanup_addr.o: ../../include/attr.h +cleanup_addr.o: ../../include/been_here.h +cleanup_addr.o: ../../include/canon_addr.h cleanup_addr.o: ../../include/cleanup_user.h -cleanup_addr.o: ../../include/mail_params.h +cleanup_addr.o: ../../include/dict.h cleanup_addr.o: ../../include/ext_prop.h +cleanup_addr.o: ../../include/header_opts.h +cleanup_addr.o: ../../include/htable.h +cleanup_addr.o: ../../include/iostuff.h cleanup_addr.o: ../../include/mail_addr.h -cleanup_addr.o: ../../include/canon_addr.h cleanup_addr.o: ../../include/mail_addr_find.h -cleanup_addr.o: ../../include/maps.h -cleanup_addr.o: ../../include/dict.h -cleanup_addr.o: ../../include/argv.h +cleanup_addr.o: ../../include/mail_conf.h +cleanup_addr.o: ../../include/mail_params.h cleanup_addr.o: ../../include/mail_proto.h -cleanup_addr.o: ../../include/iostuff.h -cleanup_addr.o: ../../include/attr.h -cleanup_addr.o: cleanup.h -cleanup_addr.o: ../../include/nvtable.h -cleanup_addr.o: ../../include/htable.h -cleanup_addr.o: ../../include/tok822.h -cleanup_addr.o: ../../include/resolve_clnt.h -cleanup_addr.o: ../../include/been_here.h cleanup_addr.o: ../../include/mail_stream.h -cleanup_addr.o: ../../include/mail_conf.h -cleanup_addr.o: ../../include/mime_state.h -cleanup_addr.o: ../../include/header_opts.h -cleanup_addr.o: ../../include/string_list.h +cleanup_addr.o: ../../include/maps.h cleanup_addr.o: ../../include/match_list.h cleanup_addr.o: ../../include/match_ops.h -cleanup_api.o: cleanup_api.c -cleanup_api.o: ../../include/sys_defs.h -cleanup_api.o: ../../include/msg.h -cleanup_api.o: ../../include/vstring.h -cleanup_api.o: ../../include/vbuf.h -cleanup_api.o: ../../include/mymalloc.h -cleanup_api.o: ../../include/cleanup_user.h -cleanup_api.o: ../../include/mail_queue.h -cleanup_api.o: ../../include/vstream.h -cleanup_api.o: ../../include/mail_proto.h -cleanup_api.o: ../../include/iostuff.h +cleanup_addr.o: ../../include/mime_state.h +cleanup_addr.o: ../../include/msg.h +cleanup_addr.o: ../../include/mymalloc.h +cleanup_addr.o: ../../include/nvtable.h +cleanup_addr.o: ../../include/rec_type.h +cleanup_addr.o: ../../include/resolve_clnt.h +cleanup_addr.o: ../../include/string_list.h +cleanup_addr.o: ../../include/stringops.h +cleanup_addr.o: ../../include/sys_defs.h +cleanup_addr.o: ../../include/tok822.h +cleanup_addr.o: ../../include/vbuf.h +cleanup_addr.o: ../../include/vstream.h +cleanup_addr.o: ../../include/vstring.h +cleanup_addr.o: cleanup.h +cleanup_addr.o: cleanup_addr.c +cleanup_api.o: ../../include/argv.h cleanup_api.o: ../../include/attr.h +cleanup_api.o: ../../include/been_here.h cleanup_api.o: ../../include/bounce.h +cleanup_api.o: ../../include/cleanup_user.h cleanup_api.o: ../../include/deliver_request.h -cleanup_api.o: ../../include/recipient_list.h -cleanup_api.o: ../../include/mail_params.h -cleanup_api.o: ../../include/mail_stream.h +cleanup_api.o: ../../include/dict.h +cleanup_api.o: ../../include/dsn_util.h +cleanup_api.o: ../../include/header_opts.h cleanup_api.o: ../../include/hold_message.h -cleanup_api.o: cleanup.h -cleanup_api.o: ../../include/argv.h -cleanup_api.o: ../../include/nvtable.h cleanup_api.o: ../../include/htable.h -cleanup_api.o: ../../include/maps.h -cleanup_api.o: ../../include/dict.h -cleanup_api.o: ../../include/tok822.h -cleanup_api.o: ../../include/resolve_clnt.h -cleanup_api.o: ../../include/been_here.h +cleanup_api.o: ../../include/iostuff.h cleanup_api.o: ../../include/mail_conf.h -cleanup_api.o: ../../include/mime_state.h -cleanup_api.o: ../../include/header_opts.h -cleanup_api.o: ../../include/string_list.h +cleanup_api.o: ../../include/mail_params.h +cleanup_api.o: ../../include/mail_proto.h +cleanup_api.o: ../../include/mail_queue.h +cleanup_api.o: ../../include/mail_stream.h +cleanup_api.o: ../../include/maps.h cleanup_api.o: ../../include/match_list.h cleanup_api.o: ../../include/match_ops.h -cleanup_envelope.o: cleanup_envelope.c -cleanup_envelope.o: ../../include/sys_defs.h -cleanup_envelope.o: ../../include/msg.h -cleanup_envelope.o: ../../include/vstring.h -cleanup_envelope.o: ../../include/vbuf.h -cleanup_envelope.o: ../../include/vstream.h -cleanup_envelope.o: ../../include/mymalloc.h -cleanup_envelope.o: ../../include/stringops.h -cleanup_envelope.o: ../../include/nvtable.h -cleanup_envelope.o: ../../include/htable.h -cleanup_envelope.o: ../../include/record.h -cleanup_envelope.o: ../../include/rec_type.h +cleanup_api.o: ../../include/mime_state.h +cleanup_api.o: ../../include/msg.h +cleanup_api.o: ../../include/mymalloc.h +cleanup_api.o: ../../include/nvtable.h +cleanup_api.o: ../../include/recipient_list.h +cleanup_api.o: ../../include/resolve_clnt.h +cleanup_api.o: ../../include/string_list.h +cleanup_api.o: ../../include/sys_defs.h +cleanup_api.o: ../../include/tok822.h +cleanup_api.o: ../../include/vbuf.h +cleanup_api.o: ../../include/vstream.h +cleanup_api.o: ../../include/vstring.h +cleanup_api.o: cleanup.h +cleanup_api.o: cleanup_api.c +cleanup_envelope.o: ../../include/argv.h +cleanup_envelope.o: ../../include/attr.h +cleanup_envelope.o: ../../include/been_here.h cleanup_envelope.o: ../../include/cleanup_user.h -cleanup_envelope.o: ../../include/qmgr_user.h +cleanup_envelope.o: ../../include/dict.h +cleanup_envelope.o: ../../include/header_opts.h +cleanup_envelope.o: ../../include/htable.h +cleanup_envelope.o: ../../include/iostuff.h +cleanup_envelope.o: ../../include/mail_conf.h cleanup_envelope.o: ../../include/mail_params.h -cleanup_envelope.o: ../../include/verp_sender.h cleanup_envelope.o: ../../include/mail_proto.h -cleanup_envelope.o: ../../include/iostuff.h -cleanup_envelope.o: ../../include/attr.h -cleanup_envelope.o: cleanup.h -cleanup_envelope.o: ../../include/argv.h -cleanup_envelope.o: ../../include/maps.h -cleanup_envelope.o: ../../include/dict.h -cleanup_envelope.o: ../../include/tok822.h -cleanup_envelope.o: ../../include/resolve_clnt.h -cleanup_envelope.o: ../../include/been_here.h cleanup_envelope.o: ../../include/mail_stream.h -cleanup_envelope.o: ../../include/mail_conf.h -cleanup_envelope.o: ../../include/mime_state.h -cleanup_envelope.o: ../../include/header_opts.h -cleanup_envelope.o: ../../include/string_list.h +cleanup_envelope.o: ../../include/maps.h cleanup_envelope.o: ../../include/match_list.h cleanup_envelope.o: ../../include/match_ops.h -cleanup_extracted.o: cleanup_extracted.c -cleanup_extracted.o: ../../include/sys_defs.h +cleanup_envelope.o: ../../include/mime_state.h +cleanup_envelope.o: ../../include/msg.h +cleanup_envelope.o: ../../include/mymalloc.h +cleanup_envelope.o: ../../include/nvtable.h +cleanup_envelope.o: ../../include/qmgr_user.h +cleanup_envelope.o: ../../include/rec_type.h +cleanup_envelope.o: ../../include/record.h +cleanup_envelope.o: ../../include/resolve_clnt.h +cleanup_envelope.o: ../../include/string_list.h +cleanup_envelope.o: ../../include/stringops.h +cleanup_envelope.o: ../../include/sys_defs.h +cleanup_envelope.o: ../../include/tok822.h +cleanup_envelope.o: ../../include/vbuf.h +cleanup_envelope.o: ../../include/verp_sender.h +cleanup_envelope.o: ../../include/vstream.h +cleanup_envelope.o: ../../include/vstring.h +cleanup_envelope.o: cleanup.h +cleanup_envelope.o: cleanup_envelope.c +cleanup_extracted.o: ../../include/argv.h +cleanup_extracted.o: ../../include/attr.h +cleanup_extracted.o: ../../include/been_here.h +cleanup_extracted.o: ../../include/cleanup_user.h +cleanup_extracted.o: ../../include/dict.h +cleanup_extracted.o: ../../include/header_opts.h +cleanup_extracted.o: ../../include/htable.h +cleanup_extracted.o: ../../include/iostuff.h +cleanup_extracted.o: ../../include/mail_conf.h +cleanup_extracted.o: ../../include/mail_params.h +cleanup_extracted.o: ../../include/mail_proto.h +cleanup_extracted.o: ../../include/mail_stream.h +cleanup_extracted.o: ../../include/maps.h +cleanup_extracted.o: ../../include/match_list.h +cleanup_extracted.o: ../../include/match_ops.h +cleanup_extracted.o: ../../include/mime_state.h cleanup_extracted.o: ../../include/msg.h -cleanup_extracted.o: ../../include/vstring.h -cleanup_extracted.o: ../../include/vbuf.h -cleanup_extracted.o: ../../include/vstream.h cleanup_extracted.o: ../../include/mymalloc.h cleanup_extracted.o: ../../include/nvtable.h -cleanup_extracted.o: ../../include/htable.h -cleanup_extracted.o: ../../include/cleanup_user.h cleanup_extracted.o: ../../include/qmgr_user.h -cleanup_extracted.o: ../../include/record.h cleanup_extracted.o: ../../include/rec_type.h -cleanup_extracted.o: ../../include/mail_params.h -cleanup_extracted.o: ../../include/mail_proto.h -cleanup_extracted.o: ../../include/iostuff.h -cleanup_extracted.o: ../../include/attr.h -cleanup_extracted.o: cleanup.h -cleanup_extracted.o: ../../include/argv.h -cleanup_extracted.o: ../../include/maps.h -cleanup_extracted.o: ../../include/dict.h -cleanup_extracted.o: ../../include/tok822.h +cleanup_extracted.o: ../../include/record.h cleanup_extracted.o: ../../include/resolve_clnt.h -cleanup_extracted.o: ../../include/been_here.h -cleanup_extracted.o: ../../include/mail_stream.h -cleanup_extracted.o: ../../include/mail_conf.h -cleanup_extracted.o: ../../include/mime_state.h -cleanup_extracted.o: ../../include/header_opts.h cleanup_extracted.o: ../../include/string_list.h -cleanup_extracted.o: ../../include/match_list.h -cleanup_extracted.o: ../../include/match_ops.h -cleanup_init.o: cleanup_init.c -cleanup_init.o: ../../include/sys_defs.h -cleanup_init.o: ../../include/msg.h -cleanup_init.o: ../../include/iostuff.h -cleanup_init.o: ../../include/name_mask.h -cleanup_init.o: ../../include/mail_addr.h -cleanup_init.o: ../../include/mail_params.h -cleanup_init.o: ../../include/ext_prop.h -cleanup_init.o: ../../include/flush_clnt.h -cleanup_init.o: cleanup.h -cleanup_init.o: ../../include/vstring.h -cleanup_init.o: ../../include/vbuf.h -cleanup_init.o: ../../include/vstream.h +cleanup_extracted.o: ../../include/sys_defs.h +cleanup_extracted.o: ../../include/tok822.h +cleanup_extracted.o: ../../include/vbuf.h +cleanup_extracted.o: ../../include/vstream.h +cleanup_extracted.o: ../../include/vstring.h +cleanup_extracted.o: cleanup.h +cleanup_extracted.o: cleanup_extracted.c cleanup_init.o: ../../include/argv.h -cleanup_init.o: ../../include/nvtable.h -cleanup_init.o: ../../include/htable.h -cleanup_init.o: ../../include/mymalloc.h -cleanup_init.o: ../../include/maps.h -cleanup_init.o: ../../include/dict.h -cleanup_init.o: ../../include/tok822.h -cleanup_init.o: ../../include/resolve_clnt.h cleanup_init.o: ../../include/been_here.h -cleanup_init.o: ../../include/mail_stream.h -cleanup_init.o: ../../include/mail_conf.h -cleanup_init.o: ../../include/mime_state.h +cleanup_init.o: ../../include/dict.h +cleanup_init.o: ../../include/ext_prop.h +cleanup_init.o: ../../include/flush_clnt.h cleanup_init.o: ../../include/header_opts.h -cleanup_init.o: ../../include/string_list.h +cleanup_init.o: ../../include/htable.h +cleanup_init.o: ../../include/iostuff.h +cleanup_init.o: ../../include/mail_addr.h +cleanup_init.o: ../../include/mail_conf.h +cleanup_init.o: ../../include/mail_params.h +cleanup_init.o: ../../include/mail_stream.h +cleanup_init.o: ../../include/maps.h cleanup_init.o: ../../include/match_list.h cleanup_init.o: ../../include/match_ops.h -cleanup_map11.o: cleanup_map11.c -cleanup_map11.o: ../../include/sys_defs.h -cleanup_map11.o: ../../include/msg.h -cleanup_map11.o: ../../include/vstring.h -cleanup_map11.o: ../../include/vbuf.h -cleanup_map11.o: ../../include/dict.h -cleanup_map11.o: ../../include/vstream.h +cleanup_init.o: ../../include/mime_state.h +cleanup_init.o: ../../include/msg.h +cleanup_init.o: ../../include/mymalloc.h +cleanup_init.o: ../../include/name_mask.h +cleanup_init.o: ../../include/nvtable.h +cleanup_init.o: ../../include/resolve_clnt.h +cleanup_init.o: ../../include/string_list.h +cleanup_init.o: ../../include/sys_defs.h +cleanup_init.o: ../../include/tok822.h +cleanup_init.o: ../../include/vbuf.h +cleanup_init.o: ../../include/vstream.h +cleanup_init.o: ../../include/vstring.h +cleanup_init.o: cleanup.h +cleanup_init.o: cleanup_init.c cleanup_map11.o: ../../include/argv.h -cleanup_map11.o: ../../include/mymalloc.h +cleanup_map11.o: ../../include/been_here.h cleanup_map11.o: ../../include/cleanup_user.h +cleanup_map11.o: ../../include/dict.h +cleanup_map11.o: ../../include/header_opts.h +cleanup_map11.o: ../../include/htable.h cleanup_map11.o: ../../include/mail_addr_map.h +cleanup_map11.o: ../../include/mail_conf.h +cleanup_map11.o: ../../include/mail_stream.h cleanup_map11.o: ../../include/maps.h +cleanup_map11.o: ../../include/match_list.h +cleanup_map11.o: ../../include/match_ops.h +cleanup_map11.o: ../../include/mime_state.h +cleanup_map11.o: ../../include/msg.h +cleanup_map11.o: ../../include/mymalloc.h +cleanup_map11.o: ../../include/nvtable.h cleanup_map11.o: ../../include/quote_822_local.h cleanup_map11.o: ../../include/quote_flags.h -cleanup_map11.o: cleanup.h -cleanup_map11.o: ../../include/nvtable.h -cleanup_map11.o: ../../include/htable.h -cleanup_map11.o: ../../include/tok822.h cleanup_map11.o: ../../include/resolve_clnt.h -cleanup_map11.o: ../../include/been_here.h -cleanup_map11.o: ../../include/mail_stream.h -cleanup_map11.o: ../../include/mail_conf.h -cleanup_map11.o: ../../include/mime_state.h -cleanup_map11.o: ../../include/header_opts.h cleanup_map11.o: ../../include/string_list.h -cleanup_map11.o: ../../include/match_list.h -cleanup_map11.o: ../../include/match_ops.h -cleanup_map1n.o: cleanup_map1n.c -cleanup_map1n.o: ../../include/sys_defs.h -cleanup_map1n.o: ../../include/mymalloc.h -cleanup_map1n.o: ../../include/msg.h +cleanup_map11.o: ../../include/sys_defs.h +cleanup_map11.o: ../../include/tok822.h +cleanup_map11.o: ../../include/vbuf.h +cleanup_map11.o: ../../include/vstream.h +cleanup_map11.o: ../../include/vstring.h +cleanup_map11.o: cleanup.h +cleanup_map11.o: cleanup_map11.c cleanup_map1n.o: ../../include/argv.h -cleanup_map1n.o: ../../include/vstring.h -cleanup_map1n.o: ../../include/vbuf.h +cleanup_map1n.o: ../../include/been_here.h +cleanup_map1n.o: ../../include/cleanup_user.h cleanup_map1n.o: ../../include/dict.h -cleanup_map1n.o: ../../include/vstream.h -cleanup_map1n.o: ../../include/mail_params.h +cleanup_map1n.o: ../../include/header_opts.h +cleanup_map1n.o: ../../include/htable.h cleanup_map1n.o: ../../include/mail_addr_map.h +cleanup_map1n.o: ../../include/mail_conf.h +cleanup_map1n.o: ../../include/mail_params.h +cleanup_map1n.o: ../../include/mail_stream.h cleanup_map1n.o: ../../include/maps.h -cleanup_map1n.o: ../../include/cleanup_user.h +cleanup_map1n.o: ../../include/match_list.h +cleanup_map1n.o: ../../include/match_ops.h +cleanup_map1n.o: ../../include/mime_state.h +cleanup_map1n.o: ../../include/msg.h +cleanup_map1n.o: ../../include/mymalloc.h +cleanup_map1n.o: ../../include/nvtable.h cleanup_map1n.o: ../../include/quote_822_local.h cleanup_map1n.o: ../../include/quote_flags.h -cleanup_map1n.o: ../../include/been_here.h -cleanup_map1n.o: cleanup.h -cleanup_map1n.o: ../../include/nvtable.h -cleanup_map1n.o: ../../include/htable.h -cleanup_map1n.o: ../../include/tok822.h cleanup_map1n.o: ../../include/resolve_clnt.h -cleanup_map1n.o: ../../include/mail_stream.h -cleanup_map1n.o: ../../include/mail_conf.h -cleanup_map1n.o: ../../include/mime_state.h -cleanup_map1n.o: ../../include/header_opts.h cleanup_map1n.o: ../../include/string_list.h -cleanup_map1n.o: ../../include/match_list.h -cleanup_map1n.o: ../../include/match_ops.h -cleanup_masquerade.o: cleanup_masquerade.c -cleanup_masquerade.o: ../../include/sys_defs.h -cleanup_masquerade.o: ../../include/msg.h -cleanup_masquerade.o: ../../include/vstring.h -cleanup_masquerade.o: ../../include/vbuf.h +cleanup_map1n.o: ../../include/sys_defs.h +cleanup_map1n.o: ../../include/tok822.h +cleanup_map1n.o: ../../include/vbuf.h +cleanup_map1n.o: ../../include/vstream.h +cleanup_map1n.o: ../../include/vstring.h +cleanup_map1n.o: cleanup.h +cleanup_map1n.o: cleanup_map1n.c cleanup_masquerade.o: ../../include/argv.h +cleanup_masquerade.o: ../../include/been_here.h +cleanup_masquerade.o: ../../include/dict.h +cleanup_masquerade.o: ../../include/header_opts.h cleanup_masquerade.o: ../../include/htable.h -cleanup_masquerade.o: ../../include/mymalloc.h -cleanup_masquerade.o: ../../include/stringops.h +cleanup_masquerade.o: ../../include/mail_conf.h cleanup_masquerade.o: ../../include/mail_params.h -cleanup_masquerade.o: ../../include/tok822.h -cleanup_masquerade.o: ../../include/resolve_clnt.h -cleanup_masquerade.o: ../../include/quote_822_local.h -cleanup_masquerade.o: ../../include/quote_flags.h -cleanup_masquerade.o: cleanup.h -cleanup_masquerade.o: ../../include/vstream.h -cleanup_masquerade.o: ../../include/nvtable.h -cleanup_masquerade.o: ../../include/maps.h -cleanup_masquerade.o: ../../include/dict.h -cleanup_masquerade.o: ../../include/been_here.h cleanup_masquerade.o: ../../include/mail_stream.h -cleanup_masquerade.o: ../../include/mail_conf.h -cleanup_masquerade.o: ../../include/mime_state.h -cleanup_masquerade.o: ../../include/header_opts.h -cleanup_masquerade.o: ../../include/string_list.h +cleanup_masquerade.o: ../../include/maps.h cleanup_masquerade.o: ../../include/match_list.h cleanup_masquerade.o: ../../include/match_ops.h -cleanup_message.o: cleanup_message.c -cleanup_message.o: ../../include/sys_defs.h -cleanup_message.o: ../../include/msg.h -cleanup_message.o: ../../include/vstring.h -cleanup_message.o: ../../include/vbuf.h -cleanup_message.o: ../../include/vstream.h +cleanup_masquerade.o: ../../include/mime_state.h +cleanup_masquerade.o: ../../include/msg.h +cleanup_masquerade.o: ../../include/mymalloc.h +cleanup_masquerade.o: ../../include/nvtable.h +cleanup_masquerade.o: ../../include/quote_822_local.h +cleanup_masquerade.o: ../../include/quote_flags.h +cleanup_masquerade.o: ../../include/resolve_clnt.h +cleanup_masquerade.o: ../../include/string_list.h +cleanup_masquerade.o: ../../include/stringops.h +cleanup_masquerade.o: ../../include/sys_defs.h +cleanup_masquerade.o: ../../include/tok822.h +cleanup_masquerade.o: ../../include/vbuf.h +cleanup_masquerade.o: ../../include/vstream.h +cleanup_masquerade.o: ../../include/vstring.h +cleanup_masquerade.o: cleanup.h +cleanup_masquerade.o: cleanup_masquerade.c cleanup_message.o: ../../include/argv.h -cleanup_message.o: ../../include/split_at.h -cleanup_message.o: ../../include/mymalloc.h -cleanup_message.o: ../../include/stringops.h -cleanup_message.o: ../../include/nvtable.h -cleanup_message.o: ../../include/htable.h -cleanup_message.o: ../../include/record.h -cleanup_message.o: ../../include/rec_type.h +cleanup_message.o: ../../include/attr.h +cleanup_message.o: ../../include/been_here.h cleanup_message.o: ../../include/cleanup_user.h -cleanup_message.o: ../../include/tok822.h -cleanup_message.o: ../../include/resolve_clnt.h -cleanup_message.o: ../../include/header_opts.h -cleanup_message.o: ../../include/quote_822_local.h -cleanup_message.o: ../../include/quote_flags.h -cleanup_message.o: ../../include/mail_params.h -cleanup_message.o: ../../include/mail_date.h -cleanup_message.o: ../../include/mail_addr.h -cleanup_message.o: ../../include/is_header.h +cleanup_message.o: ../../include/dict.h +cleanup_message.o: ../../include/dsn_util.h cleanup_message.o: ../../include/ext_prop.h -cleanup_message.o: ../../include/mail_proto.h +cleanup_message.o: ../../include/header_opts.h +cleanup_message.o: ../../include/htable.h cleanup_message.o: ../../include/iostuff.h -cleanup_message.o: ../../include/attr.h -cleanup_message.o: ../../include/mime_state.h +cleanup_message.o: ../../include/is_header.h cleanup_message.o: ../../include/lex_822.h -cleanup_message.o: cleanup.h -cleanup_message.o: ../../include/maps.h -cleanup_message.o: ../../include/dict.h -cleanup_message.o: ../../include/been_here.h -cleanup_message.o: ../../include/mail_stream.h +cleanup_message.o: ../../include/mail_addr.h cleanup_message.o: ../../include/mail_conf.h -cleanup_message.o: ../../include/string_list.h +cleanup_message.o: ../../include/mail_date.h +cleanup_message.o: ../../include/mail_params.h +cleanup_message.o: ../../include/mail_proto.h +cleanup_message.o: ../../include/mail_stream.h +cleanup_message.o: ../../include/maps.h cleanup_message.o: ../../include/match_list.h cleanup_message.o: ../../include/match_ops.h -cleanup_out.o: cleanup_out.c -cleanup_out.o: ../../include/sys_defs.h -cleanup_out.o: ../../include/msg.h -cleanup_out.o: ../../include/vstring.h -cleanup_out.o: ../../include/vbuf.h -cleanup_out.o: ../../include/vstream.h -cleanup_out.o: ../../include/record.h -cleanup_out.o: ../../include/rec_type.h -cleanup_out.o: ../../include/cleanup_user.h -cleanup_out.o: ../../include/mail_params.h -cleanup_out.o: cleanup.h +cleanup_message.o: ../../include/mime_state.h +cleanup_message.o: ../../include/msg.h +cleanup_message.o: ../../include/mymalloc.h +cleanup_message.o: ../../include/nvtable.h +cleanup_message.o: ../../include/quote_822_local.h +cleanup_message.o: ../../include/quote_flags.h +cleanup_message.o: ../../include/rec_type.h +cleanup_message.o: ../../include/record.h +cleanup_message.o: ../../include/resolve_clnt.h +cleanup_message.o: ../../include/split_at.h +cleanup_message.o: ../../include/string_list.h +cleanup_message.o: ../../include/stringops.h +cleanup_message.o: ../../include/sys_defs.h +cleanup_message.o: ../../include/tok822.h +cleanup_message.o: ../../include/vbuf.h +cleanup_message.o: ../../include/vstream.h +cleanup_message.o: ../../include/vstring.h +cleanup_message.o: cleanup.h +cleanup_message.o: cleanup_message.c cleanup_out.o: ../../include/argv.h -cleanup_out.o: ../../include/nvtable.h -cleanup_out.o: ../../include/htable.h -cleanup_out.o: ../../include/mymalloc.h -cleanup_out.o: ../../include/maps.h -cleanup_out.o: ../../include/dict.h -cleanup_out.o: ../../include/tok822.h -cleanup_out.o: ../../include/resolve_clnt.h cleanup_out.o: ../../include/been_here.h -cleanup_out.o: ../../include/mail_stream.h -cleanup_out.o: ../../include/mail_conf.h -cleanup_out.o: ../../include/mime_state.h +cleanup_out.o: ../../include/cleanup_user.h +cleanup_out.o: ../../include/dict.h cleanup_out.o: ../../include/header_opts.h -cleanup_out.o: ../../include/string_list.h +cleanup_out.o: ../../include/htable.h +cleanup_out.o: ../../include/mail_conf.h +cleanup_out.o: ../../include/mail_params.h +cleanup_out.o: ../../include/mail_stream.h +cleanup_out.o: ../../include/maps.h cleanup_out.o: ../../include/match_list.h cleanup_out.o: ../../include/match_ops.h -cleanup_out_recipient.o: cleanup_out_recipient.c -cleanup_out_recipient.o: ../../include/sys_defs.h +cleanup_out.o: ../../include/mime_state.h +cleanup_out.o: ../../include/msg.h +cleanup_out.o: ../../include/mymalloc.h +cleanup_out.o: ../../include/nvtable.h +cleanup_out.o: ../../include/rec_type.h +cleanup_out.o: ../../include/record.h +cleanup_out.o: ../../include/resolve_clnt.h +cleanup_out.o: ../../include/string_list.h +cleanup_out.o: ../../include/sys_defs.h +cleanup_out.o: ../../include/tok822.h +cleanup_out.o: ../../include/vbuf.h +cleanup_out.o: ../../include/vstream.h +cleanup_out.o: ../../include/vstring.h +cleanup_out.o: cleanup.h +cleanup_out.o: cleanup_out.c cleanup_out_recipient.o: ../../include/argv.h cleanup_out_recipient.o: ../../include/been_here.h -cleanup_out_recipient.o: ../../include/mail_params.h -cleanup_out_recipient.o: ../../include/rec_type.h -cleanup_out_recipient.o: ../../include/ext_prop.h cleanup_out_recipient.o: ../../include/cleanup_user.h -cleanup_out_recipient.o: cleanup.h -cleanup_out_recipient.o: ../../include/vstring.h -cleanup_out_recipient.o: ../../include/vbuf.h -cleanup_out_recipient.o: ../../include/vstream.h -cleanup_out_recipient.o: ../../include/nvtable.h -cleanup_out_recipient.o: ../../include/htable.h -cleanup_out_recipient.o: ../../include/mymalloc.h -cleanup_out_recipient.o: ../../include/maps.h cleanup_out_recipient.o: ../../include/dict.h -cleanup_out_recipient.o: ../../include/tok822.h -cleanup_out_recipient.o: ../../include/resolve_clnt.h -cleanup_out_recipient.o: ../../include/mail_stream.h -cleanup_out_recipient.o: ../../include/mail_conf.h -cleanup_out_recipient.o: ../../include/mime_state.h +cleanup_out_recipient.o: ../../include/ext_prop.h cleanup_out_recipient.o: ../../include/header_opts.h -cleanup_out_recipient.o: ../../include/string_list.h +cleanup_out_recipient.o: ../../include/htable.h +cleanup_out_recipient.o: ../../include/mail_conf.h +cleanup_out_recipient.o: ../../include/mail_params.h +cleanup_out_recipient.o: ../../include/mail_stream.h +cleanup_out_recipient.o: ../../include/maps.h cleanup_out_recipient.o: ../../include/match_list.h cleanup_out_recipient.o: ../../include/match_ops.h -cleanup_rewrite.o: cleanup_rewrite.c -cleanup_rewrite.o: ../../include/sys_defs.h -cleanup_rewrite.o: ../../include/msg.h -cleanup_rewrite.o: ../../include/vstring.h -cleanup_rewrite.o: ../../include/vbuf.h -cleanup_rewrite.o: ../../include/tok822.h -cleanup_rewrite.o: ../../include/resolve_clnt.h -cleanup_rewrite.o: ../../include/rewrite_clnt.h -cleanup_rewrite.o: ../../include/mail_proto.h -cleanup_rewrite.o: ../../include/vstream.h -cleanup_rewrite.o: ../../include/iostuff.h -cleanup_rewrite.o: ../../include/attr.h -cleanup_rewrite.o: ../../include/quote_822_local.h -cleanup_rewrite.o: ../../include/quote_flags.h -cleanup_rewrite.o: cleanup.h +cleanup_out_recipient.o: ../../include/mime_state.h +cleanup_out_recipient.o: ../../include/mymalloc.h +cleanup_out_recipient.o: ../../include/nvtable.h +cleanup_out_recipient.o: ../../include/rec_type.h +cleanup_out_recipient.o: ../../include/resolve_clnt.h +cleanup_out_recipient.o: ../../include/string_list.h +cleanup_out_recipient.o: ../../include/sys_defs.h +cleanup_out_recipient.o: ../../include/tok822.h +cleanup_out_recipient.o: ../../include/vbuf.h +cleanup_out_recipient.o: ../../include/vstream.h +cleanup_out_recipient.o: ../../include/vstring.h +cleanup_out_recipient.o: cleanup.h +cleanup_out_recipient.o: cleanup_out_recipient.c cleanup_rewrite.o: ../../include/argv.h -cleanup_rewrite.o: ../../include/nvtable.h -cleanup_rewrite.o: ../../include/htable.h -cleanup_rewrite.o: ../../include/mymalloc.h -cleanup_rewrite.o: ../../include/maps.h -cleanup_rewrite.o: ../../include/dict.h +cleanup_rewrite.o: ../../include/attr.h cleanup_rewrite.o: ../../include/been_here.h -cleanup_rewrite.o: ../../include/mail_stream.h -cleanup_rewrite.o: ../../include/mail_conf.h -cleanup_rewrite.o: ../../include/mime_state.h +cleanup_rewrite.o: ../../include/dict.h cleanup_rewrite.o: ../../include/header_opts.h -cleanup_rewrite.o: ../../include/string_list.h +cleanup_rewrite.o: ../../include/htable.h +cleanup_rewrite.o: ../../include/iostuff.h +cleanup_rewrite.o: ../../include/mail_conf.h +cleanup_rewrite.o: ../../include/mail_proto.h +cleanup_rewrite.o: ../../include/mail_stream.h +cleanup_rewrite.o: ../../include/maps.h cleanup_rewrite.o: ../../include/match_list.h cleanup_rewrite.o: ../../include/match_ops.h -cleanup_state.o: cleanup_state.c -cleanup_state.o: ../../include/sys_defs.h -cleanup_state.o: ../../include/mymalloc.h -cleanup_state.o: ../../include/vstring.h -cleanup_state.o: ../../include/vbuf.h -cleanup_state.o: ../../include/htable.h +cleanup_rewrite.o: ../../include/mime_state.h +cleanup_rewrite.o: ../../include/msg.h +cleanup_rewrite.o: ../../include/mymalloc.h +cleanup_rewrite.o: ../../include/nvtable.h +cleanup_rewrite.o: ../../include/quote_822_local.h +cleanup_rewrite.o: ../../include/quote_flags.h +cleanup_rewrite.o: ../../include/resolve_clnt.h +cleanup_rewrite.o: ../../include/rewrite_clnt.h +cleanup_rewrite.o: ../../include/string_list.h +cleanup_rewrite.o: ../../include/sys_defs.h +cleanup_rewrite.o: ../../include/tok822.h +cleanup_rewrite.o: ../../include/vbuf.h +cleanup_rewrite.o: ../../include/vstream.h +cleanup_rewrite.o: ../../include/vstring.h +cleanup_rewrite.o: cleanup.h +cleanup_rewrite.o: cleanup_rewrite.c +cleanup_state.o: ../../include/argv.h +cleanup_state.o: ../../include/attr.h cleanup_state.o: ../../include/been_here.h -cleanup_state.o: ../../include/mail_params.h -cleanup_state.o: ../../include/mime_state.h +cleanup_state.o: ../../include/dict.h cleanup_state.o: ../../include/header_opts.h -cleanup_state.o: ../../include/mail_proto.h -cleanup_state.o: ../../include/vstream.h +cleanup_state.o: ../../include/htable.h cleanup_state.o: ../../include/iostuff.h -cleanup_state.o: ../../include/attr.h -cleanup_state.o: cleanup.h -cleanup_state.o: ../../include/argv.h -cleanup_state.o: ../../include/nvtable.h -cleanup_state.o: ../../include/maps.h -cleanup_state.o: ../../include/dict.h -cleanup_state.o: ../../include/tok822.h -cleanup_state.o: ../../include/resolve_clnt.h -cleanup_state.o: ../../include/mail_stream.h cleanup_state.o: ../../include/mail_conf.h -cleanup_state.o: ../../include/string_list.h +cleanup_state.o: ../../include/mail_params.h +cleanup_state.o: ../../include/mail_proto.h +cleanup_state.o: ../../include/mail_stream.h +cleanup_state.o: ../../include/maps.h cleanup_state.o: ../../include/match_list.h cleanup_state.o: ../../include/match_ops.h +cleanup_state.o: ../../include/mime_state.h +cleanup_state.o: ../../include/mymalloc.h +cleanup_state.o: ../../include/nvtable.h +cleanup_state.o: ../../include/resolve_clnt.h +cleanup_state.o: ../../include/string_list.h +cleanup_state.o: ../../include/sys_defs.h +cleanup_state.o: ../../include/tok822.h +cleanup_state.o: ../../include/vbuf.h +cleanup_state.o: ../../include/vstream.h +cleanup_state.o: ../../include/vstring.h +cleanup_state.o: cleanup.h +cleanup_state.o: cleanup_state.c diff --git a/postfix/src/cleanup/cleanup_api.c b/postfix/src/cleanup/cleanup_api.c index 97ea3d7a0..fdceb52b3 100644 --- a/postfix/src/cleanup/cleanup_api.c +++ b/postfix/src/cleanup/cleanup_api.c @@ -106,6 +106,7 @@ #include #include #include +#include /* Application-specific. */ @@ -191,6 +192,8 @@ int cleanup_flush(CLEANUP_STATE *state) char *junk; int status; char *encoding; + CLEANUP_STAT_DETAIL *detail = 0; +DSN_SPLIT dp; /* * Raise these errors only if we examined all queue file records. @@ -256,12 +259,17 @@ int cleanup_flush(CLEANUP_STATE *state) if (state->errs != 0) { if (CAN_BOUNCE()) { + if (state->reason) + dsn_split(&dp, "5.0.0", state->reason); + else + detail = cleanup_stat_detail(state->errs); if (bounce_append(BOUNCE_FLAG_CLEAN, state->queue_id, state->recip ? state->recip : "unknown", state->recip ? state->recip : "unknown", - (long) 0, "none", state->time, - "%s", state->reason ? state->reason : - cleanup_strerror(state->errs)) == 0 + (long) 0, "none", + detail ? detail->dsn : dp.dsn, + state->time, "%s", + detail ? detail->text : dp.text) == 0 && bounce_flush(BOUNCE_FLAG_CLEAN, state->queue_name, state->queue_id, (encoding = nvtable_find(state->attr, MAIL_ATTR_ENCODING)) ? diff --git a/postfix/src/cleanup/cleanup_message.c b/postfix/src/cleanup/cleanup_message.c index 0a77d4f3d..3819363cd 100644 --- a/postfix/src/cleanup/cleanup_message.c +++ b/postfix/src/cleanup/cleanup_message.c @@ -80,6 +80,7 @@ #include #include #include +#include /* Application-specific. */ @@ -301,6 +302,7 @@ static int cleanup_act(CLEANUP_STATE *state, char *context, const char *buf, const char *optional_text = value + strcspn(value, " \t"); int command_len = optional_text - value; VSTRING *bp; + CLEANUP_STAT_DETAIL *detail; while (*optional_text && ISSPACE(*optional_text)) optional_text++; @@ -310,9 +312,14 @@ static int cleanup_act(CLEANUP_STATE *state, char *context, const char *buf, #define CLEANUP_ACT_DROP 0 if (STREQUAL(value, "REJECT", command_len)) { - if (state->reason == 0) - state->reason = mystrdup(*optional_text ? optional_text : - cleanup_strerror(CLEANUP_STAT_CONT)); + if (state->reason == 0) { + if (*optional_text) { + state->reason = dsn_prepend("5.7.1", optional_text); + } else { + detail = cleanup_stat_detail(CLEANUP_STAT_CONT); + state->reason = dsn_prepend(detail->dsn, detail->text); + } + } state->errs |= CLEANUP_STAT_CONT; state->flags &= ~CLEANUP_FLAG_FILTER; cleanup_act_log(state, "reject", context, buf, state->reason); @@ -371,7 +378,7 @@ static int cleanup_act(CLEANUP_STATE *state, char *context, const char *buf, "need \"headername: headervalue\"", optional_text, map_class); return (CLEANUP_ACT_KEEP); - } + } /* XXX Impedance mismatch. */ bp = vstring_strcpy(vstring_alloc(100), optional_text); cleanup_out_header(state, bp); diff --git a/postfix/src/discard/Makefile.in b/postfix/src/discard/Makefile.in index 9f87480a1..224cd90a7 100644 --- a/postfix/src/discard/Makefile.in +++ b/postfix/src/discard/Makefile.in @@ -47,21 +47,24 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -discard.o: discard.c -discard.o: ../../include/sys_defs.h -discard.o: ../../include/msg.h -discard.o: ../../include/vstream.h -discard.o: ../../include/vbuf.h -discard.o: ../../include/deliver_request.h -discard.o: ../../include/vstring.h -discard.o: ../../include/recipient_list.h -discard.o: ../../include/mail_queue.h discard.o: ../../include/bounce.h discard.o: ../../include/deliver_completed.h +discard.o: ../../include/deliver_request.h +discard.o: ../../include/dsn_util.h discard.o: ../../include/flush_clnt.h +discard.o: ../../include/mail_queue.h discard.o: ../../include/mail_server.h +discard.o: ../../include/msg.h +discard.o: ../../include/recipient_list.h +discard.o: ../../include/sent.h +discard.o: ../../include/sys_defs.h +discard.o: ../../include/vbuf.h +discard.o: ../../include/vstream.h +discard.o: ../../include/vstring.h +discard.o: discard.c diff --git a/postfix/src/discard/discard.c b/postfix/src/discard/discard.c index 235367f06..d4f166d61 100644 --- a/postfix/src/discard/discard.c +++ b/postfix/src/discard/discard.c @@ -11,6 +11,7 @@ /* the queue manager. Each request specifies a queue file, a sender /* address, a domain or host name that is treated as the reason for /* discarding the mail, and recipient information. +/* The reason may be prefixed with an RFC 1893-compatible detail code. /* This program expects to be run from the \fBmaster\fR(8) process /* manager. /* @@ -116,6 +117,7 @@ #include #include #include +#include /* Single server skeleton. */ @@ -131,6 +133,7 @@ static int deliver_message(DELIVER_REQUEST *request) int status; RECIPIENT *rcpt; int nrcpt; + DSN_SPLIT dp; if (msg_verbose) msg_info("deliver_message: from %s", request->sender); @@ -162,12 +165,14 @@ static int deliver_message(DELIVER_REQUEST *request) */ #define BOUNCE_FLAGS(request) DEL_REQ_TRACE_FLAGS(request->flags) + dsn_split(&dp, "2.0.0", request->nexthop); for (nrcpt = 0; nrcpt < request->rcpt_list.len; nrcpt++) { rcpt = request->rcpt_list.info + nrcpt; if (rcpt->offset >= 0) { status = sent(BOUNCE_FLAGS(request), request->queue_id, - rcpt->orig_addr, rcpt->address, rcpt->offset, "none", - request->arrival_time, "%s", request->nexthop); + rcpt->orig_addr, rcpt->address, rcpt->offset, + "none", dp.dsn, request->arrival_time, + "%s", dp.text); if (status == 0 && (request->flags & DEL_REQ_FLAG_SUCCESS)) deliver_completed(src, rcpt->offset); result |= status; diff --git a/postfix/src/dns/Makefile.in b/postfix/src/dns/Makefile.in index d18adf450..9b4573abc 100644 --- a/postfix/src/dns/Makefile.in +++ b/postfix/src/dns/Makefile.in @@ -105,87 +105,88 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -dns_lookup.o: dns_lookup.c -dns_lookup.o: ../../include/sys_defs.h -dns_lookup.o: ../../include/mymalloc.h -dns_lookup.o: ../../include/vstring.h -dns_lookup.o: ../../include/vbuf.h dns_lookup.o: ../../include/msg.h -dns_lookup.o: ../../include/valid_hostname.h +dns_lookup.o: ../../include/myaddrinfo.h +dns_lookup.o: ../../include/mymalloc.h +dns_lookup.o: ../../include/sock_addr.h dns_lookup.o: ../../include/stringops.h +dns_lookup.o: ../../include/sys_defs.h +dns_lookup.o: ../../include/valid_hostname.h +dns_lookup.o: ../../include/vbuf.h +dns_lookup.o: ../../include/vstring.h dns_lookup.o: dns.h -dns_lookup.o: ../../include/sock_addr.h -dns_lookup.o: ../../include/myaddrinfo.h -dns_rr.o: dns_rr.c -dns_rr.o: ../../include/sys_defs.h +dns_lookup.o: dns_lookup.c dns_rr.o: ../../include/msg.h +dns_rr.o: ../../include/myaddrinfo.h dns_rr.o: ../../include/mymalloc.h dns_rr.o: ../../include/myrand.h -dns_rr.o: dns.h -dns_rr.o: ../../include/vstring.h -dns_rr.o: ../../include/vbuf.h dns_rr.o: ../../include/sock_addr.h -dns_rr.o: ../../include/myaddrinfo.h -dns_rr_eq_sa.o: dns_rr_eq_sa.c -dns_rr_eq_sa.o: ../../include/sys_defs.h +dns_rr.o: ../../include/sys_defs.h +dns_rr.o: ../../include/vbuf.h +dns_rr.o: ../../include/vstring.h +dns_rr.o: dns.h +dns_rr.o: dns_rr.c dns_rr_eq_sa.o: ../../include/msg.h +dns_rr_eq_sa.o: ../../include/myaddrinfo.h dns_rr_eq_sa.o: ../../include/sock_addr.h -dns_rr_eq_sa.o: dns.h -dns_rr_eq_sa.o: ../../include/vstring.h +dns_rr_eq_sa.o: ../../include/sys_defs.h dns_rr_eq_sa.o: ../../include/vbuf.h -dns_rr_eq_sa.o: ../../include/myaddrinfo.h -dns_rr_to_pa.o: dns_rr_to_pa.c -dns_rr_to_pa.o: ../../include/sys_defs.h +dns_rr_eq_sa.o: ../../include/vstring.h +dns_rr_eq_sa.o: dns.h +dns_rr_eq_sa.o: dns_rr_eq_sa.c dns_rr_to_pa.o: ../../include/msg.h -dns_rr_to_pa.o: dns.h -dns_rr_to_pa.o: ../../include/vstring.h -dns_rr_to_pa.o: ../../include/vbuf.h -dns_rr_to_pa.o: ../../include/sock_addr.h dns_rr_to_pa.o: ../../include/myaddrinfo.h -dns_rr_to_sa.o: dns_rr_to_sa.c -dns_rr_to_sa.o: ../../include/sys_defs.h +dns_rr_to_pa.o: ../../include/sock_addr.h +dns_rr_to_pa.o: ../../include/sys_defs.h +dns_rr_to_pa.o: ../../include/vbuf.h +dns_rr_to_pa.o: ../../include/vstring.h +dns_rr_to_pa.o: dns.h +dns_rr_to_pa.o: dns_rr_to_pa.c dns_rr_to_sa.o: ../../include/msg.h -dns_rr_to_sa.o: dns.h -dns_rr_to_sa.o: ../../include/vstring.h -dns_rr_to_sa.o: ../../include/vbuf.h -dns_rr_to_sa.o: ../../include/sock_addr.h dns_rr_to_sa.o: ../../include/myaddrinfo.h -dns_sa_to_rr.o: dns_sa_to_rr.c -dns_sa_to_rr.o: ../../include/sys_defs.h +dns_rr_to_sa.o: ../../include/sock_addr.h +dns_rr_to_sa.o: ../../include/sys_defs.h +dns_rr_to_sa.o: ../../include/vbuf.h +dns_rr_to_sa.o: ../../include/vstring.h +dns_rr_to_sa.o: dns.h +dns_rr_to_sa.o: dns_rr_to_sa.c dns_sa_to_rr.o: ../../include/msg.h -dns_sa_to_rr.o: dns.h -dns_sa_to_rr.o: ../../include/vstring.h -dns_sa_to_rr.o: ../../include/vbuf.h -dns_sa_to_rr.o: ../../include/sock_addr.h dns_sa_to_rr.o: ../../include/myaddrinfo.h -dns_strerror.o: dns_strerror.c +dns_sa_to_rr.o: ../../include/sock_addr.h +dns_sa_to_rr.o: ../../include/sys_defs.h +dns_sa_to_rr.o: ../../include/vbuf.h +dns_sa_to_rr.o: ../../include/vstring.h +dns_sa_to_rr.o: dns.h +dns_sa_to_rr.o: dns_sa_to_rr.c +dns_strerror.o: ../../include/myaddrinfo.h +dns_strerror.o: ../../include/sock_addr.h dns_strerror.o: ../../include/sys_defs.h -dns_strerror.o: ../../include/vstring.h dns_strerror.o: ../../include/vbuf.h +dns_strerror.o: ../../include/vstring.h dns_strerror.o: dns.h -dns_strerror.o: ../../include/sock_addr.h -dns_strerror.o: ../../include/myaddrinfo.h -dns_strtype.o: dns_strtype.c +dns_strerror.o: dns_strerror.c +dns_strtype.o: ../../include/myaddrinfo.h +dns_strtype.o: ../../include/sock_addr.h dns_strtype.o: ../../include/sys_defs.h -dns_strtype.o: ../../include/vstring.h dns_strtype.o: ../../include/vbuf.h +dns_strtype.o: ../../include/vstring.h dns_strtype.o: dns.h -dns_strtype.o: ../../include/sock_addr.h -dns_strtype.o: ../../include/myaddrinfo.h -test_dns_lookup.o: test_dns_lookup.c -test_dns_lookup.o: ../../include/sys_defs.h -test_dns_lookup.o: ../../include/vstring.h -test_dns_lookup.o: ../../include/vbuf.h +dns_strtype.o: dns_strtype.c +test_dns_lookup.o: ../../include/argv.h test_dns_lookup.o: ../../include/msg.h test_dns_lookup.o: ../../include/msg_vstream.h -test_dns_lookup.o: ../../include/vstream.h +test_dns_lookup.o: ../../include/myaddrinfo.h test_dns_lookup.o: ../../include/mymalloc.h -test_dns_lookup.o: ../../include/argv.h -test_dns_lookup.o: dns.h test_dns_lookup.o: ../../include/sock_addr.h -test_dns_lookup.o: ../../include/myaddrinfo.h +test_dns_lookup.o: ../../include/sys_defs.h +test_dns_lookup.o: ../../include/vbuf.h +test_dns_lookup.o: ../../include/vstream.h +test_dns_lookup.o: ../../include/vstring.h +test_dns_lookup.o: dns.h +test_dns_lookup.o: test_dns_lookup.c diff --git a/postfix/src/error/Makefile.in b/postfix/src/error/Makefile.in index 8bacb92b9..a9ccd8e1e 100644 --- a/postfix/src/error/Makefile.in +++ b/postfix/src/error/Makefile.in @@ -47,21 +47,23 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -error.o: error.c -error.o: ../../include/sys_defs.h -error.o: ../../include/msg.h -error.o: ../../include/vstream.h -error.o: ../../include/vbuf.h -error.o: ../../include/deliver_request.h -error.o: ../../include/vstring.h -error.o: ../../include/recipient_list.h -error.o: ../../include/mail_queue.h error.o: ../../include/bounce.h error.o: ../../include/deliver_completed.h +error.o: ../../include/deliver_request.h +error.o: ../../include/dsn_util.h error.o: ../../include/flush_clnt.h +error.o: ../../include/mail_queue.h error.o: ../../include/mail_server.h +error.o: ../../include/msg.h +error.o: ../../include/recipient_list.h +error.o: ../../include/sys_defs.h +error.o: ../../include/vbuf.h +error.o: ../../include/vstream.h +error.o: ../../include/vstring.h +error.o: error.c diff --git a/postfix/src/error/error.c b/postfix/src/error/error.c index 5166bf177..6fedb1748 100644 --- a/postfix/src/error/error.c +++ b/postfix/src/error/error.c @@ -11,6 +11,7 @@ /* the queue manager. Each request specifies a queue file, a sender /* address, a domain or host name that is treated as the reason for /* non-delivery, and recipient information. +/* The reason may be prefixed with an RFC 1893-compatible detail code. /* This program expects to be run from the \fBmaster\fR(8) process /* manager. /* @@ -118,6 +119,7 @@ #include #include #include +#include /* Single server skeleton. */ @@ -133,6 +135,7 @@ static int deliver_message(DELIVER_REQUEST *request) int status; RECIPIENT *rcpt; int nrcpt; + DSN_SPLIT dp; if (msg_verbose) msg_info("deliver_message: from %s", request->sender); @@ -164,13 +167,15 @@ static int deliver_message(DELIVER_REQUEST *request) */ #define BOUNCE_FLAGS(request) DEL_REQ_TRACE_FLAGS(request->flags) + dsn_split(&dp, "5.0.0", request->nexthop); for (nrcpt = 0; nrcpt < request->rcpt_list.len; nrcpt++) { rcpt = request->rcpt_list.info + nrcpt; if (rcpt->offset >= 0) { status = bounce_append(BOUNCE_FLAGS(request), request->queue_id, rcpt->orig_addr, rcpt->address, - rcpt->offset, "none", request->arrival_time, - "%s", request->nexthop); + rcpt->offset, "none", dp.dsn, + request->arrival_time, + "%s", dp.text); if (status == 0) deliver_completed(src, rcpt->offset); result |= status; diff --git a/postfix/src/flush/Makefile.in b/postfix/src/flush/Makefile.in index 21603b9e8..a21128049 100644 --- a/postfix/src/flush/Makefile.in +++ b/postfix/src/flush/Makefile.in @@ -47,37 +47,38 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -flush.o: flush.c -flush.o: ../../include/sys_defs.h -flush.o: ../../include/msg.h -flush.o: ../../include/events.h -flush.o: ../../include/vstream.h -flush.o: ../../include/vbuf.h -flush.o: ../../include/vstring.h -flush.o: ../../include/vstring_vstream.h -flush.o: ../../include/myflock.h -flush.o: ../../include/htable.h -flush.o: ../../include/dict.h flush.o: ../../include/argv.h -flush.o: ../../include/scan_dir.h -flush.o: ../../include/stringops.h -flush.o: ../../include/mail_params.h -flush.o: ../../include/mail_queue.h -flush.o: ../../include/mail_proto.h -flush.o: ../../include/iostuff.h flush.o: ../../include/attr.h -flush.o: ../../include/mail_flush.h +flush.o: ../../include/dict.h +flush.o: ../../include/domain_list.h +flush.o: ../../include/events.h flush.o: ../../include/flush_clnt.h +flush.o: ../../include/htable.h +flush.o: ../../include/iostuff.h flush.o: ../../include/mail_conf.h +flush.o: ../../include/mail_flush.h +flush.o: ../../include/mail_params.h +flush.o: ../../include/mail_proto.h +flush.o: ../../include/mail_queue.h flush.o: ../../include/mail_scan_dir.h +flush.o: ../../include/mail_server.h flush.o: ../../include/maps.h -flush.o: ../../include/domain_list.h flush.o: ../../include/match_list.h flush.o: ../../include/match_ops.h flush.o: ../../include/match_parent_style.h -flush.o: ../../include/mail_server.h +flush.o: ../../include/msg.h +flush.o: ../../include/myflock.h +flush.o: ../../include/scan_dir.h +flush.o: ../../include/stringops.h +flush.o: ../../include/sys_defs.h +flush.o: ../../include/vbuf.h +flush.o: ../../include/vstream.h +flush.o: ../../include/vstring.h +flush.o: ../../include/vstring_vstream.h +flush.o: flush.c diff --git a/postfix/src/fsstone/Makefile.in b/postfix/src/fsstone/Makefile.in index a04617a03..39d22cc35 100644 --- a/postfix/src/fsstone/Makefile.in +++ b/postfix/src/fsstone/Makefile.in @@ -46,14 +46,9 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -fsstone.o: fsstone.c -fsstone.o: ../../include/sys_defs.h -fsstone.o: ../../include/msg.h -fsstone.o: ../../include/msg_vstream.h -fsstone.o: ../../include/vstream.h -fsstone.o: ../../include/vbuf.h diff --git a/postfix/src/global/Makefile.in b/postfix/src/global/Makefile.in index e15cbca8b..e91b98f11 100644 --- a/postfix/src/global/Makefile.in +++ b/postfix/src/global/Makefile.in @@ -25,7 +25,7 @@ SRCS = abounce.c anvil_clnt.c been_here.c bounce.c bounce_log.c \ verify_clnt.c verp_sender.c virtual8_maps.c xtext.c scache_single.c \ scache_clnt.c scache_multi.c user_acl.c mkmap_cdb.c mkmap_sdbm.c \ ehlo_mask.c \ - wildcard_inet_addr.c valid_mailhost_addr.c + wildcard_inet_addr.c valid_mailhost_addr.c dsn_util.c OBJS = abounce.o anvil_clnt.o been_here.o bounce.o bounce_log.o \ canon_addr.o cfg_parser.o cleanup_strerror.o cleanup_strflags.o \ clnt_stream.o debug_peer.o debug_process.o defer.o db_common.o \ @@ -52,7 +52,7 @@ OBJS = abounce.o anvil_clnt.o been_here.o bounce.o bounce_log.o \ verify_clnt.o verp_sender.o virtual8_maps.o xtext.o scache_single.o \ scache_clnt.o scache_multi.o user_acl.o mkmap_cdb.o mkmap_sdbm.o \ ehlo_mask.o \ - wildcard_inet_addr.o valid_mailhost_addr.o + wildcard_inet_addr.o valid_mailhost_addr.o dsn_util.o HDRS = abounce.h anvil_clnt.h been_here.h bounce.h bounce_log.h \ canon_addr.h cfg_parser.h cleanup_user.h clnt_stream.h config.h \ debug_peer.h debug_process.h defer.h deliver_completed.h \ @@ -74,7 +74,7 @@ HDRS = abounce.h anvil_clnt.h been_here.h bounce.h bounce_log.h \ string_list.h strip_addr.h sys_exits.h timed_ipc.h tok822.h \ trace.h verify.h verify_clnt.h verp_sender.h virtual8_maps.h \ xtext.h scache.h user_acl.h ehlo_mask.h db_common.h \ - wildcard_inet_addr.h valid_mailhost_addr.h + wildcard_inet_addr.h valid_mailhost_addr.h dsn_util.h TESTSRC = rec2stream.c stream2rec.c recdump.c DEFS = -I. -I$(INC_DIR) -D$(SYSTYPE) CFLAGS = $(DEBUG) $(OPT) $(DEFS) @@ -399,1221 +399,1191 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -abounce.o: abounce.c -abounce.o: ../../include/sys_defs.h +abounce.o: ../../include/attr.h +abounce.o: ../../include/events.h +abounce.o: ../../include/iostuff.h abounce.o: ../../include/msg.h abounce.o: ../../include/mymalloc.h -abounce.o: ../../include/events.h -abounce.o: ../../include/vstream.h +abounce.o: ../../include/sys_defs.h abounce.o: ../../include/vbuf.h -abounce.o: mail_params.h -abounce.o: mail_proto.h -abounce.o: ../../include/iostuff.h -abounce.o: ../../include/attr.h +abounce.o: ../../include/vstream.h +abounce.o: ../../include/vstring.h +abounce.o: abounce.c abounce.o: abounce.h abounce.o: bounce.h abounce.o: deliver_request.h -abounce.o: ../../include/vstring.h +abounce.o: mail_params.h +abounce.o: mail_proto.h abounce.o: recipient_list.h -anvil_clnt.o: anvil_clnt.c -anvil_clnt.o: ../../include/sys_defs.h -anvil_clnt.o: ../../include/mymalloc.h -anvil_clnt.o: ../../include/msg.h -anvil_clnt.o: ../../include/attr_clnt.h anvil_clnt.o: ../../include/attr.h -anvil_clnt.o: ../../include/vstream.h -anvil_clnt.o: ../../include/vbuf.h +anvil_clnt.o: ../../include/attr_clnt.h +anvil_clnt.o: ../../include/iostuff.h +anvil_clnt.o: ../../include/msg.h +anvil_clnt.o: ../../include/mymalloc.h anvil_clnt.o: ../../include/stringops.h +anvil_clnt.o: ../../include/sys_defs.h +anvil_clnt.o: ../../include/vbuf.h +anvil_clnt.o: ../../include/vstream.h anvil_clnt.o: ../../include/vstring.h -anvil_clnt.o: mail_proto.h -anvil_clnt.o: ../../include/iostuff.h -anvil_clnt.o: mail_params.h +anvil_clnt.o: anvil_clnt.c anvil_clnt.o: anvil_clnt.h -been_here.o: been_here.c -been_here.o: ../../include/sys_defs.h +anvil_clnt.o: mail_params.h +anvil_clnt.o: mail_proto.h +been_here.o: ../../include/htable.h been_here.o: ../../include/msg.h been_here.o: ../../include/mymalloc.h -been_here.o: ../../include/htable.h -been_here.o: ../../include/vstring.h -been_here.o: ../../include/vbuf.h been_here.o: ../../include/stringops.h +been_here.o: ../../include/sys_defs.h +been_here.o: ../../include/vbuf.h +been_here.o: ../../include/vstring.h +been_here.o: been_here.c been_here.o: been_here.h -bounce.o: bounce.c -bounce.o: ../../include/sys_defs.h +bounce.o: ../../include/attr.h +bounce.o: ../../include/iostuff.h bounce.o: ../../include/msg.h -bounce.o: ../../include/vstring.h +bounce.o: ../../include/mymalloc.h +bounce.o: ../../include/sys_defs.h bounce.o: ../../include/vbuf.h -bounce.o: mail_params.h -bounce.o: mail_proto.h bounce.o: ../../include/vstream.h -bounce.o: ../../include/iostuff.h -bounce.o: ../../include/attr.h -bounce.o: log_adhoc.h -bounce.o: verify.h +bounce.o: ../../include/vstring.h +bounce.o: bounce.c +bounce.o: bounce.h +bounce.o: defer.h bounce.o: deliver_request.h +bounce.o: dsn_util.h +bounce.o: log_adhoc.h +bounce.o: mail_params.h +bounce.o: mail_proto.h bounce.o: recipient_list.h -bounce.o: defer.h -bounce.o: bounce.h bounce.o: trace.h -bounce_log.o: bounce_log.c -bounce_log.o: ../../include/sys_defs.h +bounce.o: verify.h +bounce_log.o: ../../include/attr.h +bounce_log.o: ../../include/iostuff.h bounce_log.o: ../../include/msg.h bounce_log.o: ../../include/mymalloc.h -bounce_log.o: ../../include/vstream.h +bounce_log.o: ../../include/stringops.h +bounce_log.o: ../../include/sys_defs.h bounce_log.o: ../../include/vbuf.h +bounce_log.o: ../../include/vstream.h bounce_log.o: ../../include/vstring.h bounce_log.o: ../../include/vstring_vstream.h -bounce_log.o: ../../include/stringops.h +bounce_log.o: bounce_log.c +bounce_log.o: bounce_log.h bounce_log.o: mail_params.h bounce_log.o: mail_proto.h -bounce_log.o: ../../include/iostuff.h -bounce_log.o: ../../include/attr.h bounce_log.o: mail_queue.h -bounce_log.o: bounce_log.h -canon_addr.o: canon_addr.c +canon_addr.o: ../../include/attr.h +canon_addr.o: ../../include/iostuff.h +canon_addr.o: ../../include/mymalloc.h canon_addr.o: ../../include/sys_defs.h -canon_addr.o: ../../include/vstring.h canon_addr.o: ../../include/vbuf.h -canon_addr.o: ../../include/mymalloc.h -canon_addr.o: rewrite_clnt.h -canon_addr.o: mail_proto.h canon_addr.o: ../../include/vstream.h -canon_addr.o: ../../include/iostuff.h -canon_addr.o: ../../include/attr.h +canon_addr.o: ../../include/vstring.h +canon_addr.o: canon_addr.c canon_addr.o: canon_addr.h -cfg_parser.o: cfg_parser.c -cfg_parser.o: ../../include/sys_defs.h +canon_addr.o: mail_proto.h +canon_addr.o: rewrite_clnt.h +cfg_parser.o: ../../include/argv.h +cfg_parser.o: ../../include/dict.h cfg_parser.o: ../../include/msg.h cfg_parser.o: ../../include/mymalloc.h -cfg_parser.o: ../../include/vstring.h +cfg_parser.o: ../../include/sys_defs.h cfg_parser.o: ../../include/vbuf.h -cfg_parser.o: ../../include/dict.h cfg_parser.o: ../../include/vstream.h -cfg_parser.o: ../../include/argv.h -cfg_parser.o: mail_conf.h +cfg_parser.o: ../../include/vstring.h +cfg_parser.o: cfg_parser.c cfg_parser.o: cfg_parser.h -cleanup_strerror.o: cleanup_strerror.c +cfg_parser.o: mail_conf.h +cleanup_strerror.o: ../../include/msg.h cleanup_strerror.o: ../../include/sys_defs.h -cleanup_strerror.o: ../../include/vstring.h cleanup_strerror.o: ../../include/vbuf.h +cleanup_strerror.o: ../../include/vstring.h +cleanup_strerror.o: cleanup_strerror.c cleanup_strerror.o: cleanup_user.h -cleanup_strflags.o: cleanup_strflags.c -cleanup_strflags.o: ../../include/sys_defs.h cleanup_strflags.o: ../../include/msg.h -cleanup_strflags.o: ../../include/vstring.h +cleanup_strflags.o: ../../include/sys_defs.h cleanup_strflags.o: ../../include/vbuf.h +cleanup_strflags.o: ../../include/vstring.h +cleanup_strflags.o: cleanup_strflags.c cleanup_strflags.o: cleanup_user.h -clnt_stream.o: clnt_stream.c -clnt_stream.o: ../../include/sys_defs.h +clnt_stream.o: ../../include/attr.h +clnt_stream.o: ../../include/events.h +clnt_stream.o: ../../include/iostuff.h clnt_stream.o: ../../include/msg.h clnt_stream.o: ../../include/mymalloc.h -clnt_stream.o: ../../include/vstream.h +clnt_stream.o: ../../include/sys_defs.h clnt_stream.o: ../../include/vbuf.h -clnt_stream.o: ../../include/events.h -clnt_stream.o: ../../include/iostuff.h -clnt_stream.o: mail_proto.h -clnt_stream.o: ../../include/attr.h -clnt_stream.o: mail_params.h +clnt_stream.o: ../../include/vstream.h +clnt_stream.o: clnt_stream.c clnt_stream.o: clnt_stream.h -db_common.o: db_common.c -db_common.o: ../../include/sys_defs.h -db_common.o: cfg_parser.h +clnt_stream.o: mail_params.h +clnt_stream.o: mail_proto.h +db_common.o: ../../include/argv.h +db_common.o: ../../include/dict.h +db_common.o: ../../include/match_list.h +db_common.o: ../../include/match_ops.h +db_common.o: ../../include/msg.h db_common.o: ../../include/mymalloc.h -db_common.o: ../../include/vstring.h +db_common.o: ../../include/sys_defs.h db_common.o: ../../include/vbuf.h -db_common.o: ../../include/msg.h -db_common.o: ../../include/dict.h db_common.o: ../../include/vstream.h -db_common.o: ../../include/argv.h +db_common.o: ../../include/vstring.h +db_common.o: cfg_parser.h +db_common.o: db_common.c db_common.o: db_common.h db_common.o: string_list.h -db_common.o: ../../include/match_list.h -db_common.o: ../../include/match_ops.h -debug_peer.o: debug_peer.c -debug_peer.o: ../../include/sys_defs.h -debug_peer.o: ../../include/msg.h -debug_peer.o: mail_params.h -debug_peer.o: namadr_list.h debug_peer.o: ../../include/match_list.h debug_peer.o: ../../include/match_ops.h +debug_peer.o: ../../include/msg.h +debug_peer.o: ../../include/sys_defs.h +debug_peer.o: debug_peer.c debug_peer.o: debug_peer.h +debug_peer.o: mail_params.h debug_peer.o: match_parent_style.h -debug_process.o: debug_process.c -debug_process.o: ../../include/sys_defs.h +debug_peer.o: namadr_list.h debug_process.o: ../../include/msg.h -debug_process.o: mail_params.h -debug_process.o: mail_conf.h +debug_process.o: ../../include/sys_defs.h +debug_process.o: debug_process.c debug_process.o: debug_process.h -defer.o: defer.c -defer.o: ../../include/sys_defs.h +debug_process.o: mail_conf.h +debug_process.o: mail_params.h +defer.o: ../../include/attr.h +defer.o: ../../include/iostuff.h defer.o: ../../include/msg.h -defer.o: ../../include/vstring.h +defer.o: ../../include/sys_defs.h defer.o: ../../include/vbuf.h -defer.o: mail_params.h -defer.o: mail_queue.h defer.o: ../../include/vstream.h -defer.o: mail_proto.h -defer.o: ../../include/iostuff.h -defer.o: ../../include/attr.h -defer.o: flush_clnt.h -defer.o: verify.h +defer.o: ../../include/vstring.h +defer.o: bounce.h +defer.o: defer.c +defer.o: defer.h defer.o: deliver_request.h -defer.o: recipient_list.h +defer.o: dsn_util.h +defer.o: flush_clnt.h defer.o: log_adhoc.h +defer.o: mail_params.h +defer.o: mail_proto.h +defer.o: mail_queue.h +defer.o: recipient_list.h defer.o: trace.h -defer.o: bounce.h -defer.o: defer.h -deliver_completed.o: deliver_completed.c -deliver_completed.o: ../../include/sys_defs.h +defer.o: verify.h deliver_completed.o: ../../include/msg.h -deliver_completed.o: ../../include/vstream.h +deliver_completed.o: ../../include/sys_defs.h deliver_completed.o: ../../include/vbuf.h -deliver_completed.o: record.h +deliver_completed.o: ../../include/vstream.h deliver_completed.o: ../../include/vstring.h -deliver_completed.o: rec_type.h +deliver_completed.o: deliver_completed.c deliver_completed.o: deliver_completed.h -deliver_flock.o: deliver_flock.c +deliver_completed.o: rec_type.h +deliver_completed.o: record.h +deliver_flock.o: ../../include/iostuff.h +deliver_flock.o: ../../include/myflock.h deliver_flock.o: ../../include/sys_defs.h -deliver_flock.o: ../../include/vstring.h deliver_flock.o: ../../include/vbuf.h -deliver_flock.o: ../../include/myflock.h -deliver_flock.o: ../../include/iostuff.h -deliver_flock.o: mail_params.h +deliver_flock.o: ../../include/vstring.h +deliver_flock.o: deliver_flock.c deliver_flock.o: deliver_flock.h -deliver_pass.o: deliver_pass.c -deliver_pass.o: ../../include/sys_defs.h +deliver_flock.o: mail_params.h +deliver_pass.o: ../../include/attr.h +deliver_pass.o: ../../include/iostuff.h deliver_pass.o: ../../include/msg.h -deliver_pass.o: ../../include/vstring.h +deliver_pass.o: ../../include/mymalloc.h +deliver_pass.o: ../../include/split_at.h +deliver_pass.o: ../../include/sys_defs.h deliver_pass.o: ../../include/vbuf.h deliver_pass.o: ../../include/vstream.h -deliver_pass.o: ../../include/split_at.h -deliver_pass.o: ../../include/mymalloc.h -deliver_pass.o: mail_params.h +deliver_pass.o: ../../include/vstring.h +deliver_pass.o: deliver_pass.c deliver_pass.o: deliver_pass.h deliver_pass.o: deliver_request.h -deliver_pass.o: recipient_list.h +deliver_pass.o: mail_params.h deliver_pass.o: mail_proto.h -deliver_pass.o: ../../include/iostuff.h -deliver_pass.o: ../../include/attr.h -deliver_request.o: deliver_request.c -deliver_request.o: ../../include/sys_defs.h +deliver_pass.o: recipient_list.h +deliver_request.o: ../../include/attr.h +deliver_request.o: ../../include/iostuff.h deliver_request.o: ../../include/msg.h -deliver_request.o: ../../include/vstream.h +deliver_request.o: ../../include/myflock.h +deliver_request.o: ../../include/mymalloc.h +deliver_request.o: ../../include/sys_defs.h deliver_request.o: ../../include/vbuf.h +deliver_request.o: ../../include/vstream.h deliver_request.o: ../../include/vstring.h -deliver_request.o: ../../include/mymalloc.h -deliver_request.o: ../../include/iostuff.h -deliver_request.o: ../../include/myflock.h -deliver_request.o: mail_queue.h -deliver_request.o: mail_proto.h -deliver_request.o: ../../include/attr.h +deliver_request.o: deliver_request.c +deliver_request.o: deliver_request.h deliver_request.o: mail_open_ok.h +deliver_request.o: mail_proto.h +deliver_request.o: mail_queue.h deliver_request.o: recipient_list.h -deliver_request.o: deliver_request.h -dict_ldap.o: dict_ldap.c dict_ldap.o: ../../include/sys_defs.h -dict_ldap.o: ../../include/msg.h -dict_ldap.o: ../../include/mymalloc.h -dict_ldap.o: ../../include/vstring.h -dict_ldap.o: ../../include/vbuf.h -dict_ldap.o: ../../include/dict.h -dict_ldap.o: ../../include/vstream.h -dict_ldap.o: ../../include/argv.h -dict_ldap.o: ../../include/stringops.h -dict_ldap.o: ../../include/binhash.h -dict_ldap.o: cfg_parser.h -dict_ldap.o: db_common.h -dict_ldap.o: string_list.h -dict_ldap.o: ../../include/match_list.h -dict_ldap.o: ../../include/match_ops.h -dict_ldap.o: dict_ldap.h -dict_mysql.o: dict_mysql.c +dict_ldap.o: dict_ldap.c dict_mysql.o: ../../include/sys_defs.h -dict_mysql.o: ../../include/dict.h -dict_mysql.o: ../../include/vstream.h -dict_mysql.o: ../../include/vbuf.h -dict_mysql.o: ../../include/argv.h -dict_mysql.o: ../../include/msg.h -dict_mysql.o: ../../include/mymalloc.h -dict_mysql.o: ../../include/vstring.h -dict_mysql.o: ../../include/split_at.h -dict_mysql.o: ../../include/find_inet.h -dict_mysql.o: ../../include/myrand.h -dict_mysql.o: ../../include/events.h -dict_mysql.o: cfg_parser.h -dict_mysql.o: db_common.h -dict_mysql.o: string_list.h -dict_mysql.o: ../../include/match_list.h -dict_mysql.o: ../../include/match_ops.h -dict_mysql.o: dict_mysql.h -dict_pgsql.o: dict_pgsql.c +dict_mysql.o: dict_mysql.c dict_pgsql.o: ../../include/sys_defs.h -dict_pgsql.o: ../../include/dict.h -dict_pgsql.o: ../../include/vstream.h -dict_pgsql.o: ../../include/vbuf.h -dict_pgsql.o: ../../include/argv.h -dict_pgsql.o: ../../include/msg.h -dict_pgsql.o: ../../include/mymalloc.h -dict_pgsql.o: ../../include/vstring.h -dict_pgsql.o: ../../include/split_at.h -dict_pgsql.o: ../../include/find_inet.h -dict_pgsql.o: ../../include/myrand.h -dict_pgsql.o: ../../include/events.h -dict_pgsql.o: cfg_parser.h -dict_pgsql.o: db_common.h -dict_pgsql.o: string_list.h -dict_pgsql.o: ../../include/match_list.h -dict_pgsql.o: ../../include/match_ops.h -dict_pgsql.o: dict_pgsql.h -dict_proxy.o: dict_proxy.c -dict_proxy.o: ../../include/sys_defs.h +dict_pgsql.o: dict_pgsql.c +dict_proxy.o: ../../include/argv.h +dict_proxy.o: ../../include/attr.h +dict_proxy.o: ../../include/dict.h +dict_proxy.o: ../../include/iostuff.h dict_proxy.o: ../../include/msg.h dict_proxy.o: ../../include/mymalloc.h dict_proxy.o: ../../include/stringops.h -dict_proxy.o: ../../include/vstring.h +dict_proxy.o: ../../include/sys_defs.h dict_proxy.o: ../../include/vbuf.h dict_proxy.o: ../../include/vstream.h -dict_proxy.o: ../../include/attr.h -dict_proxy.o: ../../include/dict.h -dict_proxy.o: ../../include/argv.h -dict_proxy.o: mail_proto.h -dict_proxy.o: ../../include/iostuff.h -dict_proxy.o: mail_params.h +dict_proxy.o: ../../include/vstring.h dict_proxy.o: clnt_stream.h +dict_proxy.o: dict_proxy.c dict_proxy.o: dict_proxy.h -domain_list.o: domain_list.c -domain_list.o: ../../include/sys_defs.h +dict_proxy.o: mail_params.h +dict_proxy.o: mail_proto.h domain_list.o: ../../include/match_list.h -domain_list.o: domain_list.h domain_list.o: ../../include/match_ops.h -dot_lockfile.o: dot_lockfile.c +domain_list.o: ../../include/sys_defs.h +domain_list.o: domain_list.c +domain_list.o: domain_list.h +dot_lockfile.o: ../../include/iostuff.h +dot_lockfile.o: ../../include/mymalloc.h +dot_lockfile.o: ../../include/stringops.h dot_lockfile.o: ../../include/sys_defs.h -dot_lockfile.o: ../../include/vstring.h dot_lockfile.o: ../../include/vbuf.h -dot_lockfile.o: ../../include/stringops.h -dot_lockfile.o: ../../include/mymalloc.h -dot_lockfile.o: ../../include/iostuff.h -dot_lockfile.o: mail_params.h +dot_lockfile.o: ../../include/vstring.h +dot_lockfile.o: dot_lockfile.c dot_lockfile.o: dot_lockfile.h -dot_lockfile_as.o: dot_lockfile_as.c -dot_lockfile_as.o: ../../include/sys_defs.h +dot_lockfile.o: mail_params.h dot_lockfile_as.o: ../../include/msg.h dot_lockfile_as.o: ../../include/set_eugid.h -dot_lockfile_as.o: dot_lockfile.h -dot_lockfile_as.o: ../../include/vstring.h +dot_lockfile_as.o: ../../include/sys_defs.h dot_lockfile_as.o: ../../include/vbuf.h +dot_lockfile_as.o: ../../include/vstring.h +dot_lockfile_as.o: dot_lockfile.h +dot_lockfile_as.o: dot_lockfile_as.c dot_lockfile_as.o: dot_lockfile_as.h -ehlo_mask.o: ehlo_mask.c -ehlo_mask.o: ../../include/sys_defs.h +dsn_util.o: ../../include/msg.h +dsn_util.o: ../../include/mymalloc.h +dsn_util.o: ../../include/stringops.h +dsn_util.o: ../../include/sys_defs.h +dsn_util.o: ../../include/vbuf.h +dsn_util.o: ../../include/vstring.h +dsn_util.o: dsn_util.c +dsn_util.o: dsn_util.h ehlo_mask.o: ../../include/name_mask.h +ehlo_mask.o: ../../include/sys_defs.h +ehlo_mask.o: ehlo_mask.c ehlo_mask.o: ehlo_mask.h -ext_prop.o: ext_prop.c -ext_prop.o: ../../include/sys_defs.h ext_prop.o: ../../include/name_mask.h -ext_prop.o: mail_params.h +ext_prop.o: ../../include/sys_defs.h +ext_prop.o: ext_prop.c ext_prop.o: ext_prop.h -file_id.o: file_id.c -file_id.o: ../../include/sys_defs.h +ext_prop.o: mail_params.h file_id.o: ../../include/msg.h -file_id.o: ../../include/vstring.h +file_id.o: ../../include/sys_defs.h file_id.o: ../../include/vbuf.h +file_id.o: ../../include/vstring.h +file_id.o: file_id.c file_id.o: file_id.h -flush_clnt.o: flush_clnt.c -flush_clnt.o: ../../include/sys_defs.h +flush_clnt.o: ../../include/attr.h +flush_clnt.o: ../../include/iostuff.h +flush_clnt.o: ../../include/match_list.h +flush_clnt.o: ../../include/match_ops.h flush_clnt.o: ../../include/msg.h -flush_clnt.o: ../../include/vstream.h +flush_clnt.o: ../../include/sys_defs.h flush_clnt.o: ../../include/vbuf.h -flush_clnt.o: mail_proto.h -flush_clnt.o: ../../include/iostuff.h -flush_clnt.o: ../../include/attr.h +flush_clnt.o: ../../include/vstream.h +flush_clnt.o: domain_list.h +flush_clnt.o: flush_clnt.c +flush_clnt.o: flush_clnt.h flush_clnt.o: mail_flush.h flush_clnt.o: mail_params.h -flush_clnt.o: domain_list.h -flush_clnt.o: ../../include/match_list.h -flush_clnt.o: ../../include/match_ops.h +flush_clnt.o: mail_proto.h flush_clnt.o: match_parent_style.h -flush_clnt.o: flush_clnt.h -header_opts.o: header_opts.c -header_opts.o: ../../include/sys_defs.h -header_opts.o: ../../include/msg.h header_opts.o: ../../include/htable.h -header_opts.o: ../../include/vstring.h -header_opts.o: ../../include/vbuf.h +header_opts.o: ../../include/msg.h header_opts.o: ../../include/stringops.h +header_opts.o: ../../include/sys_defs.h +header_opts.o: ../../include/vbuf.h +header_opts.o: ../../include/vstring.h +header_opts.o: header_opts.c header_opts.o: header_opts.h -header_token.o: header_token.c -header_token.o: ../../include/sys_defs.h header_token.o: ../../include/msg.h -header_token.o: ../../include/vstring.h +header_token.o: ../../include/sys_defs.h header_token.o: ../../include/vbuf.h -header_token.o: lex_822.h +header_token.o: ../../include/vstring.h +header_token.o: header_token.c header_token.o: header_token.h -hold_message.o: hold_message.c -hold_message.o: ../../include/sys_defs.h +header_token.o: lex_822.h hold_message.o: ../../include/msg.h -hold_message.o: ../../include/set_eugid.h hold_message.o: ../../include/sane_fsops.h -hold_message.o: mail_queue.h -hold_message.o: ../../include/vstring.h +hold_message.o: ../../include/set_eugid.h +hold_message.o: ../../include/sys_defs.h hold_message.o: ../../include/vbuf.h hold_message.o: ../../include/vstream.h -hold_message.o: mail_params.h +hold_message.o: ../../include/vstring.h +hold_message.o: hold_message.c hold_message.o: hold_message.h -input_transp.o: input_transp.c -input_transp.o: ../../include/sys_defs.h -input_transp.o: ../../include/name_mask.h +hold_message.o: mail_params.h +hold_message.o: mail_queue.h input_transp.o: ../../include/msg.h -input_transp.o: mail_params.h +input_transp.o: ../../include/name_mask.h +input_transp.o: ../../include/sys_defs.h input_transp.o: cleanup_user.h +input_transp.o: input_transp.c input_transp.o: input_transp.h -is_header.o: is_header.c +input_transp.o: mail_params.h is_header.o: ../../include/sys_defs.h +is_header.o: is_header.c is_header.o: is_header.h -log_adhoc.o: log_adhoc.c -log_adhoc.o: ../../include/sys_defs.h log_adhoc.o: ../../include/msg.h -log_adhoc.o: ../../include/vstring.h +log_adhoc.o: ../../include/sys_defs.h log_adhoc.o: ../../include/vbuf.h +log_adhoc.o: ../../include/vstring.h +log_adhoc.o: log_adhoc.c log_adhoc.o: log_adhoc.h -mail_addr.o: mail_addr.c -mail_addr.o: ../../include/sys_defs.h mail_addr.o: ../../include/stringops.h -mail_addr.o: ../../include/vstring.h +mail_addr.o: ../../include/sys_defs.h mail_addr.o: ../../include/vbuf.h -mail_addr.o: mail_params.h +mail_addr.o: ../../include/vstring.h +mail_addr.o: mail_addr.c mail_addr.o: mail_addr.h -mail_addr_crunch.o: mail_addr_crunch.c -mail_addr_crunch.o: ../../include/sys_defs.h -mail_addr_crunch.o: ../../include/mymalloc.h +mail_addr.o: mail_params.h mail_addr_crunch.o: ../../include/argv.h -mail_addr_crunch.o: ../../include/vstring.h +mail_addr_crunch.o: ../../include/mymalloc.h +mail_addr_crunch.o: ../../include/sys_defs.h mail_addr_crunch.o: ../../include/vbuf.h -mail_addr_crunch.o: tok822.h -mail_addr_crunch.o: resolve_clnt.h +mail_addr_crunch.o: ../../include/vstring.h mail_addr_crunch.o: canon_addr.h +mail_addr_crunch.o: mail_addr_crunch.c mail_addr_crunch.o: mail_addr_crunch.h -mail_addr_find.o: mail_addr_find.c -mail_addr_find.o: ../../include/sys_defs.h -mail_addr_find.o: ../../include/msg.h -mail_addr_find.o: ../../include/dict.h -mail_addr_find.o: ../../include/vstream.h -mail_addr_find.o: ../../include/vbuf.h +mail_addr_crunch.o: resolve_clnt.h +mail_addr_crunch.o: tok822.h mail_addr_find.o: ../../include/argv.h +mail_addr_find.o: ../../include/dict.h +mail_addr_find.o: ../../include/msg.h +mail_addr_find.o: ../../include/mymalloc.h mail_addr_find.o: ../../include/stringops.h +mail_addr_find.o: ../../include/sys_defs.h +mail_addr_find.o: ../../include/vbuf.h +mail_addr_find.o: ../../include/vstream.h mail_addr_find.o: ../../include/vstring.h -mail_addr_find.o: ../../include/mymalloc.h -mail_addr_find.o: mail_params.h -mail_addr_find.o: strip_addr.h +mail_addr_find.o: mail_addr_find.c mail_addr_find.o: mail_addr_find.h +mail_addr_find.o: mail_params.h mail_addr_find.o: maps.h mail_addr_find.o: resolve_local.h -mail_addr_map.o: mail_addr_map.c -mail_addr_map.o: ../../include/sys_defs.h +mail_addr_find.o: strip_addr.h +mail_addr_map.o: ../../include/argv.h +mail_addr_map.o: ../../include/dict.h mail_addr_map.o: ../../include/msg.h -mail_addr_map.o: ../../include/vstring.h +mail_addr_map.o: ../../include/mymalloc.h +mail_addr_map.o: ../../include/sys_defs.h mail_addr_map.o: ../../include/vbuf.h -mail_addr_map.o: ../../include/dict.h mail_addr_map.o: ../../include/vstream.h -mail_addr_map.o: ../../include/argv.h -mail_addr_map.o: ../../include/mymalloc.h -mail_addr_map.o: mail_addr_find.h -mail_addr_map.o: maps.h +mail_addr_map.o: ../../include/vstring.h mail_addr_map.o: mail_addr_crunch.h +mail_addr_map.o: mail_addr_find.h +mail_addr_map.o: mail_addr_map.c mail_addr_map.o: mail_addr_map.h -mail_command_client.o: mail_command_client.c +mail_addr_map.o: maps.h +mail_command_client.o: ../../include/attr.h +mail_command_client.o: ../../include/iostuff.h mail_command_client.o: ../../include/sys_defs.h -mail_command_client.o: ../../include/vstream.h mail_command_client.o: ../../include/vbuf.h +mail_command_client.o: ../../include/vstream.h +mail_command_client.o: mail_command_client.c mail_command_client.o: mail_proto.h -mail_command_client.o: ../../include/iostuff.h -mail_command_client.o: ../../include/attr.h -mail_command_server.o: mail_command_server.c +mail_command_server.o: ../../include/attr.h +mail_command_server.o: ../../include/iostuff.h mail_command_server.o: ../../include/sys_defs.h -mail_command_server.o: ../../include/vstream.h mail_command_server.o: ../../include/vbuf.h +mail_command_server.o: ../../include/vstream.h +mail_command_server.o: mail_command_server.c mail_command_server.o: mail_proto.h -mail_command_server.o: ../../include/iostuff.h -mail_command_server.o: ../../include/attr.h -mail_conf.o: mail_conf.c -mail_conf.o: ../../include/sys_defs.h +mail_conf.o: ../../include/argv.h +mail_conf.o: ../../include/dict.h mail_conf.o: ../../include/msg.h mail_conf.o: ../../include/mymalloc.h -mail_conf.o: ../../include/vstream.h -mail_conf.o: ../../include/vbuf.h -mail_conf.o: ../../include/vstring.h -mail_conf.o: ../../include/dict.h -mail_conf.o: ../../include/argv.h +mail_conf.o: ../../include/readlline.h mail_conf.o: ../../include/safe.h mail_conf.o: ../../include/stringops.h -mail_conf.o: ../../include/readlline.h -mail_conf.o: mail_params.h +mail_conf.o: ../../include/sys_defs.h +mail_conf.o: ../../include/vbuf.h +mail_conf.o: ../../include/vstream.h +mail_conf.o: ../../include/vstring.h +mail_conf.o: mail_conf.c mail_conf.o: mail_conf.h -mail_conf_bool.o: mail_conf_bool.c -mail_conf_bool.o: ../../include/sys_defs.h -mail_conf_bool.o: ../../include/msg.h +mail_conf.o: mail_params.h +mail_conf_bool.o: ../../include/argv.h mail_conf_bool.o: ../../include/dict.h -mail_conf_bool.o: ../../include/vstream.h +mail_conf_bool.o: ../../include/msg.h +mail_conf_bool.o: ../../include/sys_defs.h mail_conf_bool.o: ../../include/vbuf.h -mail_conf_bool.o: ../../include/argv.h +mail_conf_bool.o: ../../include/vstream.h mail_conf_bool.o: mail_conf.h -mail_conf_int.o: mail_conf_int.c -mail_conf_int.o: ../../include/sys_defs.h +mail_conf_bool.o: mail_conf_bool.c +mail_conf_int.o: ../../include/argv.h +mail_conf_int.o: ../../include/dict.h mail_conf_int.o: ../../include/msg.h mail_conf_int.o: ../../include/mymalloc.h -mail_conf_int.o: ../../include/dict.h -mail_conf_int.o: ../../include/vstream.h -mail_conf_int.o: ../../include/vbuf.h -mail_conf_int.o: ../../include/argv.h mail_conf_int.o: ../../include/stringops.h +mail_conf_int.o: ../../include/sys_defs.h +mail_conf_int.o: ../../include/vbuf.h +mail_conf_int.o: ../../include/vstream.h mail_conf_int.o: ../../include/vstring.h mail_conf_int.o: mail_conf.h -mail_conf_raw.o: mail_conf_raw.c -mail_conf_raw.o: ../../include/sys_defs.h +mail_conf_int.o: mail_conf_int.c mail_conf_raw.o: ../../include/msg.h mail_conf_raw.o: ../../include/mymalloc.h +mail_conf_raw.o: ../../include/sys_defs.h mail_conf_raw.o: mail_conf.h -mail_conf_str.o: mail_conf_str.c -mail_conf_str.o: ../../include/sys_defs.h +mail_conf_raw.o: mail_conf_raw.c mail_conf_str.o: ../../include/msg.h mail_conf_str.o: ../../include/mymalloc.h +mail_conf_str.o: ../../include/sys_defs.h mail_conf_str.o: mail_conf.h -mail_conf_time.o: mail_conf_time.c -mail_conf_time.o: ../../include/sys_defs.h +mail_conf_str.o: mail_conf_str.c +mail_conf_time.o: ../../include/argv.h +mail_conf_time.o: ../../include/dict.h mail_conf_time.o: ../../include/msg.h mail_conf_time.o: ../../include/mymalloc.h -mail_conf_time.o: ../../include/dict.h -mail_conf_time.o: ../../include/vstream.h -mail_conf_time.o: ../../include/vbuf.h -mail_conf_time.o: ../../include/argv.h mail_conf_time.o: ../../include/stringops.h +mail_conf_time.o: ../../include/sys_defs.h +mail_conf_time.o: ../../include/vbuf.h +mail_conf_time.o: ../../include/vstream.h mail_conf_time.o: ../../include/vstring.h mail_conf_time.o: mail_conf.h -mail_connect.o: mail_connect.c -mail_connect.o: ../../include/sys_defs.h -mail_connect.o: ../../include/msg.h -mail_connect.o: ../../include/vstream.h -mail_connect.o: ../../include/vbuf.h +mail_conf_time.o: mail_conf_time.c +mail_connect.o: ../../include/attr.h mail_connect.o: ../../include/connect.h mail_connect.o: ../../include/iostuff.h +mail_connect.o: ../../include/msg.h mail_connect.o: ../../include/mymalloc.h mail_connect.o: ../../include/stringops.h +mail_connect.o: ../../include/sys_defs.h +mail_connect.o: ../../include/vbuf.h +mail_connect.o: ../../include/vstream.h mail_connect.o: ../../include/vstring.h -mail_connect.o: timed_ipc.h +mail_connect.o: mail_connect.c mail_connect.o: mail_proto.h -mail_connect.o: ../../include/attr.h -mail_copy.o: mail_copy.c -mail_copy.o: ../../include/sys_defs.h -mail_copy.o: ../../include/msg.h +mail_connect.o: timed_ipc.h mail_copy.o: ../../include/htable.h -mail_copy.o: ../../include/vstream.h +mail_copy.o: ../../include/msg.h +mail_copy.o: ../../include/safe_open.h +mail_copy.o: ../../include/stringops.h +mail_copy.o: ../../include/sys_defs.h mail_copy.o: ../../include/vbuf.h +mail_copy.o: ../../include/vstream.h mail_copy.o: ../../include/vstring.h mail_copy.o: ../../include/vstring_vstream.h -mail_copy.o: ../../include/stringops.h +mail_copy.o: dsn_util.h +mail_copy.o: mail_addr.h +mail_copy.o: mail_copy.c +mail_copy.o: mail_copy.h +mail_copy.o: mail_params.h +mail_copy.o: mail_queue.h +mail_copy.o: mark_corrupt.h +mail_copy.o: mbox_open.h mail_copy.o: quote_822_local.h mail_copy.o: quote_flags.h -mail_copy.o: record.h mail_copy.o: rec_type.h -mail_copy.o: mail_queue.h -mail_copy.o: mail_addr.h -mail_copy.o: mark_corrupt.h -mail_copy.o: mail_params.h -mail_copy.o: mail_copy.h -mail_date.o: mail_date.c -mail_date.o: ../../include/sys_defs.h +mail_copy.o: record.h mail_date.o: ../../include/msg.h -mail_date.o: ../../include/vstring.h +mail_date.o: ../../include/sys_defs.h mail_date.o: ../../include/vbuf.h +mail_date.o: ../../include/vstring.h +mail_date.o: mail_date.c mail_date.o: mail_date.h -mail_dict.o: mail_dict.c -mail_dict.o: ../../include/sys_defs.h -mail_dict.o: ../../include/dict.h -mail_dict.o: ../../include/vstream.h -mail_dict.o: ../../include/vbuf.h mail_dict.o: ../../include/argv.h +mail_dict.o: ../../include/dict.h mail_dict.o: ../../include/msg.h -mail_dict.o: dict_proxy.h +mail_dict.o: ../../include/sys_defs.h +mail_dict.o: ../../include/vbuf.h +mail_dict.o: ../../include/vstream.h mail_dict.o: dict_ldap.h mail_dict.o: dict_mysql.h mail_dict.o: dict_pgsql.h +mail_dict.o: dict_proxy.h +mail_dict.o: mail_dict.c mail_dict.o: mail_dict.h -mail_error.o: mail_error.c +mail_error.o: ../../include/name_mask.h mail_error.o: ../../include/sys_defs.h +mail_error.o: mail_error.c mail_error.o: mail_error.h -mail_error.o: ../../include/name_mask.h -mail_flush.o: mail_flush.c +mail_flush.o: ../../include/attr.h +mail_flush.o: ../../include/iostuff.h mail_flush.o: ../../include/sys_defs.h -mail_flush.o: mail_params.h -mail_flush.o: mail_proto.h -mail_flush.o: ../../include/vstream.h mail_flush.o: ../../include/vbuf.h -mail_flush.o: ../../include/iostuff.h -mail_flush.o: ../../include/attr.h +mail_flush.o: ../../include/vstream.h +mail_flush.o: mail_flush.c mail_flush.o: mail_flush.h -mail_open_ok.o: mail_open_ok.c -mail_open_ok.o: ../../include/sys_defs.h +mail_flush.o: mail_params.h +mail_flush.o: mail_proto.h mail_open_ok.o: ../../include/msg.h -mail_open_ok.o: mail_queue.h -mail_open_ok.o: ../../include/vstring.h +mail_open_ok.o: ../../include/sys_defs.h mail_open_ok.o: ../../include/vbuf.h mail_open_ok.o: ../../include/vstream.h +mail_open_ok.o: ../../include/vstring.h +mail_open_ok.o: mail_open_ok.c mail_open_ok.o: mail_open_ok.h -mail_params.o: mail_params.c -mail_params.o: ../../include/sys_defs.h +mail_open_ok.o: mail_queue.h +mail_params.o: ../../include/argv.h +mail_params.o: ../../include/attr.h +mail_params.o: ../../include/dict.h +mail_params.o: ../../include/dict_db.h +mail_params.o: ../../include/get_hostname.h +mail_params.o: ../../include/inet_addr_list.h +mail_params.o: ../../include/inet_proto.h +mail_params.o: ../../include/iostuff.h mail_params.o: ../../include/msg.h mail_params.o: ../../include/msg_syslog.h -mail_params.o: ../../include/get_hostname.h -mail_params.o: ../../include/valid_hostname.h +mail_params.o: ../../include/myaddrinfo.h +mail_params.o: ../../include/safe.h mail_params.o: ../../include/stringops.h -mail_params.o: ../../include/vstring.h +mail_params.o: ../../include/sys_defs.h +mail_params.o: ../../include/valid_hostname.h mail_params.o: ../../include/vbuf.h -mail_params.o: ../../include/safe.h -mail_params.o: ../../include/dict_db.h -mail_params.o: ../../include/dict.h mail_params.o: ../../include/vstream.h -mail_params.o: ../../include/argv.h -mail_params.o: ../../include/inet_proto.h -mail_params.o: mynetworks.h +mail_params.o: ../../include/vstring.h mail_params.o: mail_conf.h -mail_params.o: mail_version.h +mail_params.o: mail_params.c +mail_params.o: mail_params.h mail_params.o: mail_proto.h -mail_params.o: ../../include/iostuff.h -mail_params.o: ../../include/attr.h -mail_params.o: verp_sender.h +mail_params.o: mail_version.h +mail_params.o: mynetworks.h mail_params.o: own_inet_addr.h -mail_params.o: ../../include/inet_addr_list.h -mail_params.o: ../../include/myaddrinfo.h -mail_params.o: mail_params.h -mail_pathname.o: mail_pathname.c -mail_pathname.o: ../../include/sys_defs.h +mail_params.o: verp_sender.h +mail_pathname.o: ../../include/attr.h +mail_pathname.o: ../../include/iostuff.h mail_pathname.o: ../../include/stringops.h -mail_pathname.o: ../../include/vstring.h +mail_pathname.o: ../../include/sys_defs.h mail_pathname.o: ../../include/vbuf.h -mail_pathname.o: mail_proto.h mail_pathname.o: ../../include/vstream.h -mail_pathname.o: ../../include/iostuff.h -mail_pathname.o: ../../include/attr.h -mail_queue.o: mail_queue.c -mail_queue.o: ../../include/sys_defs.h -mail_queue.o: ../../include/msg.h -mail_queue.o: ../../include/vstring.h -mail_queue.o: ../../include/vbuf.h -mail_queue.o: ../../include/vstream.h -mail_queue.o: ../../include/mymalloc.h +mail_pathname.o: ../../include/vstring.h +mail_pathname.o: mail_pathname.c +mail_pathname.o: mail_proto.h mail_queue.o: ../../include/argv.h mail_queue.o: ../../include/dir_forest.h mail_queue.o: ../../include/make_dirs.h -mail_queue.o: ../../include/split_at.h +mail_queue.o: ../../include/msg.h +mail_queue.o: ../../include/mymalloc.h mail_queue.o: ../../include/sane_fsops.h +mail_queue.o: ../../include/split_at.h +mail_queue.o: ../../include/sys_defs.h mail_queue.o: ../../include/valid_hostname.h +mail_queue.o: ../../include/vbuf.h +mail_queue.o: ../../include/vstream.h +mail_queue.o: ../../include/vstring.h mail_queue.o: file_id.h mail_queue.o: mail_params.h +mail_queue.o: mail_queue.c mail_queue.o: mail_queue.h -mail_run.o: mail_run.c -mail_run.o: ../../include/sys_defs.h mail_run.o: ../../include/msg.h +mail_run.o: ../../include/mymalloc.h mail_run.o: ../../include/stringops.h -mail_run.o: ../../include/vstring.h +mail_run.o: ../../include/sys_defs.h mail_run.o: ../../include/vbuf.h -mail_run.o: ../../include/mymalloc.h +mail_run.o: ../../include/vstring.h mail_run.o: mail_params.h +mail_run.o: mail_run.c mail_run.o: mail_run.h -mail_scan_dir.o: mail_scan_dir.c -mail_scan_dir.o: ../../include/sys_defs.h mail_scan_dir.o: ../../include/scan_dir.h +mail_scan_dir.o: ../../include/sys_defs.h +mail_scan_dir.o: mail_scan_dir.c mail_scan_dir.o: mail_scan_dir.h -mail_stream.o: mail_stream.c -mail_stream.o: ../../include/sys_defs.h +mail_stream.o: ../../include/argv.h +mail_stream.o: ../../include/attr.h +mail_stream.o: ../../include/iostuff.h mail_stream.o: ../../include/msg.h mail_stream.o: ../../include/mymalloc.h -mail_stream.o: ../../include/vstring.h +mail_stream.o: ../../include/stringops.h +mail_stream.o: ../../include/sys_defs.h mail_stream.o: ../../include/vbuf.h mail_stream.o: ../../include/vstream.h -mail_stream.o: ../../include/stringops.h -mail_stream.o: ../../include/argv.h +mail_stream.o: ../../include/vstring.h mail_stream.o: cleanup_user.h +mail_stream.o: mail_params.h mail_stream.o: mail_proto.h -mail_stream.o: ../../include/iostuff.h -mail_stream.o: ../../include/attr.h mail_stream.o: mail_queue.h -mail_stream.o: opened.h -mail_stream.o: mail_params.h +mail_stream.o: mail_stream.c mail_stream.o: mail_stream.h -mail_task.o: mail_task.c +mail_stream.o: opened.h +mail_task.o: ../../include/safe.h mail_task.o: ../../include/sys_defs.h -mail_task.o: ../../include/vstring.h mail_task.o: ../../include/vbuf.h -mail_task.o: ../../include/safe.h -mail_task.o: mail_params.h +mail_task.o: ../../include/vstring.h mail_task.o: mail_conf.h +mail_task.o: mail_params.h +mail_task.o: mail_task.c mail_task.o: mail_task.h -mail_trigger.o: mail_trigger.c -mail_trigger.o: ../../include/sys_defs.h +mail_trigger.o: ../../include/attr.h +mail_trigger.o: ../../include/iostuff.h mail_trigger.o: ../../include/msg.h mail_trigger.o: ../../include/mymalloc.h -mail_trigger.o: ../../include/iostuff.h +mail_trigger.o: ../../include/sys_defs.h mail_trigger.o: ../../include/trigger.h +mail_trigger.o: ../../include/vbuf.h +mail_trigger.o: ../../include/vstream.h mail_trigger.o: mail_params.h mail_trigger.o: mail_proto.h -mail_trigger.o: ../../include/vstream.h -mail_trigger.o: ../../include/vbuf.h -mail_trigger.o: ../../include/attr.h +mail_trigger.o: mail_trigger.c mail_version.o: mail_version.c -maps.o: maps.c -maps.o: ../../include/sys_defs.h maps.o: ../../include/argv.h -maps.o: ../../include/mymalloc.h -maps.o: ../../include/msg.h maps.o: ../../include/dict.h -maps.o: ../../include/vstream.h -maps.o: ../../include/vbuf.h +maps.o: ../../include/msg.h +maps.o: ../../include/mymalloc.h +maps.o: ../../include/split_at.h maps.o: ../../include/stringops.h +maps.o: ../../include/sys_defs.h +maps.o: ../../include/vbuf.h +maps.o: ../../include/vstream.h maps.o: ../../include/vstring.h -maps.o: ../../include/split_at.h maps.o: mail_conf.h +maps.o: maps.c maps.o: maps.h -mark_corrupt.o: mark_corrupt.c -mark_corrupt.o: ../../include/sys_defs.h mark_corrupt.o: ../../include/msg.h -mark_corrupt.o: ../../include/vstream.h -mark_corrupt.o: ../../include/vbuf.h mark_corrupt.o: ../../include/set_eugid.h -mark_corrupt.o: mail_queue.h +mark_corrupt.o: ../../include/sys_defs.h +mark_corrupt.o: ../../include/vbuf.h +mark_corrupt.o: ../../include/vstream.h mark_corrupt.o: ../../include/vstring.h -mark_corrupt.o: mail_params.h mark_corrupt.o: deliver_request.h -mark_corrupt.o: recipient_list.h +mark_corrupt.o: mail_params.h +mark_corrupt.o: mail_queue.h +mark_corrupt.o: mark_corrupt.c mark_corrupt.o: mark_corrupt.h -match_parent_style.o: match_parent_style.c -match_parent_style.o: ../../include/sys_defs.h -match_parent_style.o: string_list.h +mark_corrupt.o: recipient_list.h match_parent_style.o: ../../include/match_list.h match_parent_style.o: ../../include/match_ops.h +match_parent_style.o: ../../include/sys_defs.h match_parent_style.o: mail_params.h +match_parent_style.o: match_parent_style.c match_parent_style.o: match_parent_style.h -mbox_conf.o: mbox_conf.c -mbox_conf.o: ../../include/sys_defs.h -mbox_conf.o: ../../include/name_mask.h +match_parent_style.o: string_list.h mbox_conf.o: ../../include/argv.h +mbox_conf.o: ../../include/name_mask.h +mbox_conf.o: ../../include/sys_defs.h mbox_conf.o: mail_params.h +mbox_conf.o: mbox_conf.c mbox_conf.o: mbox_conf.h -mbox_open.o: mbox_open.c -mbox_open.o: ../../include/sys_defs.h +mbox_open.o: ../../include/argv.h +mbox_open.o: ../../include/iostuff.h mbox_open.o: ../../include/msg.h -mbox_open.o: ../../include/vstream.h +mbox_open.o: ../../include/myflock.h +mbox_open.o: ../../include/mymalloc.h +mbox_open.o: ../../include/safe_open.h +mbox_open.o: ../../include/sys_defs.h mbox_open.o: ../../include/vbuf.h +mbox_open.o: ../../include/vstream.h mbox_open.o: ../../include/vstring.h -mbox_open.o: ../../include/safe_open.h -mbox_open.o: ../../include/iostuff.h -mbox_open.o: ../../include/mymalloc.h -mbox_open.o: dot_lockfile.h mbox_open.o: deliver_flock.h -mbox_open.o: ../../include/myflock.h +mbox_open.o: dot_lockfile.h +mbox_open.o: dsn_util.h mbox_open.o: mbox_conf.h -mbox_open.o: ../../include/argv.h +mbox_open.o: mbox_open.c mbox_open.o: mbox_open.h -mime_state.o: mime_state.c -mime_state.o: ../../include/sys_defs.h -mime_state.o: ../../include/mymalloc.h mime_state.o: ../../include/msg.h -mime_state.o: ../../include/vstring.h +mime_state.o: ../../include/mymalloc.h +mime_state.o: ../../include/sys_defs.h mime_state.o: ../../include/vbuf.h -mime_state.o: rec_type.h -mime_state.o: is_header.h +mime_state.o: ../../include/vstring.h mime_state.o: header_opts.h -mime_state.o: mail_params.h mime_state.o: header_token.h +mime_state.o: is_header.h mime_state.o: lex_822.h +mime_state.o: mail_params.h +mime_state.o: mime_state.c mime_state.o: mime_state.h -mkmap_cdb.o: mkmap_cdb.c +mime_state.o: rec_type.h mkmap_cdb.o: ../../include/sys_defs.h -mkmap_db.o: mkmap_db.c -mkmap_db.o: ../../include/sys_defs.h +mkmap_cdb.o: mkmap_cdb.c +mkmap_db.o: ../../include/argv.h +mkmap_db.o: ../../include/dict.h +mkmap_db.o: ../../include/dict_db.h mkmap_db.o: ../../include/msg.h +mkmap_db.o: ../../include/myflock.h mkmap_db.o: ../../include/mymalloc.h mkmap_db.o: ../../include/stringops.h -mkmap_db.o: ../../include/vstring.h +mkmap_db.o: ../../include/sys_defs.h mkmap_db.o: ../../include/vbuf.h -mkmap_db.o: ../../include/dict.h mkmap_db.o: ../../include/vstream.h -mkmap_db.o: ../../include/argv.h -mkmap_db.o: ../../include/dict_db.h -mkmap_db.o: ../../include/myflock.h +mkmap_db.o: ../../include/vstring.h mkmap_db.o: mail_params.h -mkmap_db.o: mkmap.h -mkmap_dbm.o: mkmap_dbm.c -mkmap_dbm.o: ../../include/sys_defs.h +mkmap_db.o: mkmap.h +mkmap_db.o: mkmap_db.c +mkmap_dbm.o: ../../include/argv.h +mkmap_dbm.o: ../../include/dict.h +mkmap_dbm.o: ../../include/dict_dbm.h mkmap_dbm.o: ../../include/msg.h +mkmap_dbm.o: ../../include/myflock.h mkmap_dbm.o: ../../include/mymalloc.h mkmap_dbm.o: ../../include/stringops.h -mkmap_dbm.o: ../../include/vstring.h +mkmap_dbm.o: ../../include/sys_defs.h mkmap_dbm.o: ../../include/vbuf.h -mkmap_dbm.o: ../../include/dict.h mkmap_dbm.o: ../../include/vstream.h -mkmap_dbm.o: ../../include/argv.h -mkmap_dbm.o: ../../include/dict_dbm.h -mkmap_dbm.o: ../../include/myflock.h +mkmap_dbm.o: ../../include/vstring.h mkmap_dbm.o: mkmap.h -mkmap_open.o: mkmap_open.c -mkmap_open.o: ../../include/sys_defs.h -mkmap_open.o: ../../include/msg.h -mkmap_open.o: ../../include/dict.h -mkmap_open.o: ../../include/vstream.h -mkmap_open.o: ../../include/vbuf.h +mkmap_dbm.o: mkmap_dbm.c mkmap_open.o: ../../include/argv.h -mkmap_open.o: ../../include/dict_db.h +mkmap_open.o: ../../include/dict.h mkmap_open.o: ../../include/dict_cdb.h +mkmap_open.o: ../../include/dict_db.h mkmap_open.o: ../../include/dict_dbm.h mkmap_open.o: ../../include/dict_sdbm.h -mkmap_open.o: ../../include/sigdelay.h +mkmap_open.o: ../../include/msg.h mkmap_open.o: ../../include/mymalloc.h +mkmap_open.o: ../../include/sigdelay.h +mkmap_open.o: ../../include/sys_defs.h +mkmap_open.o: ../../include/vbuf.h +mkmap_open.o: ../../include/vstream.h mkmap_open.o: mkmap.h -mkmap_sdbm.o: mkmap_sdbm.c -mkmap_sdbm.o: ../../include/sys_defs.h +mkmap_open.o: mkmap_open.c +mkmap_sdbm.o: ../../include/argv.h +mkmap_sdbm.o: ../../include/dict.h +mkmap_sdbm.o: ../../include/dict_sdbm.h mkmap_sdbm.o: ../../include/msg.h +mkmap_sdbm.o: ../../include/myflock.h mkmap_sdbm.o: ../../include/mymalloc.h mkmap_sdbm.o: ../../include/stringops.h -mkmap_sdbm.o: ../../include/vstring.h +mkmap_sdbm.o: ../../include/sys_defs.h mkmap_sdbm.o: ../../include/vbuf.h -mkmap_sdbm.o: ../../include/dict.h mkmap_sdbm.o: ../../include/vstream.h -mkmap_sdbm.o: ../../include/argv.h -mkmap_sdbm.o: ../../include/dict_sdbm.h -mkmap_sdbm.o: ../../include/myflock.h +mkmap_sdbm.o: ../../include/vstring.h mkmap_sdbm.o: mkmap.h -mynetworks.o: mynetworks.c -mynetworks.o: ../../include/sys_defs.h -mynetworks.o: ../../include/msg.h -mynetworks.o: ../../include/vstring.h -mynetworks.o: ../../include/vbuf.h +mkmap_sdbm.o: mkmap_sdbm.c +mynetworks.o: ../../include/argv.h mynetworks.o: ../../include/inet_addr_list.h +mynetworks.o: ../../include/mask_addr.h +mynetworks.o: ../../include/msg.h mynetworks.o: ../../include/myaddrinfo.h mynetworks.o: ../../include/name_mask.h -mynetworks.o: ../../include/mask_addr.h -mynetworks.o: ../../include/argv.h -mynetworks.o: own_inet_addr.h -mynetworks.o: mail_params.h -mynetworks.o: mynetworks.h mynetworks.o: ../../include/sock_addr.h +mynetworks.o: ../../include/sys_defs.h +mynetworks.o: ../../include/vbuf.h +mynetworks.o: ../../include/vstring.h mynetworks.o: been_here.h -mypwd.o: mypwd.c -mypwd.o: ../../include/sys_defs.h -mypwd.o: ../../include/mymalloc.h -mypwd.o: ../../include/htable.h +mynetworks.o: mail_params.h +mynetworks.o: mynetworks.c +mynetworks.o: mynetworks.h +mynetworks.o: own_inet_addr.h mypwd.o: ../../include/binhash.h +mypwd.o: ../../include/htable.h mypwd.o: ../../include/msg.h +mypwd.o: ../../include/mymalloc.h +mypwd.o: ../../include/sys_defs.h +mypwd.o: mypwd.c mypwd.o: mypwd.h -namadr_list.o: namadr_list.c -namadr_list.o: ../../include/sys_defs.h namadr_list.o: ../../include/match_list.h -namadr_list.o: namadr_list.h namadr_list.o: ../../include/match_ops.h -off_cvt.o: off_cvt.c -off_cvt.o: ../../include/sys_defs.h +namadr_list.o: ../../include/sys_defs.h +namadr_list.o: namadr_list.c +namadr_list.o: namadr_list.h off_cvt.o: ../../include/msg.h -off_cvt.o: ../../include/vstring.h +off_cvt.o: ../../include/sys_defs.h off_cvt.o: ../../include/vbuf.h +off_cvt.o: ../../include/vstring.h +off_cvt.o: off_cvt.c off_cvt.o: off_cvt.h -opened.o: opened.c -opened.o: ../../include/sys_defs.h opened.o: ../../include/msg.h -opened.o: ../../include/vstring.h +opened.o: ../../include/sys_defs.h opened.o: ../../include/vbuf.h +opened.o: ../../include/vstring.h +opened.o: opened.c opened.o: opened.h -own_inet_addr.o: own_inet_addr.c -own_inet_addr.o: ../../include/sys_defs.h -own_inet_addr.o: ../../include/msg.h -own_inet_addr.o: ../../include/mymalloc.h +own_inet_addr.o: ../../include/inet_addr_host.h own_inet_addr.o: ../../include/inet_addr_list.h -own_inet_addr.o: ../../include/myaddrinfo.h own_inet_addr.o: ../../include/inet_addr_local.h -own_inet_addr.o: ../../include/inet_addr_host.h +own_inet_addr.o: ../../include/inet_proto.h +own_inet_addr.o: ../../include/msg.h +own_inet_addr.o: ../../include/myaddrinfo.h +own_inet_addr.o: ../../include/mymalloc.h +own_inet_addr.o: ../../include/sock_addr.h own_inet_addr.o: ../../include/stringops.h -own_inet_addr.o: ../../include/vstring.h +own_inet_addr.o: ../../include/sys_defs.h own_inet_addr.o: ../../include/vbuf.h -own_inet_addr.o: ../../include/sock_addr.h -own_inet_addr.o: ../../include/inet_proto.h +own_inet_addr.o: ../../include/vstring.h own_inet_addr.o: mail_params.h +own_inet_addr.o: own_inet_addr.c own_inet_addr.o: own_inet_addr.h -pipe_command.o: pipe_command.c -pipe_command.o: ../../include/sys_defs.h +pipe_command.o: ../../include/argv.h +pipe_command.o: ../../include/clean_env.h +pipe_command.o: ../../include/exec_command.h +pipe_command.o: ../../include/iostuff.h pipe_command.o: ../../include/msg.h -pipe_command.o: ../../include/vstream.h -pipe_command.o: ../../include/vbuf.h -pipe_command.o: ../../include/vstring.h +pipe_command.o: ../../include/set_eugid.h +pipe_command.o: ../../include/set_ugid.h pipe_command.o: ../../include/stringops.h -pipe_command.o: ../../include/iostuff.h +pipe_command.o: ../../include/sys_defs.h pipe_command.o: ../../include/timed_wait.h -pipe_command.o: ../../include/set_ugid.h -pipe_command.o: ../../include/set_eugid.h -pipe_command.o: ../../include/argv.h -pipe_command.o: mail_params.h +pipe_command.o: ../../include/vbuf.h +pipe_command.o: ../../include/vstream.h +pipe_command.o: ../../include/vstring.h +pipe_command.o: dsn_util.h pipe_command.o: mail_copy.h -pipe_command.o: ../../include/clean_env.h +pipe_command.o: mail_params.h +pipe_command.o: pipe_command.c pipe_command.o: pipe_command.h -pipe_command.o: ../../include/exec_command.h pipe_command.o: sys_exits.h -post_mail.o: post_mail.c -post_mail.o: ../../include/sys_defs.h +post_mail.o: ../../include/attr.h +post_mail.o: ../../include/events.h +post_mail.o: ../../include/iostuff.h post_mail.o: ../../include/msg.h -post_mail.o: ../../include/vstream.h +post_mail.o: ../../include/mymalloc.h +post_mail.o: ../../include/sys_defs.h post_mail.o: ../../include/vbuf.h +post_mail.o: ../../include/vstream.h post_mail.o: ../../include/vstring.h -post_mail.o: ../../include/mymalloc.h -post_mail.o: ../../include/events.h +post_mail.o: cleanup_user.h +post_mail.o: mail_date.h post_mail.o: mail_params.h -post_mail.o: record.h -post_mail.o: rec_type.h post_mail.o: mail_proto.h -post_mail.o: ../../include/iostuff.h -post_mail.o: ../../include/attr.h -post_mail.o: cleanup_user.h +post_mail.o: post_mail.c post_mail.o: post_mail.h -post_mail.o: mail_date.h -quote_821_local.o: quote_821_local.c +post_mail.o: rec_type.h +post_mail.o: record.h quote_821_local.o: ../../include/sys_defs.h -quote_821_local.o: ../../include/vstring.h quote_821_local.o: ../../include/vbuf.h +quote_821_local.o: ../../include/vstring.h +quote_821_local.o: quote_821_local.c quote_821_local.o: quote_821_local.h quote_821_local.o: quote_flags.h -quote_822_local.o: quote_822_local.c quote_822_local.o: ../../include/sys_defs.h -quote_822_local.o: ../../include/vstring.h quote_822_local.o: ../../include/vbuf.h +quote_822_local.o: ../../include/vstring.h +quote_822_local.o: quote_822_local.c quote_822_local.o: quote_822_local.h quote_822_local.o: quote_flags.h -rec2stream.o: rec2stream.c rec2stream.o: ../../include/sys_defs.h -rec2stream.o: ../../include/vstring.h rec2stream.o: ../../include/vbuf.h rec2stream.o: ../../include/vstream.h -rec2stream.o: record.h +rec2stream.o: ../../include/vstring.h +rec2stream.o: rec2stream.c rec2stream.o: rec_streamlf.h rec2stream.o: rec_type.h -rec_streamlf.o: rec_streamlf.c +rec2stream.o: record.h rec_streamlf.o: ../../include/sys_defs.h -rec_streamlf.o: ../../include/vstring.h rec_streamlf.o: ../../include/vbuf.h rec_streamlf.o: ../../include/vstream.h -rec_streamlf.o: record.h -rec_streamlf.o: rec_type.h +rec_streamlf.o: ../../include/vstring.h +rec_streamlf.o: rec_streamlf.c rec_streamlf.o: rec_streamlf.h +rec_streamlf.o: rec_type.h +rec_streamlf.o: record.h rec_type.o: rec_type.c rec_type.o: rec_type.h -recdump.o: recdump.c -recdump.o: ../../include/sys_defs.h recdump.o: ../../include/msg_vstream.h -recdump.o: ../../include/vstream.h +recdump.o: ../../include/sys_defs.h recdump.o: ../../include/vbuf.h -recdump.o: record.h +recdump.o: ../../include/vstream.h recdump.o: ../../include/vstring.h recdump.o: rec_streamlf.h recdump.o: rec_type.h -recipient_list.o: recipient_list.c -recipient_list.o: ../../include/sys_defs.h +recdump.o: recdump.c +recdump.o: record.h recipient_list.o: ../../include/mymalloc.h +recipient_list.o: ../../include/sys_defs.h +recipient_list.o: recipient_list.c recipient_list.o: recipient_list.h -record.o: record.c -record.o: ../../include/sys_defs.h record.o: ../../include/msg.h record.o: ../../include/mymalloc.h -record.o: ../../include/vstream.h +record.o: ../../include/sys_defs.h record.o: ../../include/vbuf.h +record.o: ../../include/vstream.h record.o: ../../include/vstring.h +record.o: record.c record.o: record.h -remove.o: remove.c remove.o: ../../include/sys_defs.h -remove.o: ../../include/vstring.h remove.o: ../../include/vbuf.h +remove.o: ../../include/vstring.h remove.o: mail_params.h -resolve_clnt.o: resolve_clnt.c -resolve_clnt.o: ../../include/sys_defs.h +remove.o: remove.c +resolve_clnt.o: ../../include/attr.h +resolve_clnt.o: ../../include/events.h +resolve_clnt.o: ../../include/iostuff.h resolve_clnt.o: ../../include/msg.h -resolve_clnt.o: ../../include/vstream.h +resolve_clnt.o: ../../include/sys_defs.h resolve_clnt.o: ../../include/vbuf.h +resolve_clnt.o: ../../include/vstream.h resolve_clnt.o: ../../include/vstring.h resolve_clnt.o: ../../include/vstring_vstream.h -resolve_clnt.o: ../../include/events.h -resolve_clnt.o: ../../include/iostuff.h -resolve_clnt.o: mail_proto.h -resolve_clnt.o: ../../include/attr.h -resolve_clnt.o: mail_params.h resolve_clnt.o: clnt_stream.h +resolve_clnt.o: mail_params.h +resolve_clnt.o: mail_proto.h +resolve_clnt.o: resolve_clnt.c resolve_clnt.o: resolve_clnt.h -resolve_local.o: resolve_local.c -resolve_local.o: ../../include/sys_defs.h -resolve_local.o: ../../include/msg.h -resolve_local.o: ../../include/mymalloc.h -resolve_local.o: string_list.h +resolve_local.o: ../../include/inet_addr_list.h resolve_local.o: ../../include/match_list.h resolve_local.o: ../../include/match_ops.h +resolve_local.o: ../../include/msg.h resolve_local.o: ../../include/myaddrinfo.h -resolve_local.o: valid_mailhost_addr.h +resolve_local.o: ../../include/mymalloc.h +resolve_local.o: ../../include/sys_defs.h resolve_local.o: ../../include/valid_hostname.h resolve_local.o: mail_params.h resolve_local.o: own_inet_addr.h -resolve_local.o: ../../include/inet_addr_list.h +resolve_local.o: resolve_local.c resolve_local.o: resolve_local.h -rewrite_clnt.o: rewrite_clnt.c -rewrite_clnt.o: ../../include/sys_defs.h +resolve_local.o: string_list.h +resolve_local.o: valid_mailhost_addr.h +rewrite_clnt.o: ../../include/attr.h +rewrite_clnt.o: ../../include/events.h +rewrite_clnt.o: ../../include/iostuff.h rewrite_clnt.o: ../../include/msg.h -rewrite_clnt.o: ../../include/vstring.h +rewrite_clnt.o: ../../include/sys_defs.h rewrite_clnt.o: ../../include/vbuf.h rewrite_clnt.o: ../../include/vstream.h +rewrite_clnt.o: ../../include/vstring.h rewrite_clnt.o: ../../include/vstring_vstream.h -rewrite_clnt.o: ../../include/events.h -rewrite_clnt.o: ../../include/iostuff.h +rewrite_clnt.o: clnt_stream.h +rewrite_clnt.o: mail_params.h +rewrite_clnt.o: mail_proto.h rewrite_clnt.o: quote_822_local.h rewrite_clnt.o: quote_flags.h -rewrite_clnt.o: mail_proto.h -rewrite_clnt.o: ../../include/attr.h -rewrite_clnt.o: mail_params.h -rewrite_clnt.o: clnt_stream.h +rewrite_clnt.o: rewrite_clnt.c rewrite_clnt.o: rewrite_clnt.h -scache.o: scache.c -scache.o: ../../include/sys_defs.h +scache.o: ../../include/argv.h +scache.o: ../../include/events.h scache.o: ../../include/msg.h -scache.o: ../../include/vstream.h +scache.o: ../../include/sys_defs.h scache.o: ../../include/vbuf.h +scache.o: ../../include/vstream.h scache.o: ../../include/vstring.h -scache.o: ../../include/vstring_vstream.h -scache.o: ../../include/argv.h -scache.o: ../../include/events.h +scache.o: ../../include/vstring_vstream.h +scache.o: scache.c scache.o: scache.h -scache_clnt.o: scache_clnt.c -scache_clnt.o: ../../include/sys_defs.h +scache_clnt.o: ../../include/attr.h +scache_clnt.o: ../../include/iostuff.h scache_clnt.o: ../../include/msg.h scache_clnt.o: ../../include/mymalloc.h -scache_clnt.o: mail_proto.h -scache_clnt.o: ../../include/vstream.h +scache_clnt.o: ../../include/sys_defs.h scache_clnt.o: ../../include/vbuf.h -scache_clnt.o: ../../include/iostuff.h -scache_clnt.o: ../../include/attr.h -scache_clnt.o: mail_params.h +scache_clnt.o: ../../include/vstream.h +scache_clnt.o: ../../include/vstring.h scache_clnt.o: clnt_stream.h +scache_clnt.o: mail_params.h +scache_clnt.o: mail_proto.h scache_clnt.o: scache.h -scache_clnt.o: ../../include/vstring.h -scache_multi.o: scache_multi.c -scache_multi.o: ../../include/sys_defs.h +scache_clnt.o: scache_clnt.c +scache_multi.o: ../../include/events.h +scache_multi.o: ../../include/htable.h scache_multi.o: ../../include/msg.h +scache_multi.o: ../../include/mymalloc.h scache_multi.o: ../../include/ring.h -scache_multi.o: ../../include/htable.h -scache_multi.o: ../../include/vstring.h +scache_multi.o: ../../include/sys_defs.h scache_multi.o: ../../include/vbuf.h -scache_multi.o: ../../include/mymalloc.h -scache_multi.o: ../../include/events.h +scache_multi.o: ../../include/vstring.h scache_multi.o: scache.h -scache_single.o: scache_single.c -scache_single.o: ../../include/sys_defs.h +scache_multi.o: scache_multi.c +scache_single.o: ../../include/events.h scache_single.o: ../../include/msg.h -scache_single.o: ../../include/vstring.h -scache_single.o: ../../include/vbuf.h scache_single.o: ../../include/mymalloc.h -scache_single.o: ../../include/events.h +scache_single.o: ../../include/sys_defs.h +scache_single.o: ../../include/vbuf.h +scache_single.o: ../../include/vstring.h scache_single.o: scache.h -sent.o: sent.c -sent.o: ../../include/sys_defs.h +scache_single.o: scache_single.c sent.o: ../../include/msg.h -sent.o: ../../include/vstring.h +sent.o: ../../include/sys_defs.h sent.o: ../../include/vbuf.h -sent.o: mail_params.h -sent.o: verify.h -sent.o: deliver_request.h sent.o: ../../include/vstream.h -sent.o: recipient_list.h -sent.o: log_adhoc.h -sent.o: trace.h -sent.o: defer.h +sent.o: ../../include/vstring.h sent.o: bounce.h +sent.o: defer.h +sent.o: deliver_request.h +sent.o: dsn_util.h +sent.o: log_adhoc.h +sent.o: mail_params.h +sent.o: recipient_list.h +sent.o: sent.c sent.o: sent.h -smtp_stream.o: smtp_stream.c +sent.o: trace.h +sent.o: verify.h +smtp_stream.o: ../../include/iostuff.h +smtp_stream.o: ../../include/msg.h smtp_stream.o: ../../include/sys_defs.h -smtp_stream.o: ../../include/vstring.h smtp_stream.o: ../../include/vbuf.h smtp_stream.o: ../../include/vstream.h +smtp_stream.o: ../../include/vstring.h smtp_stream.o: ../../include/vstring_vstream.h -smtp_stream.o: ../../include/msg.h -smtp_stream.o: ../../include/iostuff.h +smtp_stream.o: smtp_stream.c smtp_stream.o: smtp_stream.h -split_addr.o: split_addr.c -split_addr.o: ../../include/sys_defs.h split_addr.o: ../../include/split_at.h -split_addr.o: mail_params.h +split_addr.o: ../../include/sys_defs.h split_addr.o: mail_addr.h +split_addr.o: mail_params.h +split_addr.o: split_addr.c split_addr.o: split_addr.h -stream2rec.o: stream2rec.c stream2rec.o: ../../include/sys_defs.h -stream2rec.o: ../../include/vstream.h stream2rec.o: ../../include/vbuf.h +stream2rec.o: ../../include/vstream.h stream2rec.o: ../../include/vstring.h -stream2rec.o: record.h stream2rec.o: rec_streamlf.h stream2rec.o: rec_type.h -string_list.o: string_list.c -string_list.o: ../../include/sys_defs.h +stream2rec.o: record.h +stream2rec.o: stream2rec.c string_list.o: ../../include/match_list.h -string_list.o: string_list.h string_list.o: ../../include/match_ops.h -strip_addr.o: strip_addr.c -strip_addr.o: ../../include/sys_defs.h +string_list.o: ../../include/sys_defs.h +string_list.o: string_list.c +string_list.o: string_list.h strip_addr.o: ../../include/mymalloc.h +strip_addr.o: ../../include/sys_defs.h strip_addr.o: split_addr.h +strip_addr.o: strip_addr.c strip_addr.o: strip_addr.h -sys_exits.o: sys_exits.c -sys_exits.o: ../../include/sys_defs.h sys_exits.o: ../../include/msg.h +sys_exits.o: ../../include/sys_defs.h +sys_exits.o: sys_exits.c sys_exits.o: sys_exits.h -timed_ipc.o: timed_ipc.c -timed_ipc.o: ../../include/sys_defs.h timed_ipc.o: ../../include/msg.h -timed_ipc.o: ../../include/vstream.h +timed_ipc.o: ../../include/sys_defs.h timed_ipc.o: ../../include/vbuf.h +timed_ipc.o: ../../include/vstream.h timed_ipc.o: mail_params.h +timed_ipc.o: timed_ipc.c timed_ipc.o: timed_ipc.h -tok822_find.o: tok822_find.c tok822_find.o: ../../include/sys_defs.h -tok822_find.o: ../../include/vstring.h tok822_find.o: ../../include/vbuf.h -tok822_find.o: tok822.h +tok822_find.o: ../../include/vstring.h tok822_find.o: resolve_clnt.h -tok822_node.o: tok822_node.c -tok822_node.o: ../../include/sys_defs.h +tok822_find.o: tok822.h +tok822_find.o: tok822_find.c tok822_node.o: ../../include/mymalloc.h -tok822_node.o: ../../include/vstring.h +tok822_node.o: ../../include/sys_defs.h tok822_node.o: ../../include/vbuf.h -tok822_node.o: tok822.h +tok822_node.o: ../../include/vstring.h tok822_node.o: resolve_clnt.h -tok822_parse.o: tok822_parse.c -tok822_parse.o: ../../include/sys_defs.h -tok822_parse.o: ../../include/vstring.h -tok822_parse.o: ../../include/vbuf.h +tok822_node.o: tok822.h +tok822_node.o: tok822_node.c tok822_parse.o: ../../include/msg.h tok822_parse.o: ../../include/stringops.h +tok822_parse.o: ../../include/sys_defs.h +tok822_parse.o: ../../include/vbuf.h +tok822_parse.o: ../../include/vstring.h tok822_parse.o: lex_822.h tok822_parse.o: quote_822_local.h tok822_parse.o: quote_flags.h -tok822_parse.o: tok822.h tok822_parse.o: resolve_clnt.h -tok822_resolve.o: tok822_resolve.c +tok822_parse.o: tok822.h +tok822_parse.o: tok822_parse.c +tok822_resolve.o: ../../include/msg.h tok822_resolve.o: ../../include/sys_defs.h -tok822_resolve.o: ../../include/vstring.h tok822_resolve.o: ../../include/vbuf.h -tok822_resolve.o: ../../include/msg.h +tok822_resolve.o: ../../include/vstring.h tok822_resolve.o: resolve_clnt.h tok822_resolve.o: tok822.h -tok822_rewrite.o: tok822_rewrite.c +tok822_resolve.o: tok822_resolve.c +tok822_rewrite.o: ../../include/attr.h +tok822_rewrite.o: ../../include/iostuff.h +tok822_rewrite.o: ../../include/msg.h tok822_rewrite.o: ../../include/sys_defs.h -tok822_rewrite.o: ../../include/vstring.h tok822_rewrite.o: ../../include/vbuf.h -tok822_rewrite.o: ../../include/msg.h -tok822_rewrite.o: rewrite_clnt.h -tok822_rewrite.o: mail_proto.h tok822_rewrite.o: ../../include/vstream.h -tok822_rewrite.o: ../../include/iostuff.h -tok822_rewrite.o: ../../include/attr.h -tok822_rewrite.o: tok822.h +tok822_rewrite.o: ../../include/vstring.h +tok822_rewrite.o: mail_proto.h tok822_rewrite.o: resolve_clnt.h -tok822_tree.o: tok822_tree.c -tok822_tree.o: ../../include/sys_defs.h +tok822_rewrite.o: rewrite_clnt.h +tok822_rewrite.o: tok822.h +tok822_rewrite.o: tok822_rewrite.c tok822_tree.o: ../../include/mymalloc.h -tok822_tree.o: ../../include/vstring.h +tok822_tree.o: ../../include/sys_defs.h tok822_tree.o: ../../include/vbuf.h -tok822_tree.o: tok822.h +tok822_tree.o: ../../include/vstring.h tok822_tree.o: resolve_clnt.h -trace.o: trace.c -trace.o: ../../include/sys_defs.h +tok822_tree.o: tok822.h +tok822_tree.o: tok822_tree.c +trace.o: ../../include/attr.h +trace.o: ../../include/iostuff.h trace.o: ../../include/msg.h -trace.o: ../../include/vstring.h +trace.o: ../../include/sys_defs.h trace.o: ../../include/vbuf.h -trace.o: mail_params.h -trace.o: mail_proto.h trace.o: ../../include/vstream.h -trace.o: ../../include/iostuff.h -trace.o: ../../include/attr.h -trace.o: verify_clnt.h +trace.o: ../../include/vstring.h +trace.o: bounce.h trace.o: deliver_request.h -trace.o: recipient_list.h trace.o: log_adhoc.h -trace.o: bounce.h +trace.o: mail_params.h +trace.o: mail_proto.h +trace.o: recipient_list.h +trace.o: trace.c trace.o: trace.h -user_acl.o: user_acl.c -user_acl.o: ../../include/sys_defs.h -user_acl.o: ../../include/vstring.h -user_acl.o: ../../include/vbuf.h -user_acl.o: string_list.h +trace.o: verify_clnt.h user_acl.o: ../../include/match_list.h user_acl.o: ../../include/match_ops.h -user_acl.o: mypwd.h +user_acl.o: ../../include/sys_defs.h +user_acl.o: ../../include/vbuf.h +user_acl.o: ../../include/vstring.h user_acl.o: mail_params.h +user_acl.o: mypwd.h +user_acl.o: string_list.h +user_acl.o: user_acl.c user_acl.o: user_acl.h -valid_mailhost_addr.o: valid_mailhost_addr.c -valid_mailhost_addr.o: ../../include/sys_defs.h valid_mailhost_addr.o: ../../include/msg.h valid_mailhost_addr.o: ../../include/myaddrinfo.h -valid_mailhost_addr.o: valid_mailhost_addr.h +valid_mailhost_addr.o: ../../include/sys_defs.h valid_mailhost_addr.o: ../../include/valid_hostname.h -verify.o: verify.c -verify.o: ../../include/sys_defs.h +valid_mailhost_addr.o: valid_mailhost_addr.c +valid_mailhost_addr.o: valid_mailhost_addr.h +verify.o: ../../include/attr.h +verify.o: ../../include/iostuff.h verify.o: ../../include/msg.h -verify.o: ../../include/vstring.h +verify.o: ../../include/sys_defs.h verify.o: ../../include/vbuf.h -verify.o: mail_params.h -verify.o: mail_proto.h verify.o: ../../include/vstream.h -verify.o: ../../include/iostuff.h -verify.o: ../../include/attr.h -verify.o: verify_clnt.h +verify.o: ../../include/vstring.h verify.o: deliver_request.h -verify.o: recipient_list.h verify.o: log_adhoc.h +verify.o: mail_params.h +verify.o: mail_proto.h +verify.o: recipient_list.h +verify.o: verify.c verify.o: verify.h -verify_clnt.o: verify_clnt.c -verify_clnt.o: ../../include/sys_defs.h +verify.o: verify_clnt.h +verify_clnt.o: ../../include/attr.h +verify_clnt.o: ../../include/iostuff.h verify_clnt.o: ../../include/msg.h -verify_clnt.o: ../../include/vstream.h +verify_clnt.o: ../../include/sys_defs.h verify_clnt.o: ../../include/vbuf.h +verify_clnt.o: ../../include/vstream.h verify_clnt.o: ../../include/vstring.h -verify_clnt.o: ../../include/attr.h -verify_clnt.o: mail_params.h -verify_clnt.o: mail_proto.h -verify_clnt.o: ../../include/iostuff.h verify_clnt.o: clnt_stream.h -verify_clnt.o: verify_clnt.h verify_clnt.o: deliver_request.h +verify_clnt.o: mail_params.h +verify_clnt.o: mail_proto.h verify_clnt.o: recipient_list.h -verp_sender.o: verp_sender.c +verify_clnt.o: verify_clnt.c +verify_clnt.o: verify_clnt.h verp_sender.o: ../../include/sys_defs.h -verp_sender.o: ../../include/vstring.h verp_sender.o: ../../include/vbuf.h +verp_sender.o: ../../include/vstring.h verp_sender.o: mail_params.h +verp_sender.o: verp_sender.c verp_sender.o: verp_sender.h -virtual8_maps.o: virtual8_maps.c -virtual8_maps.o: ../../include/sys_defs.h +virtual8_maps.o: ../../include/argv.h +virtual8_maps.o: ../../include/dict.h virtual8_maps.o: ../../include/msg.h virtual8_maps.o: ../../include/mymalloc.h -virtual8_maps.o: maps.h -virtual8_maps.o: ../../include/dict.h -virtual8_maps.o: ../../include/vstream.h +virtual8_maps.o: ../../include/sys_defs.h virtual8_maps.o: ../../include/vbuf.h -virtual8_maps.o: ../../include/argv.h +virtual8_maps.o: ../../include/vstream.h virtual8_maps.o: mail_params.h +virtual8_maps.o: maps.h virtual8_maps.o: strip_addr.h +virtual8_maps.o: virtual8_maps.c virtual8_maps.o: virtual8_maps.h -wildcard_inet_addr.o: wildcard_inet_addr.c -wildcard_inet_addr.o: ../../include/sys_defs.h -wildcard_inet_addr.o: ../../include/msg.h +wildcard_inet_addr.o: ../../include/inet_addr_host.h wildcard_inet_addr.o: ../../include/inet_addr_list.h +wildcard_inet_addr.o: ../../include/msg.h wildcard_inet_addr.o: ../../include/myaddrinfo.h -wildcard_inet_addr.o: ../../include/inet_addr_host.h +wildcard_inet_addr.o: ../../include/sys_defs.h +wildcard_inet_addr.o: wildcard_inet_addr.c wildcard_inet_addr.o: wildcard_inet_addr.h -xtext.o: xtext.c -xtext.o: ../../include/sys_defs.h xtext.o: ../../include/msg.h -xtext.o: ../../include/vstring.h +xtext.o: ../../include/sys_defs.h xtext.o: ../../include/vbuf.h +xtext.o: ../../include/vstring.h +xtext.o: xtext.c xtext.o: xtext.h diff --git a/postfix/src/global/bounce.c b/postfix/src/global/bounce.c index 6b121cedb..e1a1c5411 100644 --- a/postfix/src/global/bounce.c +++ b/postfix/src/global/bounce.c @@ -7,24 +7,26 @@ /* #include /* /* int bounce_append(flags, id, orig_rcpt, recipient, offset, relay, -/* entry, format, ...) +/* dsn, entry, format, ...) /* int flags; /* const char *id; /* const char *orig_rcpt; /* const char *recipient; /* long offset; /* const char *relay; +/* const char *dsn; /* time_t entry; /* const char *format; /* /* int vbounce_append(flags, id, orig_rcpt, recipient, offset, relay, -/* entry, format, ap) +/* dsn, entry, format, ap) /* int flags; /* const char *id; /* const char *orig_rcpt; /* const char *recipient; /* long offset; /* const char *relay; +/* const char *dsn; /* time_t entry; /* const char *format; /* va_list ap; @@ -37,7 +39,8 @@ /* const char *sender; /* /* int bounce_one(flags, queue, id, encoding, sender, orig_rcpt, -/* recipient, offset, relay, entry, format, ...) +/* recipient, offset, relay, dsn, entry, +/* format, ...) /* int flags; /* const char *queue; /* const char *id; @@ -47,11 +50,13 @@ /* const char *recipient; /* long offset; /* const char *relay; +/* const char *dsn; /* time_t entry; /* const char *format; /* /* int vbounce_one(flags, queue, id, encoding, sender, orig_rcpt, -/* recipient, offset, relay, entry, format, ap) +/* recipient, offset, relay, dsn, entry, +/* format, ap) /* int flags; /* const char *queue; /* const char *id; @@ -61,6 +66,7 @@ /* const char *recipient; /* long offset; /* const char *relay; +/* const char *dsn; /* time_t entry; /* const char *format; /* va_list ap; @@ -120,6 +126,8 @@ /* .IP relay /* Name of the host that the message could not be delivered to. /* This information is used for syslogging only. +/* .IP dsn +/* X.YY.ZZ Error detail as specified in RFC 1893. /* .IP entry /* Message arrival time. /* .IP orig_rcpt @@ -168,6 +176,7 @@ #include #include +#include /* Global library. */ @@ -178,19 +187,21 @@ #include #include #include +#include /* bounce_append - append reason to per-message bounce log */ int bounce_append(int flags, const char *id, const char *orig_rcpt, const char *recipient, long offset, const char *relay, - time_t entry, const char *fmt,...) + const char *dsn, time_t entry, + const char *fmt,...) { va_list ap; int status; va_start(ap, fmt); status = vbounce_append(flags, id, orig_rcpt, recipient, - offset, relay, entry, fmt, ap); + offset, relay, dsn, entry, fmt, ap); va_end(ap); return (status); } @@ -199,16 +210,25 @@ int bounce_append(int flags, const char *id, const char *orig_rcpt, int vbounce_append(int flags, const char *id, const char *orig_rcpt, const char *recipient, long offset, const char *relay, - time_t entry, const char *fmt, va_list ap) + const char *dsn, time_t entry, + const char *fmt, va_list ap) { int status; + /* + * Sanity check. + */ + if (*dsn != '5' || !dsn_valid(dsn)) { + msg_warn("bounce_append: ignoring dsn code \"%s\"", dsn); + dsn = "5.0.0"; + } + /* * MTA-requested address verification information is stored in the verify * service database. */ if (flags & DEL_REQ_FLAG_VERIFY) { - status = vverify_append(id, orig_rcpt, recipient, relay, entry, + status = vverify_append(id, orig_rcpt, recipient, relay, dsn, entry, "undeliverable", DEL_RCPT_STAT_BOUNCE, fmt, ap); return (status); } @@ -219,7 +239,7 @@ int vbounce_append(int flags, const char *id, const char *orig_rcpt, */ if (flags & DEL_REQ_FLAG_EXPAND) { status = vtrace_append(flags, id, orig_rcpt, recipient, relay, - entry, "5.0.0", "undeliverable", fmt, ap); + dsn, entry, "undeliverable", fmt, ap); return (status); } @@ -237,13 +257,15 @@ int vbounce_append(int flags, const char *id, const char *orig_rcpt, */ else { VSTRING *why = vstring_alloc(100); - char *dsn_code = var_soft_bounce ? "4.0.0" : "5.0.0"; - char *dsn_action = var_soft_bounce ? "delayed" : "failed"; + char *my_dsn = mystrdup(dsn); + char *action = var_soft_bounce ? "delayed" : "failed"; char *log_status = var_soft_bounce ? "SOFTBOUNCE" : "bounced"; vstring_vsprintf(why, fmt, ap); if (orig_rcpt == 0) orig_rcpt = ""; + if (var_soft_bounce) + my_dsn[0] = '4'; if (mail_command_client(MAIL_CLASS_PRIVATE, var_soft_bounce ? var_defer_service : var_bounce_service, ATTR_TYPE_NUM, MAIL_ATTR_NREQ, BOUNCE_CMD_APPEND, @@ -252,24 +274,27 @@ int vbounce_append(int flags, const char *id, const char *orig_rcpt, ATTR_TYPE_STR, MAIL_ATTR_ORCPT, orig_rcpt, ATTR_TYPE_STR, MAIL_ATTR_RECIP, recipient, ATTR_TYPE_LONG, MAIL_ATTR_OFFSET, offset, - ATTR_TYPE_STR, MAIL_ATTR_STATUS, dsn_code, - ATTR_TYPE_STR, MAIL_ATTR_ACTION, dsn_action, + ATTR_TYPE_STR, MAIL_ATTR_STATUS, my_dsn, + ATTR_TYPE_STR, MAIL_ATTR_ACTION, action, ATTR_TYPE_STR, MAIL_ATTR_WHY, vstring_str(why), ATTR_TYPE_END) == 0 && ((flags & DEL_REQ_FLAG_RECORD) == 0 || trace_append(flags, id, orig_rcpt, recipient, relay, - entry, dsn_code, dsn_action, + my_dsn, entry, action, "%s", vstring_str(why)) == 0)) { - log_adhoc(id, orig_rcpt, recipient, relay, + log_adhoc(id, orig_rcpt, recipient, relay, my_dsn, entry, log_status, "%s", vstring_str(why)); status = (var_soft_bounce ? -1 : 0); } else if ((flags & BOUNCE_FLAG_CLEAN) == 0) { + my_dsn[0] = '4'; status = defer_append(flags, id, orig_rcpt, recipient, offset, - relay, entry, "%s or %s service failure", + relay, my_dsn, entry, + "%s or %s service failure", var_bounce_service, var_trace_service); } else { status = -1; } + myfree(my_dsn); vstring_free(why); return (status); } @@ -309,15 +334,15 @@ int bounce_flush(int flags, const char *queue, const char *id, int bounce_one(int flags, const char *queue, const char *id, const char *encoding, const char *sender, const char *orig_rcpt, const char *recipient, - long offset, const char *relay, time_t entry, - const char *fmt,...) + long offset, const char *relay, const char *dsn, + time_t entry, const char *fmt,...) { va_list ap; int status; va_start(ap, fmt); status = vbounce_one(flags, queue, id, encoding, sender, orig_rcpt, - recipient, offset, relay, entry, fmt, ap); + recipient, offset, relay, dsn, entry, fmt, ap); va_end(ap); return (status); } @@ -327,17 +352,25 @@ int bounce_one(int flags, const char *queue, const char *id, int vbounce_one(int flags, const char *queue, const char *id, const char *encoding, const char *sender, const char *orig_rcpt, const char *recipient, - long offset, const char *relay, time_t entry, - const char *fmt, va_list ap) + long offset, const char *relay, const char *dsn, + time_t entry, const char *fmt, va_list ap) { int status; + /* + * Sanity check. + */ + if (*dsn != '5' || !dsn_valid(dsn)) { + msg_warn("bounce_one: ignoring dsn code \"%s\"", dsn); + dsn = "5.0.0"; + } + /* * MTA-requested address verification information is stored in the verify * service database. */ if (flags & DEL_REQ_FLAG_VERIFY) { - status = vverify_append(id, orig_rcpt, recipient, relay, entry, + status = vverify_append(id, orig_rcpt, recipient, relay, dsn, entry, "undeliverable", DEL_RCPT_STAT_BOUNCE, fmt, ap); return (status); } @@ -348,7 +381,7 @@ int vbounce_one(int flags, const char *queue, const char *id, */ if (flags & DEL_REQ_FLAG_EXPAND) { status = vtrace_append(flags, id, orig_rcpt, recipient, relay, - entry, "5.0.0", "undeliverable", fmt, ap); + dsn, entry, "undeliverable", fmt, ap); return (status); } @@ -358,7 +391,7 @@ int vbounce_one(int flags, const char *queue, const char *id, */ else if (var_soft_bounce) { return (vbounce_append(flags, id, orig_rcpt, recipient, - offset, relay, entry, fmt, ap)); + offset, relay, dsn, entry, fmt, ap)); } /* @@ -366,10 +399,13 @@ int vbounce_one(int flags, const char *queue, const char *id, */ else { VSTRING *why = vstring_alloc(100); + char *my_dsn = mystrdup(dsn); vstring_vsprintf(why, fmt, ap); if (orig_rcpt == 0) orig_rcpt = ""; + if (var_soft_bounce) + my_dsn[0] = '4'; if (mail_command_client(MAIL_CLASS_PRIVATE, var_bounce_service, ATTR_TYPE_NUM, MAIL_ATTR_NREQ, BOUNCE_CMD_ONE, ATTR_TYPE_NUM, MAIL_ATTR_FLAGS, flags, @@ -380,24 +416,27 @@ int vbounce_one(int flags, const char *queue, const char *id, ATTR_TYPE_STR, MAIL_ATTR_ORCPT, orig_rcpt, ATTR_TYPE_STR, MAIL_ATTR_RECIP, recipient, ATTR_TYPE_LONG, MAIL_ATTR_OFFSET, offset, - ATTR_TYPE_STR, MAIL_ATTR_STATUS, "5.0.0", + ATTR_TYPE_STR, MAIL_ATTR_STATUS, my_dsn, ATTR_TYPE_STR, MAIL_ATTR_ACTION, "failed", ATTR_TYPE_STR, MAIL_ATTR_WHY, vstring_str(why), ATTR_TYPE_END) == 0 && ((flags & DEL_REQ_FLAG_RECORD) == 0 || trace_append(flags, id, orig_rcpt, recipient, relay, - entry, "5.0.0", "failed", + my_dsn, entry, "failed", "%s", vstring_str(why)) == 0)) { - log_adhoc(id, orig_rcpt, recipient, relay, + log_adhoc(id, orig_rcpt, recipient, relay, my_dsn, entry, "bounced", "%s", vstring_str(why)); status = 0; } else if ((flags & BOUNCE_FLAG_CLEAN) == 0) { + my_dsn[0] = '4'; status = defer_append(flags, id, orig_rcpt, recipient, offset, - relay, entry, "%s or %s service failure", + relay, my_dsn, entry, + "%s or %s service failure", var_bounce_service, var_trace_service); } else { status = -1; } + myfree(my_dsn); vstring_free(why); return (status); } diff --git a/postfix/src/global/bounce.h b/postfix/src/global/bounce.h index 6f1a6a552..38cb9a5a4 100644 --- a/postfix/src/global/bounce.h +++ b/postfix/src/global/bounce.h @@ -25,21 +25,25 @@ /* * Client interface. */ -extern int PRINTFLIKE(8, 9) bounce_append(int, const char *, +extern int PRINTFLIKE(9, 10) bounce_append(int, const char *, const char *, const char *, - long, const char *, time_t, + long, const char *, + const char *, time_t, const char *,...); extern int vbounce_append(int, const char *, const char *, const char *, long, - const char *, time_t, const char *, va_list); + const char *, const char *, time_t, + const char *, va_list); extern int bounce_flush(int, const char *, const char *, const char *, const char *); -extern int PRINTFLIKE(11, 12) bounce_one(int, const char *, const char *, +extern int PRINTFLIKE(12, 13) bounce_one(int, const char *, const char *, const char *, const char *, const char *, const char *, - long, const char *, time_t, + long, const char *, + const char *, time_t, const char *,...); extern int vbounce_one(int, const char *, const char *, const char *, - const char *, const char *, const char *, long, - const char *, time_t, const char *, va_list); + const char *, const char *, const char *, long, + const char *, const char *, time_t, + const char *, va_list); /* * Bounce/defer protocol commands. diff --git a/postfix/src/global/cleanup_strerror.c b/postfix/src/global/cleanup_strerror.c index 489093ed9..0910102b0 100644 --- a/postfix/src/global/cleanup_strerror.c +++ b/postfix/src/global/cleanup_strerror.c @@ -6,13 +6,29 @@ /* SYNOPSIS /* #include /* +/* typedef struct { +/* .in +4 +/* const unsigned status; /* cleanup status */ +/* const int smtp; /* RFC 821 */ +/* const char *dsn; /* RFC 1893 */ +/* const char *text; /* free text */ +/* .in -4 +/* } CLEANUP_STAT_DETAIL; +/* /* const char *cleanup_strerror(code) /* int code; +/* +/* CLEANUP_STAT_DETAIL *cleanup_stat_detail(code) +/* int code; /* DESCRIPTION /* cleanup_strerror() maps a status code returned by the \fIcleanup\fR /* service to printable string. -/* The result is for read purposes only. Unknown status codes share -/* a common result buffer. +/* The result is for read purposes only. +/* +/* cleanup_stat_detail() returns a pointer to structure with +/* assorted information. +/* DIAGNOSTICS: +/* Panic: unknown status. /* LICENSE /* .ad /* .fi @@ -31,47 +47,59 @@ /* Utility library. */ #include +#include /* Global library. */ -#include "cleanup_user.h" +#include /* * Mapping from status code to printable string. One message may suffer from * multiple errors, to it is important to list the most severe errors first, - * or to list the cause (header overflow) before the effect (no recipients), * because cleanup_strerror() can report only one error. */ -struct cleanup_stat_map { - unsigned status; - const char *text; +static CLEANUP_STAT_DETAIL cleanup_stat_map[] = { + CLEANUP_STAT_PROXY, 451, "4.3.0", "queue file write error", + CLEANUP_STAT_BAD, 451, "4.3.0", "internal protocol error", + CLEANUP_STAT_RCPT, 550, "5.1.0", "no recipients specified", + CLEANUP_STAT_HOPS, 554, "5.4.0", "too many hops", + CLEANUP_STAT_SIZE, 552, "5.3.4", "message file too big", + CLEANUP_STAT_CONT, 550, "5.7.1", "message content rejected", + CLEANUP_STAT_WRITE, 451, "4.3.0", "queue file write error", }; -static struct cleanup_stat_map cleanup_stat_map[] = { - CLEANUP_STAT_BAD, "Internal protocol error", - CLEANUP_STAT_RCPT, "No recipients specified", - CLEANUP_STAT_HOPS, "Too many hops", - CLEANUP_STAT_SIZE, "Message file too big", - CLEANUP_STAT_CONT, "Message content rejected", - CLEANUP_STAT_WRITE, "Error writing message file", +static CLEANUP_STAT_DETAIL cleanup_stat_success = { + CLEANUP_STAT_OK, 250, "2.0.0", "Success", }; /* cleanup_strerror - map status code to printable string */ const char *cleanup_strerror(unsigned status) { - static VSTRING *unknown; unsigned i; - if (status == 0) + if (status == CLEANUP_STAT_OK) return ("Success"); for (i = 0; i < sizeof(cleanup_stat_map) / sizeof(cleanup_stat_map[0]); i++) if (cleanup_stat_map[i].status & status) return (cleanup_stat_map[i].text); - if (unknown == 0) - unknown = vstring_alloc(20); - vstring_sprintf(unknown, "Unknown status %u", status); - return (vstring_str(unknown)); + msg_panic("cleanup_strerror: unknown status %u", status); +} + +/* cleanup_stat_detail - map status code to table entry with assorted data */ + +CLEANUP_STAT_DETAIL *cleanup_stat_detail(unsigned status) +{ + unsigned i; + + if (status == CLEANUP_STAT_OK) + return (&cleanup_stat_success); + + for (i = 0; i < sizeof(cleanup_stat_map) / sizeof(cleanup_stat_map[0]); i++) + if (cleanup_stat_map[i].status & status) + return (cleanup_stat_map + i); + + msg_panic("cleanup_stat_detail: unknown status %u", status); } diff --git a/postfix/src/global/cleanup_user.h b/postfix/src/global/cleanup_user.h index 8a398c7a8..d45efcc09 100644 --- a/postfix/src/global/cleanup_user.h +++ b/postfix/src/global/cleanup_user.h @@ -65,7 +65,18 @@ #define CLEANUP_STAT_MASK_INCOMPLETE \ (CLEANUP_STAT_BAD | CLEANUP_STAT_WRITE | CLEANUP_STAT_SIZE) + /* + * Mapping from status code to DSN detail and free text. + */ +typedef struct { + const unsigned status; /* CLEANUP_STAT_MUMBLE */ + const int smtp; /* RFC 821 */ + const char *dsn; /* RFC 1893 */ + const char *text; /* free text */ +} CLEANUP_STAT_DETAIL; + extern const char *cleanup_strerror(unsigned); +extern CLEANUP_STAT_DETAIL *cleanup_stat_detail(unsigned); extern const char *cleanup_strflags(unsigned); /* LICENSE diff --git a/postfix/src/global/defer.c b/postfix/src/global/defer.c index f710d20b2..d4f42cb73 100644 --- a/postfix/src/global/defer.c +++ b/postfix/src/global/defer.c @@ -7,24 +7,26 @@ /* #include /* /* int defer_append(flags, id, orig_rcpt, recipient, offset, relay, -/* entry, format, ...) +/* dsn, entry, format, ...) /* int flags; /* const char *id; /* const char *orig_rcpt; /* const char *recipient; /* long offset; /* const char *relay; +/* const char *dsn; /* time_t entry; /* const char *format; /* /* int vdefer_append(flags, id, orig_rcpt, recipient, offset, relay, -/* entry, format, ap) +/* dsn, entry, format, ap) /* int flags; /* const char *id; /* const char *orig_rcpt; /* const char *recipient; /* long offset; /* const char *relay; +/* const char *dsn; /* time_t entry; /* const char *format; /* va_list ap; @@ -104,6 +106,8 @@ /* Host we could not talk to. /* .IP entry /* Message arrival time. +/* .IP dsn +/* X.YY.ZZ Error detail as specified in RFC 1893. /* .IP format /* The reason for non-delivery. /* .IP ap @@ -154,6 +158,7 @@ #include #include #include +#include #define STR(x) vstring_str(x) @@ -161,14 +166,15 @@ int defer_append(int flags, const char *id, const char *orig_rcpt, const char *recipient, long offset, const char *relay, - time_t entry, const char *fmt,...) + const char *dsn, time_t entry, + const char *fmt,...) { va_list ap; int status; va_start(ap, fmt); status = vdefer_append(flags, id, orig_rcpt, recipient, - offset, relay, entry, fmt, ap); + offset, relay, dsn, entry, fmt, ap); va_end(ap); return (status); } @@ -177,17 +183,26 @@ int defer_append(int flags, const char *id, const char *orig_rcpt, int vdefer_append(int flags, const char *id, const char *orig_rcpt, const char *recipient, long offset, const char *relay, - time_t entry, const char *fmt, va_list ap) + const char *dsn, time_t entry, + const char *fmt, va_list ap) { const char *rcpt_domain; int status; + /* + * Sanity check. + */ + if (*dsn != '4' || !dsn_valid(dsn)) { + msg_warn("defer_append: ignoring dsn code \"%s\"", dsn); + dsn = "4.0.0"; + } + /* * MTA-requested address verification information is stored in the verify * service database. */ if (flags & DEL_REQ_FLAG_VERIFY) { - status = vverify_append(id, orig_rcpt, recipient, relay, entry, + status = vverify_append(id, orig_rcpt, recipient, relay, dsn, entry, "undeliverable", DEL_RCPT_STAT_DEFER, fmt, ap); return (status); } @@ -198,7 +213,7 @@ int vdefer_append(int flags, const char *id, const char *orig_rcpt, */ if (flags & DEL_REQ_FLAG_EXPAND) { status = vtrace_append(flags, id, orig_rcpt, recipient, relay, - entry, "4.0.0", "undeliverable", fmt, ap); + dsn, entry, "undeliverable", fmt, ap); return (status); } @@ -219,12 +234,12 @@ int vdefer_append(int flags, const char *id, const char *orig_rcpt, ATTR_TYPE_STR, MAIL_ATTR_ORCPT, orig_rcpt, ATTR_TYPE_STR, MAIL_ATTR_RECIP, recipient, ATTR_TYPE_LONG, MAIL_ATTR_OFFSET, offset, - ATTR_TYPE_STR, MAIL_ATTR_STATUS, "4.0.0", + ATTR_TYPE_STR, MAIL_ATTR_STATUS, dsn, ATTR_TYPE_STR, MAIL_ATTR_ACTION, "delayed", ATTR_TYPE_STR, MAIL_ATTR_WHY, vstring_str(why), ATTR_TYPE_END) != 0) msg_warn("%s: %s service failure", id, var_defer_service); - log_adhoc(id, orig_rcpt, recipient, relay, entry, "deferred", + log_adhoc(id, orig_rcpt, recipient, relay, dsn, entry, "deferred", "%s", vstring_str(why)); /* @@ -232,7 +247,7 @@ int vdefer_append(int flags, const char *id, const char *orig_rcpt, */ if (flags & DEL_REQ_FLAG_RECORD) if (trace_append(flags, id, orig_rcpt, recipient, relay, - entry, "4.0.0", "deferred", + dsn, entry, "deferred", "%s", vstring_str(why)) != 0) msg_warn("%s: %s service failure", id, var_trace_service); diff --git a/postfix/src/global/defer.h b/postfix/src/global/defer.h index 9e39ce2f4..6680f3217 100644 --- a/postfix/src/global/defer.h +++ b/postfix/src/global/defer.h @@ -26,12 +26,14 @@ /* * External interface. */ -extern int PRINTFLIKE(8, 9) defer_append(int, const char *, +extern int PRINTFLIKE(9, 10) defer_append(int, const char *, const char *, const char *, - long, const char *, time_t, + long, const char *, + const char *, time_t, const char *,...); extern int vdefer_append(int, const char *, const char *, const char *, long, - const char *, time_t, const char *, va_list); + const char *, const char *, time_t, + const char *, va_list); extern int defer_flush(int, const char *, const char *, const char *, const char *); extern int defer_warn(int, const char *, const char *, const char *); diff --git a/postfix/src/global/deliver_request.c b/postfix/src/global/deliver_request.c index f8a1fc7f8..26c18ecf2 100644 --- a/postfix/src/global/deliver_request.c +++ b/postfix/src/global/deliver_request.c @@ -64,7 +64,8 @@ /* The \fIhop_status\fR structure member must be updated /* by the caller when all delivery to the destination in /* \fInexthop\fR should be deferred. The value of the -/* \fIhop_status\fR member is the reason; it is passed +/* \fIhop_status\fR member is the reason, with optional +/* RFC 1893-style detail at the beginning; it is passed /* to myfree(). /* /* deliver_request_done() reports the delivery status back to the diff --git a/postfix/src/global/dsn_util.c b/postfix/src/global/dsn_util.c new file mode 100644 index 000000000..35bec1d61 --- /dev/null +++ b/postfix/src/global/dsn_util.c @@ -0,0 +1,240 @@ +/*++ +/* NAME +/* dsn_util 3 +/* SUMMARY +/* DSN support routines +/* SYNOPSIS +/* #include +/* +/* typedef struct { +/* .in +4 +/* char dsn[...]; /* RFC 1893 */ +/* const char *text; /* Free text */ +/* .in -4 +/* } DSN_SPLIT; +/* +/* DSN_SPLIT *dsn_split(dp, def_dsn, text) +/* DSN_SPLIT *dp; +/* const char *def_dsn; +/* const char *text; +/* +/* char *dsn_prepend(def_dsn, text) +/* const char *def_dsn; +/* const char *text; +/* +/* typedef struct { +/* .in +4 +/* char dsn[...]; /* RFC 1893 */ +/* VSTRING *text; /* Free text */ +/* .in -4 +/* } DSN_VSTRING; +/* +/* DSN_VSTRING *dsn_vstring_alloc(len) +/* int len; +/* +/* DSN_VSTRING *dsn_vstring_update(dv, dsn, format, ...) +/* DSN_VSTRING *dv; +/* const char *dsn; +/* const char *format; +/* +/* void dsn_vstring_free(dv) +/* DSN_VSTRING *dv; +/* +/* size_t dsn_valid(text) +/* const char *text; +/* DESCRIPTION +/* The functions in this module manipulate pairs of RFC 1893 +/* X.X.X detail codes and descriptive free text. +/* +/* dsn_split() splits text into an RFC 1893 detail code and +/* descriptive free text. When the text does not start with +/* a detail code, the specified default detail code is used +/* instead. Whitespace before the optional detail code or +/* text is skipped. dsn_split() returns a copy of the RFC +/* 1893 detail code, and returns a pointer to (not copy of) +/* the remainder of the text. The result value is the first +/* argument. +/* +/* dsn_prepend() prepends the specified default RFC 1893 detail +/* code to the specified text if no detail code is present in +/* the text. This function produces the same result as calling +/* concatenate() with the results from dsn_split(). The result +/* should be passed to myfree(). Whitespace before the optional +/* detail code or text is skipped. +/* +/* dsn_vstring_alloc() creates initialized storage for an RFC +/* 1893 detail code and descriptive free text. +/* +/* dsn_vstring_update() updates the detail code, the descriptive +/* free text, or both. Specify a null pointer (or zero-length +/* string) for information that should not be updated. +/* +/* dsn_vstring_free() recycles the storage that was allocated +/* by dsn_vstring_alloc() and dsn_vstring_update(). +/* +/* dsn_valid() returns the length of the RFC 1893 detail code +/* at the beginning of text, or zero. It does not skip initial +/* whitespace. +/* +/* Arguments: +/* .IP def_dsn +/* Null-terminated default RFC 1893 detail code that will be +/* used when the free text does not start with one. +/* .IP dp +/* Pointer to storage for copy of DSN detail code, and for +/* pointer to free text. +/* .IP dsn +/* Null-terminated RFC 1893 detail code. +/* .IP text +/* Null-terminated free text. +/* .IP vp +/* VSTRING buffer, or null pointer. +/* SEE ALSO +/* msg(3) diagnostics interface +/* DIAGNOSTICS +/* Panic: invalid default DSN code; invalid dsn_vstring_update() +/* DSN argument. +/* LICENSE +/* .ad +/* .fi +/* The Secure Mailer license must be distributed with this software. +/* AUTHOR(S) +/* Wietse Venema +/* IBM T.J. Watson Research +/* P.O. Box 704 +/* Yorktown Heights, NY 10598, USA +/*--*/ + +/* System library. */ + +#include +#include +#include +#include + +/* Utility library. */ + +#include +#include +#include +#include + +/* Global library. */ + +#include + +/* dsn_valid - check RFC 1893 enhanced status code, return length or zero */ + +size_t dsn_valid(const char *text) +{ + const unsigned char *cp = (unsigned char *) text; + int len; + + /* First portion is one digit followed by dot. */ + if ((cp[0] != '2' && cp[0] != '4' && cp[0] != '5') || cp[1] != '.') + return (0); + + /* Second portion is 1-3 digits followed by dot. */ + cp += 2; + if ((len = strspn((char *) cp, "0123456789")) < 1 || len > DSN_DIGS2 + || cp[len] != '.') + return (0); + + /* Last portion is 1-3 digits followed by end-of-string or whitespace. */ + cp += len + 1; + if ((len = strspn((char *) cp, "0123456789")) < 1 || len > DSN_DIGS3 + || (cp[len] != 0 && !ISSPACE(cp[len]))) + return (0); + + return (((char *) cp - text) + len); +} + +/* dsn_split - split text into DSN and text */ + +DSN_SPLIT *dsn_split(DSN_SPLIT *dp, const char *def_dsn, const char *text) +{ + const char *cp = text; + size_t len; + + /* + * Look for an optional RFC 1893 enhanced status code. + * + * XXX If we want to enforce that the first digit of the status code in the + * text matches the default status code, then pipe_command() needs to be + * changed. It currently auto-detects the reply code without knowing in + * advance if the result will start with '4' or '5'. + */ + while (ISSPACE(*cp)) + cp++; + if ((len = dsn_valid(cp)) > 0) { + if (len >= sizeof(dp->dsn)) + msg_panic("dsn_split: bad DSN code length %d", len); + DSN_BUF_UPDATE(dp->dsn, cp, len); + cp += len + 1; + } else { + len = strlen(def_dsn); + if (len >= sizeof(dp->dsn)) + msg_panic("dsn_split: bad default DSN code length %d", len); + DSN_BUF_UPDATE(dp->dsn, def_dsn, len); + } + + /* + * The remainder is free text. + */ + while (ISSPACE(*cp)) + cp++; + dp->text = cp; + + return (dp); +} + +/* dsn_prepend - prepend optional detail to text, result on heap */ + +char *dsn_prepend(const char *def_dsn, const char *text) +{ + DSN_SPLIT dp; + + dsn_split(&dp, def_dsn, text); + return (concatenate(dp.dsn, " ", dp.text, (char *) 0)); +} + +/* dsn_vstring_alloc - create DSN+string storage */ + +DSN_VSTRING *dsn_vstring_alloc(int len) +{ + DSN_VSTRING *dv; + + dv = (DSN_VSTRING *) mymalloc(sizeof(*dv)); + dv->dsn[0] = 0; + dv->vstring = vstring_alloc(len); + return(dv); +} + +/* dsn_vstring_free - destroy DSN+string storage */ + +void dsn_vstring_free(DSN_VSTRING *dv) +{ + vstring_free(dv->vstring); + myfree((char *) dv); +} + +/* dsn_vstring_update - update DSN and/or text */ + +DSN_VSTRING *dsn_vstring_update(DSN_VSTRING *dv, const char *dsn, + const char *format,...) +{ + va_list ap; + size_t len; + + if (dsn && *dsn) { + if ((len = dsn_valid(dsn)) == 0 || len >= sizeof(dv->dsn)) + msg_panic("dsn_vstring_update: bad dsn: \"%s\"", dsn); + DSN_BUF_UPDATE(dv->dsn, dsn, len); + } + if (format && *format) { + va_start(ap, format); + vstring_vsprintf(dv->vstring, format, ap); + va_end(ap); + } + return (dv); +} diff --git a/postfix/src/global/dsn_util.h b/postfix/src/global/dsn_util.h new file mode 100644 index 000000000..a9323533e --- /dev/null +++ b/postfix/src/global/dsn_util.h @@ -0,0 +1,72 @@ +#ifndef _DSN_SPLIT_H_INCLUDED_ +#define _DSN_SPLIT_H_INCLUDED_ + +/*++ +/* NAME +/* dsn_util 3 +/* SUMMARY +/* Extract DSN detail from text +/* SYNOPSIS +/* #include "dsn_split.h" +/* DESCRIPTION +/* .nf + + /* + * Utility library. + */ +#include + + /* + * Detail format is digit "." digit{1,3} "." digit{1,3}. + */ +#define DSN_DIGS1 1 /* leading digits */ +#define DSN_DIGS2 3 /* middle digits */ +#define DSN_DIGS3 3 /* trailing digits */ +#define DSN_LEN (DSN_DIGS1 + 1 + DSN_DIGS2 + 1 + DSN_DIGS3) +#define DSN_BUFSIZE (DSN_LEN + 1) + + /* + * Split flat text into detail code and free text. + */ +typedef struct { + char dsn[DSN_BUFSIZE]; /* RFC 1893 X.XXX.XXX detail */ + const char *text; /* free text */ +} DSN_SPLIT; + +#define DSN_BUF_UPDATE(buf, text, len) do { \ + strncpy((buf), (text), (len)); \ + (buf)[len] = 0; \ + } while (0) + +extern DSN_SPLIT *dsn_split(DSN_SPLIT *, const char *, const char *); +extern size_t dsn_valid(const char *); + + /* + * Create flat text from detail code and free text. + */ +extern char *dsn_prepend(const char *, const char *); + + /* + * Easy to update pair of detail code and free text. + */ +typedef struct { + char dsn[DSN_LEN + 1]; /* RFC 1893 X.XXX.XXX detail */ + VSTRING *vstring; /* free text */ +} DSN_VSTRING; + +extern DSN_VSTRING *dsn_vstring_alloc(int); +extern DSN_VSTRING *dsn_vstring_update(DSN_VSTRING *, const char *, const char *,...); +extern void dsn_vstring_free(DSN_VSTRING *); + +/* LICENSE +/* .ad +/* .fi +/* The Secure Mailer license must be distributed with this software. +/* AUTHOR(S) +/* Wietse Venema +/* IBM T.J. Watson Research +/* P.O. Box 704 +/* Yorktown Heights, NY 10598, USA +/*--*/ + +#endif diff --git a/postfix/src/global/log_adhoc.c b/postfix/src/global/log_adhoc.c index 03a3539f0..3f05d474e 100644 --- a/postfix/src/global/log_adhoc.c +++ b/postfix/src/global/log_adhoc.c @@ -7,21 +7,23 @@ /* #include /* /* void log_adhoc(id, orig_rcpt, recipient, relay, -/* entry, status, format, ...) +/* detail, entry, status, format, ...) /* const char *id; /* const char *orig_rcpt; /* const char *recipient; /* const char *relay; +/* const char *detail; /* time_t entry; /* const char *status; /* const char *format; /* /* void vlog_adhoc(id, orig_rcpt, recipient, relay, -/* entry, status, format, ap) +/* detail, entry, status, format, ap) /* const char *id; /* const char *orig_rcpt; /* const char *recipient; /* const char *relay; +/* const char *detail; /* time_t entry; /* const char *status; /* const char *format; @@ -50,6 +52,8 @@ /* Host we could (not) talk to. /* .IP status /* bounced, deferred, sent, and so on. +/* .IP detail +/* X.YY.ZZ Error detail as specified in RFC 1893. /* .IP entry /* Message arrival time. /* .IP format @@ -94,13 +98,13 @@ void log_adhoc(const char *id, const char *orig_rcpt, const char *recipient, const char *relay, - time_t entry, const char *status, - const char *fmt,...) + const char *detail, time_t entry, + const char *status, const char *fmt,...) { va_list ap; va_start(ap, fmt); - vlog_adhoc(id, orig_rcpt, recipient, relay, entry, status, fmt, ap); + vlog_adhoc(id, orig_rcpt, recipient, relay, detail, entry, status, fmt, ap); va_end(ap); } @@ -108,7 +112,7 @@ void log_adhoc(const char *id, const char *orig_rcpt, void vlog_adhoc(const char *id, const char *orig_rcpt, const char *recipient, const char *relay, - time_t entry, const char *status, + const char *detail, time_t entry, const char *status, const char *fmt, va_list ap) { VSTRING *why = vstring_alloc(100); @@ -116,10 +120,10 @@ void vlog_adhoc(const char *id, const char *orig_rcpt, vstring_vsprintf(why, fmt, ap); if (orig_rcpt && *orig_rcpt && strcasecmp(recipient, orig_rcpt) != 0) - msg_info("%s: to=<%s>, orig_to=<%s>, relay=%s, delay=%d, status=%s (%s)", - id, recipient, orig_rcpt, relay, delay, status, vstring_str(why)); + msg_info("%s: to=<%s>, orig_to=<%s>, relay=%s, delay=%d, dsn=%s status=%s (%s)", + id, recipient, orig_rcpt, relay, delay, detail, status, vstring_str(why)); else - msg_info("%s: to=<%s>, relay=%s, delay=%d, status=%s (%s)", - id, recipient, relay, delay, status, vstring_str(why)); + msg_info("%s: to=<%s>, relay=%s, delay=%d, dsn=%s status=%s (%s)", + id, recipient, relay, delay, detail, status, vstring_str(why)); vstring_free(why); } diff --git a/postfix/src/global/log_adhoc.h b/postfix/src/global/log_adhoc.h index 7e3108cfb..561edd035 100644 --- a/postfix/src/global/log_adhoc.h +++ b/postfix/src/global/log_adhoc.h @@ -20,13 +20,13 @@ /* * Client interface. */ -extern void PRINTFLIKE(7, 8) log_adhoc(const char *, const char *, +extern void PRINTFLIKE(8, 9) log_adhoc(const char *, const char *, const char *, const char *, - time_t, const char *, - const char *,...); + const char *, time_t, + const char *, const char *,...); extern void vlog_adhoc(const char *, const char *, const char *, const char *, - time_t, const char *, + const char *, time_t, const char *, const char *, va_list); /* LICENSE diff --git a/postfix/src/global/mail_copy.c b/postfix/src/global/mail_copy.c index 07932828c..90423eca3 100644 --- a/postfix/src/global/mail_copy.c +++ b/postfix/src/global/mail_copy.c @@ -14,7 +14,7 @@ /* VSTREAM *dst; /* int flags; /* const char *eol; -/* VSTRING *why; +/* DSN_VSTRING *why; /* DESCRIPTION /* mail_copy() copies a mail message from record stream to stream-lf /* stream, and attempts to detect all possible I/O errors. @@ -62,7 +62,8 @@ /* .IP eol /* Record delimiter, for example, LF or CF LF. /* .IP why -/* A null pointer, or storage for the reason of failure. +/* A null pointer, or storage for the reason of failure in +/* the form of a DSN detail code plus free text. /* DIAGNOSTICS /* A non-zero result means the operation failed. Warnings: corrupt /* message file. A corrupt message is marked as corrupt. @@ -114,6 +115,8 @@ #include "mark_corrupt.h" #include "mail_params.h" #include "mail_copy.h" +#include "mbox_open.h" +#include "dsn_util.h" /* mail_copy - copy message with extreme prejudice */ @@ -121,7 +124,7 @@ int mail_copy(const char *sender, const char *orig_rcpt, const char *delivered, VSTREAM *src, VSTREAM *dst, - int flags, const char *eol, VSTRING *why) + int flags, const char *eol, DSN_VSTRING *why) { char *myname = "mail_copy"; VSTRING *buf; @@ -255,10 +258,23 @@ int mail_copy(const char *sender, ftruncate(vstream_fileno(dst), orig_length); #endif write_error |= vstream_fclose(dst); + + /* + * Return the optional verbose error description. + */ +#define TRY_AGAIN_ERROR(errno) \ + (errno == EAGAIN || errno == ESTALE) + if (why && read_error) - vstring_sprintf(why, "error reading message: %m"); + dsn_vstring_update(why, TRY_AGAIN_ERROR(errno) ? "4.3.0" : "5.3.0", + "error reading message: %m"); if (why && write_error) - vstring_sprintf(why, "error writing message: %m"); + dsn_vstring_update(why, mbox_dsn(errno), "error writing message: %m"); + + /* + * Use flag+errno description when the optional verbose description is + * not desired. + */ return ((corrupt_error ? MAIL_COPY_STAT_CORRUPT : 0) | (read_error ? MAIL_COPY_STAT_READ : 0) | (write_error ? MAIL_COPY_STAT_WRITE : 0)); diff --git a/postfix/src/global/mail_copy.h b/postfix/src/global/mail_copy.h index bd7f1d58f..8aa7e3c62 100644 --- a/postfix/src/global/mail_copy.h +++ b/postfix/src/global/mail_copy.h @@ -17,12 +17,17 @@ #include #include + /* + * Global library. + */ +#include + /* * External interface. */ extern int mail_copy(const char *, const char *, const char *, VSTREAM *, VSTREAM *, - int, const char *, VSTRING *); + int, const char *, DSN_VSTRING *); #define MAIL_COPY_QUOTE (1<<0) /* prepend > to From_ */ #define MAIL_COPY_TOFILE (1<<1) /* fsync, ftruncate() */ diff --git a/postfix/src/global/mail_params.h b/postfix/src/global/mail_params.h index ebce57eaa..6a5255cdb 100644 --- a/postfix/src/global/mail_params.h +++ b/postfix/src/global/mail_params.h @@ -1689,7 +1689,7 @@ extern int var_access_map_code; extern char *var_rbl_reply_maps; #define VAR_DEF_RBL_REPLY "default_rbl_reply" -#define DEF_DEF_RBL_REPLY "$rbl_code Service unavailable; $rbl_class [$rbl_what] blocked using $rbl_domain${rbl_reason?; $rbl_reason}" +#define DEF_DEF_RBL_REPLY "$rbl_code 5.7.1 Service unavailable; $rbl_class [$rbl_what] blocked using $rbl_domain${rbl_reason?; $rbl_reason}" extern char *var_def_rbl_reply; #define REJECT_MAPS_RBL "reject_maps_rbl" /* backwards compat */ diff --git a/postfix/src/global/mail_version.h b/postfix/src/global/mail_version.h index bb01bc1cd..f7fd1ccf2 100644 --- a/postfix/src/global/mail_version.h +++ b/postfix/src/global/mail_version.h @@ -20,7 +20,7 @@ * Patches change the patchlevel and the release date. Snapshots change the * release date only. */ -#define MAIL_RELEASE_DATE "20050315" +#define MAIL_RELEASE_DATE "20050327" #define MAIL_VERSION_NUMBER "2.3" #define VAR_MAIL_VERSION "mail_version" diff --git a/postfix/src/global/mbox_open.c b/postfix/src/global/mbox_open.c index d533dd86f..991f49ce9 100644 --- a/postfix/src/global/mbox_open.c +++ b/postfix/src/global/mbox_open.c @@ -8,8 +8,8 @@ /* /* typedef struct { /* .in +4 -/* /* public members... */ -/* VSTREAM *fp; +/* /* public members... */ +/* VSTREAM *fp; /* .in -4 /* } MBOX; /* @@ -21,10 +21,13 @@ /* uid_t user; /* gid_t group; /* int lock_style; -/* VSTRING *why; +/* DSN_VSTRING *why; /* /* void mbox_release(mbox) /* MBOX *mbox; +/* +/* const char *mbox_dsn(err) +/* int err; /* DESCRIPTION /* This module manages access to UNIX mailbox-style files. /* @@ -39,6 +42,9 @@ /* /* mbox_release() releases the named mailbox. It is up to the /* application to close the stream. +/* +/* mbox_dsn() translates an errno value to a mailbox related +/* DSN detail code. /* DIAGNOSTICS /* mbox_open() returns a null pointer in case of problems, and /* sets errno to EAGAIN if someone else has exclusive access. @@ -60,6 +66,10 @@ #include #include +#ifndef EDQUOT +#define EDQUOT EFBIG +#endif + /* Utility library. */ #include @@ -80,13 +90,12 @@ MBOX *mbox_open(const char *path, int flags, int mode, struct stat * st, uid_t chown_uid, gid_t chown_gid, - int lock_style, VSTRING *why) + int lock_style, DSN_VSTRING *why) { struct stat local_statbuf; MBOX *mp; int locked = 0; VSTREAM *fp; - int saved_errno; /* * Open or create the target file. In case of a privileged open, the @@ -103,7 +112,8 @@ MBOX *mbox_open(const char *path, int flags, int mode, struct stat * st, if (st == 0) st = &local_statbuf; if ((fp = safe_open(path, flags | O_NONBLOCK, mode, st, - chown_uid, chown_gid, why)) == 0) { + chown_uid, chown_gid, why->vstring)) == 0) { + dsn_vstring_update(why, mbox_dsn(errno), ""); return (0); } close_on_exec(vstream_fileno(fp), CLOSE_ON_EXEC); @@ -124,15 +134,16 @@ MBOX *mbox_open(const char *path, int flags, int mode, struct stat * st, * an unprivileged user is not supposed to be able to do. */ if (S_ISREG(st->st_mode) && (lock_style & MBOX_DOT_LOCK)) { - if (dot_lockfile(path, why) == 0) { + if (dot_lockfile(path, why->vstring) == 0) { locked |= MBOX_DOT_LOCK; } else if (errno == EEXIST) { - errno = EAGAIN; + dsn_vstring_update(why, mbox_dsn(EAGAIN), ""); vstream_fclose(fp); return (0); } else if (lock_style & MBOX_DOT_LOCK_MAY_FAIL) { - msg_warn("%s", vstring_str(why)); + msg_warn("%s", vstring_str(why->vstring)); } else { + dsn_vstring_update(why, mbox_dsn(errno), ""); vstream_fclose(fp); return (0); } @@ -145,18 +156,17 @@ MBOX *mbox_open(const char *path, int flags, int mode, struct stat * st, * problems. */ #define HUNKY_DORY(lock_mask, myflock_style) ((lock_style & (lock_mask)) == 0 \ - || deliver_flock(vstream_fileno(fp), (myflock_style), why) == 0) + || deliver_flock(vstream_fileno(fp), (myflock_style), why->vstring) == 0) if (S_ISREG(st->st_mode)) { if (HUNKY_DORY(MBOX_FLOCK_LOCK, MYFLOCK_STYLE_FLOCK) && HUNKY_DORY(MBOX_FCNTL_LOCK, MYFLOCK_STYLE_FCNTL)) { locked |= lock_style; } else { - saved_errno = errno; + dsn_vstring_update(why, mbox_dsn(errno), ""); if (locked & MBOX_DOT_LOCK) dot_unlockfile(path); vstream_fclose(fp); - errno = saved_errno; return (0); } } @@ -185,3 +195,20 @@ void mbox_release(MBOX *mp) myfree(mp->path); myfree((char *) mp); } + +/* mbox_dsn - map errno value to mailbox-related DSN detail */ + +const char *mbox_dsn(int err) +{ +#define TRY_AGAIN_ERROR(e) \ + (e == EACCES || e == EAGAIN || e == ESTALE) +#define SYSTEM_FULL_ERROR(e) \ + (e == ENOSPC) +#define MBOX_FULL_ERROR(e) \ + (e == EDQUOT || e == EFBIG) + + return (TRY_AGAIN_ERROR(err) ? "4.2.0" : + SYSTEM_FULL_ERROR(err) ? "4.3.0" : + MBOX_FULL_ERROR(err) ? "5.2.2" : + "5.2.0"); +} diff --git a/postfix/src/global/mbox_open.h b/postfix/src/global/mbox_open.h index 940f04b52..e904cd8c6 100644 --- a/postfix/src/global/mbox_open.h +++ b/postfix/src/global/mbox_open.h @@ -18,6 +18,11 @@ #include #include + /* + * Global library. + */ +#include + /* * External interface. */ @@ -26,8 +31,9 @@ typedef struct { VSTREAM *fp; /* open stream or null */ int locked; /* what locks were set */ } MBOX; -extern MBOX *mbox_open(const char *, int, int, struct stat *, uid_t, gid_t, int, VSTRING *); +extern MBOX *mbox_open(const char *, int, int, struct stat *, uid_t, gid_t, int, DSN_VSTRING *); extern void mbox_release(MBOX *); +extern const char *mbox_dsn(int); /* LICENSE /* .ad diff --git a/postfix/src/global/pipe_command.c b/postfix/src/global/pipe_command.c index e091b6e77..1e2ee88c0 100644 --- a/postfix/src/global/pipe_command.c +++ b/postfix/src/global/pipe_command.c @@ -8,19 +8,26 @@ /* /* int pipe_command(src, why, key, value, ...) /* VSTREAM *src; -/* VSTRING *why; +/* DSN_VSTRING *why; /* int key; /* DESCRIPTION /* pipe_command() runs a command with a message as standard /* input. A limited amount of standard output and standard error /* output is captured for diagnostics purposes. /* +/* If the command invokes exit() with a non-zero status, +/* the delivery status is taken from an RFC 1893-style code +/* at the beginning of command output. If that information is +/* unavailable, the delivery status is taken from the command +/* exit status as per . +/* /* Arguments: /* .IP src /* An open message queue file, positioned at the start of the actual /* message content. /* .IP why -/* Storage for diagnostic information. +/* Storage for diagnostic information in the form of a DSN +/* detail code followed by free text. /* .IP key /* Specifies what value will follow. pipe_command() takes a list /* of (key, value) arguments, terminated by PIPE_CMD_END. The @@ -147,6 +154,7 @@ #include #include #include +#include /* Application-specific. */ @@ -343,7 +351,7 @@ static int pipe_command_wait_or_kill(pid_t pid, WAIT_STATUS_T *statusp, int sig, /* pipe_command - execute command with extreme prejudice */ -int pipe_command(VSTREAM *src, VSTRING *why,...) +int pipe_command(VSTREAM *src, DSN_VSTRING *why,...) { char *myname = "pipe_comand"; va_list ap; @@ -360,6 +368,8 @@ int pipe_command(VSTREAM *src, VSTRING *why,...) struct pipe_args args; char **cpp; ARGV *argv; + DSN_SPLIT dp; + SYS_EXITS_DETAIL *sp; /* * Process the variadic argument list. This also does sanity checks on @@ -413,7 +423,7 @@ int pipe_command(VSTREAM *src, VSTRING *why,...) */ case -1: msg_warn("fork: %m"); - vstring_sprintf(why, "Delivery failed: %m"); + dsn_vstring_update(why, "4.3.0", "Delivery failed: %m"); return (PIPE_STAT_DEFER); /* @@ -506,7 +516,7 @@ int pipe_command(VSTREAM *src, VSTRING *why,...) * stop reading input early, and that should not be considered an * error condition. */ -#define DONT_CARE_WHY ((VSTRING *) 0) +#define DONT_CARE_WHY ((DSN_VSTRING *) 0) write_status = mail_copy(args.sender, args.orig_rcpt, args.delivered, src, @@ -541,9 +551,10 @@ int pipe_command(VSTREAM *src, VSTRING *why,...) args.uid, args.gid) < 0) msg_fatal("wait: %m"); if (pipe_command_timeout) { - vstring_sprintf(why, "Command time limit exceeded: \"%s\"%s%s", - args.command, - log_len ? ". Command output: " : "", log_buf); + dsn_vstring_update(why, "5.3.0", + "Command time limit exceeded: \"%s\"%s%s", + args.command, + log_len ? ". Command output: " : "", log_buf); return (PIPE_STAT_BOUNCE); } @@ -553,33 +564,50 @@ int pipe_command(VSTREAM *src, VSTRING *why,...) */ if (!NORMAL_EXIT_STATUS(wait_status)) { if (WIFSIGNALED(wait_status)) { - vstring_sprintf(why, "Command died with signal %d: \"%s\"%s%s", - WTERMSIG(wait_status), - args.command, + dsn_vstring_update(why, "5.3.0", + "Command died with signal %d: \"%s\"%s%s", + WTERMSIG(wait_status), + args.command, log_len ? ". Command output: " : "", log_buf); - return (PIPE_STAT_DEFER); - } else if (SYS_EXITS_CODE(WEXITSTATUS(wait_status))) { - vstring_sprintf(why, "%s%s%s", - sys_exits_strerror(WEXITSTATUS(wait_status)), + return (PIPE_STAT_BOUNCE); + } + /* Use "D.S.N text" command output. */ + else if (dsn_valid(log_buf) > 0) { + /* XXX Assumes dsn_split() does not require 5.x.x in log_buf */ + dsn_split(&dp, "5.3.0", log_buf); + dsn_vstring_update(why, dp.dsn, "%s", dp.text); + return (dp.dsn[0] == '4' ? + PIPE_STAT_DEFER : PIPE_STAT_BOUNCE); + } + /* Use compatible exit status. */ + else if (SYS_EXITS_CODE(WEXITSTATUS(wait_status))) { + sp = sys_exits_detail(WEXITSTATUS(wait_status)); + dsn_vstring_update(why, sp->dsn, "%s%s", sp->text, log_len ? ". Command output: " : "", log_buf); - return (sys_exits_softerror(WEXITSTATUS(wait_status)) ? + return (sp->dsn[0] == '4' ? PIPE_STAT_DEFER : PIPE_STAT_BOUNCE); - } else { - vstring_sprintf(why, "Command died with status %d: \"%s\"%s%s", - WEXITSTATUS(wait_status), - args.command, + } + + /* No "D.S.N text" and no compatible exit status. */ + else { + dsn_vstring_update(why, "5.3.0", + "Command died with status %d: \"%s\"%s%s", + WEXITSTATUS(wait_status), args.command, log_len ? ". Command output: " : "", log_buf); return (PIPE_STAT_BOUNCE); } - } else if (write_status & MAIL_COPY_STAT_CORRUPT) { + } else if (write_status & + MAIL_COPY_STAT_CORRUPT) { return (PIPE_STAT_CORRUPT); } else if (write_status && write_errno != EPIPE) { errno = write_errno; - vstring_sprintf(why, "Command failed due to %s: %m: \"%s\"", + dsn_vstring_update(why, "5.3.0", + "Command failed due to %s: %m: \"%s\"", (write_status & MAIL_COPY_STAT_READ) ? "delivery read error" : (write_status & MAIL_COPY_STAT_WRITE) ? "delivery write error" : - "some delivery error", args.command); - return (PIPE_STAT_DEFER); + "some delivery error", + args.command); + return (PIPE_STAT_BOUNCE); } else { return (PIPE_STAT_OK); } diff --git a/postfix/src/global/pipe_command.h b/postfix/src/global/pipe_command.h index a500e8440..eade930d9 100644 --- a/postfix/src/global/pipe_command.h +++ b/postfix/src/global/pipe_command.h @@ -21,6 +21,7 @@ * Global library. */ #include +#include /* * Request arguments. @@ -49,7 +50,7 @@ #define PIPE_STAT_BOUNCE 2 /* failed */ #define PIPE_STAT_CORRUPT 3 /* corrupted file */ -extern int pipe_command(VSTREAM *, VSTRING *,...); +extern int pipe_command(VSTREAM *, DSN_VSTRING *,...); /* LICENSE /* .ad diff --git a/postfix/src/global/sent.c b/postfix/src/global/sent.c index 4f845ed78..e3410dda9 100644 --- a/postfix/src/global/sent.c +++ b/postfix/src/global/sent.c @@ -7,24 +7,26 @@ /* #include /* /* int sent(flags, queue_id, orig_rcpt, recipient, offset, relay, -/* entry, format, ...) +/* dsn, entry, format, ...) /* int flags; /* const char *queue_id; /* const char *orig_rcpt; /* const char *recipient; /* long offset; /* const char *relay; +/* const char *dsn; /* time_t entry; /* const char *format; /* /* int vsent(flags, queue_id, orig_rcpt, recipient, offset, relay, -/* entry, format, ap) +/* dsn, entry, format, ap) /* int flags; /* const char *queue_id; /* const char *orig_rcpt; /* const char *recipient; /* long offset; /* const char *relay; +/* const char *dsn; /* time_t entry; /* const char *format; /* va_list ap; @@ -63,6 +65,8 @@ /* Queue file offset of the recipient record. /* .IP relay /* Name of the host we're talking to. +/* .IP dsn +/* X.YY.ZZ Error detail as specified in RFC 1893. /* .IP entry /* Message arrival time. /* .IP format @@ -110,6 +114,7 @@ #include #include #include +#include /* Application-specific. */ @@ -117,14 +122,14 @@ int sent(int flags, const char *id, const char *orig_rcpt, const char *recipient, long offset, const char *relay, - time_t entry, const char *fmt,...) + const char *dsn, time_t entry, const char *fmt,...) { va_list ap; int status; va_start(ap, fmt); status = vsent(flags, id, orig_rcpt, recipient, - offset, relay, entry, fmt, ap); + offset, relay, dsn, entry, fmt, ap); va_end(ap); return (status); } @@ -133,16 +138,25 @@ int sent(int flags, const char *id, const char *orig_rcpt, int vsent(int flags, const char *id, const char *orig_rcpt, const char *recipient, long offset, const char *relay, - time_t entry, const char *fmt, va_list ap) + const char *dsn, time_t entry, + const char *fmt, va_list ap) { int status; + /* + * Sanity check. + */ + if (*dsn != '2' || !dsn_valid(dsn)) { + msg_warn("sent: ignoring dsn code \"%s\"", dsn); + dsn = "2.0.0"; + } + /* * MTA-requested address verification information is stored in the verify * service database. */ if (flags & DEL_REQ_FLAG_VERIFY) { - status = vverify_append(id, orig_rcpt, recipient, relay, entry, + status = vverify_append(id, orig_rcpt, recipient, relay, dsn, entry, "deliverable", DEL_RCPT_STAT_OK, fmt, ap); return (status); } @@ -153,7 +167,7 @@ int vsent(int flags, const char *id, const char *orig_rcpt, */ if (flags & DEL_REQ_FLAG_EXPAND) { status = vtrace_append(flags, id, orig_rcpt, recipient, relay, - entry, "2.0.0", "deliverable", fmt, ap); + dsn, entry, "deliverable", fmt, ap); return (status); } @@ -166,14 +180,15 @@ int vsent(int flags, const char *id, const char *orig_rcpt, vstring_vsprintf(text, fmt, ap); if ((flags & DEL_REQ_FLAG_RECORD) == 0 || trace_append(flags, id, orig_rcpt, recipient, relay, - entry, "2.0.0", "delivered", + dsn, entry, "delivered", "%s", vstring_str(text)) == 0) { - log_adhoc(id, orig_rcpt, recipient, relay, + log_adhoc(id, orig_rcpt, recipient, relay, dsn, entry, "sent", "%s", vstring_str(text)); status = 0; } else { status = defer_append(flags, id, orig_rcpt, recipient, offset, - relay, entry, "%s: %s service failed", + relay, dsn, entry, + "%s: %s service failed", id, var_trace_service); } vstring_free(text); diff --git a/postfix/src/global/sent.h b/postfix/src/global/sent.h index d303449e6..67a3b5280 100644 --- a/postfix/src/global/sent.h +++ b/postfix/src/global/sent.h @@ -27,10 +27,12 @@ */ #define SENT_FLAG_NONE (0) -extern int PRINTFLIKE(8, 9) sent(int, const char *, const char *, const char *, - long, const char *, time_t, const char *,...); +extern int PRINTFLIKE(9, 10) sent(int, const char *, const char *, const char *, + long, const char *, const char *, time_t, + const char *,...); extern int vsent(int, const char *, const char *, const char *, long, - const char *, time_t, const char *, va_list); + const char *, const char *, time_t, + const char *, va_list); /* LICENSE /* .ad diff --git a/postfix/src/global/sys_exits.c b/postfix/src/global/sys_exits.c index ef7eb2ef5..cbb989ea7 100644 --- a/postfix/src/global/sys_exits.c +++ b/postfix/src/global/sys_exits.c @@ -6,17 +6,28 @@ /* SYNOPSIS /* #include /* +/* typedef struct { +/* .in +4 +/* int status; /* exit status */ +/* const char *dsn; /* RFC 1893 */ +/* const char *text; /* free text */ +/* .in -4 +/* } SYS_EXITS_DETAIL; +/* /* int SYS_EXITS_CODE(code) /* int code; /* /* const char *sys_exits_strerror(code) /* int code; /* +/* SYS_EXITS_DETAIL *sys_exits_detail(code) +/* int code; +/* /* int sys_exits_softerror(code) /* int code; /* DESCRIPTION /* This module interprets sendmail-compatible process exit status -/* codes. A default result is returned for other exit codes. +/* codes. /* /* SYS_EXITS_CODE() returns non-zero when the specified code /* is a sendmail-compatible process exit status code. @@ -24,6 +35,10 @@ /* sys_exits_strerror() returns a descriptive text for the /* specified sendmail-compatible status code. /* +/* sys_exits_detail() returns a table entry with assorted +/* information about the specified sendmail-compatible status +/* code. +/* /* sys_exits_softerror() returns non-zero when the specified /* sendmail-compatible status code corresponds to a recoverable error. /* DIAGNOSTICS @@ -53,28 +68,22 @@ /* Application-specific. */ -typedef struct { - int flags; /* non-zero if recoverable */ - int code; /* exit status code */ - const char *text; /* descriptive text */ -} SYS_EXITS_TABLE; - -static SYS_EXITS_TABLE sys_exits_table[] = { - 0, EX_USAGE, "command line usage error", - 0, EX_DATAERR, "data format error", - 0, EX_NOINPUT, "cannot open input", - 0, EX_NOUSER, "user unknown", - 0, EX_NOHOST, "host name unknown", - 0, EX_UNAVAILABLE, "service unavailable", - 0, EX_SOFTWARE, "internal software error", - 1, EX_OSERR, "system resource problem", - 0, EX_OSFILE, "critical OS file missing", - 0, EX_CANTCREAT, "can't create user output file", - 0, EX_IOERR, "input/output error", - 1, EX_TEMPFAIL, "temporary failure", - 0, EX_PROTOCOL, "remote error in protocol", - 0, EX_NOPERM, "permission denied", - 0, EX_CONFIG, "local configuration error", +static SYS_EXITS_DETAIL sys_exits_table[] = { + EX_USAGE, "5.3.0", "command line usage error", + EX_DATAERR, "5.6.0", "data format error", + EX_NOINPUT, "5.3.0", "cannot open input", + EX_NOUSER, "5.1.1", "user unknown", + EX_NOHOST, "5.1.2", "host name unknown", + EX_UNAVAILABLE, "5.3.0", "service unavailable", + EX_SOFTWARE, "5.3.0", "internal software error", + EX_OSERR, "4.3.0", "system resource problem", + EX_OSFILE, "5.3.0", "critical OS file missing", + EX_CANTCREAT, "5.2.0", "can't create user output file", + EX_IOERR, "5.3.0", "input/output error", + EX_TEMPFAIL, "4.3.0", "temporary failure", + EX_PROTOCOL, "5.5.0", "remote error in protocol", + EX_NOPERM, "5.7.0", "permission denied", + EX_CONFIG, "5.3.5", "local configuration error", }; /* sys_exits_strerror - map exit status to error string */ @@ -89,6 +98,18 @@ const char *sys_exits_strerror(int code) return (sys_exits_table[code - EX__BASE].text); } +/* sys_exits_detail - map exit status info table entry */ + +SYS_EXITS_DETAIL *sys_exits_detail(int code) +{ + char *myname = "sys_exits_detail"; + + if (!SYS_EXITS_CODE(code)) + msg_panic("%s: bad code: %d", myname, code); + + return (sys_exits_table + code - EX__BASE); +} + /* sys_exits_softerror - determine if error is transient */ int sys_exits_softerror(int code) @@ -98,5 +119,5 @@ int sys_exits_softerror(int code) if (!SYS_EXITS_CODE(code)) msg_panic("%s: bad code: %d", myname, code); - return (sys_exits_table[code - EX__BASE].flags); + return (sys_exits_table[code - EX__BASE].dsn[0] == '4'); } diff --git a/postfix/src/global/sys_exits.h b/postfix/src/global/sys_exits.h index 4b09cb3bb..ee3b8ba32 100644 --- a/postfix/src/global/sys_exits.h +++ b/postfix/src/global/sys_exits.h @@ -14,7 +14,14 @@ /* * External interface. */ +typedef struct { + const int status; /* exit status code */ + const char *dsn; /* DSN detail */ + const char *text; /* descriptive text */ +} SYS_EXITS_DETAIL; + extern const char *sys_exits_strerror(int); +extern SYS_EXITS_DETAIL *sys_exits_detail(int); extern int sys_exits_softerror(int); #define SYS_EXITS_CODE(n) ((n) >= EX__BASE && (n) <= EX__MAX) diff --git a/postfix/src/global/trace.c b/postfix/src/global/trace.c index cd9710c65..9f2e0df18 100644 --- a/postfix/src/global/trace.c +++ b/postfix/src/global/trace.c @@ -7,27 +7,27 @@ /* #include /* /* int trace_append(flags, queue_id, orig_rcpt, recipient, relay, -/* entry, dsn_code, dsn_action, format, ...) +/* dsn, entry, action, format, ...) /* int flags; /* const char *queue_id; /* const char *orig_rcpt; /* const char *recipient; /* const char *relay; +/* const char *dsn; /* time_t entry; -/* const char *dsn_code; -/* const char *dsn_action; +/* const char *action; /* const char *format; /* /* int vtrace_append(flags, queue_id, orig_rcpt, recipient, relay, -/* entry, dsn_code, dsn_action, format, ap) +/* dsn, entry, action, format, ap) /* int flags; /* const char *queue_id; /* const char *orig_rcpt; /* const char *recipient; /* const char *relay; +/* const char *dsn; /* time_t entry; -/* const char *dsn_code; -/* const char *dsn_action; +/* const char *action; /* const char *format; /* va_list ap; /* @@ -69,9 +69,9 @@ /* The host we sent the mail to. /* .IP entry /* Message arrival time. -/* .IP dsn_code -/* three-digit dot-separated code. -/* .IP dsn_action +/* .IP dsn +/* X.YY.ZZ Error detail as specified in RFC 1893. +/* .IP action /* "deliverable", "undeliverable", and so on. /* .IP format /* Optional additional information. @@ -123,8 +123,8 @@ int trace_append(int flags, const char *queue_id, const char *orig_rcpt, const char *recipient, - const char *relay, time_t entry, - const char *dsn_code, const char *dsn_action, + const char *relay, const char *dsn, + time_t entry, const char *action, const char *fmt,...) { va_list ap; @@ -132,7 +132,7 @@ int trace_append(int flags, const char *queue_id, va_start(ap, fmt); req_stat = vtrace_append(flags, queue_id, orig_rcpt, recipient, - relay, entry, dsn_code, dsn_action, fmt, ap); + relay, dsn, entry, action, fmt, ap); va_end(ap); return (req_stat); } @@ -141,13 +141,18 @@ int trace_append(int flags, const char *queue_id, int vtrace_append(int flags, const char *queue_id, const char *orig_rcpt, const char *recipient, - const char *relay, time_t entry, - const char *dsn_code, const char *dsn_action, + const char *relay, const char *dsn, + time_t entry, const char *action, const char *fmt, va_list ap) { VSTRING *why = vstring_alloc(100); int req_stat; + /* + * XXX No DSN check. This routine is called from bounce/defer/sent, which + * already know what the DSN initial digit should look like. + */ + /* * User-requested address verification or verbose delivery. Mail the * report to the requesting user. @@ -164,16 +169,16 @@ int vtrace_append(int flags, const char *queue_id, ATTR_TYPE_STR, MAIL_ATTR_ORCPT, orig_rcpt, ATTR_TYPE_STR, MAIL_ATTR_RECIP, recipient, ATTR_TYPE_LONG, MAIL_ATTR_OFFSET, (long) 0, - ATTR_TYPE_STR, MAIL_ATTR_STATUS, dsn_code, - ATTR_TYPE_STR, MAIL_ATTR_ACTION, dsn_action, + ATTR_TYPE_STR, MAIL_ATTR_STATUS, dsn, + ATTR_TYPE_STR, MAIL_ATTR_ACTION, action, ATTR_TYPE_STR, MAIL_ATTR_WHY, vstring_str(why), ATTR_TYPE_END) != 0) { msg_warn("%s: %s service failure", queue_id, var_trace_service); req_stat = -1; } else { if (flags & DEL_REQ_FLAG_EXPAND) - log_adhoc(queue_id, orig_rcpt, recipient, relay, - entry, dsn_action, "%s", vstring_str(why)); + log_adhoc(queue_id, orig_rcpt, recipient, relay, dsn, + entry, action, "%s", vstring_str(why)); req_stat = 0; } vstring_free(why); diff --git a/postfix/src/global/trace.h b/postfix/src/global/trace.h index b024c3209..1afab0993 100644 --- a/postfix/src/global/trace.h +++ b/postfix/src/global/trace.h @@ -27,13 +27,13 @@ */ extern int PRINTFLIKE(9, 10) trace_append(int, const char *, const char *, const char *, - const char *, time_t, const char *, const char *, + time_t, const char *, const char *,...); extern int vtrace_append(int, const char *, const char *, const char *, - const char *, time_t, const char *, const char *, + time_t, const char *, const char *, va_list); extern int trace_flush(int, const char *, const char *, const char *, const char *); diff --git a/postfix/src/global/verify.c b/postfix/src/global/verify.c index 623013be5..a6ceed1bf 100644 --- a/postfix/src/global/verify.c +++ b/postfix/src/global/verify.c @@ -7,25 +7,27 @@ /* #include /* /* int verify_append(queue_id, orig_rcpt, recipient, -/* relay, entry, status, +/* relay, dsn, entry, status, /* recipient_status, format, ...) /* const char *queue_id; /* const char *orig_rcpt; /* const char *recipient; /* const char *relay; +/* const char *dsn; /* time_t entry; /* const char *status; /* int recipient_status; /* const char *format; /* /* int vverify_append(queue_id, orig_rcpt, recipient, -/* relay, entry, status, +/* relay, dsn, entry, status, /* recipient_status, format, ap) /* int recipient_status; /* const char *queue_id; /* const char *orig_rcpt; /* const char *recipient; /* const char *relay; +/* const char *dsn; /* time_t entry; /* const char *status; /* int recipient_status; @@ -51,6 +53,8 @@ /* The recipient address. /* .IP relay /* Name of the host we're talking to. +/* .IP dsn +/* X.YY.ZZ Error detail as specified in RFC 1893. /* .IP entry /* Message arrival time. /* .IP status @@ -113,16 +117,17 @@ /* verify_append - update address verification database */ int verify_append(const char *queue_id, const char *orig_rcpt, - const char *recipient, const char *relay, - time_t entry, const char *status, - int rcpt_stat, const char *fmt,...) + const char *recipient, const char *relay, + const char *dsn, time_t entry, + const char *status, int rcpt_stat, + const char *fmt,...) { va_list ap; int req_stat; va_start(ap, fmt); req_stat = vverify_append(queue_id, orig_rcpt, recipient, relay, - entry, status, rcpt_stat, fmt, ap); + dsn, entry, status, rcpt_stat, fmt, ap); va_end(ap); return (req_stat); } @@ -130,17 +135,26 @@ int verify_append(const char *queue_id, const char *orig_rcpt, /* vverify_append - update address verification database */ int vverify_append(const char *queue_id, const char *orig_rcpt, - const char *recipient, const char *relay, - time_t entry, const char *status, - int rcpt_stat, const char *fmt, va_list ap) + const char *recipient, const char *relay, + const char *dsn, time_t entry, + const char *status, int rcpt_stat, + const char *fmt, va_list ap) { VSTRING *text = vstring_alloc(10); int req_stat; /* * Impedance adaptor between bounce/defer/sent and verify_clnt. + * + * XXX No DSN check; this routine is called from bounce/defer/sent, which + * know what the DSN initial digit should look like. + * + * XXX rcpt_stat is competely redundant because of dsn. */ - vstring_vsprintf(text, fmt, ap); +#if 0 + vstring_sprintf(text, "%s ", dsn); +#endif + vstring_vsprintf_append(text, fmt, ap); if (var_verify_neg_cache || rcpt_stat == DEL_RCPT_STAT_OK) { req_stat = verify_clnt_update(orig_rcpt, rcpt_stat, "%s", vstring_str(text)); @@ -152,7 +166,7 @@ int vverify_append(const char *queue_id, const char *orig_rcpt, req_stat = VRFY_STAT_OK; } if (req_stat == VRFY_STAT_OK) { - log_adhoc(queue_id, orig_rcpt, recipient, relay, + log_adhoc(queue_id, orig_rcpt, recipient, relay, dsn, entry, status, "%s", vstring_str(text)); req_stat = 0; } else { diff --git a/postfix/src/global/verify.h b/postfix/src/global/verify.h index 1ecd4daa4..59d69dbbd 100644 --- a/postfix/src/global/verify.h +++ b/postfix/src/global/verify.h @@ -25,14 +25,15 @@ /* * External interface. */ -extern int PRINTFLIKE(8, 9) verify_append(const char *, const char *, +extern int PRINTFLIKE(9, 10) verify_append(const char *, const char *, const char *, const char *, - time_t, const char *, - int, const char *,...); + const char *, time_t, + const char *, int, + const char *,...); extern int vverify_append(const char *, const char *, - const char *, const char *, - time_t, const char *, - int, const char *, va_list); + const char *, const char *, + const char *, time_t, const char *, + int, const char *, va_list); /* LICENSE /* .ad diff --git a/postfix/src/lmtp/Makefile.in b/postfix/src/lmtp/Makefile.in index 24aad7250..4208feb0d 100644 --- a/postfix/src/lmtp/Makefile.in +++ b/postfix/src/lmtp/Makefile.in @@ -52,203 +52,214 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -lmtp.o: lmtp.c -lmtp.o: ../../include/sys_defs.h -lmtp.o: ../../include/dict.h -lmtp.o: ../../include/vstream.h -lmtp.o: ../../include/vbuf.h lmtp.o: ../../include/argv.h +lmtp.o: ../../include/debug_peer.h +lmtp.o: ../../include/deliver_request.h +lmtp.o: ../../include/dict.h +lmtp.o: ../../include/dsn_util.h +lmtp.o: ../../include/flush_clnt.h +lmtp.o: ../../include/mail_conf.h +lmtp.o: ../../include/mail_error.h +lmtp.o: ../../include/mail_params.h +lmtp.o: ../../include/mail_queue.h +lmtp.o: ../../include/mail_server.h lmtp.o: ../../include/msg.h lmtp.o: ../../include/mymalloc.h lmtp.o: ../../include/name_mask.h +lmtp.o: ../../include/recipient_list.h lmtp.o: ../../include/split_at.h -lmtp.o: ../../include/deliver_request.h +lmtp.o: ../../include/sys_defs.h +lmtp.o: ../../include/vbuf.h +lmtp.o: ../../include/vstream.h lmtp.o: ../../include/vstring.h -lmtp.o: ../../include/recipient_list.h -lmtp.o: ../../include/mail_queue.h -lmtp.o: ../../include/mail_params.h -lmtp.o: ../../include/mail_conf.h -lmtp.o: ../../include/debug_peer.h -lmtp.o: ../../include/mail_error.h -lmtp.o: ../../include/flush_clnt.h -lmtp.o: ../../include/mail_server.h +lmtp.o: lmtp.c lmtp.o: lmtp.h lmtp.o: lmtp_sasl.h -lmtp_addr.o: lmtp_addr.c -lmtp_addr.o: ../../include/sys_defs.h -lmtp_addr.o: ../../include/msg.h -lmtp_addr.o: ../../include/vstring.h -lmtp_addr.o: ../../include/vbuf.h -lmtp_addr.o: ../../include/mymalloc.h +lmtp_addr.o: ../../include/argv.h +lmtp_addr.o: ../../include/deliver_request.h +lmtp_addr.o: ../../include/dns.h +lmtp_addr.o: ../../include/dsn_util.h lmtp_addr.o: ../../include/inet_addr_list.h -lmtp_addr.o: ../../include/myaddrinfo.h -lmtp_addr.o: ../../include/stringops.h -lmtp_addr.o: ../../include/sock_addr.h lmtp_addr.o: ../../include/inet_proto.h lmtp_addr.o: ../../include/mail_params.h +lmtp_addr.o: ../../include/msg.h +lmtp_addr.o: ../../include/myaddrinfo.h +lmtp_addr.o: ../../include/mymalloc.h lmtp_addr.o: ../../include/own_inet_addr.h -lmtp_addr.o: ../../include/dns.h -lmtp_addr.o: lmtp.h -lmtp_addr.o: ../../include/vstream.h -lmtp_addr.o: ../../include/argv.h -lmtp_addr.o: ../../include/deliver_request.h lmtp_addr.o: ../../include/recipient_list.h +lmtp_addr.o: ../../include/sock_addr.h +lmtp_addr.o: ../../include/stringops.h +lmtp_addr.o: ../../include/sys_defs.h +lmtp_addr.o: ../../include/vbuf.h +lmtp_addr.o: ../../include/vstream.h +lmtp_addr.o: ../../include/vstring.h +lmtp_addr.o: lmtp.h +lmtp_addr.o: lmtp_addr.c lmtp_addr.o: lmtp_addr.h -lmtp_chat.o: lmtp_chat.c -lmtp_chat.o: ../../include/sys_defs.h -lmtp_chat.o: ../../include/msg.h -lmtp_chat.o: ../../include/vstring.h -lmtp_chat.o: ../../include/vbuf.h -lmtp_chat.o: ../../include/vstream.h lmtp_chat.o: ../../include/argv.h -lmtp_chat.o: ../../include/stringops.h -lmtp_chat.o: ../../include/line_wrap.h -lmtp_chat.o: ../../include/mymalloc.h -lmtp_chat.o: ../../include/recipient_list.h +lmtp_chat.o: ../../include/cleanup_user.h lmtp_chat.o: ../../include/deliver_request.h -lmtp_chat.o: ../../include/smtp_stream.h -lmtp_chat.o: ../../include/mail_params.h +lmtp_chat.o: ../../include/dsn_util.h +lmtp_chat.o: ../../include/line_wrap.h lmtp_chat.o: ../../include/mail_addr.h -lmtp_chat.o: ../../include/post_mail.h -lmtp_chat.o: ../../include/cleanup_user.h lmtp_chat.o: ../../include/mail_error.h +lmtp_chat.o: ../../include/mail_params.h +lmtp_chat.o: ../../include/msg.h +lmtp_chat.o: ../../include/mymalloc.h lmtp_chat.o: ../../include/name_mask.h +lmtp_chat.o: ../../include/post_mail.h +lmtp_chat.o: ../../include/recipient_list.h +lmtp_chat.o: ../../include/smtp_stream.h +lmtp_chat.o: ../../include/stringops.h +lmtp_chat.o: ../../include/sys_defs.h +lmtp_chat.o: ../../include/vbuf.h +lmtp_chat.o: ../../include/vstream.h +lmtp_chat.o: ../../include/vstring.h lmtp_chat.o: lmtp.h -lmtp_connect.o: lmtp_connect.c -lmtp_connect.o: ../../include/sys_defs.h -lmtp_connect.o: ../../include/msg.h -lmtp_connect.o: ../../include/vstream.h -lmtp_connect.o: ../../include/vbuf.h -lmtp_connect.o: ../../include/vstring.h -lmtp_connect.o: ../../include/split_at.h -lmtp_connect.o: ../../include/mymalloc.h -lmtp_connect.o: ../../include/iostuff.h -lmtp_connect.o: ../../include/timed_connect.h -lmtp_connect.o: ../../include/stringops.h +lmtp_chat.o: lmtp_chat.c +lmtp_connect.o: ../../include/argv.h +lmtp_connect.o: ../../include/attr.h +lmtp_connect.o: ../../include/deliver_request.h +lmtp_connect.o: ../../include/dns.h +lmtp_connect.o: ../../include/dsn_util.h lmtp_connect.o: ../../include/host_port.h -lmtp_connect.o: ../../include/sane_connect.h lmtp_connect.o: ../../include/inet_addr_list.h -lmtp_connect.o: ../../include/myaddrinfo.h -lmtp_connect.o: ../../include/sock_addr.h +lmtp_connect.o: ../../include/iostuff.h lmtp_connect.o: ../../include/mail_params.h lmtp_connect.o: ../../include/mail_proto.h -lmtp_connect.o: ../../include/attr.h +lmtp_connect.o: ../../include/msg.h +lmtp_connect.o: ../../include/myaddrinfo.h +lmtp_connect.o: ../../include/mymalloc.h lmtp_connect.o: ../../include/own_inet_addr.h -lmtp_connect.o: ../../include/dns.h -lmtp_connect.o: lmtp.h -lmtp_connect.o: ../../include/argv.h -lmtp_connect.o: ../../include/deliver_request.h lmtp_connect.o: ../../include/recipient_list.h +lmtp_connect.o: ../../include/sane_connect.h +lmtp_connect.o: ../../include/sock_addr.h +lmtp_connect.o: ../../include/split_at.h +lmtp_connect.o: ../../include/stringops.h +lmtp_connect.o: ../../include/sys_defs.h +lmtp_connect.o: ../../include/timed_connect.h +lmtp_connect.o: ../../include/vbuf.h +lmtp_connect.o: ../../include/vstream.h +lmtp_connect.o: ../../include/vstring.h +lmtp_connect.o: lmtp.h lmtp_connect.o: lmtp_addr.h -lmtp_proto.o: lmtp_proto.c -lmtp_proto.o: ../../include/sys_defs.h +lmtp_connect.o: lmtp_connect.c +lmtp_proto.o: ../../include/argv.h +lmtp_proto.o: ../../include/attr.h +lmtp_proto.o: ../../include/bounce.h +lmtp_proto.o: ../../include/defer.h +lmtp_proto.o: ../../include/deliver_completed.h +lmtp_proto.o: ../../include/deliver_request.h +lmtp_proto.o: ../../include/dsn_util.h +lmtp_proto.o: ../../include/iostuff.h +lmtp_proto.o: ../../include/mail_params.h +lmtp_proto.o: ../../include/mail_proto.h +lmtp_proto.o: ../../include/mail_queue.h +lmtp_proto.o: ../../include/mark_corrupt.h lmtp_proto.o: ../../include/msg.h -lmtp_proto.o: ../../include/vstring.h -lmtp_proto.o: ../../include/vbuf.h -lmtp_proto.o: ../../include/vstream.h -lmtp_proto.o: ../../include/vstring_vstream.h -lmtp_proto.o: ../../include/stringops.h lmtp_proto.o: ../../include/mymalloc.h lmtp_proto.o: ../../include/name_code.h -lmtp_proto.o: ../../include/mail_params.h -lmtp_proto.o: ../../include/smtp_stream.h -lmtp_proto.o: ../../include/mail_queue.h -lmtp_proto.o: ../../include/recipient_list.h -lmtp_proto.o: ../../include/deliver_request.h -lmtp_proto.o: ../../include/deliver_completed.h -lmtp_proto.o: ../../include/defer.h -lmtp_proto.o: ../../include/bounce.h -lmtp_proto.o: ../../include/sent.h -lmtp_proto.o: ../../include/record.h -lmtp_proto.o: ../../include/rec_type.h lmtp_proto.o: ../../include/off_cvt.h -lmtp_proto.o: ../../include/mark_corrupt.h lmtp_proto.o: ../../include/quote_821_local.h lmtp_proto.o: ../../include/quote_flags.h -lmtp_proto.o: ../../include/mail_proto.h -lmtp_proto.o: ../../include/iostuff.h -lmtp_proto.o: ../../include/attr.h +lmtp_proto.o: ../../include/rec_type.h +lmtp_proto.o: ../../include/recipient_list.h +lmtp_proto.o: ../../include/record.h +lmtp_proto.o: ../../include/sent.h +lmtp_proto.o: ../../include/smtp_stream.h +lmtp_proto.o: ../../include/stringops.h +lmtp_proto.o: ../../include/sys_defs.h +lmtp_proto.o: ../../include/vbuf.h +lmtp_proto.o: ../../include/vstream.h +lmtp_proto.o: ../../include/vstring.h +lmtp_proto.o: ../../include/vstring_vstream.h lmtp_proto.o: lmtp.h -lmtp_proto.o: ../../include/argv.h +lmtp_proto.o: lmtp_proto.c lmtp_proto.o: lmtp_sasl.h -lmtp_sasl_glue.o: lmtp_sasl_glue.c -lmtp_sasl_glue.o: ../../include/sys_defs.h +lmtp_sasl_glue.o: ../../include/argv.h +lmtp_sasl_glue.o: ../../include/deliver_request.h +lmtp_sasl_glue.o: ../../include/dict.h +lmtp_sasl_glue.o: ../../include/dsn_util.h +lmtp_sasl_glue.o: ../../include/mail_params.h +lmtp_sasl_glue.o: ../../include/maps.h +lmtp_sasl_glue.o: ../../include/match_list.h +lmtp_sasl_glue.o: ../../include/match_ops.h lmtp_sasl_glue.o: ../../include/msg.h lmtp_sasl_glue.o: ../../include/mymalloc.h -lmtp_sasl_glue.o: ../../include/stringops.h -lmtp_sasl_glue.o: ../../include/vstring.h -lmtp_sasl_glue.o: ../../include/vbuf.h -lmtp_sasl_glue.o: ../../include/split_at.h lmtp_sasl_glue.o: ../../include/name_mask.h -lmtp_sasl_glue.o: ../../include/mail_params.h +lmtp_sasl_glue.o: ../../include/recipient_list.h +lmtp_sasl_glue.o: ../../include/split_at.h lmtp_sasl_glue.o: ../../include/string_list.h -lmtp_sasl_glue.o: ../../include/match_list.h -lmtp_sasl_glue.o: ../../include/match_ops.h -lmtp_sasl_glue.o: ../../include/maps.h -lmtp_sasl_glue.o: ../../include/dict.h +lmtp_sasl_glue.o: ../../include/stringops.h +lmtp_sasl_glue.o: ../../include/sys_defs.h +lmtp_sasl_glue.o: ../../include/vbuf.h lmtp_sasl_glue.o: ../../include/vstream.h -lmtp_sasl_glue.o: ../../include/argv.h +lmtp_sasl_glue.o: ../../include/vstring.h lmtp_sasl_glue.o: lmtp.h -lmtp_sasl_glue.o: ../../include/deliver_request.h -lmtp_sasl_glue.o: ../../include/recipient_list.h lmtp_sasl_glue.o: lmtp_sasl.h -lmtp_sasl_proto.o: lmtp_sasl_proto.c -lmtp_sasl_proto.o: ../../include/sys_defs.h +lmtp_sasl_glue.o: lmtp_sasl_glue.c +lmtp_sasl_proto.o: ../../include/argv.h +lmtp_sasl_proto.o: ../../include/deliver_request.h +lmtp_sasl_proto.o: ../../include/dsn_util.h +lmtp_sasl_proto.o: ../../include/mail_params.h lmtp_sasl_proto.o: ../../include/msg.h lmtp_sasl_proto.o: ../../include/mymalloc.h -lmtp_sasl_proto.o: ../../include/mail_params.h -lmtp_sasl_proto.o: lmtp.h -lmtp_sasl_proto.o: ../../include/vstream.h +lmtp_sasl_proto.o: ../../include/recipient_list.h +lmtp_sasl_proto.o: ../../include/sys_defs.h lmtp_sasl_proto.o: ../../include/vbuf.h +lmtp_sasl_proto.o: ../../include/vstream.h lmtp_sasl_proto.o: ../../include/vstring.h -lmtp_sasl_proto.o: ../../include/argv.h -lmtp_sasl_proto.o: ../../include/deliver_request.h -lmtp_sasl_proto.o: ../../include/recipient_list.h +lmtp_sasl_proto.o: lmtp.h lmtp_sasl_proto.o: lmtp_sasl.h -lmtp_session.o: lmtp_session.c -lmtp_session.o: ../../include/sys_defs.h +lmtp_sasl_proto.o: lmtp_sasl_proto.c +lmtp_session.o: ../../include/argv.h +lmtp_session.o: ../../include/debug_peer.h +lmtp_session.o: ../../include/deliver_request.h +lmtp_session.o: ../../include/dsn_util.h lmtp_session.o: ../../include/mymalloc.h -lmtp_session.o: ../../include/vstream.h -lmtp_session.o: ../../include/vbuf.h +lmtp_session.o: ../../include/recipient_list.h lmtp_session.o: ../../include/stringops.h +lmtp_session.o: ../../include/sys_defs.h +lmtp_session.o: ../../include/vbuf.h +lmtp_session.o: ../../include/vstream.h lmtp_session.o: ../../include/vstring.h -lmtp_session.o: ../../include/debug_peer.h lmtp_session.o: lmtp.h -lmtp_session.o: ../../include/argv.h -lmtp_session.o: ../../include/deliver_request.h -lmtp_session.o: ../../include/recipient_list.h -lmtp_state.o: lmtp_state.c -lmtp_state.o: ../../include/sys_defs.h +lmtp_session.o: lmtp_session.c +lmtp_state.o: ../../include/argv.h +lmtp_state.o: ../../include/deliver_request.h +lmtp_state.o: ../../include/dsn_util.h +lmtp_state.o: ../../include/mail_conf.h lmtp_state.o: ../../include/mymalloc.h -lmtp_state.o: ../../include/vstring.h +lmtp_state.o: ../../include/recipient_list.h +lmtp_state.o: ../../include/sys_defs.h lmtp_state.o: ../../include/vbuf.h lmtp_state.o: ../../include/vstream.h -lmtp_state.o: ../../include/mail_conf.h +lmtp_state.o: ../../include/vstring.h lmtp_state.o: lmtp.h -lmtp_state.o: ../../include/argv.h -lmtp_state.o: ../../include/deliver_request.h -lmtp_state.o: ../../include/recipient_list.h lmtp_state.o: lmtp_sasl.h -lmtp_trouble.o: lmtp_trouble.c -lmtp_trouble.o: ../../include/sys_defs.h -lmtp_trouble.o: ../../include/msg.h -lmtp_trouble.o: ../../include/vstring.h -lmtp_trouble.o: ../../include/vbuf.h -lmtp_trouble.o: ../../include/stringops.h -lmtp_trouble.o: ../../include/mymalloc.h -lmtp_trouble.o: ../../include/smtp_stream.h -lmtp_trouble.o: ../../include/vstream.h -lmtp_trouble.o: ../../include/deliver_request.h -lmtp_trouble.o: ../../include/recipient_list.h -lmtp_trouble.o: ../../include/deliver_completed.h +lmtp_state.o: lmtp_state.c +lmtp_trouble.o: ../../include/argv.h lmtp_trouble.o: ../../include/bounce.h lmtp_trouble.o: ../../include/defer.h +lmtp_trouble.o: ../../include/deliver_completed.h +lmtp_trouble.o: ../../include/deliver_request.h +lmtp_trouble.o: ../../include/dsn_util.h lmtp_trouble.o: ../../include/mail_error.h +lmtp_trouble.o: ../../include/msg.h +lmtp_trouble.o: ../../include/mymalloc.h lmtp_trouble.o: ../../include/name_mask.h +lmtp_trouble.o: ../../include/recipient_list.h +lmtp_trouble.o: ../../include/smtp_stream.h +lmtp_trouble.o: ../../include/stringops.h +lmtp_trouble.o: ../../include/sys_defs.h +lmtp_trouble.o: ../../include/vbuf.h +lmtp_trouble.o: ../../include/vstream.h +lmtp_trouble.o: ../../include/vstring.h lmtp_trouble.o: lmtp.h -lmtp_trouble.o: ../../include/argv.h +lmtp_trouble.o: lmtp_trouble.c diff --git a/postfix/src/lmtp/lmtp.c b/postfix/src/lmtp/lmtp.c index e9078e551..6b9206de6 100644 --- a/postfix/src/lmtp/lmtp.c +++ b/postfix/src/lmtp/lmtp.c @@ -50,6 +50,7 @@ /* RFC 1652 (8bit-MIME transport) /* RFC 1870 (Message Size Declaration) /* RFC 2033 (LMTP protocol) +/* RFC 2034 (Enhanced Error Codes) /* RFC 2554 (AUTH command) /* RFC 2821 (SMTP protocol) /* RFC 2920 (SMTP Pipelining) @@ -261,6 +262,7 @@ #include #include #include +#include /* Single server skeleton. */ @@ -311,7 +313,7 @@ static LMTP_STATE *state = 0; static int deliver_message(DELIVER_REQUEST *request, char **unused_argv) { char *myname = "deliver_message"; - VSTRING *why; + DSN_VSTRING *why; int result; if (msg_verbose) @@ -334,7 +336,7 @@ static int deliver_message(DELIVER_REQUEST *request, char **unused_argv) * performed in the MAIL_SERVER_POST_INIT function (post_init). * */ - why = vstring_alloc(100); + why = dsn_vstring_alloc(100); state->request = request; state->src = request->fp; @@ -397,8 +399,15 @@ static int deliver_message(DELIVER_REQUEST *request, char **unused_argv) * Bounce or defer the recipients if no connection can be made. */ if ((state->session = lmtp_connect(request->nexthop, why)) == 0) { - lmtp_site_fail(state, lmtp_errno == LMTP_RETRY ? 450 : 550, - "%s", vstring_str(why)); + if (lmtp_errno == LMTP_RETRY) { + why->dsn[0] = '4'; + lmtp_site_fail(state, why->dsn, 450, + "%s", vstring_str(why->vstring)); + } else { + why->dsn[0] = '5'; + lmtp_site_fail(state, why->dsn, 550, + "%s", vstring_str(why->vstring)); + } } /* @@ -448,7 +457,7 @@ static int deliver_message(DELIVER_REQUEST *request, char **unused_argv) /* * Clean up. */ - vstring_free(why); + dsn_vstring_free(why); result = state->status; lmtp_chat_reset(state); diff --git a/postfix/src/lmtp/lmtp.h b/postfix/src/lmtp/lmtp.h index 2c30226c4..560a712c7 100644 --- a/postfix/src/lmtp/lmtp.h +++ b/postfix/src/lmtp/lmtp.h @@ -27,6 +27,7 @@ * Global library. */ #include +#include /* * State information associated with each LMTP delivery. We're bundling the @@ -89,7 +90,7 @@ extern LMTP_SESSION *lmtp_session_free(LMTP_SESSION *); /* * lmtp_connect.c */ -extern LMTP_SESSION *lmtp_connect(const char *, VSTRING *); +extern LMTP_SESSION *lmtp_connect(const char *, DSN_VSTRING *); /* * lmtp_proto.c @@ -104,6 +105,7 @@ extern int lmtp_rset(LMTP_STATE *); */ typedef struct LMTP_RESP { /* server response */ int code; /* status */ + char dsn[DSN_BUFSIZE]; /* DSN detail */ char *str; /* text */ VSTRING *buf; /* origin of text */ } LMTP_RESP; @@ -116,11 +118,13 @@ extern void lmtp_chat_notify(LMTP_STATE *); /* * lmtp_trouble.c */ -extern int PRINTFLIKE(3, 4) lmtp_conn_fail(LMTP_STATE *, int, char *,...); -extern int PRINTFLIKE(3, 4) lmtp_site_fail(LMTP_STATE *, int, char *,...); -extern int PRINTFLIKE(3, 4) lmtp_mesg_fail(LMTP_STATE *, int, char *,...); -extern void PRINTFLIKE(4, 5) lmtp_rcpt_fail(LMTP_STATE *, int, RECIPIENT *, char *,...); -extern int lmtp_stream_except(LMTP_STATE *, int, char *); +extern int PRINTFLIKE(4, 5) lmtp_site_fail(LMTP_STATE *, const char *, int, + const char *,...); +extern int PRINTFLIKE(4, 5) lmtp_mesg_fail(LMTP_STATE *, const char *, int, + const char *,...); +extern void PRINTFLIKE(5, 6) lmtp_rcpt_fail(LMTP_STATE *, const char *, int, + RECIPIENT *, const char *,...); +extern int lmtp_stream_except(LMTP_STATE *, int, const char *); /* * lmtp_state.c diff --git a/postfix/src/lmtp/lmtp_addr.c b/postfix/src/lmtp/lmtp_addr.c index 1710f787d..af44ebb8f 100644 --- a/postfix/src/lmtp/lmtp_addr.c +++ b/postfix/src/lmtp/lmtp_addr.c @@ -8,7 +8,7 @@ /* /* DNS_RR *lmtp_host_addr(name, why) /* char *name; -/* VSTRING *why; +/* DSN_VSTRING *why; /* DESCRIPTION /* This module implements Internet address lookups. By default, /* lookups are done via the Internet domain name service (DNS). @@ -31,7 +31,7 @@ /* .IP LMTP_FAIL /* The request attempt failed due to a hard error. /* .PP -/* In addition, a textual description of the problem is made available +/* In addition, a description of the problem is made available /* via the \fIwhy\fR argument. /* LICENSE /* .ad @@ -82,6 +82,7 @@ #include #include +#include /* DNS library. */ @@ -114,7 +115,8 @@ static void lmtp_print_addr(char *what, DNS_RR *addr_list) /* lmtp_addr_one - address lookup for one host name */ -static DNS_RR *lmtp_addr_one(DNS_RR *addr_list, char *host, unsigned pref, VSTRING *why) +static DNS_RR *lmtp_addr_one(DNS_RR *addr_list, char *host, unsigned pref, + DSN_VSTRING *why) { char *myname = "lmtp_addr_one"; DNS_RR *addr = 0; @@ -132,7 +134,7 @@ static DNS_RR *lmtp_addr_one(DNS_RR *addr_list, char *host, unsigned pref, VSTRI * Interpret a numerical name as an address. */ if (hostaddr_to_sockaddr(host, (char *) 0, 0, &res0) == 0 - && strchr((char *) proto_info->sa_family_list, res0->ai_family) != 0) { + && strchr((char *) proto_info->sa_family_list, res0->ai_family) != 0) { if ((addr = dns_sa_to_rr(host, pref, res0->ai_addr)) == 0) msg_fatal("host %s: conversion error for address family %d: %m", host, ((struct sockaddr *) (res0->ai_addr))->sa_family); @@ -146,10 +148,19 @@ static DNS_RR *lmtp_addr_one(DNS_RR *addr_list, char *host, unsigned pref, VSTRI */ #define RETRY_AI_ERROR(e) \ ((e) == EAI_AGAIN || (e) == EAI_MEMORY || (e) == EAI_SYSTEM) +#ifdef EAI_NODATA +#define DSN_NOHOST(e) \ + ((e) == EAI_AGAIN || (e) == EAI_NODATA || (e) == EAI_NONAME) +#else +#define DSN_NOHOST(e) \ + ((e) == EAI_AGAIN || (e) == EAI_NONAME) +#endif if (var_disable_dns) { if ((aierr = hostname_to_sockaddr(host, (char *) 0, 0, &res0)) != 0) { - vstring_sprintf(why, "%s: %s", host, MAI_STRERROR(aierr)); + dsn_vstring_update(why, DSN_NOHOST(aierr) ? "4.4.4" : "4.3.0", + "unable to look up host %s: %s", + host, MAI_STRERROR(aierr)); lmtp_errno = (RETRY_AI_ERROR(aierr) ? LMTP_RETRY : LMTP_FAIL); } else { for (found = 0, res = res0; res != 0; res = res->ai_next) { @@ -166,7 +177,7 @@ static DNS_RR *lmtp_addr_one(DNS_RR *addr_list, char *host, unsigned pref, VSTRI } freeaddrinfo(res0); if (found == 0) { - vstring_sprintf(why, "%s: host not found", host); + dsn_vstring_update(why, "5.4.4", "%s: host not found", host); lmtp_errno = LMTP_FAIL; } return (addr_list); @@ -176,7 +187,7 @@ static DNS_RR *lmtp_addr_one(DNS_RR *addr_list, char *host, unsigned pref, VSTRI /* * Append the addresses for this host to the address list. */ - switch (dns_lookup_v(host, RES_DEFNAMES, &addr, (VSTRING *) 0, why, + switch (dns_lookup_v(host, RES_DEFNAMES, &addr, (VSTRING *) 0, why->vstring, DNS_REQ_FLAG_ALL, proto_info->dns_atype_list)) { case DNS_OK: for (rr = addr; rr; rr = rr->next) @@ -184,10 +195,15 @@ static DNS_RR *lmtp_addr_one(DNS_RR *addr_list, char *host, unsigned pref, VSTRI addr_list = dns_rr_append(addr_list, addr); break; default: + dsn_vstring_update(why, "4.4.3", ""); lmtp_errno = LMTP_RETRY; break; - case DNS_NOTFOUND: case DNS_FAIL: + dsn_vstring_update(why, "4.4.3", ""); + lmtp_errno = LMTP_FAIL; + break; + case DNS_NOTFOUND: + dsn_vstring_update(why, "4.4.4", ""); lmtp_errno = LMTP_FAIL; break; } @@ -196,7 +212,7 @@ static DNS_RR *lmtp_addr_one(DNS_RR *addr_list, char *host, unsigned pref, VSTRI /* lmtp_host_addr - direct host lookup */ -DNS_RR *lmtp_host_addr(char *host, VSTRING *why) +DNS_RR *lmtp_host_addr(char *host, DSN_VSTRING *why) { DNS_RR *addr_list; diff --git a/postfix/src/lmtp/lmtp_addr.h b/postfix/src/lmtp/lmtp_addr.h index 579b7f034..92d1c2ee6 100644 --- a/postfix/src/lmtp/lmtp_addr.h +++ b/postfix/src/lmtp/lmtp_addr.h @@ -8,6 +8,11 @@ /* DESCRIPTION /* .nf + /* + * Global library. + */ +#include + /* * DNS library. */ @@ -16,7 +21,7 @@ /* * Internal interfaces. */ -extern DNS_RR *lmtp_host_addr(char *, VSTRING *); +extern DNS_RR *lmtp_host_addr(char *, DSN_VSTRING *); /* LICENSE /* .ad diff --git a/postfix/src/lmtp/lmtp_chat.c b/postfix/src/lmtp/lmtp_chat.c index 43379a753..a5c1f5d8c 100644 --- a/postfix/src/lmtp/lmtp_chat.c +++ b/postfix/src/lmtp/lmtp_chat.c @@ -9,6 +9,7 @@ /* typedef struct { /* .in +4 /* int code; +/* char dsn[...]; /* char *str; /* VSTRING *buf; /* .in -4 @@ -85,6 +86,7 @@ #include #include #include +#include /* Utility library. */ @@ -105,6 +107,7 @@ #include #include #include +#include /* Application-specific. */ @@ -175,6 +178,8 @@ LMTP_RESP *lmtp_chat_resp(LMTP_STATE *state) static LMTP_RESP rdata; char *cp; int last_char; + int three_digs = 0; + size_t len; /* * Initialize the response data buffer. @@ -215,7 +220,7 @@ LMTP_RESP *lmtp_chat_resp(LMTP_STATE *state) */ for (cp = STR(state->buffer); *cp && ISDIGIT(*cp); cp++) /* void */ ; - if (cp - STR(state->buffer) == 3) { + if ((three_digs = (cp - STR(state->buffer) == 3)) != 0) { if (*cp == '-') continue; if (*cp == ' ' || *cp == 0) @@ -223,7 +228,25 @@ LMTP_RESP *lmtp_chat_resp(LMTP_STATE *state) } state->error_mask |= MAIL_ERROR_PROTOCOL; } - rdata.code = atoi(STR(state->buffer)); + + /* + * Extract RFC 821 reply code and RFC 2034 detail code. Use a default + * detail code if none was given. + */ + rdata.dsn[0] = 0; + if (three_digs != 0) { + rdata.code = atoi(STR(state->buffer)); + for (cp = STR(state->buffer) + 4; *cp == ' '; cp++) + /* void */ ; + if ((len = dsn_valid(cp)) > 0 && len < sizeof(rdata.dsn)) { + DSN_BUF_UPDATE(rdata.dsn, cp, len); + } else if (strchr("245", STR(state->buffer)[0]) != 0) { + DSN_BUF_UPDATE(rdata.dsn, "0.0.0", sizeof("0.0.0") - 1); + rdata.dsn[0] = STR(state->buffer)[0]; + } + } else { + rdata.code = 0; + } VSTRING_TERMINATE(rdata.buf); rdata.str = STR(rdata.buf); return (&rdata); diff --git a/postfix/src/lmtp/lmtp_connect.c b/postfix/src/lmtp/lmtp_connect.c index e00a15114..b06ff2b1f 100644 --- a/postfix/src/lmtp/lmtp_connect.c +++ b/postfix/src/lmtp/lmtp_connect.c @@ -8,7 +8,7 @@ /* /* LMTP_SESSION *lmtp_connect(destination, why) /* char *destination; -/* VSTRING *why; +/* DSN_VSTRING *why; /* DESCRIPTION /* This module implements LMTP connection management. /* @@ -37,7 +37,7 @@ /* .IP LMTP_FAIL /* The connection attempt failed. /* .PP -/* In addition, a textual description of the error is made available +/* In addition, a description of the error is made available /* via the \fIwhy\fR argument. /* SEE ALSO /* lmtp_proto(3) LMTP client protocol @@ -107,7 +107,7 @@ /* DNS library. */ #include - + /* Application-specific. */ #include "lmtp.h" @@ -118,12 +118,12 @@ */ static LMTP_SESSION *lmtp_connect_sock(int, struct sockaddr *, int, const char *, const char *, - const char *, VSTRING *); + const char *, DSN_VSTRING *); /* lmtp_connect_unix - connect to UNIX-domain address */ static LMTP_SESSION *lmtp_connect_unix(const char *addr, - const char *destination, VSTRING *why) + const char *destination, DSN_VSTRING *why) { #undef sun char *myname = "lmtp_connect_unix"; @@ -136,6 +136,7 @@ static LMTP_SESSION *lmtp_connect_unix(const char *addr, */ if (len >= (int) sizeof(sun.sun_path)) { msg_warn("unix-domain name too long: %s", addr); + dsn_vstring_update(why, "4.3.5", "Server configuration error"); lmtp_errno = LMTP_RETRY; return (0); } @@ -169,7 +170,7 @@ static LMTP_SESSION *lmtp_connect_unix(const char *addr, /* lmtp_connect_addr - connect to explicit address */ static LMTP_SESSION *lmtp_connect_addr(DNS_RR *addr, unsigned port, - const char *destination, VSTRING *why) + const char *destination, DSN_VSTRING *why) { char *myname = "lmtp_connect_addr"; struct sockaddr_storage ss; @@ -184,6 +185,7 @@ static LMTP_SESSION *lmtp_connect_addr(DNS_RR *addr, unsigned port, if (dns_rr_to_sa(addr, port, sa, &salen) != 0) { msg_warn("%s: skip address type %s: %m", myname, dns_strtype(addr->type)); + dsn_vstring_update(why, "4.3.0", "network address conversion failed"); lmtp_errno = LMTP_RETRY; return (0); } @@ -210,7 +212,8 @@ static LMTP_SESSION *lmtp_connect_addr(DNS_RR *addr, unsigned port, static LMTP_SESSION *lmtp_connect_sock(int sock, struct sockaddr * sa, int len, const char *name, const char *addr, - const char *destination, VSTRING *why) + const char *destination, + DSN_VSTRING *why) { int conn_stat; int saved_errno; @@ -227,8 +230,8 @@ static LMTP_SESSION *lmtp_connect_sock(int sock, struct sockaddr * sa, int len, conn_stat = sane_connect(sock, sa, len); } if (conn_stat < 0) { - vstring_sprintf(why, "connect to %s[%s]: %m", - name, addr); + dsn_vstring_update(why, "4.4.1", "connect to %s[%s]: %m", + name, addr); lmtp_errno = LMTP_RETRY; close(sock); return (0); @@ -238,8 +241,8 @@ static LMTP_SESSION *lmtp_connect_sock(int sock, struct sockaddr * sa, int len, * Skip this host if it takes no action within some time limit. */ if (read_wait(sock, var_lmtp_lhlo_tmout) < 0) { - vstring_sprintf(why, "connect to %s[%s]: read timeout", - name, addr); + dsn_vstring_update(why, "4.4.2", "connect to %s[%s]: read timeout", + name, addr); lmtp_errno = LMTP_RETRY; close(sock); return (0); @@ -250,8 +253,9 @@ static LMTP_SESSION *lmtp_connect_sock(int sock, struct sockaddr * sa, int len, */ stream = vstream_fdopen(sock, O_RDWR); if ((ch = VSTREAM_GETC(stream)) == VSTREAM_EOF) { - vstring_sprintf(why, "connect to %s[%s]: server dropped connection without sending the initial greeting", - name, addr); + dsn_vstring_update(why, "4.4.0", + "connect to %s[%s]: server dropped connection without sending the initial greeting", + name, addr); lmtp_errno = LMTP_RETRY; vstream_fclose(stream); return (0); @@ -262,8 +266,9 @@ static LMTP_SESSION *lmtp_connect_sock(int sock, struct sockaddr * sa, int len, * Skip this host if it sends a 4xx or 5xx greeting. */ if (ch == '4' || ch == '5') { - vstring_sprintf(why, "connect to %s[%s]: server refused mail service", - name, addr); + dsn_vstring_update(why, "4.3.0", + "connect to %s[%s]: server refused mail service", + name, addr); lmtp_errno = LMTP_RETRY; vstream_fclose(stream); return (0); @@ -274,7 +279,7 @@ static LMTP_SESSION *lmtp_connect_sock(int sock, struct sockaddr * sa, int len, /* lmtp_connect_host - direct connection to host */ static LMTP_SESSION *lmtp_connect_host(char *host, unsigned port, - const char *destination, VSTRING *why) + const char *destination, DSN_VSTRING *why) { LMTP_SESSION *session = 0; DNS_RR *addr_list; @@ -336,7 +341,7 @@ static char *lmtp_parse_destination(const char *destination, char *def_service, /* lmtp_connect - establish LMTP connection */ -LMTP_SESSION *lmtp_connect(const char *destination, VSTRING *why) +LMTP_SESSION *lmtp_connect(const char *destination, DSN_VSTRING *why) { char *myname = "lmtp_connect"; LMTP_SESSION *session; diff --git a/postfix/src/lmtp/lmtp_proto.c b/postfix/src/lmtp/lmtp_proto.c index ebfa6323d..f446f1f74 100644 --- a/postfix/src/lmtp/lmtp_proto.c +++ b/postfix/src/lmtp/lmtp_proto.c @@ -224,7 +224,7 @@ int lmtp_lhlo(LMTP_STATE *state) * Read and parse the server's LMTP greeting banner. */ if (((resp = lmtp_chat_resp(state))->code / 100) != 2) - return (lmtp_site_fail(state, resp->code, + return (lmtp_site_fail(state, resp->dsn, resp->code, "host %s refused to talk to me: %s", session->namaddr, translit(resp->str, "\n", " "))); @@ -233,7 +233,7 @@ int lmtp_lhlo(LMTP_STATE *state) */ lmtp_chat_cmd(state, "LHLO %s", var_myhostname); if ((resp = lmtp_chat_resp(state))->code / 100 != 2) - return (lmtp_site_fail(state, resp->code, + return (lmtp_site_fail(state, resp->dsn, resp->code, "host %s refused to talk to me: %s", session->namaddr, translit(resp->str, "\n", " "))); @@ -594,7 +594,7 @@ static int lmtp_loop(LMTP_STATE *state, NOCLOBBER int send_state, */ case LMTP_STATE_MAIL: if (resp->code / 100 != 2) { - lmtp_mesg_fail(state, resp->code, + lmtp_mesg_fail(state, resp->dsn, resp->code, "host %s said: %s (in reply to %s)", session->namaddr, translit(resp->str, "\n", " "), @@ -634,15 +634,16 @@ static int lmtp_loop(LMTP_STATE *state, NOCLOBBER int send_state, && sent(DEL_REQ_TRACE_FLAGS(request->flags), request->queue_id, rcpt->orig_addr, rcpt->address, rcpt->offset, - session->namaddr, request->arrival_time, - "%s", + session->namaddr, resp->dsn, + request->arrival_time, "%s", translit(resp->str, "\n", " ")) == 0) { if (request->flags & DEL_REQ_FLAG_SUCCESS) deliver_completed(state->src, rcpt->offset); rcpt->offset = 0; /* in case deferred */ } } else { - lmtp_rcpt_fail(state, resp->code, rcpt, + lmtp_rcpt_fail(state, resp->dsn, + resp->code, rcpt, "host %s said: %s (in reply to %s)", session->namaddr, translit(resp->str, "\n", " "), @@ -664,7 +665,7 @@ static int lmtp_loop(LMTP_STATE *state, NOCLOBBER int send_state, case LMTP_STATE_DATA: if (resp->code / 100 != 3) { if (nrcpt > 0) - lmtp_mesg_fail(state, resp->code, + lmtp_mesg_fail(state, resp->dsn, resp->code, "host %s said: %s (in reply to %s)", session->namaddr, translit(resp->str, "\n", " "), @@ -691,7 +692,7 @@ static int lmtp_loop(LMTP_STATE *state, NOCLOBBER int send_state, if (sent(DEL_REQ_TRACE_FLAGS(request->flags), request->queue_id, rcpt->orig_addr, rcpt->address, rcpt->offset, - session->namaddr, + session->namaddr, resp->dsn, request->arrival_time, "%s", resp->str) == 0) { if (request->flags & DEL_REQ_FLAG_SUCCESS) @@ -700,7 +701,8 @@ static int lmtp_loop(LMTP_STATE *state, NOCLOBBER int send_state, } } } else { - lmtp_rcpt_fail(state, resp->code, rcpt, + lmtp_rcpt_fail(state, resp->dsn, + resp->code, rcpt, "host %s said: %s (in reply to %s)", session->namaddr, translit(resp->str, "\n", " "), diff --git a/postfix/src/lmtp/lmtp_sasl_proto.c b/postfix/src/lmtp/lmtp_sasl_proto.c index e9fc09a2c..6d15e2659 100644 --- a/postfix/src/lmtp/lmtp_sasl_proto.c +++ b/postfix/src/lmtp/lmtp_sasl_proto.c @@ -116,7 +116,8 @@ int lmtp_sasl_helo_login(LMTP_STATE *state) if (lmtp_sasl_passwd_lookup(state) != 0) { lmtp_sasl_start(state, VAR_LMTP_SASL_OPTS, var_lmtp_sasl_opts); if (lmtp_sasl_authenticate(state, why) <= 0) - ret = lmtp_site_fail(state, 450, "Authentication failed: %s", + ret = lmtp_site_fail(state, "4.7.0", 450, + "Authentication failed: %s", vstring_str(why)); } vstring_free(why); diff --git a/postfix/src/lmtp/lmtp_trouble.c b/postfix/src/lmtp/lmtp_trouble.c index 84ce001e1..2dc71b81d 100644 --- a/postfix/src/lmtp/lmtp_trouble.c +++ b/postfix/src/lmtp/lmtp_trouble.c @@ -6,26 +6,29 @@ /* SYNOPSIS /* #include "lmtp.h" /* -/* int lmtp_site_fail(state, code, format, ...) +/* int lmtp_site_fail(state, dsn, code, format, ...) /* LMTP_STATE *state; +/* const char *dsn; /* int code; -/* char *format; +/* const char *format; /* -/* int lmtp_mesg_fail(state, code, format, ...) +/* int lmtp_mesg_fail(state, dsn, code, format, ...) /* LMTP_STATE *state; +/* const char *dsn; /* int code; -/* char *format; +/* const char *format; /* -/* void lmtp_rcpt_fail(state, code, recipient, format, ...) +/* void lmtp_rcpt_fail(state, dsn, code, recipient, format, ...) /* LMTP_STATE *state; +/* const char *dsn; /* int code; /* RECIPIENT *recipient; -/* char *format; +/* const char *format; /* /* int lmtp_stream_except(state, exception, description) /* LMTP_STATE *state; /* int exception; -/* char *description; +/* const char *description; /* DESCRIPTION /* This module handles all non-fatal errors that can happen while /* attempting to deliver mail via LMTP, and implements the policy @@ -119,6 +122,7 @@ #include #include #include +#include /* Application-specific. */ @@ -150,7 +154,8 @@ static void lmtp_check_code(LMTP_STATE *state, int code) /* lmtp_site_fail - defer site or bounce recipients */ -int lmtp_site_fail(LMTP_STATE *state, int code, char *format,...) +int lmtp_site_fail(LMTP_STATE *state, const char *dsn, + int code, const char *format,...) { DELIVER_REQUEST *request = state->request; LMTP_SESSION *session = state->session; @@ -165,7 +170,11 @@ int lmtp_site_fail(LMTP_STATE *state, int code, char *format,...) * Initialize. */ va_start(ap, format); - vstring_vsprintf(why, format, ap); + if (code < 400 || code > 599) { + vstring_sprintf(why, "Protocol error: "); + dsn = "5.5.0"; + } + vstring_vsprintf_append(why, format, ap); va_end(ap); /* @@ -180,7 +189,7 @@ int lmtp_site_fail(LMTP_STATE *state, int code, char *format,...) (DEL_REQ_TRACE_FLAGS(request->flags), request->queue_id, rcpt->orig_addr, rcpt->address, rcpt->offset, session ? session->namaddr : "none", - request->arrival_time, "%s", vstring_str(why)); + dsn, request->arrival_time, "%s", vstring_str(why)); if (status == 0) { deliver_completed(state->src, rcpt->offset); rcpt->offset = 0; @@ -188,7 +197,7 @@ int lmtp_site_fail(LMTP_STATE *state, int code, char *format,...) state->status |= status; } if (soft_error && request->hop_status == 0) - request->hop_status = mystrdup(vstring_str(why)); + request->hop_status = dsn_prepend(dsn, vstring_str(why)); /* * Cleanup. @@ -199,7 +208,8 @@ int lmtp_site_fail(LMTP_STATE *state, int code, char *format,...) /* lmtp_mesg_fail - defer message or bounce all recipients */ -int lmtp_mesg_fail(LMTP_STATE *state, int code, char *format,...) +int lmtp_mesg_fail(LMTP_STATE *state, const char *dsn, + int code, const char *format,...) { DELIVER_REQUEST *request = state->request; LMTP_SESSION *session = state->session; @@ -213,7 +223,11 @@ int lmtp_mesg_fail(LMTP_STATE *state, int code, char *format,...) * Initialize. */ va_start(ap, format); - vstring_vsprintf(why, format, ap); + if (code < 400 || code > 599) { + vstring_sprintf(why, "Protocol error: "); + dsn = "5.5.0"; + } + vstring_vsprintf_append(why, format, ap); va_end(ap); /* @@ -227,7 +241,7 @@ int lmtp_mesg_fail(LMTP_STATE *state, int code, char *format,...) status = (LMTP_SOFT(code) ? defer_append : bounce_append) (DEL_REQ_TRACE_FLAGS(request->flags), request->queue_id, rcpt->orig_addr, rcpt->address, rcpt->offset, - session->namaddr, request->arrival_time, + session->namaddr, dsn, request->arrival_time, "%s", vstring_str(why)); if (status == 0) { deliver_completed(state->src, rcpt->offset); @@ -246,41 +260,58 @@ int lmtp_mesg_fail(LMTP_STATE *state, int code, char *format,...) /* lmtp_rcpt_fail - defer or bounce recipient */ -void lmtp_rcpt_fail(LMTP_STATE *state, int code, RECIPIENT *rcpt, - char *format,...) +void lmtp_rcpt_fail(LMTP_STATE *state, const char *dsn, int code, + RECIPIENT *rcpt, const char *format,...) { DELIVER_REQUEST *request = state->request; LMTP_SESSION *session = state->session; int status; va_list ap; + VSTRING *why = vstring_alloc(100); + + /* + * Initialize. + */ + va_start(ap, format); + if (code < 400 || code > 599) { + vstring_sprintf(why, "Protocol error: "); + dsn = "5.5.0"; + } + vstring_vsprintf_append(why, format, ap); + va_end(ap); /* * If this is a soft error, postpone delivery to this recipient. * Otherwise, generate a bounce record for this recipient. */ - va_start(ap, format); - status = (LMTP_SOFT(code) ? vdefer_append : vbounce_append) + status = (LMTP_SOFT(code) ? defer_append : bounce_append) (DEL_REQ_TRACE_FLAGS(request->flags), request->queue_id, rcpt->orig_addr, rcpt->address, rcpt->offset, - session->namaddr, request->arrival_time, format, ap); - va_end(ap); + session->namaddr, dsn, request->arrival_time, + "%s", vstring_str(why)); if (status == 0) { deliver_completed(state->src, rcpt->offset); rcpt->offset = 0; } lmtp_check_code(state, code); state->status |= status; + + /* + * Cleanup. + */ + vstring_free(why); } /* lmtp_stream_except - defer domain after I/O problem */ -int lmtp_stream_except(LMTP_STATE *state, int code, char *description) +int lmtp_stream_except(LMTP_STATE *state, int code, const char *description) { DELIVER_REQUEST *request = state->request; LMTP_SESSION *session = state->session; RECIPIENT *rcpt; int nrcpt; VSTRING *why = vstring_alloc(100); + const char *dsn; /* * Initialize. @@ -291,10 +322,12 @@ int lmtp_stream_except(LMTP_STATE *state, int code, char *description) case SMTP_ERR_EOF: vstring_sprintf(why, "lost connection with %s while %s", session->namaddr, description); + dsn = "4.4.2"; break; case SMTP_ERR_TIME: vstring_sprintf(why, "conversation with %s timed out while %s", session->namaddr, description); + dsn = "4.4.2"; break; } @@ -310,9 +343,11 @@ int lmtp_stream_except(LMTP_STATE *state, int code, char *description) request->queue_id, rcpt->orig_addr, rcpt->address, rcpt->offset, session->namaddr, - request->arrival_time, + dsn, request->arrival_time, "%s", vstring_str(why)); } + if (request->hop_status == 0) + request->hop_status = dsn_prepend(dsn, vstring_str(why)); /* * Cleanup. diff --git a/postfix/src/local/Makefile.in b/postfix/src/local/Makefile.in index fb439cde6..b5a0c702a 100644 --- a/postfix/src/local/Makefile.in +++ b/postfix/src/local/Makefile.in @@ -54,449 +54,454 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -alias.o: alias.c -alias.o: ../../include/sys_defs.h -alias.o: ../../include/msg.h -alias.o: ../../include/htable.h -alias.o: ../../include/dict.h -alias.o: ../../include/vstream.h -alias.o: ../../include/vbuf.h alias.o: ../../include/argv.h -alias.o: ../../include/stringops.h -alias.o: ../../include/vstring.h -alias.o: ../../include/mymalloc.h -alias.o: ../../include/mail_params.h -alias.o: ../../include/defer.h +alias.o: ../../include/been_here.h alias.o: ../../include/bounce.h +alias.o: ../../include/canon_addr.h +alias.o: ../../include/defer.h alias.o: ../../include/deliver_request.h -alias.o: ../../include/recipient_list.h +alias.o: ../../include/dict.h +alias.o: ../../include/htable.h +alias.o: ../../include/mail_params.h alias.o: ../../include/maps.h +alias.o: ../../include/mbox_conf.h +alias.o: ../../include/msg.h +alias.o: ../../include/mymalloc.h alias.o: ../../include/mypwd.h -alias.o: ../../include/canon_addr.h +alias.o: ../../include/recipient_list.h +alias.o: ../../include/resolve_clnt.h alias.o: ../../include/sent.h -alias.o: local.h -alias.o: ../../include/been_here.h +alias.o: ../../include/stringops.h +alias.o: ../../include/sys_defs.h alias.o: ../../include/tok822.h -alias.o: ../../include/resolve_clnt.h -alias.o: ../../include/mbox_conf.h -biff_notify.o: biff_notify.c -biff_notify.o: ../../include/sys_defs.h +alias.o: ../../include/vbuf.h +alias.o: ../../include/vstream.h +alias.o: ../../include/vstring.h +alias.o: alias.c +alias.o: local.h biff_notify.o: ../../include/msg.h +biff_notify.o: ../../include/sys_defs.h +biff_notify.o: biff_notify.c biff_notify.o: biff_notify.h -command.o: command.c -command.o: ../../include/sys_defs.h -command.o: ../../include/msg.h -command.o: ../../include/htable.h -command.o: ../../include/vstring.h -command.o: ../../include/vbuf.h -command.o: ../../include/vstream.h command.o: ../../include/argv.h -command.o: ../../include/mac_parse.h -command.o: ../../include/defer.h +command.o: ../../include/been_here.h command.o: ../../include/bounce.h +command.o: ../../include/defer.h command.o: ../../include/deliver_request.h -command.o: ../../include/recipient_list.h -command.o: ../../include/sent.h -command.o: ../../include/been_here.h +command.o: ../../include/dict.h +command.o: ../../include/dsn_util.h +command.o: ../../include/htable.h +command.o: ../../include/mac_parse.h +command.o: ../../include/mail_copy.h command.o: ../../include/mail_params.h +command.o: ../../include/maps.h +command.o: ../../include/mbox_conf.h +command.o: ../../include/msg.h command.o: ../../include/pipe_command.h -command.o: ../../include/mail_copy.h -command.o: local.h -command.o: ../../include/tok822.h +command.o: ../../include/recipient_list.h command.o: ../../include/resolve_clnt.h -command.o: ../../include/mbox_conf.h -command.o: ../../include/maps.h -command.o: ../../include/dict.h -deliver_attr.o: deliver_attr.c -deliver_attr.o: ../../include/sys_defs.h -deliver_attr.o: ../../include/msg.h -deliver_attr.o: ../../include/vstream.h -deliver_attr.o: ../../include/vbuf.h -deliver_attr.o: local.h -deliver_attr.o: ../../include/htable.h -deliver_attr.o: ../../include/vstring.h +command.o: ../../include/sent.h +command.o: ../../include/sys_defs.h +command.o: ../../include/tok822.h +command.o: ../../include/vbuf.h +command.o: ../../include/vstream.h +command.o: ../../include/vstring.h +command.o: command.c +command.o: local.h +deliver_attr.o: ../../include/argv.h deliver_attr.o: ../../include/been_here.h -deliver_attr.o: ../../include/tok822.h -deliver_attr.o: ../../include/resolve_clnt.h deliver_attr.o: ../../include/deliver_request.h -deliver_attr.o: ../../include/recipient_list.h -deliver_attr.o: ../../include/mbox_conf.h -deliver_attr.o: ../../include/argv.h -deliver_attr.o: ../../include/maps.h deliver_attr.o: ../../include/dict.h -delivered.o: delivered.c -delivered.o: ../../include/sys_defs.h -delivered.o: ../../include/msg.h +deliver_attr.o: ../../include/htable.h +deliver_attr.o: ../../include/maps.h +deliver_attr.o: ../../include/mbox_conf.h +deliver_attr.o: ../../include/msg.h +deliver_attr.o: ../../include/recipient_list.h +deliver_attr.o: ../../include/resolve_clnt.h +deliver_attr.o: ../../include/sys_defs.h +deliver_attr.o: ../../include/tok822.h +deliver_attr.o: ../../include/vbuf.h +deliver_attr.o: ../../include/vstream.h +deliver_attr.o: ../../include/vstring.h +deliver_attr.o: deliver_attr.c +deliver_attr.o: local.h +delivered.o: ../../include/argv.h +delivered.o: ../../include/been_here.h +delivered.o: ../../include/deliver_request.h +delivered.o: ../../include/dict.h +delivered.o: ../../include/header_opts.h delivered.o: ../../include/htable.h -delivered.o: ../../include/vstring.h -delivered.o: ../../include/vbuf.h -delivered.o: ../../include/vstream.h -delivered.o: ../../include/vstring_vstream.h -delivered.o: ../../include/stringops.h -delivered.o: ../../include/record.h -delivered.o: ../../include/rec_type.h delivered.o: ../../include/is_header.h +delivered.o: ../../include/maps.h +delivered.o: ../../include/mbox_conf.h +delivered.o: ../../include/msg.h delivered.o: ../../include/quote_822_local.h delivered.o: ../../include/quote_flags.h -delivered.o: ../../include/header_opts.h -delivered.o: local.h -delivered.o: ../../include/been_here.h -delivered.o: ../../include/tok822.h -delivered.o: ../../include/resolve_clnt.h -delivered.o: ../../include/deliver_request.h +delivered.o: ../../include/rec_type.h delivered.o: ../../include/recipient_list.h -delivered.o: ../../include/mbox_conf.h -delivered.o: ../../include/argv.h -delivered.o: ../../include/maps.h -delivered.o: ../../include/dict.h -dotforward.o: dotforward.c -dotforward.o: ../../include/sys_defs.h -dotforward.o: ../../include/msg.h -dotforward.o: ../../include/vstring.h -dotforward.o: ../../include/vbuf.h -dotforward.o: ../../include/vstream.h +delivered.o: ../../include/record.h +delivered.o: ../../include/resolve_clnt.h +delivered.o: ../../include/stringops.h +delivered.o: ../../include/sys_defs.h +delivered.o: ../../include/tok822.h +delivered.o: ../../include/vbuf.h +delivered.o: ../../include/vstream.h +delivered.o: ../../include/vstring.h +delivered.o: ../../include/vstring_vstream.h +delivered.o: delivered.c +delivered.o: local.h +dotforward.o: ../../include/argv.h +dotforward.o: ../../include/been_here.h +dotforward.o: ../../include/bounce.h +dotforward.o: ../../include/deliver_request.h +dotforward.o: ../../include/dict.h +dotforward.o: ../../include/ext_prop.h dotforward.o: ../../include/htable.h -dotforward.o: ../../include/open_as.h -dotforward.o: ../../include/lstat_as.h dotforward.o: ../../include/iostuff.h -dotforward.o: ../../include/stringops.h -dotforward.o: ../../include/mymalloc.h +dotforward.o: ../../include/lstat_as.h dotforward.o: ../../include/mac_expand.h dotforward.o: ../../include/mac_parse.h +dotforward.o: ../../include/mail_conf.h +dotforward.o: ../../include/mail_params.h +dotforward.o: ../../include/maps.h +dotforward.o: ../../include/mbox_conf.h +dotforward.o: ../../include/msg.h +dotforward.o: ../../include/mymalloc.h dotforward.o: ../../include/mypwd.h -dotforward.o: ../../include/bounce.h -dotforward.o: ../../include/deliver_request.h +dotforward.o: ../../include/open_as.h dotforward.o: ../../include/recipient_list.h -dotforward.o: ../../include/been_here.h -dotforward.o: ../../include/mail_params.h -dotforward.o: ../../include/mail_conf.h -dotforward.o: ../../include/ext_prop.h +dotforward.o: ../../include/resolve_clnt.h dotforward.o: ../../include/sent.h -dotforward.o: local.h +dotforward.o: ../../include/stringops.h +dotforward.o: ../../include/sys_defs.h dotforward.o: ../../include/tok822.h -dotforward.o: ../../include/resolve_clnt.h -dotforward.o: ../../include/mbox_conf.h -dotforward.o: ../../include/argv.h -dotforward.o: ../../include/maps.h -dotforward.o: ../../include/dict.h -file.o: file.c -file.o: ../../include/sys_defs.h -file.o: ../../include/msg.h -file.o: ../../include/htable.h -file.o: ../../include/vstring.h -file.o: ../../include/vbuf.h -file.o: ../../include/vstream.h -file.o: ../../include/deliver_flock.h -file.o: ../../include/myflock.h -file.o: ../../include/set_eugid.h -file.o: ../../include/mail_copy.h +dotforward.o: ../../include/vbuf.h +dotforward.o: ../../include/vstream.h +dotforward.o: ../../include/vstring.h +dotforward.o: dotforward.c +dotforward.o: local.h +file.o: ../../include/argv.h +file.o: ../../include/been_here.h file.o: ../../include/bounce.h -file.o: ../../include/deliver_request.h -file.o: ../../include/recipient_list.h file.o: ../../include/defer.h -file.o: ../../include/sent.h -file.o: ../../include/been_here.h +file.o: ../../include/deliver_flock.h +file.o: ../../include/deliver_request.h +file.o: ../../include/dict.h +file.o: ../../include/dsn_util.h +file.o: ../../include/htable.h +file.o: ../../include/mail_copy.h file.o: ../../include/mail_params.h +file.o: ../../include/maps.h file.o: ../../include/mbox_conf.h -file.o: ../../include/argv.h file.o: ../../include/mbox_open.h +file.o: ../../include/msg.h +file.o: ../../include/myflock.h +file.o: ../../include/recipient_list.h +file.o: ../../include/resolve_clnt.h file.o: ../../include/safe_open.h -file.o: local.h +file.o: ../../include/sent.h +file.o: ../../include/set_eugid.h +file.o: ../../include/sys_defs.h file.o: ../../include/tok822.h -file.o: ../../include/resolve_clnt.h -file.o: ../../include/maps.h -file.o: ../../include/dict.h -forward.o: forward.c -forward.o: ../../include/sys_defs.h -forward.o: ../../include/msg.h -forward.o: ../../include/mymalloc.h -forward.o: ../../include/htable.h +file.o: ../../include/vbuf.h +file.o: ../../include/vstream.h +file.o: ../../include/vstring.h +file.o: file.c +file.o: local.h forward.o: ../../include/argv.h -forward.o: ../../include/vstring.h -forward.o: ../../include/vbuf.h -forward.o: ../../include/vstream.h -forward.o: ../../include/vstring_vstream.h -forward.o: ../../include/iostuff.h -forward.o: ../../include/stringops.h -forward.o: ../../include/mail_proto.h forward.o: ../../include/attr.h +forward.o: ../../include/been_here.h forward.o: ../../include/cleanup_user.h -forward.o: ../../include/sent.h forward.o: ../../include/deliver_request.h -forward.o: ../../include/recipient_list.h -forward.o: ../../include/record.h -forward.o: ../../include/rec_type.h -forward.o: ../../include/mark_corrupt.h +forward.o: ../../include/dict.h +forward.o: ../../include/htable.h +forward.o: ../../include/iostuff.h forward.o: ../../include/mail_date.h forward.o: ../../include/mail_params.h -forward.o: local.h -forward.o: ../../include/been_here.h -forward.o: ../../include/tok822.h -forward.o: ../../include/resolve_clnt.h -forward.o: ../../include/mbox_conf.h +forward.o: ../../include/mail_proto.h forward.o: ../../include/maps.h -forward.o: ../../include/dict.h -include.o: include.c -include.o: ../../include/sys_defs.h -include.o: ../../include/msg.h +forward.o: ../../include/mark_corrupt.h +forward.o: ../../include/mbox_conf.h +forward.o: ../../include/msg.h +forward.o: ../../include/mymalloc.h +forward.o: ../../include/rec_type.h +forward.o: ../../include/recipient_list.h +forward.o: ../../include/record.h +forward.o: ../../include/resolve_clnt.h +forward.o: ../../include/sent.h +forward.o: ../../include/stringops.h +forward.o: ../../include/sys_defs.h +forward.o: ../../include/tok822.h +forward.o: ../../include/vbuf.h +forward.o: ../../include/vstream.h +forward.o: ../../include/vstring.h +forward.o: ../../include/vstring_vstream.h +forward.o: forward.c +forward.o: local.h +include.o: ../../include/argv.h +include.o: ../../include/been_here.h +include.o: ../../include/bounce.h +include.o: ../../include/defer.h +include.o: ../../include/deliver_request.h +include.o: ../../include/dict.h +include.o: ../../include/ext_prop.h include.o: ../../include/htable.h -include.o: ../../include/mymalloc.h -include.o: ../../include/vstream.h -include.o: ../../include/vbuf.h -include.o: ../../include/open_as.h -include.o: ../../include/stat_as.h include.o: ../../include/iostuff.h +include.o: ../../include/mail_params.h +include.o: ../../include/maps.h +include.o: ../../include/mbox_conf.h +include.o: ../../include/msg.h +include.o: ../../include/mymalloc.h include.o: ../../include/mypwd.h -include.o: ../../include/bounce.h -include.o: ../../include/deliver_request.h -include.o: ../../include/vstring.h +include.o: ../../include/open_as.h include.o: ../../include/recipient_list.h -include.o: ../../include/defer.h -include.o: ../../include/been_here.h -include.o: ../../include/mail_params.h -include.o: ../../include/ext_prop.h +include.o: ../../include/resolve_clnt.h include.o: ../../include/sent.h -include.o: local.h +include.o: ../../include/stat_as.h +include.o: ../../include/sys_defs.h include.o: ../../include/tok822.h -include.o: ../../include/resolve_clnt.h -include.o: ../../include/mbox_conf.h -include.o: ../../include/argv.h -include.o: ../../include/maps.h -include.o: ../../include/dict.h -indirect.o: indirect.c -indirect.o: ../../include/sys_defs.h -indirect.o: ../../include/msg.h -indirect.o: ../../include/htable.h -indirect.o: ../../include/mail_params.h +include.o: ../../include/vbuf.h +include.o: ../../include/vstream.h +include.o: ../../include/vstring.h +include.o: include.c +include.o: local.h +indirect.o: ../../include/argv.h +indirect.o: ../../include/been_here.h indirect.o: ../../include/bounce.h +indirect.o: ../../include/defer.h indirect.o: ../../include/deliver_request.h -indirect.o: ../../include/vstring.h -indirect.o: ../../include/vbuf.h -indirect.o: ../../include/vstream.h +indirect.o: ../../include/dict.h +indirect.o: ../../include/htable.h +indirect.o: ../../include/mail_params.h +indirect.o: ../../include/maps.h +indirect.o: ../../include/mbox_conf.h +indirect.o: ../../include/msg.h indirect.o: ../../include/recipient_list.h -indirect.o: ../../include/defer.h -indirect.o: ../../include/been_here.h +indirect.o: ../../include/resolve_clnt.h indirect.o: ../../include/sent.h -indirect.o: local.h +indirect.o: ../../include/sys_defs.h indirect.o: ../../include/tok822.h -indirect.o: ../../include/resolve_clnt.h -indirect.o: ../../include/mbox_conf.h -indirect.o: ../../include/argv.h -indirect.o: ../../include/maps.h -indirect.o: ../../include/dict.h -local.o: local.c -local.o: ../../include/sys_defs.h -local.o: ../../include/msg.h -local.o: ../../include/mymalloc.h -local.o: ../../include/htable.h -local.o: ../../include/vstring.h -local.o: ../../include/vbuf.h -local.o: ../../include/vstream.h -local.o: ../../include/iostuff.h -local.o: ../../include/name_mask.h -local.o: ../../include/set_eugid.h -local.o: ../../include/dict.h +indirect.o: ../../include/vbuf.h +indirect.o: ../../include/vstream.h +indirect.o: ../../include/vstring.h +indirect.o: indirect.c +indirect.o: local.h local.o: ../../include/argv.h -local.o: ../../include/recipient_list.h -local.o: ../../include/deliver_request.h -local.o: ../../include/deliver_completed.h -local.o: ../../include/mail_params.h -local.o: ../../include/mail_addr.h -local.o: ../../include/mail_conf.h local.o: ../../include/been_here.h +local.o: ../../include/deliver_completed.h +local.o: ../../include/deliver_request.h +local.o: ../../include/dict.h local.o: ../../include/ext_prop.h -local.o: ../../include/maps.h local.o: ../../include/flush_clnt.h +local.o: ../../include/htable.h +local.o: ../../include/iostuff.h +local.o: ../../include/mail_addr.h +local.o: ../../include/mail_conf.h +local.o: ../../include/mail_params.h local.o: ../../include/mail_server.h -local.o: local.h -local.o: ../../include/tok822.h -local.o: ../../include/resolve_clnt.h +local.o: ../../include/maps.h local.o: ../../include/mbox_conf.h -local_expand.o: local_expand.c -local_expand.o: ../../include/sys_defs.h -local_expand.o: ../../include/vstring.h -local_expand.o: ../../include/vbuf.h +local.o: ../../include/msg.h +local.o: ../../include/mymalloc.h +local.o: ../../include/name_mask.h +local.o: ../../include/recipient_list.h +local.o: ../../include/resolve_clnt.h +local.o: ../../include/set_eugid.h +local.o: ../../include/sys_defs.h +local.o: ../../include/tok822.h +local.o: ../../include/vbuf.h +local.o: ../../include/vstream.h +local.o: ../../include/vstring.h +local.o: local.c +local.o: local.h +local_expand.o: ../../include/argv.h +local_expand.o: ../../include/been_here.h +local_expand.o: ../../include/deliver_request.h +local_expand.o: ../../include/dict.h +local_expand.o: ../../include/htable.h local_expand.o: ../../include/mac_expand.h local_expand.o: ../../include/mac_parse.h local_expand.o: ../../include/mail_params.h -local_expand.o: local.h -local_expand.o: ../../include/htable.h -local_expand.o: ../../include/vstream.h -local_expand.o: ../../include/been_here.h -local_expand.o: ../../include/tok822.h -local_expand.o: ../../include/resolve_clnt.h -local_expand.o: ../../include/deliver_request.h -local_expand.o: ../../include/recipient_list.h -local_expand.o: ../../include/mbox_conf.h -local_expand.o: ../../include/argv.h local_expand.o: ../../include/maps.h -local_expand.o: ../../include/dict.h -mailbox.o: mailbox.c -mailbox.o: ../../include/sys_defs.h -mailbox.o: ../../include/msg.h -mailbox.o: ../../include/htable.h -mailbox.o: ../../include/vstring.h -mailbox.o: ../../include/vbuf.h -mailbox.o: ../../include/vstream.h -mailbox.o: ../../include/mymalloc.h -mailbox.o: ../../include/stringops.h -mailbox.o: ../../include/set_eugid.h -mailbox.o: ../../include/mail_copy.h -mailbox.o: ../../include/defer.h +local_expand.o: ../../include/mbox_conf.h +local_expand.o: ../../include/recipient_list.h +local_expand.o: ../../include/resolve_clnt.h +local_expand.o: ../../include/sys_defs.h +local_expand.o: ../../include/tok822.h +local_expand.o: ../../include/vbuf.h +local_expand.o: ../../include/vstream.h +local_expand.o: ../../include/vstring.h +local_expand.o: local.h +local_expand.o: local_expand.c +mailbox.o: ../../include/argv.h +mailbox.o: ../../include/attr.h +mailbox.o: ../../include/been_here.h mailbox.o: ../../include/bounce.h +mailbox.o: ../../include/defer.h +mailbox.o: ../../include/deliver_pass.h mailbox.o: ../../include/deliver_request.h -mailbox.o: ../../include/recipient_list.h -mailbox.o: ../../include/sent.h -mailbox.o: ../../include/mypwd.h -mailbox.o: ../../include/been_here.h +mailbox.o: ../../include/dict.h +mailbox.o: ../../include/dsn_util.h +mailbox.o: ../../include/htable.h +mailbox.o: ../../include/iostuff.h +mailbox.o: ../../include/mail_copy.h mailbox.o: ../../include/mail_params.h -mailbox.o: ../../include/deliver_pass.h mailbox.o: ../../include/mail_proto.h -mailbox.o: ../../include/iostuff.h -mailbox.o: ../../include/attr.h +mailbox.o: ../../include/maps.h +mailbox.o: ../../include/mbox_conf.h mailbox.o: ../../include/mbox_open.h +mailbox.o: ../../include/msg.h +mailbox.o: ../../include/mymalloc.h +mailbox.o: ../../include/mypwd.h +mailbox.o: ../../include/recipient_list.h +mailbox.o: ../../include/resolve_clnt.h mailbox.o: ../../include/safe_open.h -mailbox.o: ../../include/maps.h -mailbox.o: ../../include/dict.h -mailbox.o: ../../include/argv.h -mailbox.o: local.h +mailbox.o: ../../include/sent.h +mailbox.o: ../../include/set_eugid.h +mailbox.o: ../../include/stringops.h +mailbox.o: ../../include/sys_defs.h mailbox.o: ../../include/tok822.h -mailbox.o: ../../include/resolve_clnt.h -mailbox.o: ../../include/mbox_conf.h +mailbox.o: ../../include/vbuf.h +mailbox.o: ../../include/vstream.h +mailbox.o: ../../include/vstring.h mailbox.o: biff_notify.h -maildir.o: maildir.c -maildir.o: ../../include/sys_defs.h +mailbox.o: local.h +mailbox.o: mailbox.c +maildir.o: ../../include/argv.h +maildir.o: ../../include/been_here.h +maildir.o: ../../include/bounce.h +maildir.o: ../../include/defer.h +maildir.o: ../../include/deliver_request.h +maildir.o: ../../include/dict.h +maildir.o: ../../include/dsn_util.h +maildir.o: ../../include/get_hostname.h +maildir.o: ../../include/htable.h +maildir.o: ../../include/mail_copy.h +maildir.o: ../../include/mail_params.h +maildir.o: ../../include/make_dirs.h +maildir.o: ../../include/maps.h +maildir.o: ../../include/mbox_conf.h maildir.o: ../../include/msg.h maildir.o: ../../include/mymalloc.h +maildir.o: ../../include/recipient_list.h +maildir.o: ../../include/resolve_clnt.h +maildir.o: ../../include/sane_fsops.h +maildir.o: ../../include/sent.h +maildir.o: ../../include/set_eugid.h maildir.o: ../../include/stringops.h -maildir.o: ../../include/vstring.h +maildir.o: ../../include/sys_defs.h +maildir.o: ../../include/tok822.h maildir.o: ../../include/vbuf.h maildir.o: ../../include/vstream.h -maildir.o: ../../include/make_dirs.h -maildir.o: ../../include/set_eugid.h -maildir.o: ../../include/get_hostname.h -maildir.o: ../../include/sane_fsops.h -maildir.o: ../../include/mail_copy.h -maildir.o: ../../include/bounce.h -maildir.o: ../../include/deliver_request.h -maildir.o: ../../include/recipient_list.h -maildir.o: ../../include/defer.h -maildir.o: ../../include/sent.h -maildir.o: ../../include/mail_params.h +maildir.o: ../../include/vstring.h maildir.o: local.h -maildir.o: ../../include/htable.h -maildir.o: ../../include/been_here.h -maildir.o: ../../include/tok822.h -maildir.o: ../../include/resolve_clnt.h -maildir.o: ../../include/mbox_conf.h -maildir.o: ../../include/argv.h -maildir.o: ../../include/maps.h -maildir.o: ../../include/dict.h -recipient.o: recipient.c -recipient.o: ../../include/sys_defs.h -recipient.o: ../../include/msg.h -recipient.o: ../../include/mymalloc.h -recipient.o: ../../include/htable.h -recipient.o: ../../include/split_at.h -recipient.o: ../../include/stringops.h -recipient.o: ../../include/vstring.h -recipient.o: ../../include/vbuf.h -recipient.o: ../../include/dict.h -recipient.o: ../../include/vstream.h +maildir.o: maildir.c recipient.o: ../../include/argv.h -recipient.o: ../../include/stat_as.h +recipient.o: ../../include/been_here.h recipient.o: ../../include/bounce.h -recipient.o: ../../include/deliver_request.h -recipient.o: ../../include/recipient_list.h +recipient.o: ../../include/canon_addr.h recipient.o: ../../include/defer.h +recipient.o: ../../include/deliver_request.h +recipient.o: ../../include/dict.h +recipient.o: ../../include/ext_prop.h +recipient.o: ../../include/htable.h recipient.o: ../../include/mail_params.h +recipient.o: ../../include/maps.h +recipient.o: ../../include/mbox_conf.h +recipient.o: ../../include/msg.h +recipient.o: ../../include/mymalloc.h +recipient.o: ../../include/mypwd.h +recipient.o: ../../include/recipient_list.h +recipient.o: ../../include/resolve_clnt.h recipient.o: ../../include/split_addr.h +recipient.o: ../../include/split_at.h +recipient.o: ../../include/stat_as.h +recipient.o: ../../include/stringops.h recipient.o: ../../include/strip_addr.h -recipient.o: ../../include/ext_prop.h -recipient.o: ../../include/mypwd.h -recipient.o: ../../include/canon_addr.h -recipient.o: local.h -recipient.o: ../../include/been_here.h +recipient.o: ../../include/sys_defs.h recipient.o: ../../include/tok822.h -recipient.o: ../../include/resolve_clnt.h -recipient.o: ../../include/mbox_conf.h -recipient.o: ../../include/maps.h -resolve.o: resolve.c -resolve.o: ../../include/sys_defs.h -resolve.o: ../../include/msg.h -resolve.o: ../../include/vstring.h -resolve.o: ../../include/vbuf.h +recipient.o: ../../include/vbuf.h +recipient.o: ../../include/vstream.h +recipient.o: ../../include/vstring.h +recipient.o: local.h +recipient.o: recipient.c +resolve.o: ../../include/argv.h +resolve.o: ../../include/attr.h +resolve.o: ../../include/been_here.h +resolve.o: ../../include/bounce.h +resolve.o: ../../include/defer.h +resolve.o: ../../include/deliver_request.h +resolve.o: ../../include/dict.h resolve.o: ../../include/htable.h -resolve.o: ../../include/mail_proto.h -resolve.o: ../../include/vstream.h resolve.o: ../../include/iostuff.h -resolve.o: ../../include/attr.h +resolve.o: ../../include/mail_params.h +resolve.o: ../../include/mail_proto.h +resolve.o: ../../include/maps.h +resolve.o: ../../include/mbox_conf.h +resolve.o: ../../include/msg.h +resolve.o: ../../include/recipient_list.h resolve.o: ../../include/resolve_clnt.h resolve.o: ../../include/rewrite_clnt.h +resolve.o: ../../include/sys_defs.h resolve.o: ../../include/tok822.h -resolve.o: ../../include/mail_params.h -resolve.o: ../../include/defer.h -resolve.o: ../../include/bounce.h -resolve.o: ../../include/deliver_request.h -resolve.o: ../../include/recipient_list.h +resolve.o: ../../include/vbuf.h +resolve.o: ../../include/vstream.h +resolve.o: ../../include/vstring.h resolve.o: local.h -resolve.o: ../../include/been_here.h -resolve.o: ../../include/mbox_conf.h -resolve.o: ../../include/argv.h -resolve.o: ../../include/maps.h -resolve.o: ../../include/dict.h -token.o: token.c -token.o: ../../include/sys_defs.h -token.o: ../../include/msg.h -token.o: ../../include/vstring.h -token.o: ../../include/vbuf.h -token.o: ../../include/vstream.h +resolve.o: resolve.c +token.o: ../../include/argv.h +token.o: ../../include/been_here.h +token.o: ../../include/bounce.h +token.o: ../../include/defer.h +token.o: ../../include/deliver_request.h +token.o: ../../include/dict.h token.o: ../../include/htable.h -token.o: ../../include/readlline.h +token.o: ../../include/mail_params.h +token.o: ../../include/maps.h +token.o: ../../include/mbox_conf.h +token.o: ../../include/msg.h token.o: ../../include/mymalloc.h -token.o: ../../include/vstring_vstream.h +token.o: ../../include/readlline.h +token.o: ../../include/recipient_list.h +token.o: ../../include/resolve_clnt.h token.o: ../../include/stringops.h +token.o: ../../include/sys_defs.h token.o: ../../include/tok822.h -token.o: ../../include/resolve_clnt.h -token.o: ../../include/mail_params.h -token.o: ../../include/bounce.h -token.o: ../../include/deliver_request.h -token.o: ../../include/recipient_list.h -token.o: ../../include/defer.h +token.o: ../../include/vbuf.h +token.o: ../../include/vstream.h +token.o: ../../include/vstring.h +token.o: ../../include/vstring_vstream.h token.o: local.h -token.o: ../../include/been_here.h -token.o: ../../include/mbox_conf.h -token.o: ../../include/argv.h -token.o: ../../include/maps.h -token.o: ../../include/dict.h -unknown.o: unknown.c -unknown.o: ../../include/sys_defs.h -unknown.o: ../../include/msg.h -unknown.o: ../../include/stringops.h -unknown.o: ../../include/vstring.h -unknown.o: ../../include/vbuf.h -unknown.o: ../../include/mymalloc.h -unknown.o: ../../include/been_here.h -unknown.o: ../../include/mail_params.h -unknown.o: ../../include/mail_proto.h -unknown.o: ../../include/vstream.h -unknown.o: ../../include/iostuff.h +token.o: token.c +unknown.o: ../../include/argv.h unknown.o: ../../include/attr.h +unknown.o: ../../include/been_here.h unknown.o: ../../include/bounce.h unknown.o: ../../include/deliver_request.h -unknown.o: ../../include/recipient_list.h +unknown.o: ../../include/dict.h +unknown.o: ../../include/htable.h +unknown.o: ../../include/iostuff.h unknown.o: ../../include/mail_addr.h +unknown.o: ../../include/mail_params.h +unknown.o: ../../include/mail_proto.h +unknown.o: ../../include/maps.h +unknown.o: ../../include/mbox_conf.h +unknown.o: ../../include/msg.h +unknown.o: ../../include/mymalloc.h +unknown.o: ../../include/recipient_list.h +unknown.o: ../../include/resolve_clnt.h unknown.o: ../../include/sent.h -unknown.o: local.h -unknown.o: ../../include/htable.h +unknown.o: ../../include/stringops.h +unknown.o: ../../include/sys_defs.h unknown.o: ../../include/tok822.h -unknown.o: ../../include/resolve_clnt.h -unknown.o: ../../include/mbox_conf.h -unknown.o: ../../include/argv.h -unknown.o: ../../include/maps.h -unknown.o: ../../include/dict.h +unknown.o: ../../include/vbuf.h +unknown.o: ../../include/vstream.h +unknown.o: ../../include/vstring.h +unknown.o: local.h +unknown.o: unknown.c diff --git a/postfix/src/local/alias.c b/postfix/src/local/alias.c index ad8ebee7a..d87571fbd 100644 --- a/postfix/src/local/alias.c +++ b/postfix/src/local/alias.c @@ -164,7 +164,7 @@ int deliver_alias(LOCAL_STATE state, USER_ATTR usr_attr, if (state.level > 100) { msg_warn("possible alias database loop for %s", name); *statusp = bounce_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "5.3.5"), "possible alias database loop for %s", name); return (YES); } @@ -198,7 +198,7 @@ int deliver_alias(LOCAL_STATE state, USER_ATTR usr_attr, */ if (state.request->flags & DEL_REQ_FLAG_VERIFY) { *statusp = sent(BOUNCE_FLAGS(state.request), - SENT_ATTR(state.msg_attr), + SENT_ATTR(state.msg_attr, "2.0.0"), "aliased to %s", alias_result); return (YES); } @@ -226,7 +226,7 @@ int deliver_alias(LOCAL_STATE state, USER_ATTR usr_attr, if ((alias_pwd = mypwuid(alias_uid)) == 0) { msg_warn("cannot find alias database owner for %s", *cpp); *statusp = defer_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "4.3.0"), "cannot find alias database owner"); return (YES); } @@ -273,7 +273,7 @@ int deliver_alias(LOCAL_STATE state, USER_ATTR usr_attr, *statusp = (dict_errno ? defer_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "4.3.0"), "alias database unavailable") : deliver_token_string(state, usr_attr, expansion, &alias_count)); #if 0 @@ -286,7 +286,7 @@ int deliver_alias(LOCAL_STATE state, USER_ATTR usr_attr, if (alias_count < 1) { msg_warn("no recipient in alias lookup result for %s", name); *statusp = defer_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "4.3.0"), "alias database unavailable"); } myfree(expansion); @@ -305,7 +305,7 @@ int deliver_alias(LOCAL_STATE state, USER_ATTR usr_attr, */ if (dict_errno != 0) { *statusp = defer_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "4.3.0"), "alias database unavailable"); return (YES); } else { diff --git a/postfix/src/local/command.c b/postfix/src/local/command.c index 7d7ea4e50..a06cf0208 100644 --- a/postfix/src/local/command.c +++ b/postfix/src/local/command.c @@ -73,6 +73,7 @@ #include #include #include +#include /* Application-specific. */ @@ -83,7 +84,7 @@ int deliver_command(LOCAL_STATE state, USER_ATTR usr_attr, const char *command) { char *myname = "deliver_command"; - VSTRING *why; + DSN_VSTRING *why; int cmd_status; int deliver_status; ARGV *env; @@ -114,7 +115,8 @@ int deliver_command(LOCAL_STATE state, USER_ATTR usr_attr, const char *comma * Don't deliver a trace-only request. */ if (DEL_REQ_TRACE_ONLY(state.request->flags)) - return (sent(BOUNCE_FLAGS(state.request), SENT_ATTR(state.msg_attr), + return (sent(BOUNCE_FLAGS(state.request), + SENT_ATTR(state.msg_attr, "2.0.0"), "delivers to command: %s", command)); /* @@ -136,7 +138,7 @@ int deliver_command(LOCAL_STATE state, USER_ATTR usr_attr, const char *comma if (local_deliver_hdr_mask & DELIVER_HDR_CMD) copy_flags |= MAIL_COPY_DELIVERED; - why = vstring_alloc(1); + why = dsn_vstring_alloc(1); if (vstream_fseek(state.msg_attr.fp, state.msg_attr.offset, SEEK_SET) < 0) msg_fatal("%s: seek queue file %s: %m", myname, VSTREAM_PATH(state.msg_attr.fp)); @@ -195,7 +197,7 @@ int deliver_command(LOCAL_STATE state, USER_ATTR usr_attr, const char *comma if (expand_status & MAC_PARSE_ERROR) { cmd_status = PIPE_STAT_DEFER; - vstring_strcpy(why, "Server configuration error"); + dsn_vstring_update(why, "4.3.5", "Server configuration error"); msg_warn("bad parameter value syntax for %s: %s", VAR_EXEC_DIRECTORY, var_exec_directory); } else { @@ -225,18 +227,15 @@ int deliver_command(LOCAL_STATE state, USER_ATTR usr_attr, const char *comma switch (cmd_status) { case PIPE_STAT_OK: deliver_status = sent(BOUNCE_FLAGS(state.request), - SENT_ATTR(state.msg_attr), + SENT_ATTR(state.msg_attr, "2.0.0"), "delivered to command: %s", command); break; case PIPE_STAT_BOUNCE: - deliver_status = bounce_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), - "%s", vstring_str(why)); - break; case PIPE_STAT_DEFER: - deliver_status = defer_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), - "%s", vstring_str(why)); + deliver_status = (why->dsn[0] == '4' ? defer_append : bounce_append) + (BOUNCE_FLAGS(state.request), + BOUNCE_ATTR(state.msg_attr, why->dsn), + "%s", vstring_str(why->vstring)); break; case PIPE_STAT_CORRUPT: deliver_status = DEL_STAT_DEFER; @@ -249,7 +248,7 @@ int deliver_command(LOCAL_STATE state, USER_ATTR usr_attr, const char *comma /* * Cleanup. */ - vstring_free(why); + dsn_vstring_free(why); return (deliver_status); } diff --git a/postfix/src/local/dotforward.c b/postfix/src/local/dotforward.c index 307082169..6d5df5b88 100644 --- a/postfix/src/local/dotforward.c +++ b/postfix/src/local/dotforward.c @@ -221,7 +221,7 @@ int deliver_dotforward(LOCAL_STATE state, USER_ATTR usr_attr, int *statusp) */ if (state.request->flags & DEL_REQ_FLAG_VERIFY) { *statusp = sent(BOUNCE_FLAGS(state.request), - SENT_ATTR(state.msg_attr), + SENT_ATTR(state.msg_attr, "2.0.0"), "forward via file: %s", STR(path)); forward_found = YES; } else if (been_here(state.dup_filter, "forward %s", STR(path)) == 0) { diff --git a/postfix/src/local/file.c b/postfix/src/local/file.c index 7e5b73f66..09c675aba 100644 --- a/postfix/src/local/file.c +++ b/postfix/src/local/file.c @@ -71,6 +71,7 @@ #include #include #include +#include /* Application-specific. */ @@ -85,7 +86,7 @@ int deliver_file(LOCAL_STATE state, USER_ATTR usr_attr, char *path) char *myname = "deliver_file"; struct stat st; MBOX *mp; - VSTRING *why; + DSN_VSTRING *why; int mail_copy_status = MAIL_COPY_STAT_WRITE; int deliver_status; int copy_flags; @@ -112,14 +113,15 @@ int deliver_file(LOCAL_STATE state, USER_ATTR usr_attr, char *path) */ if ((local_file_deliver_mask & state.msg_attr.exp_type) == 0) return (bounce_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "5.7.1"), "mail to file is restricted")); /* * Don't deliver trace-only requests. */ if (DEL_REQ_TRACE_ONLY(state.request->flags)) - return (sent(BOUNCE_FLAGS(state.request), SENT_ATTR(state.msg_attr), + return (sent(BOUNCE_FLAGS(state.request), + SENT_ATTR(state.msg_attr, "2.0.0"), "delivers to file: %s", path)); /* @@ -146,7 +148,7 @@ int deliver_file(LOCAL_STATE state, USER_ATTR usr_attr, char *path) (long) usr_attr.uid, (long) usr_attr.gid, path); if (vstream_fseek(state.msg_attr.fp, state.msg_attr.offset, SEEK_SET) < 0) msg_fatal("seek queue file %s: %m", state.msg_attr.queue_id); - why = vstring_alloc(100); + why = dsn_vstring_alloc(100); /* * As the specified user, open or create the file, lock it, and append @@ -163,8 +165,7 @@ int deliver_file(LOCAL_STATE state, USER_ATTR usr_attr, char *path) if (mp != 0) { if (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)) { vstream_fclose(mp->fp); - vstring_sprintf(why, "destination file is executable"); - errno = 0; + dsn_vstring_update(why, "5.7.1", "destination file is executable"); } else { mail_copy_status = mail_copy(COPY_ATTR(state.msg_attr), mp->fp, S_ISREG(st.st_mode) ? copy_flags : @@ -181,20 +182,20 @@ int deliver_file(LOCAL_STATE state, USER_ATTR usr_attr, char *path) if (mail_copy_status & MAIL_COPY_STAT_CORRUPT) { deliver_status = DEL_STAT_DEFER; } else if (mail_copy_status != 0) { - deliver_status = (errno == EAGAIN || errno == ENOSPC || errno == ESTALE ? - defer_append : bounce_append) - (BOUNCE_FLAGS(state.request), BOUNCE_ATTR(state.msg_attr), + deliver_status = (why->dsn[0] == '4' ? defer_append : bounce_append) + (BOUNCE_FLAGS(state.request), + BOUNCE_ATTR(state.msg_attr, why->dsn), "cannot append message to destination file %s: %s", - path, STR(why)); + path, vstring_str(why->vstring)); } else { deliver_status = sent(BOUNCE_FLAGS(state.request), - SENT_ATTR(state.msg_attr), + SENT_ATTR(state.msg_attr, "2.0.0"), "delivered to file: %s", path); } /* * Clean up. */ - vstring_free(why); + dsn_vstring_free(why); return (deliver_status); } diff --git a/postfix/src/local/forward.c b/postfix/src/local/forward.c index 2e987d9ba..2ce28d4a3 100644 --- a/postfix/src/local/forward.c +++ b/postfix/src/local/forward.c @@ -280,7 +280,8 @@ static int forward_send(FORWARD_INFO *info, DELIVER_REQUEST *request, * Log successful forwarding. */ if (status == 0) - status = sent(BOUNCE_FLAGS(request), SENT_ATTR(attr), + status = sent(BOUNCE_FLAGS(request), + SENT_ATTR(attr, "2.0.0"), "forwarded as %s", info->queue_id); /* diff --git a/postfix/src/local/include.c b/postfix/src/local/include.c index 53d31a447..4608bc897 100644 --- a/postfix/src/local/include.c +++ b/postfix/src/local/include.c @@ -108,19 +108,19 @@ int deliver_include(LOCAL_STATE state, USER_ATTR usr_attr, char *path) */ if (*path != '/') return (bounce_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "5.3.5"), ":include:%s uses a relative path", path)); if (stat_as(path, &st, usr_attr.uid, usr_attr.gid) < 0) return (bounce_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "5.3.5"), "unable to lookup include file %s: %m", path)); if (S_ISREG(st.st_mode) == 0) return (bounce_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "5.3.5"), "not a regular include file: %s", path)); if (st.st_mode & S_IWOTH) return (bounce_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "5.3.5"), "world writable include file: %s", path)); /* @@ -147,7 +147,7 @@ int deliver_include(LOCAL_STATE state, USER_ATTR usr_attr, char *path) if ((file_pwd = mypwuid(st.st_uid)) == 0) { msg_warn("cannot find username for uid %ld", (long) st.st_uid); return (defer_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "4.3.0"), "%s: cannot find :include: file owner", path)); } if (file_pwd->pw_uid != 0) @@ -184,7 +184,7 @@ int deliver_include(LOCAL_STATE state, USER_ATTR usr_attr, char *path) if ((fp = FOPEN_AS(path, usr_attr.uid, usr_attr.gid)) == 0) { status = bounce_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "5.3.5"), "cannot open include file %s: %m", path); } else { if ((local_ext_prop_mask & EXT_PROP_INCLUDE) == 0) diff --git a/postfix/src/local/indirect.c b/postfix/src/local/indirect.c index 4b81777f0..824d89320 100644 --- a/postfix/src/local/indirect.c +++ b/postfix/src/local/indirect.c @@ -76,7 +76,7 @@ int deliver_indirect(LOCAL_STATE state) */ if (DEL_REQ_TRACE_ONLY(state.request->flags)) return (sent(BOUNCE_FLAGS(state.request), - SENT_ATTR(state.msg_attr), + SENT_ATTR(state.msg_attr, "2.0.0"), "forwards to %s", state.msg_attr.recipient)); /* @@ -85,7 +85,7 @@ int deliver_indirect(LOCAL_STATE state) */ if (forward_append(state.msg_attr)) return (defer_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "4.3.0"), "unable to forward message")); return (0); } diff --git a/postfix/src/local/local.h b/postfix/src/local/local.h index e2945e723..6f39095b8 100644 --- a/postfix/src/local/local.h +++ b/postfix/src/local/local.h @@ -125,19 +125,20 @@ typedef struct LOCAL_STATE { */ #define BOUNCE_FLAGS(request) DEL_REQ_TRACE_FLAGS((request)->flags) -#define BOUNCE_ATTR(attr) attr.queue_id, attr.orig_rcpt, attr.recipient, \ - attr.rcpt_offset, attr.relay, \ - attr.arrival_time -#define BOUNCE_ONE_ATTR(attr) attr.queue_name, attr.queue_id, attr.encoding, \ - attr.sender, attr.orig_rcpt, \ - attr.recipient, attr.rcpt_offset, \ - attr.relay, attr.arrival_time -#define SENT_ATTR(attr) attr.queue_id, attr.orig_rcpt, attr.recipient, \ - attr.rcpt_offset, attr.relay, \ - attr.arrival_time -#define OPENED_ATTR(attr) attr.queue_id, attr.sender -#define COPY_ATTR(attr) attr.sender, attr.orig_rcpt, attr.delivered, \ - attr.fp +#define BOUNCE_ATTR(attr, detail) \ + attr.queue_id, attr.orig_rcpt, attr.recipient, \ + attr.rcpt_offset, attr.relay, detail, attr.arrival_time +#define BOUNCE_ONE_ATTR(attr, detail) \ + attr.queue_name, attr.queue_id, attr.encoding, \ + attr.sender, attr.orig_rcpt, attr.recipient, attr.rcpt_offset, \ + attr.relay, detail, attr.arrival_time +#define SENT_ATTR(attr, detail) \ + attr.queue_id, attr.orig_rcpt, attr.recipient, \ + attr.rcpt_offset, attr.relay, detail, attr.arrival_time +#define OPENED_ATTR(attr) \ + attr.queue_id, attr.sender +#define COPY_ATTR(attr) \ + attr.sender, attr.orig_rcpt, attr.delivered, attr.fp #define MSG_LOG_STATE(m, p) \ msg_info("%s[%d]: local %s recip %s exten %s deliver %s exp_from %s", \ diff --git a/postfix/src/local/mailbox.c b/postfix/src/local/mailbox.c index 7cbd8d7f0..98fc13c43 100644 --- a/postfix/src/local/mailbox.c +++ b/postfix/src/local/mailbox.c @@ -73,10 +73,7 @@ #include #include #include - -#ifndef EDQUOT -#define EDQUOT EFBIG -#endif +#include /* Application-specific. */ @@ -93,7 +90,7 @@ static int deliver_mailbox_file(LOCAL_STATE state, USER_ATTR usr_attr) char *myname = "deliver_mailbox_file"; char *spool_dir; char *mailbox; - VSTRING *why; + DSN_VSTRING *why; MBOX *mp; int mail_copy_status; int deliver_status; @@ -117,7 +114,8 @@ static int deliver_mailbox_file(LOCAL_STATE state, USER_ATTR usr_attr) * Don't deliver trace-only requests. */ if (DEL_REQ_TRACE_ONLY(state.request->flags)) - return (sent(BOUNCE_FLAGS(state.request), SENT_ATTR(state.msg_attr), + return (sent(BOUNCE_FLAGS(state.request), + SENT_ATTR(state.msg_attr, "2.0.0"), "delivers to mailbox")); /* @@ -128,7 +126,7 @@ static int deliver_mailbox_file(LOCAL_STATE state, USER_ATTR usr_attr) msg_fatal("seek message file %s: %m", VSTREAM_PATH(state.msg_attr.fp)); state.msg_attr.delivered = state.msg_attr.recipient; mail_copy_status = MAIL_COPY_STAT_WRITE; - why = vstring_alloc(100); + why = dsn_vstring_alloc(100); if (*var_home_mailbox) { spool_dir = 0; mailbox = concatenate(usr_attr.home, "/", var_home_mailbox, (char *) 0); @@ -194,8 +192,9 @@ static int deliver_mailbox_file(LOCAL_STATE state, USER_ATTR usr_attr) set_eugid(usr_attr.uid, usr_attr.gid); if (S_ISREG(st.st_mode) == 0) { vstream_fclose(mp->fp); - vstring_sprintf(why, "destination is not a regular file"); - errno = 0; + dsn_vstring_update(why, "5.2.0", + "destination %s is not a regular file", + mailbox); } else { end = vstream_fseek(mp->fp, (off_t) 0, SEEK_END); mail_copy_status = mail_copy(COPY_ATTR(state.msg_attr), mp->fp, @@ -213,14 +212,14 @@ static int deliver_mailbox_file(LOCAL_STATE state, USER_ATTR usr_attr) if (mail_copy_status & MAIL_COPY_STAT_CORRUPT) { deliver_status = DEL_STAT_DEFER; } else if (mail_copy_status != 0) { - deliver_status = (errno == EAGAIN || errno == ENOSPC || errno == ESTALE ? - defer_append : bounce_append) - (BOUNCE_FLAGS(state.request), BOUNCE_ATTR(state.msg_attr), - "cannot access mailbox %s for user %s. %s", - mailbox, state.msg_attr.user, vstring_str(why)); + deliver_status = (why->dsn[0] == '4' ? defer_append : bounce_append) + (BOUNCE_FLAGS(state.request), + BOUNCE_ATTR(state.msg_attr, why->dsn), + "cannot update mailbox %s for user %s. %s", + mailbox, state.msg_attr.user, vstring_str(why->vstring)); } else { deliver_status = sent(BOUNCE_FLAGS(state.request), - SENT_ATTR(state.msg_attr), + SENT_ATTR(state.msg_attr, "2.0.0"), "delivered to mailbox"); if (var_biff) { biff = vstring_alloc(100); @@ -234,7 +233,7 @@ static int deliver_mailbox_file(LOCAL_STATE state, USER_ATTR usr_attr) * Clean up. */ myfree(mailbox); - vstring_free(why); + dsn_vstring_free(why); return (deliver_status); } diff --git a/postfix/src/local/maildir.c b/postfix/src/local/maildir.c index 5d0ab04af..9540a2c06 100644 --- a/postfix/src/local/maildir.c +++ b/postfix/src/local/maildir.c @@ -65,6 +65,7 @@ #include #include #include +#include /* Application-specific. */ @@ -80,7 +81,7 @@ int deliver_maildir(LOCAL_STATE state, USER_ATTR usr_attr, char *path) char *curdir; char *tmpfile; char *newfile; - VSTRING *why; + DSN_VSTRING *why; VSTRING *buf; VSTREAM *dst; int mail_copy_status; @@ -102,7 +103,8 @@ int deliver_maildir(LOCAL_STATE state, USER_ATTR usr_attr, char *path) * Don't deliver trace-only requests. */ if (DEL_REQ_TRACE_ONLY(state.request->flags)) - return (sent(BOUNCE_FLAGS(state.request), SENT_ATTR(state.msg_attr), + return (sent(BOUNCE_FLAGS(state.request), + SENT_ATTR(state.msg_attr, "2.0.0"), "delivers to maildir")); /* @@ -114,7 +116,7 @@ int deliver_maildir(LOCAL_STATE state, USER_ATTR usr_attr, char *path) state.msg_attr.delivered = state.msg_attr.recipient; mail_copy_status = MAIL_COPY_STAT_WRITE; buf = vstring_alloc(100); - why = vstring_alloc(100); + why = dsn_vstring_alloc(100); copy_flags = MAIL_COPY_TOFILE | MAIL_COPY_RETURN_PATH | MAIL_COPY_ORIG_RCPT; if (local_deliver_hdr_mask & DELIVER_HDR_FILE) @@ -187,9 +189,9 @@ int deliver_maildir(LOCAL_STATE state, USER_ATTR usr_attr, char *path) && (errno != ENOENT || make_dirs(tmpdir, 0700) < 0 || (dst = vstream_fopen(tmpfile, O_WRONLY | O_CREAT | O_EXCL, 0600)) == 0)) { - vstring_sprintf(why, "create %s: %m", tmpfile); + dsn_vstring_update(why, "5.2.0", "create maildir file %s: %m", tmpfile); } else if (fstat(vstream_fileno(dst), &st) < 0) { - vstring_sprintf(why, "create %s: %m", tmpfile); + dsn_vstring_update(why, "5.2.0", "create maildir file %s: %m", tmpfile); } else { vstring_sprintf(buf, "%lu.V%lxI%lxM%lu.%s", (unsigned long) starttime.tv_sec, @@ -204,7 +206,8 @@ int deliver_maildir(LOCAL_STATE state, USER_ATTR usr_attr, char *path) && (errno != ENOENT || (make_dirs(curdir, 0700), make_dirs(newdir, 0700)) < 0 || sane_link(tmpfile, newfile) < 0)) { - vstring_sprintf(why, "link to %s: %m", newfile); + dsn_vstring_update(why, "5.2.0", + "create maildir file %s: %m", newfile); mail_copy_status = MAIL_COPY_STAT_WRITE; } } @@ -219,22 +222,23 @@ int deliver_maildir(LOCAL_STATE state, USER_ATTR usr_attr, char *path) if (mail_copy_status & MAIL_COPY_STAT_CORRUPT) { deliver_status = DEL_STAT_DEFER; } else if (mail_copy_status != 0) { - deliver_status = (errno == ENOSPC || errno == ESTALE ? - defer_append : bounce_append) - (BOUNCE_FLAGS(state.request), BOUNCE_ATTR(state.msg_attr), - "maildir delivery failed: %s", vstring_str(why)); + deliver_status = (why->dsn[0] == '4' ? defer_append : bounce_append) + (BOUNCE_FLAGS(state.request), + BOUNCE_ATTR(state.msg_attr, why->dsn), + "maildir delivery failed: %s", vstring_str(why->vstring)); if (errno == EACCES) { msg_warn("maildir access problem for UID/GID=%lu/%lu: %s", - (long) usr_attr.uid, (long) usr_attr.gid, vstring_str(why)); + (long) usr_attr.uid, (long) usr_attr.gid, + vstring_str(why->vstring)); msg_warn("perhaps you need to create the maildirs in advance"); } } else { deliver_status = sent(BOUNCE_FLAGS(state.request), - SENT_ATTR(state.msg_attr), + SENT_ATTR(state.msg_attr, "2.0.0"), "delivered to maildir"); } vstring_free(buf); - vstring_free(why); + dsn_vstring_free(why); myfree(newdir); myfree(tmpdir); myfree(curdir); diff --git a/postfix/src/local/recipient.c b/postfix/src/local/recipient.c index 761d58420..de8fdeef5 100644 --- a/postfix/src/local/recipient.c +++ b/postfix/src/local/recipient.c @@ -185,7 +185,7 @@ static int deliver_switch(LOCAL_STATE state, USER_ATTR usr_attr) && (mypwd = mypwnam(state.msg_attr.user)) != 0 && stat_as(mypwd->pw_dir, &st, mypwd->pw_uid, mypwd->pw_gid) < 0) return (defer_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "4.3.0"), "cannot access home directory %s: %m", mypwd->pw_dir)); if (deliver_dotforward(state, usr_attr, &status) == 0 @@ -263,13 +263,13 @@ int deliver_recipient(LOCAL_STATE state, USER_ATTR usr_attr) } if (canon_owner) { rcpt_stat = bounce_one(BOUNCE_FLAGS(state.request), - BOUNCE_ONE_ATTR(state.msg_attr), + BOUNCE_ONE_ATTR(state.msg_attr, "5.4.6"), "mail forwarding loop for %s", state.msg_attr.recipient); vstring_free(canon_owner); } else { rcpt_stat = bounce_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "5.4.6"), "mail forwarding loop for %s", state.msg_attr.recipient); } @@ -309,7 +309,7 @@ int deliver_recipient(LOCAL_STATE state, USER_ATTR usr_attr) */ if (state.msg_attr.user[0] == 0) return (bounce_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "5.1.3"), "null username in %s", state.msg_attr.recipient)); /* diff --git a/postfix/src/local/resolve.c b/postfix/src/local/resolve.c index f495b6d81..f89ffcff2 100644 --- a/postfix/src/local/resolve.c +++ b/postfix/src/local/resolve.c @@ -119,11 +119,11 @@ int deliver_resolve_tree(LOCAL_STATE state, USER_ATTR usr_attr, TOK822 *addr */ if (reply.flags & RESOLVE_FLAG_FAIL) { status = defer_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "4.3.0"), "address resolver failure"); } else if (reply.flags & RESOLVE_FLAG_ERROR) { status = bounce_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "5.1.3"), "bad recipient address syntax: %s", STR(reply.recipient)); } else { diff --git a/postfix/src/local/token.c b/postfix/src/local/token.c index 7954c39ac..35dad7149 100644 --- a/postfix/src/local/token.c +++ b/postfix/src/local/token.c @@ -113,11 +113,11 @@ static int deliver_token_home(LOCAL_STATE state, USER_ATTR usr_attr, char *addr) if (addr[1] != '/') { /* disallow ~user */ status = bounce_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "5.3.5"), "bad home directory syntax for: %s", addr); } else if (usr_attr.home == 0) { /* require user context */ status = bounce_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "5.3.5"), "unknown home directory for: %s", addr); } else if (usr_attr.home[0] == '/' && usr_attr.home[1] == 0) { status = deliver_file(state, usr_attr, addr + 1); @@ -151,7 +151,7 @@ int deliver_token(LOCAL_STATE state, USER_ATTR usr_attr, TOK822 *addr) } else if (*STR(addr_buf) == '|') { if ((local_cmd_deliver_mask & state.msg_attr.exp_type) == 0) status = bounce_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "5.7.1"), "mail to command is restricted"); else status = deliver_command(state, usr_attr, STR(addr_buf) + 1); @@ -210,8 +210,8 @@ int deliver_token_stream(LOCAL_STATE state, USER_ATTR usr_attr, } if (vstream_ferror(fp)) status = defer_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), - "error reading .forward file: %m"); + BOUNCE_ATTR(state.msg_attr, "4.3.0"), + "error reading forwarding file: %m"); vstring_free(buf); return (status); } diff --git a/postfix/src/local/unknown.c b/postfix/src/local/unknown.c index 062a32888..702cee47c 100644 --- a/postfix/src/local/unknown.c +++ b/postfix/src/local/unknown.c @@ -133,7 +133,7 @@ int deliver_unknown(LOCAL_STATE state, USER_ATTR usr_attr) || STREQ(state.msg_attr.local, MAIL_ADDR_POSTMASTER)) { msg_warn("required alias not found: %s", state.msg_attr.local); return (sent(BOUNCE_FLAGS(state.request), - SENT_ATTR(state.msg_attr), + SENT_ATTR(state.msg_attr, "2.0.0"), "discarded")); } @@ -141,6 +141,6 @@ int deliver_unknown(LOCAL_STATE state, USER_ATTR usr_attr) * Bounce the message when no luser relay is specified. */ return (bounce_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "5.1.1"), "unknown user: \"%s\"", state.msg_attr.local)); } diff --git a/postfix/src/master/Makefile.in b/postfix/src/master/Makefile.in index d21f674c8..a6ae05998 100644 --- a/postfix/src/master/Makefile.in +++ b/postfix/src/master/Makefile.in @@ -73,239 +73,240 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -mail_flow.o: mail_flow.c -mail_flow.o: ../../include/sys_defs.h -mail_flow.o: ../../include/msg.h mail_flow.o: ../../include/iostuff.h +mail_flow.o: ../../include/msg.h +mail_flow.o: ../../include/sys_defs.h +mail_flow.o: mail_flow.c mail_flow.o: mail_flow.h mail_flow.o: master_proto.h -master.o: master.c -master.o: ../../include/sys_defs.h +master.o: ../../include/argv.h +master.o: ../../include/clean_env.h +master.o: ../../include/debug_process.h master.o: ../../include/events.h +master.o: ../../include/inet_proto.h +master.o: ../../include/iostuff.h +master.o: ../../include/mail_conf.h +master.o: ../../include/mail_params.h +master.o: ../../include/mail_task.h +master.o: ../../include/mail_version.h master.o: ../../include/msg.h master.o: ../../include/msg_syslog.h -master.o: ../../include/vstring.h -master.o: ../../include/vbuf.h +master.o: ../../include/myflock.h master.o: ../../include/mymalloc.h -master.o: ../../include/iostuff.h -master.o: ../../include/vstream.h +master.o: ../../include/open_lock.h +master.o: ../../include/safe.h master.o: ../../include/stringops.h -master.o: ../../include/myflock.h +master.o: ../../include/sys_defs.h +master.o: ../../include/vbuf.h +master.o: ../../include/vstream.h +master.o: ../../include/vstring.h master.o: ../../include/watchdog.h -master.o: ../../include/clean_env.h -master.o: ../../include/argv.h -master.o: ../../include/safe.h -master.o: ../../include/mail_params.h -master.o: ../../include/mail_version.h -master.o: ../../include/debug_process.h -master.o: ../../include/mail_task.h -master.o: ../../include/mail_conf.h -master.o: ../../include/open_lock.h -master.o: ../../include/inet_proto.h +master.o: master.c master.o: master.h -master_avail.o: master_avail.c -master_avail.o: ../../include/sys_defs.h master_avail.o: ../../include/events.h master_avail.o: ../../include/msg.h -master_avail.o: master_proto.h +master_avail.o: ../../include/sys_defs.h master_avail.o: master.h -master_conf.o: master_conf.c -master_conf.o: ../../include/sys_defs.h -master_conf.o: ../../include/msg.h +master_avail.o: master_avail.c +master_avail.o: master_proto.h master_conf.o: ../../include/argv.h +master_conf.o: ../../include/msg.h +master_conf.o: ../../include/sys_defs.h master_conf.o: master.h -master_ent.o: master_ent.c -master_ent.o: ../../include/sys_defs.h -master_ent.o: ../../include/msg.h -master_ent.o: ../../include/mymalloc.h -master_ent.o: ../../include/vstring.h -master_ent.o: ../../include/vbuf.h -master_ent.o: ../../include/vstream.h +master_conf.o: master_conf.c master_ent.o: ../../include/argv.h -master_ent.o: ../../include/stringops.h -master_ent.o: ../../include/readlline.h -master_ent.o: ../../include/inet_addr_list.h -master_ent.o: ../../include/myaddrinfo.h +master_ent.o: ../../include/attr.h master_ent.o: ../../include/host_port.h master_ent.o: ../../include/inet_addr_host.h -master_ent.o: ../../include/mail_proto.h +master_ent.o: ../../include/inet_addr_list.h master_ent.o: ../../include/iostuff.h -master_ent.o: ../../include/attr.h master_ent.o: ../../include/mail_params.h +master_ent.o: ../../include/mail_proto.h +master_ent.o: ../../include/msg.h +master_ent.o: ../../include/myaddrinfo.h +master_ent.o: ../../include/mymalloc.h master_ent.o: ../../include/own_inet_addr.h +master_ent.o: ../../include/readlline.h +master_ent.o: ../../include/stringops.h +master_ent.o: ../../include/sys_defs.h +master_ent.o: ../../include/vbuf.h +master_ent.o: ../../include/vstream.h +master_ent.o: ../../include/vstring.h master_ent.o: ../../include/wildcard_inet_addr.h -master_ent.o: master_proto.h master_ent.o: master.h -master_flow.o: master_flow.c -master_flow.o: ../../include/sys_defs.h -master_flow.o: ../../include/msg.h +master_ent.o: master_ent.c +master_ent.o: master_proto.h master_flow.o: ../../include/iostuff.h +master_flow.o: ../../include/msg.h +master_flow.o: ../../include/sys_defs.h master_flow.o: master.h +master_flow.o: master_flow.c master_flow.o: master_proto.h -master_listen.o: master_listen.c -master_listen.o: ../../include/sys_defs.h -master_listen.o: ../../include/msg.h -master_listen.o: ../../include/listen.h -master_listen.o: ../../include/iostuff.h -master_listen.o: ../../include/mymalloc.h -master_listen.o: ../../include/stringops.h -master_listen.o: ../../include/vstring.h -master_listen.o: ../../include/vbuf.h master_listen.o: ../../include/inet_addr_list.h +master_listen.o: ../../include/iostuff.h +master_listen.o: ../../include/listen.h +master_listen.o: ../../include/mail_params.h +master_listen.o: ../../include/msg.h master_listen.o: ../../include/myaddrinfo.h +master_listen.o: ../../include/mymalloc.h master_listen.o: ../../include/set_eugid.h master_listen.o: ../../include/set_ugid.h master_listen.o: ../../include/sock_addr.h -master_listen.o: ../../include/mail_params.h +master_listen.o: ../../include/stringops.h +master_listen.o: ../../include/sys_defs.h +master_listen.o: ../../include/vbuf.h +master_listen.o: ../../include/vstring.h master_listen.o: master.h -master_proto.o: master_proto.c -master_proto.o: ../../include/sys_defs.h +master_listen.o: master_listen.c master_proto.o: ../../include/msg.h +master_proto.o: ../../include/sys_defs.h +master_proto.o: master_proto.c master_proto.o: master_proto.h -master_service.o: master_service.c -master_service.o: ../../include/sys_defs.h master_service.o: ../../include/msg.h master_service.o: ../../include/mymalloc.h +master_service.o: ../../include/sys_defs.h master_service.o: master.h -master_sig.o: master_sig.c -master_sig.o: ../../include/sys_defs.h +master_service.o: master_service.c +master_sig.o: ../../include/events.h +master_sig.o: ../../include/iostuff.h master_sig.o: ../../include/msg.h master_sig.o: ../../include/posix_signals.h +master_sig.o: ../../include/sys_defs.h master_sig.o: master.h -master_sig.o: ../../include/iostuff.h -master_sig.o: ../../include/events.h -master_spawn.o: master_spawn.c -master_spawn.o: ../../include/sys_defs.h -master_spawn.o: ../../include/msg.h +master_sig.o: master_sig.c +master_spawn.o: ../../include/argv.h master_spawn.o: ../../include/binhash.h -master_spawn.o: ../../include/mymalloc.h master_spawn.o: ../../include/events.h -master_spawn.o: ../../include/vstring.h +master_spawn.o: ../../include/msg.h +master_spawn.o: ../../include/mymalloc.h +master_spawn.o: ../../include/sys_defs.h master_spawn.o: ../../include/vbuf.h -master_spawn.o: ../../include/argv.h -master_spawn.o: master_proto.h +master_spawn.o: ../../include/vstring.h master_spawn.o: master.h -master_status.o: master_status.c -master_status.o: ../../include/sys_defs.h -master_status.o: ../../include/msg.h -master_status.o: ../../include/events.h +master_spawn.o: master_proto.h +master_spawn.o: master_spawn.c master_status.o: ../../include/binhash.h +master_status.o: ../../include/events.h master_status.o: ../../include/iostuff.h -master_status.o: master_proto.h +master_status.o: ../../include/msg.h +master_status.o: ../../include/sys_defs.h master_status.o: master.h -master_vars.o: master_vars.c -master_vars.o: ../../include/sys_defs.h +master_status.o: master_proto.h +master_status.o: master_status.c +master_vars.o: ../../include/mail_conf.h +master_vars.o: ../../include/mail_params.h master_vars.o: ../../include/msg.h +master_vars.o: ../../include/mymalloc.h master_vars.o: ../../include/stringops.h -master_vars.o: ../../include/vstring.h +master_vars.o: ../../include/sys_defs.h master_vars.o: ../../include/vbuf.h -master_vars.o: ../../include/mymalloc.h -master_vars.o: ../../include/mail_conf.h -master_vars.o: ../../include/mail_params.h +master_vars.o: ../../include/vstring.h master_vars.o: master.h -master_wakeup.o: master_wakeup.c -master_wakeup.o: ../../include/sys_defs.h -master_wakeup.o: ../../include/msg.h -master_wakeup.o: ../../include/trigger.h +master_vars.o: master_vars.c +master_wakeup.o: ../../include/attr.h master_wakeup.o: ../../include/events.h +master_wakeup.o: ../../include/iostuff.h +master_wakeup.o: ../../include/mail_params.h +master_wakeup.o: ../../include/mail_proto.h +master_wakeup.o: ../../include/msg.h master_wakeup.o: ../../include/set_eugid.h master_wakeup.o: ../../include/set_ugid.h -master_wakeup.o: ../../include/mail_proto.h -master_wakeup.o: ../../include/vstream.h +master_wakeup.o: ../../include/sys_defs.h +master_wakeup.o: ../../include/trigger.h master_wakeup.o: ../../include/vbuf.h -master_wakeup.o: ../../include/iostuff.h -master_wakeup.o: ../../include/attr.h -master_wakeup.o: ../../include/mail_params.h +master_wakeup.o: ../../include/vstream.h master_wakeup.o: mail_server.h master_wakeup.o: master.h -multi_server.o: multi_server.c -multi_server.o: ../../include/sys_defs.h -multi_server.o: ../../include/msg.h -multi_server.o: ../../include/msg_syslog.h +master_wakeup.o: master_wakeup.c multi_server.o: ../../include/chroot_uid.h -multi_server.o: ../../include/listen.h -multi_server.o: ../../include/iostuff.h +multi_server.o: ../../include/debug_process.h multi_server.o: ../../include/events.h -multi_server.o: ../../include/vstring.h -multi_server.o: ../../include/vbuf.h -multi_server.o: ../../include/vstream.h +multi_server.o: ../../include/iostuff.h +multi_server.o: ../../include/listen.h +multi_server.o: ../../include/mail_conf.h +multi_server.o: ../../include/mail_dict.h +multi_server.o: ../../include/mail_params.h +multi_server.o: ../../include/mail_task.h +multi_server.o: ../../include/msg.h +multi_server.o: ../../include/msg_syslog.h multi_server.o: ../../include/msg_vstream.h -multi_server.o: ../../include/mymalloc.h -multi_server.o: ../../include/stringops.h -multi_server.o: ../../include/sane_accept.h multi_server.o: ../../include/myflock.h +multi_server.o: ../../include/mymalloc.h +multi_server.o: ../../include/resolve_local.h multi_server.o: ../../include/safe_open.h -multi_server.o: ../../include/watchdog.h +multi_server.o: ../../include/sane_accept.h multi_server.o: ../../include/split_at.h -multi_server.o: ../../include/mail_task.h -multi_server.o: ../../include/debug_process.h -multi_server.o: ../../include/mail_params.h -multi_server.o: ../../include/mail_conf.h -multi_server.o: ../../include/mail_dict.h +multi_server.o: ../../include/stringops.h +multi_server.o: ../../include/sys_defs.h multi_server.o: ../../include/timed_ipc.h -multi_server.o: ../../include/resolve_local.h +multi_server.o: ../../include/vbuf.h +multi_server.o: ../../include/vstream.h +multi_server.o: ../../include/vstring.h +multi_server.o: ../../include/watchdog.h multi_server.o: mail_flow.h -multi_server.o: master_proto.h multi_server.o: mail_server.h -single_server.o: single_server.c -single_server.o: ../../include/sys_defs.h -single_server.o: ../../include/msg.h -single_server.o: ../../include/msg_syslog.h +multi_server.o: master_proto.h +multi_server.o: multi_server.c single_server.o: ../../include/chroot_uid.h -single_server.o: ../../include/vstring.h -single_server.o: ../../include/vbuf.h -single_server.o: ../../include/vstream.h -single_server.o: ../../include/msg_vstream.h -single_server.o: ../../include/mymalloc.h +single_server.o: ../../include/debug_process.h single_server.o: ../../include/events.h single_server.o: ../../include/iostuff.h -single_server.o: ../../include/stringops.h -single_server.o: ../../include/sane_accept.h -single_server.o: ../../include/myflock.h -single_server.o: ../../include/safe_open.h single_server.o: ../../include/listen.h -single_server.o: ../../include/watchdog.h -single_server.o: ../../include/split_at.h -single_server.o: ../../include/mail_params.h -single_server.o: ../../include/mail_task.h -single_server.o: ../../include/debug_process.h single_server.o: ../../include/mail_conf.h single_server.o: ../../include/mail_dict.h -single_server.o: ../../include/timed_ipc.h +single_server.o: ../../include/mail_params.h +single_server.o: ../../include/mail_task.h +single_server.o: ../../include/msg.h +single_server.o: ../../include/msg_syslog.h +single_server.o: ../../include/msg_vstream.h +single_server.o: ../../include/myflock.h +single_server.o: ../../include/mymalloc.h single_server.o: ../../include/resolve_local.h +single_server.o: ../../include/safe_open.h +single_server.o: ../../include/sane_accept.h +single_server.o: ../../include/split_at.h +single_server.o: ../../include/stringops.h +single_server.o: ../../include/sys_defs.h +single_server.o: ../../include/timed_ipc.h +single_server.o: ../../include/vbuf.h +single_server.o: ../../include/vstream.h +single_server.o: ../../include/vstring.h +single_server.o: ../../include/watchdog.h single_server.o: mail_flow.h -single_server.o: master_proto.h single_server.o: mail_server.h -trigger_server.o: trigger_server.c -trigger_server.o: ../../include/sys_defs.h -trigger_server.o: ../../include/msg.h -trigger_server.o: ../../include/msg_syslog.h +single_server.o: master_proto.h +single_server.o: single_server.c trigger_server.o: ../../include/chroot_uid.h -trigger_server.o: ../../include/vstring.h -trigger_server.o: ../../include/vbuf.h -trigger_server.o: ../../include/vstream.h -trigger_server.o: ../../include/msg_vstream.h -trigger_server.o: ../../include/mymalloc.h +trigger_server.o: ../../include/debug_process.h trigger_server.o: ../../include/events.h trigger_server.o: ../../include/iostuff.h -trigger_server.o: ../../include/stringops.h -trigger_server.o: ../../include/sane_accept.h -trigger_server.o: ../../include/myflock.h -trigger_server.o: ../../include/safe_open.h trigger_server.o: ../../include/listen.h -trigger_server.o: ../../include/watchdog.h -trigger_server.o: ../../include/split_at.h -trigger_server.o: ../../include/mail_params.h -trigger_server.o: ../../include/mail_task.h -trigger_server.o: ../../include/debug_process.h trigger_server.o: ../../include/mail_conf.h trigger_server.o: ../../include/mail_dict.h +trigger_server.o: ../../include/mail_params.h +trigger_server.o: ../../include/mail_task.h +trigger_server.o: ../../include/msg.h +trigger_server.o: ../../include/msg_syslog.h +trigger_server.o: ../../include/msg_vstream.h +trigger_server.o: ../../include/myflock.h +trigger_server.o: ../../include/mymalloc.h trigger_server.o: ../../include/resolve_local.h +trigger_server.o: ../../include/safe_open.h +trigger_server.o: ../../include/sane_accept.h +trigger_server.o: ../../include/split_at.h +trigger_server.o: ../../include/stringops.h +trigger_server.o: ../../include/sys_defs.h +trigger_server.o: ../../include/vbuf.h +trigger_server.o: ../../include/vstream.h +trigger_server.o: ../../include/vstring.h +trigger_server.o: ../../include/watchdog.h trigger_server.o: mail_flow.h -trigger_server.o: master_proto.h trigger_server.o: mail_server.h +trigger_server.o: master_proto.h +trigger_server.o: trigger_server.c diff --git a/postfix/src/oqmgr/Makefile.in b/postfix/src/oqmgr/Makefile.in index 509875b75..26ed78b79 100644 --- a/postfix/src/oqmgr/Makefile.in +++ b/postfix/src/oqmgr/Makefile.in @@ -52,199 +52,202 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -qmgr.o: qmgr.c -qmgr.o: ../../include/sys_defs.h -qmgr.o: ../../include/msg.h -qmgr.o: ../../include/events.h -qmgr.o: ../../include/vstream.h -qmgr.o: ../../include/vbuf.h -qmgr.o: ../../include/dict.h qmgr.o: ../../include/argv.h -qmgr.o: ../../include/mail_queue.h -qmgr.o: ../../include/vstring.h -qmgr.o: ../../include/recipient_list.h +qmgr.o: ../../include/attr.h +qmgr.o: ../../include/dict.h +qmgr.o: ../../include/events.h +qmgr.o: ../../include/flush_clnt.h +qmgr.o: ../../include/iostuff.h qmgr.o: ../../include/mail_conf.h +qmgr.o: ../../include/mail_flow.h qmgr.o: ../../include/mail_params.h qmgr.o: ../../include/mail_proto.h -qmgr.o: ../../include/iostuff.h -qmgr.o: ../../include/attr.h -qmgr.o: ../../include/mail_flow.h -qmgr.o: ../../include/flush_clnt.h -qmgr.o: ../../include/master_proto.h +qmgr.o: ../../include/mail_queue.h qmgr.o: ../../include/mail_server.h -qmgr.o: qmgr.h +qmgr.o: ../../include/master_proto.h +qmgr.o: ../../include/msg.h +qmgr.o: ../../include/recipient_list.h qmgr.o: ../../include/scan_dir.h -qmgr_active.o: qmgr_active.c -qmgr_active.o: ../../include/sys_defs.h -qmgr_active.o: ../../include/msg.h +qmgr.o: ../../include/sys_defs.h +qmgr.o: ../../include/vbuf.h +qmgr.o: ../../include/vstream.h +qmgr.o: ../../include/vstring.h +qmgr.o: qmgr.c +qmgr.o: qmgr.h +qmgr_active.o: ../../include/abounce.h +qmgr_active.o: ../../include/bounce.h +qmgr_active.o: ../../include/defer.h +qmgr_active.o: ../../include/deliver_request.h qmgr_active.o: ../../include/events.h -qmgr_active.o: ../../include/mymalloc.h -qmgr_active.o: ../../include/vstream.h -qmgr_active.o: ../../include/vbuf.h -qmgr_active.o: ../../include/mail_params.h qmgr_active.o: ../../include/mail_open_ok.h +qmgr_active.o: ../../include/mail_params.h qmgr_active.o: ../../include/mail_queue.h -qmgr_active.o: ../../include/vstring.h +qmgr_active.o: ../../include/msg.h +qmgr_active.o: ../../include/mymalloc.h +qmgr_active.o: ../../include/rec_type.h qmgr_active.o: ../../include/recipient_list.h -qmgr_active.o: ../../include/bounce.h -qmgr_active.o: ../../include/deliver_request.h -qmgr_active.o: ../../include/defer.h +qmgr_active.o: ../../include/scan_dir.h +qmgr_active.o: ../../include/sys_defs.h qmgr_active.o: ../../include/trace.h -qmgr_active.o: ../../include/abounce.h -qmgr_active.o: ../../include/rec_type.h +qmgr_active.o: ../../include/vbuf.h +qmgr_active.o: ../../include/vstream.h +qmgr_active.o: ../../include/vstring.h qmgr_active.o: qmgr.h -qmgr_active.o: ../../include/scan_dir.h -qmgr_bounce.o: qmgr_bounce.c -qmgr_bounce.o: ../../include/sys_defs.h +qmgr_active.o: qmgr_active.c qmgr_bounce.o: ../../include/bounce.h +qmgr_bounce.o: ../../include/deliver_completed.h qmgr_bounce.o: ../../include/deliver_request.h -qmgr_bounce.o: ../../include/vstring.h +qmgr_bounce.o: ../../include/recipient_list.h +qmgr_bounce.o: ../../include/scan_dir.h +qmgr_bounce.o: ../../include/sys_defs.h qmgr_bounce.o: ../../include/vbuf.h qmgr_bounce.o: ../../include/vstream.h -qmgr_bounce.o: ../../include/recipient_list.h -qmgr_bounce.o: ../../include/deliver_completed.h +qmgr_bounce.o: ../../include/vstring.h qmgr_bounce.o: qmgr.h -qmgr_bounce.o: ../../include/scan_dir.h -qmgr_defer.o: qmgr_defer.c -qmgr_defer.o: ../../include/sys_defs.h -qmgr_defer.o: ../../include/msg.h -qmgr_defer.o: ../../include/vstream.h -qmgr_defer.o: ../../include/vbuf.h -qmgr_defer.o: ../../include/defer.h +qmgr_bounce.o: qmgr_bounce.c qmgr_defer.o: ../../include/bounce.h +qmgr_defer.o: ../../include/defer.h qmgr_defer.o: ../../include/deliver_request.h -qmgr_defer.o: ../../include/vstring.h +qmgr_defer.o: ../../include/msg.h qmgr_defer.o: ../../include/recipient_list.h -qmgr_defer.o: qmgr.h qmgr_defer.o: ../../include/scan_dir.h -qmgr_deliver.o: qmgr_deliver.c -qmgr_deliver.o: ../../include/sys_defs.h -qmgr_deliver.o: ../../include/msg.h -qmgr_deliver.o: ../../include/vstring.h -qmgr_deliver.o: ../../include/vbuf.h -qmgr_deliver.o: ../../include/vstream.h -qmgr_deliver.o: ../../include/vstring_vstream.h +qmgr_defer.o: ../../include/sys_defs.h +qmgr_defer.o: ../../include/vbuf.h +qmgr_defer.o: ../../include/vstream.h +qmgr_defer.o: ../../include/vstring.h +qmgr_defer.o: qmgr.h +qmgr_defer.o: qmgr_defer.c +qmgr_deliver.o: ../../include/attr.h +qmgr_deliver.o: ../../include/deliver_request.h +qmgr_deliver.o: ../../include/dsn_util.h qmgr_deliver.o: ../../include/events.h qmgr_deliver.o: ../../include/iostuff.h -qmgr_deliver.o: ../../include/mail_queue.h +qmgr_deliver.o: ../../include/mail_params.h qmgr_deliver.o: ../../include/mail_proto.h -qmgr_deliver.o: ../../include/attr.h +qmgr_deliver.o: ../../include/mail_queue.h +qmgr_deliver.o: ../../include/msg.h qmgr_deliver.o: ../../include/recipient_list.h -qmgr_deliver.o: ../../include/mail_params.h -qmgr_deliver.o: ../../include/deliver_request.h +qmgr_deliver.o: ../../include/scan_dir.h +qmgr_deliver.o: ../../include/stringops.h +qmgr_deliver.o: ../../include/sys_defs.h +qmgr_deliver.o: ../../include/vbuf.h qmgr_deliver.o: ../../include/verp_sender.h +qmgr_deliver.o: ../../include/vstream.h +qmgr_deliver.o: ../../include/vstring.h +qmgr_deliver.o: ../../include/vstring_vstream.h qmgr_deliver.o: qmgr.h -qmgr_deliver.o: ../../include/scan_dir.h -qmgr_enable.o: qmgr_enable.c -qmgr_enable.o: ../../include/sys_defs.h +qmgr_deliver.o: qmgr_deliver.c qmgr_enable.o: ../../include/msg.h -qmgr_enable.o: ../../include/vstream.h +qmgr_enable.o: ../../include/scan_dir.h +qmgr_enable.o: ../../include/sys_defs.h qmgr_enable.o: ../../include/vbuf.h +qmgr_enable.o: ../../include/vstream.h qmgr_enable.o: qmgr.h -qmgr_enable.o: ../../include/scan_dir.h -qmgr_entry.o: qmgr_entry.c -qmgr_entry.o: ../../include/sys_defs.h +qmgr_enable.o: qmgr_enable.c +qmgr_entry.o: ../../include/deliver_request.h +qmgr_entry.o: ../../include/events.h +qmgr_entry.o: ../../include/mail_params.h qmgr_entry.o: ../../include/msg.h qmgr_entry.o: ../../include/mymalloc.h -qmgr_entry.o: ../../include/events.h -qmgr_entry.o: ../../include/vstream.h +qmgr_entry.o: ../../include/recipient_list.h +qmgr_entry.o: ../../include/scan_dir.h +qmgr_entry.o: ../../include/sys_defs.h qmgr_entry.o: ../../include/vbuf.h -qmgr_entry.o: ../../include/mail_params.h -qmgr_entry.o: ../../include/deliver_request.h +qmgr_entry.o: ../../include/vstream.h qmgr_entry.o: ../../include/vstring.h -qmgr_entry.o: ../../include/recipient_list.h qmgr_entry.o: qmgr.h -qmgr_entry.o: ../../include/scan_dir.h -qmgr_message.o: qmgr_message.c -qmgr_message.o: ../../include/sys_defs.h -qmgr_message.o: ../../include/msg.h -qmgr_message.o: ../../include/mymalloc.h -qmgr_message.o: ../../include/vstring.h -qmgr_message.o: ../../include/vbuf.h -qmgr_message.o: ../../include/vstream.h -qmgr_message.o: ../../include/split_at.h -qmgr_message.o: ../../include/valid_hostname.h +qmgr_entry.o: qmgr_entry.c qmgr_message.o: ../../include/argv.h -qmgr_message.o: ../../include/stringops.h -qmgr_message.o: ../../include/myflock.h -qmgr_message.o: ../../include/dict.h -qmgr_message.o: ../../include/mail_queue.h -qmgr_message.o: ../../include/mail_params.h +qmgr_message.o: ../../include/attr.h qmgr_message.o: ../../include/canon_addr.h -qmgr_message.o: ../../include/record.h -qmgr_message.o: ../../include/rec_type.h -qmgr_message.o: ../../include/sent.h -qmgr_message.o: ../../include/deliver_request.h -qmgr_message.o: ../../include/recipient_list.h qmgr_message.o: ../../include/deliver_completed.h -qmgr_message.o: ../../include/opened.h -qmgr_message.o: ../../include/verp_sender.h -qmgr_message.o: ../../include/mail_proto.h +qmgr_message.o: ../../include/deliver_request.h +qmgr_message.o: ../../include/dict.h qmgr_message.o: ../../include/iostuff.h -qmgr_message.o: ../../include/attr.h +qmgr_message.o: ../../include/mail_params.h +qmgr_message.o: ../../include/mail_proto.h +qmgr_message.o: ../../include/mail_queue.h +qmgr_message.o: ../../include/msg.h +qmgr_message.o: ../../include/myflock.h +qmgr_message.o: ../../include/mymalloc.h +qmgr_message.o: ../../include/opened.h qmgr_message.o: ../../include/qmgr_user.h -qmgr_message.o: ../../include/split_addr.h -qmgr_message.o: ../../include/rewrite_clnt.h +qmgr_message.o: ../../include/rec_type.h +qmgr_message.o: ../../include/recipient_list.h +qmgr_message.o: ../../include/record.h qmgr_message.o: ../../include/resolve_clnt.h -qmgr_message.o: qmgr.h +qmgr_message.o: ../../include/rewrite_clnt.h qmgr_message.o: ../../include/scan_dir.h -qmgr_move.o: qmgr_move.c -qmgr_move.o: ../../include/sys_defs.h +qmgr_message.o: ../../include/sent.h +qmgr_message.o: ../../include/split_addr.h +qmgr_message.o: ../../include/split_at.h +qmgr_message.o: ../../include/stringops.h +qmgr_message.o: ../../include/sys_defs.h +qmgr_message.o: ../../include/valid_hostname.h +qmgr_message.o: ../../include/vbuf.h +qmgr_message.o: ../../include/verp_sender.h +qmgr_message.o: ../../include/vstream.h +qmgr_message.o: ../../include/vstring.h +qmgr_message.o: qmgr.h +qmgr_message.o: qmgr_message.c +qmgr_move.o: ../../include/mail_queue.h +qmgr_move.o: ../../include/mail_scan_dir.h qmgr_move.o: ../../include/msg.h -qmgr_move.o: ../../include/scan_dir.h qmgr_move.o: ../../include/recipient_list.h -qmgr_move.o: ../../include/mail_queue.h -qmgr_move.o: ../../include/vstring.h +qmgr_move.o: ../../include/scan_dir.h +qmgr_move.o: ../../include/sys_defs.h qmgr_move.o: ../../include/vbuf.h qmgr_move.o: ../../include/vstream.h -qmgr_move.o: ../../include/mail_scan_dir.h +qmgr_move.o: ../../include/vstring.h qmgr_move.o: qmgr.h -qmgr_queue.o: qmgr_queue.c -qmgr_queue.o: ../../include/sys_defs.h -qmgr_queue.o: ../../include/msg.h -qmgr_queue.o: ../../include/mymalloc.h +qmgr_move.o: qmgr_move.c qmgr_queue.o: ../../include/events.h qmgr_queue.o: ../../include/htable.h qmgr_queue.o: ../../include/mail_params.h +qmgr_queue.o: ../../include/msg.h +qmgr_queue.o: ../../include/mymalloc.h qmgr_queue.o: ../../include/recipient_list.h -qmgr_queue.o: qmgr.h -qmgr_queue.o: ../../include/vstream.h -qmgr_queue.o: ../../include/vbuf.h qmgr_queue.o: ../../include/scan_dir.h -qmgr_rcpt_list.o: qmgr_rcpt_list.c -qmgr_rcpt_list.o: ../../include/sys_defs.h +qmgr_queue.o: ../../include/sys_defs.h +qmgr_queue.o: ../../include/vbuf.h +qmgr_queue.o: ../../include/vstream.h +qmgr_queue.o: qmgr.h +qmgr_queue.o: qmgr_queue.c qmgr_rcpt_list.o: ../../include/mymalloc.h -qmgr_rcpt_list.o: qmgr.h -qmgr_rcpt_list.o: ../../include/vstream.h -qmgr_rcpt_list.o: ../../include/vbuf.h qmgr_rcpt_list.o: ../../include/scan_dir.h -qmgr_scan.o: qmgr_scan.c -qmgr_scan.o: ../../include/sys_defs.h +qmgr_rcpt_list.o: ../../include/sys_defs.h +qmgr_rcpt_list.o: ../../include/vbuf.h +qmgr_rcpt_list.o: ../../include/vstream.h +qmgr_rcpt_list.o: qmgr.h +qmgr_rcpt_list.o: qmgr_rcpt_list.c +qmgr_scan.o: ../../include/mail_scan_dir.h qmgr_scan.o: ../../include/msg.h qmgr_scan.o: ../../include/mymalloc.h qmgr_scan.o: ../../include/scan_dir.h -qmgr_scan.o: ../../include/mail_scan_dir.h -qmgr_scan.o: qmgr.h -qmgr_scan.o: ../../include/vstream.h +qmgr_scan.o: ../../include/sys_defs.h qmgr_scan.o: ../../include/vbuf.h -qmgr_transport.o: qmgr_transport.c -qmgr_transport.o: ../../include/sys_defs.h -qmgr_transport.o: ../../include/msg.h -qmgr_transport.o: ../../include/htable.h +qmgr_scan.o: ../../include/vstream.h +qmgr_scan.o: qmgr.h +qmgr_scan.o: qmgr_scan.c +qmgr_transport.o: ../../include/attr.h qmgr_transport.o: ../../include/events.h -qmgr_transport.o: ../../include/mymalloc.h -qmgr_transport.o: ../../include/vstream.h -qmgr_transport.o: ../../include/vbuf.h +qmgr_transport.o: ../../include/htable.h qmgr_transport.o: ../../include/iostuff.h -qmgr_transport.o: ../../include/mail_proto.h -qmgr_transport.o: ../../include/attr.h -qmgr_transport.o: ../../include/recipient_list.h qmgr_transport.o: ../../include/mail_conf.h qmgr_transport.o: ../../include/mail_params.h -qmgr_transport.o: qmgr.h +qmgr_transport.o: ../../include/mail_proto.h +qmgr_transport.o: ../../include/msg.h +qmgr_transport.o: ../../include/mymalloc.h +qmgr_transport.o: ../../include/recipient_list.h qmgr_transport.o: ../../include/scan_dir.h +qmgr_transport.o: ../../include/sys_defs.h +qmgr_transport.o: ../../include/vbuf.h +qmgr_transport.o: ../../include/vstream.h +qmgr_transport.o: qmgr.h +qmgr_transport.o: qmgr_transport.c diff --git a/postfix/src/oqmgr/qmgr.h b/postfix/src/oqmgr/qmgr.h index 0cac1664d..40e5699ac 100644 --- a/postfix/src/oqmgr/qmgr.h +++ b/postfix/src/oqmgr/qmgr.h @@ -111,6 +111,7 @@ struct QMGR_TRANSPORT { struct HTABLE *queue_byname; /* queues indexed by domain */ QMGR_QUEUE_LIST queue_list; /* queues, round robin order */ QMGR_TRANSPORT_LIST peers; /* linkage */ + char *dsn; /* why unavailable */ char *reason; /* why unavailable */ }; @@ -120,7 +121,7 @@ struct QMGR_TRANSPORT { typedef void (*QMGR_TRANSPORT_ALLOC_NOTIFY) (QMGR_TRANSPORT *, VSTREAM *); extern QMGR_TRANSPORT *qmgr_transport_select(void); extern void qmgr_transport_alloc(QMGR_TRANSPORT *, QMGR_TRANSPORT_ALLOC_NOTIFY); -extern void qmgr_transport_throttle(QMGR_TRANSPORT *, const char *); +extern void qmgr_transport_throttle(QMGR_TRANSPORT *, const char *, const char *); extern void qmgr_transport_unthrottle(QMGR_TRANSPORT *); extern QMGR_TRANSPORT *qmgr_transport_create(const char *); extern QMGR_TRANSPORT *qmgr_transport_find(const char *); @@ -151,6 +152,7 @@ struct QMGR_QUEUE { QMGR_ENTRY_LIST todo; /* todo queue entries */ QMGR_ENTRY_LIST busy; /* messages on the wire */ QMGR_QUEUE_LIST peers; /* neighbor queues */ + char *dsn; /* why unavailable */ char *reason; /* why unavailable */ time_t clog_time_to_warn; /* time of next warning */ }; @@ -163,7 +165,7 @@ extern int qmgr_queue_count; extern QMGR_QUEUE *qmgr_queue_create(QMGR_TRANSPORT *, const char *, const char *); extern QMGR_QUEUE *qmgr_queue_select(QMGR_TRANSPORT *); extern void qmgr_queue_done(QMGR_QUEUE *); -extern void qmgr_queue_throttle(QMGR_QUEUE *, const char *); +extern void qmgr_queue_throttle(QMGR_QUEUE *, const char *, const char *); extern void qmgr_queue_unthrottle(QMGR_QUEUE *); extern QMGR_QUEUE *qmgr_queue_find(QMGR_TRANSPORT *, const char *); @@ -269,14 +271,15 @@ extern QMGR_MESSAGE *qmgr_message_realloc(QMGR_MESSAGE *); /* * qmgr_defer.c */ -extern void qmgr_defer_transport(QMGR_TRANSPORT *, const char *); -extern void qmgr_defer_todo(QMGR_QUEUE *, const char *); -extern void qmgr_defer_recipient(QMGR_MESSAGE *, QMGR_RCPT *, const char *); +extern void qmgr_defer_transport(QMGR_TRANSPORT *, const char *, const char *); +extern void qmgr_defer_todo(QMGR_QUEUE *, const char *, const char *); +extern void qmgr_defer_recipient(QMGR_MESSAGE *, QMGR_RCPT *, const char *, const char *); /* * qmgr_bounce.c */ -extern void PRINTFLIKE(3, 4) qmgr_bounce_recipient(QMGR_MESSAGE *, QMGR_RCPT *, const char *,...); +extern void PRINTFLIKE(4, 5) qmgr_bounce_recipient(QMGR_MESSAGE *, QMGR_RCPT *, + const char *, const char *,...); /* * qmgr_deliver.c diff --git a/postfix/src/oqmgr/qmgr_bounce.c b/postfix/src/oqmgr/qmgr_bounce.c index 284342d6d..ef870c610 100644 --- a/postfix/src/oqmgr/qmgr_bounce.c +++ b/postfix/src/oqmgr/qmgr_bounce.c @@ -6,9 +6,11 @@ /* SYNOPSIS /* #include "qmgr.h" /* -/* QMGR_QUEUE *qmgr_bounce_recipient(message, recipient, format, ...) +/* QMGR_QUEUE *qmgr_bounce_recipient(message, recipient, +/* dsn, format, ...) /* QMGR_MESSAGE *message; /* QMGR_RCPT *recipient; +/* const char *dsn; /* const char *format; /* DESCRIPTION /* qmgr_bounce_recipient() produces a bounce log record. @@ -22,6 +24,8 @@ /* Open queue file with the message being bounced. /* .IP recipient /* The recipient that will not be delivered. +/* .IP dsn +/* RFC 1893 detail code. /* .IP format /* Free-format text that describes why delivery will not happen. /* DIAGNOSTICS @@ -56,7 +60,7 @@ /* qmgr_bounce_recipient - bounce one message recipient */ void qmgr_bounce_recipient(QMGR_MESSAGE *message, QMGR_RCPT *recipient, - const char *format,...) + const char *dsn, const char *format,...) { va_list ap; int status; @@ -64,8 +68,8 @@ void qmgr_bounce_recipient(QMGR_MESSAGE *message, QMGR_RCPT *recipient, va_start(ap, format); status = vbounce_append(message->tflags, message->queue_id, recipient->orig_rcpt, recipient->address, - recipient->offset, "none", message->arrival_time, - format, ap); + recipient->offset, "none", dsn, + message->arrival_time, format, ap); va_end(ap); if (status == 0) diff --git a/postfix/src/oqmgr/qmgr_defer.c b/postfix/src/oqmgr/qmgr_defer.c index 2f3d89787..8e1675b7e 100644 --- a/postfix/src/oqmgr/qmgr_defer.c +++ b/postfix/src/oqmgr/qmgr_defer.c @@ -6,17 +6,20 @@ /* SYNOPSIS /* #include "qmgr.h" /* -/* void qmgr_defer_recipient(message, recipient, reason) +/* void qmgr_defer_recipient(message, recipient, dsn, reason) /* QMGR_MESSAGE *message; /* QMGR_RCPT *recipient; +/* const char *dsn; /* const char *reason; /* -/* void qmgr_defer_todo(queue, reason) +/* void qmgr_defer_todo(queue, dsn, reason) /* QMGR_QUEUE *queue; +/* const char *dsn; /* const char *reason; /* -/* QMGR_QUEUE *qmgr_defer_transport(transport, reason) +/* QMGR_QUEUE *qmgr_defer_transport(transport, dsn, reason) /* QMGR_TRANSPORT *transport; +/* const char *dsn; /* const char *reason; /* DESCRIPTION /* qmgr_defer_recipient() defers delivery of the named message to @@ -43,6 +46,8 @@ /* host (or local user). /* .IP transport /* Specifies a message delivery transport. +/* .IP dsn +/* X.YY.ZZ Error detail as specified in RFC 1893. /* .IP reason /* Free-format text that describes why delivery is deferred; this /* used for logging purposes, and for updating the message-specific @@ -81,7 +86,8 @@ /* qmgr_defer_transport - defer todo entries for named transport */ -void qmgr_defer_transport(QMGR_TRANSPORT *transport, const char *reason) +void qmgr_defer_transport(QMGR_TRANSPORT *transport, const char *dsn, + const char *reason) { char *myname = "qmgr_defer_transport"; QMGR_QUEUE *queue; @@ -90,23 +96,25 @@ void qmgr_defer_transport(QMGR_TRANSPORT *transport, const char *reason) /* * Sanity checks. */ - if (reason == 0) + if (dsn == 0 || *dsn == 0) + msg_panic("%s: null dsn", myname); + if (reason == 0 || *reason == 0) msg_panic("%s: null reason", myname); if (msg_verbose) - msg_info("defer transport %s: %s", transport->name, reason); + msg_info("defer transport %s: %s %s", transport->name, dsn, reason); /* * Proceed carefully. Queues may disappear as a side effect. */ for (queue = transport->queue_list.next; queue; queue = next) { next = queue->peers.next; - qmgr_defer_todo(queue, reason); + qmgr_defer_todo(queue, dsn, reason); } } /* qmgr_defer_todo - defer all todo queue entries for specific site */ -void qmgr_defer_todo(QMGR_QUEUE *queue, const char *reason) +void qmgr_defer_todo(QMGR_QUEUE *queue, const char *dsn, const char *reason) { char *myname = "qmgr_defer_todo"; QMGR_ENTRY *entry; @@ -118,10 +126,12 @@ void qmgr_defer_todo(QMGR_QUEUE *queue, const char *reason) /* * Sanity checks. */ - if (reason == 0) + if (dsn == 0 || *dsn == 0) + msg_panic("%s: null dsn", myname); + if (reason == 0 || *reason == 0) msg_panic("%s: null reason", myname); if (msg_verbose) - msg_info("defer site %s: %s", queue->name, reason); + msg_info("defer site %s: %s %s", queue->name, dsn, reason); /* * Proceed carefully. Queue entries will disappear as a side effect. @@ -131,7 +141,7 @@ void qmgr_defer_todo(QMGR_QUEUE *queue, const char *reason) message = entry->message; for (nrcpt = 0; nrcpt < entry->rcpt_list.len; nrcpt++) { recipient = entry->rcpt_list.info + nrcpt; - qmgr_defer_recipient(message, recipient, reason); + qmgr_defer_recipient(message, recipient, dsn, reason); } qmgr_entry_done(entry, QMGR_QUEUE_TODO); } @@ -140,14 +150,16 @@ void qmgr_defer_todo(QMGR_QUEUE *queue, const char *reason) /* qmgr_defer_recipient - defer delivery of specific recipient */ void qmgr_defer_recipient(QMGR_MESSAGE *message, QMGR_RCPT *recipient, - const char *reason) + const char *dsn, const char *reason) { char *myname = "qmgr_defer_recipient"; /* * Sanity checks. */ - if (reason == 0) + if (dsn == 0 || *dsn == 0) + msg_panic("%s: null dsn", myname); + if (reason == 0 || *reason == 0) msg_panic("%s: reason 0", myname); /* @@ -155,7 +167,7 @@ void qmgr_defer_recipient(QMGR_MESSAGE *message, QMGR_RCPT *recipient, */ message->flags |= defer_append(message->tflags, message->queue_id, recipient->orig_rcpt, recipient->address, - recipient->offset, "none", + recipient->offset, "none", dsn, message->arrival_time, - "delivery temporarily suspended: %s", reason); + "delivery temporarily suspended: %s", reason); } diff --git a/postfix/src/oqmgr/qmgr_deliver.c b/postfix/src/oqmgr/qmgr_deliver.c index 058aa8a55..67be2d78e 100644 --- a/postfix/src/oqmgr/qmgr_deliver.c +++ b/postfix/src/oqmgr/qmgr_deliver.c @@ -55,6 +55,7 @@ #include #include #include +#include /* Global library. */ @@ -64,6 +65,7 @@ #include #include #include +#include /* Application-specific. */ @@ -162,9 +164,9 @@ static int qmgr_deliver_send_request(QMGR_ENTRY *entry, VSTREAM *stream) ATTR_TYPE_STR, MAIL_ATTR_PROTO_NAME, message->client_proto, ATTR_TYPE_STR, MAIL_ATTR_HELO_NAME, message->client_helo, ATTR_TYPE_STR, MAIL_ATTR_SASL_METHOD, message->sasl_method, - ATTR_TYPE_STR, MAIL_ATTR_SASL_USERNAME, message->sasl_username, + ATTR_TYPE_STR, MAIL_ATTR_SASL_USERNAME, message->sasl_username, ATTR_TYPE_STR, MAIL_ATTR_SASL_SENDER, message->sasl_sender, - ATTR_TYPE_STR, MAIL_ATTR_RWR_CONTEXT, message->rewrite_context, + ATTR_TYPE_STR, MAIL_ATTR_RWR_CONTEXT, message->rewrite_context, ATTR_TYPE_END); if (sender_buf != 0) vstring_free(sender_buf); @@ -210,6 +212,7 @@ static void qmgr_deliver_update(int unused_event, char *context) QMGR_MESSAGE *message = entry->message; VSTRING *reason = vstring_alloc(1); int status; + DSN_SPLIT dp; /* * The message transport has responded. Stop the watchdog timer. @@ -236,10 +239,11 @@ static void qmgr_deliver_update(int unused_event, char *context) */ if (status == DELIVER_STAT_CRASH) { message->flags |= DELIVER_STAT_DEFER; - qmgr_transport_throttle(transport, "unknown mail transport error"); + qmgr_transport_throttle(transport, "4.3.0", + "unknown mail transport error"); msg_warn("transport %s failure -- see a previous warning/fatal/panic logfile record for the problem description", transport->name); - qmgr_defer_transport(transport, transport->reason); + qmgr_defer_transport(transport, transport->dsn, transport->reason); } /* @@ -254,9 +258,12 @@ static void qmgr_deliver_update(int unused_event, char *context) if (status == DELIVER_STAT_DEFER) { message->flags |= DELIVER_STAT_DEFER; if (VSTRING_LEN(reason)) { - qmgr_queue_throttle(queue, vstring_str(reason)); + /* Sanitize the DSN status from delivery agent. */ + dsn_split(&dp, "4.0.0", printable(vstring_str(reason), '?')); + qmgr_queue_throttle(queue, dp.dsn, *dp.text ? + dp.text : "unknown problem"); if (queue->window == 0) - qmgr_defer_todo(queue, queue->reason); + qmgr_defer_todo(queue, queue->dsn, queue->reason); } } @@ -298,8 +305,9 @@ void qmgr_deliver(QMGR_TRANSPORT *transport, VSTREAM *stream) * while some other queue manipulation is happening. */ if (qmgr_deliver_initial_reply(stream) != 0) { - qmgr_transport_throttle(transport, "mail transport unavailable"); - qmgr_defer_transport(transport, transport->reason); + qmgr_transport_throttle(transport, "4.3.0", + "mail transport unavailable"); + qmgr_defer_transport(transport, transport->dsn, transport->reason); (void) vstream_fclose(stream); return; } @@ -325,8 +333,9 @@ void qmgr_deliver(QMGR_TRANSPORT *transport, VSTREAM *stream) */ if (qmgr_deliver_send_request(entry, stream) < 0) { qmgr_entry_unselect(queue, entry); - qmgr_transport_throttle(transport, "mail transport unavailable"); - qmgr_defer_transport(transport, transport->reason); + qmgr_transport_throttle(transport, "4.3.0", + "mail transport unavailable"); + qmgr_defer_transport(transport, transport->dsn, transport->reason); /* warning: entry and queue may be dangling pointers here */ (void) vstream_fclose(stream); return; diff --git a/postfix/src/oqmgr/qmgr_message.c b/postfix/src/oqmgr/qmgr_message.c index 7b09bb233..4c8838d65 100644 --- a/postfix/src/oqmgr/qmgr_message.c +++ b/postfix/src/oqmgr/qmgr_message.c @@ -782,10 +782,11 @@ static int qmgr_resolve_one(QMGR_MESSAGE *message, QMGR_RCPT *recipient, else resolve_clnt_verify(addr, reply); if (reply->flags & RESOLVE_FLAG_FAIL) { - qmgr_defer_recipient(message, recipient, "address resolver failure"); + qmgr_defer_recipient(message, recipient, + "4.3.0", "address resolver failure"); return (-1); } else if (reply->flags & RESOLVE_FLAG_ERROR) { - qmgr_bounce_recipient(message, recipient, + qmgr_bounce_recipient(message, recipient, "5.1.3", "bad address syntax: \"%s\"", addr); return (-1); } else { @@ -880,7 +881,7 @@ static void qmgr_message_resolve(QMGR_MESSAGE *message) * the queue manager process does not help. */ if (recipient->address[0] == 0) { - qmgr_bounce_recipient(message, recipient, + qmgr_bounce_recipient(message, recipient, "5.1.3", "null recipient address"); continue; } @@ -897,7 +898,7 @@ static void qmgr_message_resolve(QMGR_MESSAGE *message) * where it cannot be bypassed. */ if (var_allow_min_user == 0 && recipient->address[0] == '-') { - qmgr_bounce_recipient(message, recipient, + qmgr_bounce_recipient(message, recipient, "5.1.3", "invalid recipient syntax: \"%s\"", recipient->address); continue; @@ -921,7 +922,8 @@ static void qmgr_message_resolve(QMGR_MESSAGE *message) && !var_double_bounce_sender[len]) { status = sent(message->tflags, message->queue_id, recipient->orig_rcpt, recipient->address, - recipient->offset, "none", message->arrival_time, + recipient->offset, "none", "2.0.0", + message->arrival_time, "undeliverable postmaster notification discarded"); if (status == 0) { deliver_completed(message->fp, recipient->offset); @@ -944,7 +946,8 @@ static void qmgr_message_resolve(QMGR_MESSAGE *message) if (strcmp(*cpp, STR(reply.transport)) == 0) break; if (*cpp) { - qmgr_defer_recipient(message, recipient, "deferred transport"); + qmgr_defer_recipient(message, recipient, + "4.3.2", "deferred transport"); continue; } } @@ -962,7 +965,8 @@ static void qmgr_message_resolve(QMGR_MESSAGE *message) * This transport is dead. Defer delivery to this recipient. */ if ((transport->flags & QMGR_TRANSPORT_STAT_DEAD) != 0) { - qmgr_defer_recipient(message, recipient, transport->reason); + qmgr_defer_recipient(message, recipient, transport->dsn, + transport->reason); continue; } @@ -1029,7 +1033,7 @@ static void qmgr_message_resolve(QMGR_MESSAGE *message) * This queue is dead. Defer delivery to this recipient. */ if (queue->window == 0) { - qmgr_defer_recipient(message, recipient, queue->reason); + qmgr_defer_recipient(message, recipient, queue->dsn, queue->reason); continue; } diff --git a/postfix/src/oqmgr/qmgr_queue.c b/postfix/src/oqmgr/qmgr_queue.c index 9e9bb758a..0de06e45c 100644 --- a/postfix/src/oqmgr/qmgr_queue.c +++ b/postfix/src/oqmgr/qmgr_queue.c @@ -23,8 +23,9 @@ /* QMGR_QUEUE *qmgr_queue_select(transport) /* QMGR_TRANSPORT *transport; /* -/* void qmgr_queue_throttle(queue, reason) +/* void qmgr_queue_throttle(queue, dsn, reason) /* QMGR_QUEUE *queue; +/* const char *dsn; /* const char *reason; /* /* void qmgr_queue_unthrottle(queue) @@ -133,6 +134,10 @@ void qmgr_queue_unthrottle(QMGR_QUEUE *queue) */ if (queue->window == 0) { event_cancel_timer(qmgr_queue_unthrottle_wrapper, (char *) queue); + if (queue->dsn == 0) + msg_panic("%s: queue %s: window 0 dsn 0", myname, queue->name); + myfree(queue->dsn); + queue->dsn = 0; if (queue->reason == 0) msg_panic("%s: queue %s: window 0 reason 0", myname, queue->name); myfree(queue->reason); @@ -154,18 +159,22 @@ void qmgr_queue_unthrottle(QMGR_QUEUE *queue) /* qmgr_queue_throttle - handle destination delivery failure */ -void qmgr_queue_throttle(QMGR_QUEUE *queue, const char *reason) +void qmgr_queue_throttle(QMGR_QUEUE *queue, const char *dsn, + const char *reason) { char *myname = "qmgr_queue_throttle"; /* * Sanity checks. */ + if (queue->dsn) + msg_panic("%s: queue %s: spurious dsn %s", + myname, queue->name, queue->dsn); if (queue->reason) msg_panic("%s: queue %s: spurious reason %s", myname, queue->name, queue->reason); if (msg_verbose) - msg_info("%s: queue %s: %s", myname, queue->name, reason); + msg_info("%s: queue %s: %s %s", myname, queue->name, dsn, reason); /* * Decrease the destination's concurrency limit until we reach zero, at @@ -180,6 +189,7 @@ void qmgr_queue_throttle(QMGR_QUEUE *queue, const char *reason) * Special case for a site that just was declared dead. */ if (queue->window == 0) { + queue->dsn = mystrdup(dsn); queue->reason = mystrdup(reason); event_request_timer(qmgr_queue_unthrottle_wrapper, (char *) queue, var_min_backoff_time); @@ -226,6 +236,9 @@ void qmgr_queue_done(QMGR_QUEUE *queue) msg_panic("%s: queue not empty: %s", myname, queue->name); if (queue->window <= 0) msg_panic("%s: window %d", myname, queue->window); + if (queue->dsn) + msg_panic("%s: queue %s: spurious dsn %s", + myname, queue->name, queue->dsn); if (queue->reason) msg_panic("%s: queue %s: spurious reason %s", myname, queue->name, queue->reason); @@ -265,6 +278,7 @@ QMGR_QUEUE *qmgr_queue_create(QMGR_TRANSPORT *transport, const char *name, queue->window = transport->init_dest_concurrency; QMGR_LIST_INIT(queue->todo); QMGR_LIST_INIT(queue->busy); + queue->dsn = 0; queue->reason = 0; queue->clog_time_to_warn = 0; QMGR_LIST_PREPEND(transport->queue_list, queue); diff --git a/postfix/src/oqmgr/qmgr_transport.c b/postfix/src/oqmgr/qmgr_transport.c index dcb4ad1fa..cbce6179a 100644 --- a/postfix/src/oqmgr/qmgr_transport.c +++ b/postfix/src/oqmgr/qmgr_transport.c @@ -18,8 +18,9 @@ /* QMGR_TRANSPORT *transport; /* void (*notify)(QMGR_TRANSPORT *transport, VSTREAM *fp); /* -/* void qmgr_transport_throttle(transport, reason) +/* void qmgr_transport_throttle(transport, dsn, reason) /* QMGR_TRANSPORT *transport; +/* const char *dsn; /* const char *reason; /* /* void qmgr_transport_unthrottle(transport) @@ -128,6 +129,10 @@ void qmgr_transport_unthrottle(QMGR_TRANSPORT *transport) if (msg_verbose) msg_info("%s: transport %s", myname, transport->name); transport->flags &= ~QMGR_TRANSPORT_STAT_DEAD; + if (transport->dsn == 0) + msg_panic("%s: transport %s: null dsn", myname, transport->name); + myfree(transport->dsn); + transport->dsn = 0; if (transport->reason == 0) msg_panic("%s: transport %s: null reason", myname, transport->name); myfree(transport->reason); @@ -139,7 +144,8 @@ void qmgr_transport_unthrottle(QMGR_TRANSPORT *transport) /* qmgr_transport_throttle - disable delivery process allocation */ -void qmgr_transport_throttle(QMGR_TRANSPORT *transport, const char *reason) +void qmgr_transport_throttle(QMGR_TRANSPORT *transport, const char *dsn, + const char *reason) { char *myname = "qmgr_transport_throttle"; @@ -150,9 +156,13 @@ void qmgr_transport_throttle(QMGR_TRANSPORT *transport, const char *reason) */ if ((transport->flags & QMGR_TRANSPORT_STAT_DEAD) == 0) { if (msg_verbose) - msg_info("%s: transport %s: reason: %s", - myname, transport->name, reason); + msg_info("%s: transport %s: dsn: %s reason: %s", + myname, transport->name, dsn, reason); transport->flags |= QMGR_TRANSPORT_STAT_DEAD; + if (transport->dsn) + msg_panic("%s: transport %s: spurious dsn: %s", + myname, transport->name, transport->dsn); + transport->dsn = mystrdup(dsn); if (transport->reason) msg_panic("%s: transport %s: spurious reason: %s", myname, transport->name, transport->reason); @@ -286,7 +296,7 @@ void qmgr_transport_alloc(QMGR_TRANSPORT *transport, QMGR_TRANSPORT_ALLOC_NOT if ((stream = mail_connect(MAIL_CLASS_PRIVATE, transport->name, BLOCK_MODE)) == 0) { msg_warn("connect to transport %s: %m", transport->name); - qmgr_transport_throttle(transport, "transport is unavailable"); + qmgr_transport_throttle(transport, "4.3.0", "transport is unavailable"); return; } alloc = (QMGR_TRANSPORT_ALLOC *) mymalloc(sizeof(*alloc)); @@ -333,6 +343,7 @@ QMGR_TRANSPORT *qmgr_transport_create(const char *name) transport->queue_byname = htable_create(0); QMGR_LIST_INIT(transport->queue_list); + transport->dsn = 0; transport->reason = 0; if (qmgr_transport_byname == 0) qmgr_transport_byname = htable_create(10); diff --git a/postfix/src/pickup/Makefile.in b/postfix/src/pickup/Makefile.in index 5e7436029..b5d53ee56 100644 --- a/postfix/src/pickup/Makefile.in +++ b/postfix/src/pickup/Makefile.in @@ -47,33 +47,34 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -pickup.o: pickup.c -pickup.o: ../../include/sys_defs.h -pickup.o: ../../include/msg.h -pickup.o: ../../include/scan_dir.h -pickup.o: ../../include/vstring.h -pickup.o: ../../include/vbuf.h -pickup.o: ../../include/vstream.h -pickup.o: ../../include/set_ugid.h -pickup.o: ../../include/safe_open.h -pickup.o: ../../include/watchdog.h -pickup.o: ../../include/mail_queue.h -pickup.o: ../../include/mail_open_ok.h -pickup.o: ../../include/mymalloc.h -pickup.o: ../../include/mail_proto.h -pickup.o: ../../include/iostuff.h pickup.o: ../../include/attr.h pickup.o: ../../include/cleanup_user.h +pickup.o: ../../include/input_transp.h +pickup.o: ../../include/iostuff.h +pickup.o: ../../include/lex_822.h +pickup.o: ../../include/mail_conf.h pickup.o: ../../include/mail_date.h +pickup.o: ../../include/mail_open_ok.h pickup.o: ../../include/mail_params.h -pickup.o: ../../include/mail_conf.h -pickup.o: ../../include/record.h -pickup.o: ../../include/rec_type.h -pickup.o: ../../include/lex_822.h -pickup.o: ../../include/input_transp.h +pickup.o: ../../include/mail_proto.h +pickup.o: ../../include/mail_queue.h pickup.o: ../../include/mail_server.h +pickup.o: ../../include/msg.h +pickup.o: ../../include/mymalloc.h +pickup.o: ../../include/rec_type.h +pickup.o: ../../include/record.h +pickup.o: ../../include/safe_open.h +pickup.o: ../../include/scan_dir.h +pickup.o: ../../include/set_ugid.h +pickup.o: ../../include/sys_defs.h +pickup.o: ../../include/vbuf.h +pickup.o: ../../include/vstream.h +pickup.o: ../../include/vstring.h +pickup.o: ../../include/watchdog.h +pickup.o: pickup.c diff --git a/postfix/src/pipe/Makefile.in b/postfix/src/pipe/Makefile.in index 6a676ed8f..a3b622ffe 100644 --- a/postfix/src/pipe/Makefile.in +++ b/postfix/src/pipe/Makefile.in @@ -47,41 +47,43 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -pipe.o: pipe.c -pipe.o: ../../include/sys_defs.h -pipe.o: ../../include/msg.h -pipe.o: ../../include/vstream.h -pipe.o: ../../include/vbuf.h -pipe.o: ../../include/vstring.h pipe.o: ../../include/argv.h -pipe.o: ../../include/htable.h +pipe.o: ../../include/bounce.h +pipe.o: ../../include/canon_addr.h +pipe.o: ../../include/defer.h +pipe.o: ../../include/deliver_completed.h +pipe.o: ../../include/deliver_request.h pipe.o: ../../include/dict.h +pipe.o: ../../include/dsn_util.h +pipe.o: ../../include/flush_clnt.h +pipe.o: ../../include/htable.h pipe.o: ../../include/iostuff.h -pipe.o: ../../include/mymalloc.h pipe.o: ../../include/mac_parse.h -pipe.o: ../../include/set_eugid.h -pipe.o: ../../include/split_at.h -pipe.o: ../../include/stringops.h -pipe.o: ../../include/recipient_list.h -pipe.o: ../../include/deliver_request.h -pipe.o: ../../include/mail_params.h +pipe.o: ../../include/mail_addr.h pipe.o: ../../include/mail_conf.h -pipe.o: ../../include/bounce.h -pipe.o: ../../include/defer.h -pipe.o: ../../include/deliver_completed.h -pipe.o: ../../include/sent.h -pipe.o: ../../include/pipe_command.h pipe.o: ../../include/mail_copy.h -pipe.o: ../../include/mail_addr.h -pipe.o: ../../include/canon_addr.h -pipe.o: ../../include/split_addr.h +pipe.o: ../../include/mail_params.h +pipe.o: ../../include/mail_server.h +pipe.o: ../../include/msg.h +pipe.o: ../../include/mymalloc.h pipe.o: ../../include/off_cvt.h +pipe.o: ../../include/pipe_command.h pipe.o: ../../include/quote_822_local.h pipe.o: ../../include/quote_flags.h -pipe.o: ../../include/flush_clnt.h -pipe.o: ../../include/mail_server.h +pipe.o: ../../include/recipient_list.h +pipe.o: ../../include/sent.h +pipe.o: ../../include/set_eugid.h +pipe.o: ../../include/split_addr.h +pipe.o: ../../include/split_at.h +pipe.o: ../../include/stringops.h +pipe.o: ../../include/sys_defs.h +pipe.o: ../../include/vbuf.h +pipe.o: ../../include/vstream.h +pipe.o: ../../include/vstring.h +pipe.o: pipe.c diff --git a/postfix/src/pipe/pipe.c b/postfix/src/pipe/pipe.c index 8aae15f4d..380641119 100644 --- a/postfix/src/pipe/pipe.c +++ b/postfix/src/pipe/pipe.c @@ -353,6 +353,7 @@ #include #include #include +#include /* Single server skeleton. */ @@ -822,7 +823,7 @@ static void get_service_attr(PIPE_ATTR *attr, char **argv) static int eval_command_status(int command_status, char *service, DELIVER_REQUEST *request, VSTREAM *src, - char *why) + const char *dsn, const char *text) { RECIPIENT *rcpt; int status; @@ -840,31 +841,36 @@ static int eval_command_status(int command_status, char *service, status = sent(DEL_REQ_TRACE_FLAGS(request->flags), request->queue_id, rcpt->orig_addr, rcpt->address, rcpt->offset, service, - request->arrival_time, "%s", request->nexthop); + "2.0.0", request->arrival_time, + "%s", request->nexthop); if (status == 0 && (request->flags & DEL_REQ_FLAG_SUCCESS)) deliver_completed(src, rcpt->offset); result |= status; } break; case PIPE_STAT_BOUNCE: - for (n = 0; n < request->rcpt_list.len; n++) { - rcpt = request->rcpt_list.info + n; - status = bounce_append(DEL_REQ_TRACE_FLAGS(request->flags), - request->queue_id, rcpt->orig_addr, - rcpt->address, rcpt->offset, service, - request->arrival_time, "%s", why); - if (status == 0) - deliver_completed(src, rcpt->offset); - result |= status; - } - break; case PIPE_STAT_DEFER: - for (n = 0; n < request->rcpt_list.len; n++) { - rcpt = request->rcpt_list.info + n; - result |= defer_append(DEL_REQ_TRACE_FLAGS(request->flags), - request->queue_id, rcpt->orig_addr, - rcpt->address, rcpt->offset, service, - request->arrival_time, "%s", why); + if (dsn[0] != '4') { + for (n = 0; n < request->rcpt_list.len; n++) { + rcpt = request->rcpt_list.info + n; + status = bounce_append(DEL_REQ_TRACE_FLAGS(request->flags), + request->queue_id, rcpt->orig_addr, + rcpt->address, rcpt->offset, service, + dsn, request->arrival_time, + "%s", text); + if (status == 0) + deliver_completed(src, rcpt->offset); + result |= status; + } + } else { + for (n = 0; n < request->rcpt_list.len; n++) { + rcpt = request->rcpt_list.info + n; + result |= defer_append(DEL_REQ_TRACE_FLAGS(request->flags), + request->queue_id, rcpt->orig_addr, + rcpt->address, rcpt->offset, service, + dsn, request->arrival_time, + "%s", text); + } } break; case PIPE_STAT_CORRUPT: @@ -885,7 +891,7 @@ static int deliver_message(DELIVER_REQUEST *request, char *service, char **argv) static PIPE_PARAMS conf; static PIPE_ATTR attr; RECIPIENT_LIST *rcpt_list = &request->rcpt_list; - VSTRING *why = vstring_alloc(100); + DSN_VSTRING *why = dsn_vstring_alloc(100); VSTRING *buf; ARGV *expanded_argv = 0; int deliver_status; @@ -893,7 +899,7 @@ static int deliver_message(DELIVER_REQUEST *request, char *service, char **argv) ARGV *export_env; #define DELIVER_MSG_CLEANUP() { \ - vstring_free(why); \ + dsn_vstring_free(why); \ if (expanded_argv) argv_free(expanded_argv); \ } @@ -936,7 +942,7 @@ static int deliver_message(DELIVER_REQUEST *request, char *service, char **argv) */ if ((attr.flags & MAIL_COPY_DELIVERED) && (rcpt_list->len > 1)) { deliver_status = eval_command_status(PIPE_STAT_DEFER, service, - request, request->fp, + request, request->fp, "4.3.5", "mailer configuration error"); msg_warn("pipe flag `D' requires %s_destination_recipient_limit = 1", service); @@ -949,7 +955,7 @@ static int deliver_message(DELIVER_REQUEST *request, char *service, char **argv) */ if ((attr.flags & MAIL_COPY_ORIG_RCPT) && (rcpt_list->len > 1)) { deliver_status = eval_command_status(PIPE_STAT_DEFER, service, - request, request->fp, + request, request->fp, "4.3.5", "mailer configuration error"); msg_warn("pipe flag `O' requires %s_destination_recipient_limit = 1", service); @@ -966,7 +972,8 @@ static int deliver_message(DELIVER_REQUEST *request, char *service, char **argv) myname, (long) attr.size_limit, request->data_size); deliver_status = eval_command_status(PIPE_STAT_BOUNCE, service, - request, request->fp, "message too large"); + request, request->fp, "5.2.3", + "message too large"); DELIVER_MSG_CLEANUP(); return (deliver_status); } @@ -985,7 +992,7 @@ static int deliver_message(DELIVER_REQUEST *request, char *service, char **argv) status = sent(DEL_REQ_TRACE_FLAGS(request->flags), request->queue_id, rcpt->orig_addr, rcpt->address, rcpt->offset, service, - request->arrival_time, + "2.0.0", request->arrival_time, "delivers to command: %s", attr.command[0]); if (status == 0 && (request->flags & DEL_REQ_FLAG_SUCCESS)) deliver_completed(request->fp, rcpt->offset); @@ -1037,7 +1044,7 @@ static int deliver_message(DELIVER_REQUEST *request, char *service, char **argv) if ((expanded_argv = expand_argv(service, attr.command, rcpt_list, attr.flags)) == 0) { deliver_status = eval_command_status(PIPE_STAT_DEFER, service, - request, request->fp, + request, request->fp, "4.3.5", "mailer configuration error"); DELIVER_MSG_CLEANUP(); return (deliver_status); @@ -1060,7 +1067,8 @@ static int deliver_message(DELIVER_REQUEST *request, char *service, char **argv) argv_free(export_env); deliver_status = eval_command_status(command_status, service, request, - request->fp, vstring_str(why)); + request->fp, why->dsn, + vstring_str(why->vstring)); /* * Clean up. diff --git a/postfix/src/postalias/Makefile.in b/postfix/src/postalias/Makefile.in index 2e414ad78..84029ab70 100644 --- a/postfix/src/postalias/Makefile.in +++ b/postfix/src/postalias/Makefile.in @@ -71,31 +71,32 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -postalias.o: postalias.c -postalias.o: ../../include/sys_defs.h +postalias.o: ../../include/argv.h +postalias.o: ../../include/dict.h +postalias.o: ../../include/mail_conf.h +postalias.o: ../../include/mail_dict.h +postalias.o: ../../include/mail_params.h +postalias.o: ../../include/mail_task.h +postalias.o: ../../include/mkmap.h postalias.o: ../../include/msg.h -postalias.o: ../../include/mymalloc.h -postalias.o: ../../include/vstring.h -postalias.o: ../../include/vbuf.h -postalias.o: ../../include/vstream.h -postalias.o: ../../include/msg_vstream.h postalias.o: ../../include/msg_syslog.h +postalias.o: ../../include/msg_vstream.h +postalias.o: ../../include/mymalloc.h postalias.o: ../../include/readlline.h -postalias.o: ../../include/stringops.h -postalias.o: ../../include/split_at.h -postalias.o: ../../include/vstring_vstream.h +postalias.o: ../../include/resolve_clnt.h postalias.o: ../../include/set_eugid.h +postalias.o: ../../include/split_at.h +postalias.o: ../../include/stringops.h +postalias.o: ../../include/sys_defs.h postalias.o: ../../include/tok822.h -postalias.o: ../../include/resolve_clnt.h -postalias.o: ../../include/mail_conf.h -postalias.o: ../../include/mail_dict.h -postalias.o: ../../include/mail_params.h -postalias.o: ../../include/mkmap.h -postalias.o: ../../include/dict.h -postalias.o: ../../include/argv.h -postalias.o: ../../include/mail_task.h +postalias.o: ../../include/vbuf.h +postalias.o: ../../include/vstream.h +postalias.o: ../../include/vstring.h +postalias.o: ../../include/vstring_vstream.h +postalias.o: postalias.c diff --git a/postfix/src/postcat/Makefile.in b/postfix/src/postcat/Makefile.in index 4cce48332..39821d87c 100644 --- a/postfix/src/postcat/Makefile.in +++ b/postfix/src/postcat/Makefile.in @@ -47,21 +47,22 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -postcat.o: postcat.c -postcat.o: ../../include/sys_defs.h +postcat.o: ../../include/mail_conf.h +postcat.o: ../../include/mail_params.h +postcat.o: ../../include/mail_queue.h postcat.o: ../../include/msg.h -postcat.o: ../../include/vstream.h +postcat.o: ../../include/msg_vstream.h +postcat.o: ../../include/rec_type.h +postcat.o: ../../include/record.h +postcat.o: ../../include/sys_defs.h postcat.o: ../../include/vbuf.h +postcat.o: ../../include/vstream.h postcat.o: ../../include/vstring.h -postcat.o: ../../include/msg_vstream.h postcat.o: ../../include/vstring_vstream.h -postcat.o: ../../include/record.h -postcat.o: ../../include/rec_type.h -postcat.o: ../../include/mail_queue.h -postcat.o: ../../include/mail_conf.h -postcat.o: ../../include/mail_params.h +postcat.o: postcat.c diff --git a/postfix/src/postconf/Makefile.in b/postfix/src/postconf/Makefile.in index 069f951b0..ede96260c 100644 --- a/postfix/src/postconf/Makefile.in +++ b/postfix/src/postconf/Makefile.in @@ -61,50 +61,51 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -postconf.o: postconf.c -postconf.o: ../../include/sys_defs.h -postconf.o: ../../include/msg.h -postconf.o: ../../include/vstream.h -postconf.o: ../../include/vbuf.h -postconf.o: ../../include/msg_vstream.h +postconf.o: ../../include/argv.h +postconf.o: ../../include/attr.h +postconf.o: ../../include/dict.h postconf.o: ../../include/get_hostname.h -postconf.o: ../../include/stringops.h -postconf.o: ../../include/vstring.h postconf.o: ../../include/htable.h -postconf.o: ../../include/dict.h -postconf.o: ../../include/argv.h -postconf.o: ../../include/safe.h -postconf.o: ../../include/mymalloc.h -postconf.o: ../../include/split_at.h -postconf.o: ../../include/vstring_vstream.h -postconf.o: ../../include/myflock.h postconf.o: ../../include/inet_proto.h -postconf.o: ../../include/mynetworks.h +postconf.o: ../../include/iostuff.h +postconf.o: ../../include/mail_addr.h postconf.o: ../../include/mail_conf.h postconf.o: ../../include/mail_dict.h +postconf.o: ../../include/mail_params.h postconf.o: ../../include/mail_proto.h -postconf.o: ../../include/iostuff.h -postconf.o: ../../include/attr.h postconf.o: ../../include/mail_version.h -postconf.o: ../../include/mail_params.h -postconf.o: ../../include/mail_addr.h postconf.o: ../../include/mbox_conf.h -postconf.o: time_vars.h -postconf.o: bool_vars.h -postconf.o: int_vars.h -postconf.o: str_vars.h -postconf.o: raw_vars.h +postconf.o: ../../include/msg.h +postconf.o: ../../include/msg_vstream.h +postconf.o: ../../include/myflock.h +postconf.o: ../../include/mymalloc.h +postconf.o: ../../include/mynetworks.h +postconf.o: ../../include/safe.h +postconf.o: ../../include/split_at.h +postconf.o: ../../include/stringops.h +postconf.o: ../../include/sys_defs.h +postconf.o: ../../include/vbuf.h +postconf.o: ../../include/vstream.h +postconf.o: ../../include/vstring.h +postconf.o: ../../include/vstring_vstream.h +postconf.o: auto_table.h postconf.o: auto_vars.h -postconf.o: install_vars.h -postconf.o: time_table.h postconf.o: bool_table.h -postconf.o: int_table.h -postconf.o: str_table.h -postconf.o: auto_table.h +postconf.o: bool_vars.h postconf.o: install_table.h +postconf.o: install_vars.h +postconf.o: int_table.h +postconf.o: int_vars.h +postconf.o: postconf.c postconf.o: raw_table.h +postconf.o: raw_vars.h +postconf.o: str_table.h +postconf.o: str_vars.h +postconf.o: time_table.h +postconf.o: time_vars.h diff --git a/postfix/src/postdrop/Makefile.in b/postfix/src/postdrop/Makefile.in index 6ddcf835e..3b0b2e83a 100644 --- a/postfix/src/postdrop/Makefile.in +++ b/postfix/src/postdrop/Makefile.in @@ -47,32 +47,33 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -postdrop.o: postdrop.c -postdrop.o: ../../include/sys_defs.h -postdrop.o: ../../include/msg.h -postdrop.o: ../../include/mymalloc.h -postdrop.o: ../../include/vstream.h -postdrop.o: ../../include/vbuf.h -postdrop.o: ../../include/vstring.h -postdrop.o: ../../include/msg_vstream.h -postdrop.o: ../../include/msg_syslog.h postdrop.o: ../../include/argv.h +postdrop.o: ../../include/attr.h +postdrop.o: ../../include/clean_env.h +postdrop.o: ../../include/cleanup_user.h postdrop.o: ../../include/iostuff.h -postdrop.o: ../../include/stringops.h +postdrop.o: ../../include/mail_conf.h +postdrop.o: ../../include/mail_params.h postdrop.o: ../../include/mail_proto.h -postdrop.o: ../../include/attr.h postdrop.o: ../../include/mail_queue.h -postdrop.o: ../../include/mail_params.h -postdrop.o: ../../include/mail_conf.h -postdrop.o: ../../include/mail_task.h -postdrop.o: ../../include/clean_env.h postdrop.o: ../../include/mail_stream.h -postdrop.o: ../../include/cleanup_user.h -postdrop.o: ../../include/record.h +postdrop.o: ../../include/mail_task.h +postdrop.o: ../../include/msg.h +postdrop.o: ../../include/msg_syslog.h +postdrop.o: ../../include/msg_vstream.h +postdrop.o: ../../include/mymalloc.h postdrop.o: ../../include/rec_type.h +postdrop.o: ../../include/record.h +postdrop.o: ../../include/stringops.h +postdrop.o: ../../include/sys_defs.h postdrop.o: ../../include/user_acl.h +postdrop.o: ../../include/vbuf.h +postdrop.o: ../../include/vstream.h +postdrop.o: ../../include/vstring.h +postdrop.o: postdrop.c diff --git a/postfix/src/postfix/Makefile.in b/postfix/src/postfix/Makefile.in index dad1be2c3..50415d18b 100644 --- a/postfix/src/postfix/Makefile.in +++ b/postfix/src/postfix/Makefile.in @@ -51,22 +51,23 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -postfix.o: postfix.c -postfix.o: ../../include/sys_defs.h -postfix.o: ../../include/vstream.h -postfix.o: ../../include/vbuf.h +postfix.o: ../../include/argv.h +postfix.o: ../../include/clean_env.h +postfix.o: ../../include/mail_conf.h +postfix.o: ../../include/mail_params.h postfix.o: ../../include/msg.h -postfix.o: ../../include/msg_vstream.h postfix.o: ../../include/msg_syslog.h +postfix.o: ../../include/msg_vstream.h +postfix.o: ../../include/safe.h postfix.o: ../../include/stringops.h +postfix.o: ../../include/sys_defs.h +postfix.o: ../../include/vbuf.h +postfix.o: ../../include/vstream.h postfix.o: ../../include/vstring.h -postfix.o: ../../include/clean_env.h -postfix.o: ../../include/argv.h -postfix.o: ../../include/safe.h -postfix.o: ../../include/mail_conf.h -postfix.o: ../../include/mail_params.h +postfix.o: postfix.c diff --git a/postfix/src/postkick/Makefile.in b/postfix/src/postkick/Makefile.in index 568edf654..afe3d565f 100644 --- a/postfix/src/postkick/Makefile.in +++ b/postfix/src/postkick/Makefile.in @@ -47,22 +47,23 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -postkick.o: postkick.c -postkick.o: ../../include/sys_defs.h -postkick.o: ../../include/msg.h -postkick.o: ../../include/mymalloc.h -postkick.o: ../../include/vstream.h -postkick.o: ../../include/vbuf.h -postkick.o: ../../include/msg_vstream.h -postkick.o: ../../include/safe.h +postkick.o: ../../include/attr.h postkick.o: ../../include/events.h -postkick.o: ../../include/mail_proto.h postkick.o: ../../include/iostuff.h -postkick.o: ../../include/attr.h -postkick.o: ../../include/mail_params.h postkick.o: ../../include/mail_conf.h +postkick.o: ../../include/mail_params.h +postkick.o: ../../include/mail_proto.h +postkick.o: ../../include/msg.h +postkick.o: ../../include/msg_vstream.h +postkick.o: ../../include/mymalloc.h +postkick.o: ../../include/safe.h +postkick.o: ../../include/sys_defs.h +postkick.o: ../../include/vbuf.h +postkick.o: ../../include/vstream.h +postkick.o: postkick.c diff --git a/postfix/src/postlock/Makefile.in b/postfix/src/postlock/Makefile.in index 48853df79..c40f41da9 100644 --- a/postfix/src/postlock/Makefile.in +++ b/postfix/src/postlock/Makefile.in @@ -47,26 +47,28 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -postlock.o: postlock.c -postlock.o: ../../include/sys_defs.h -postlock.o: ../../include/msg.h -postlock.o: ../../include/vstring.h -postlock.o: ../../include/vbuf.h -postlock.o: ../../include/vstream.h -postlock.o: ../../include/msg_vstream.h -postlock.o: ../../include/iostuff.h -postlock.o: ../../include/mail_params.h -postlock.o: ../../include/dot_lockfile.h +postlock.o: ../../include/argv.h postlock.o: ../../include/deliver_flock.h -postlock.o: ../../include/myflock.h +postlock.o: ../../include/dot_lockfile.h +postlock.o: ../../include/dsn_util.h +postlock.o: ../../include/iostuff.h postlock.o: ../../include/mail_conf.h -postlock.o: ../../include/sys_exits.h +postlock.o: ../../include/mail_params.h postlock.o: ../../include/mbox_conf.h -postlock.o: ../../include/argv.h postlock.o: ../../include/mbox_open.h +postlock.o: ../../include/msg.h +postlock.o: ../../include/msg_vstream.h +postlock.o: ../../include/myflock.h postlock.o: ../../include/safe_open.h +postlock.o: ../../include/sys_defs.h +postlock.o: ../../include/sys_exits.h +postlock.o: ../../include/vbuf.h +postlock.o: ../../include/vstream.h +postlock.o: ../../include/vstring.h +postlock.o: postlock.c diff --git a/postfix/src/postlock/postlock.c b/postfix/src/postlock/postlock.c index dcd2b9d00..b49596008 100644 --- a/postfix/src/postlock/postlock.c +++ b/postfix/src/postlock/postlock.c @@ -118,6 +118,7 @@ #include #include #include +#include /* Application-specific. */ @@ -139,7 +140,7 @@ static void fatal_exit(void) int main(int argc, char **argv) { - VSTRING *why; + DSN_VSTRING *why; char *folder; char **command; int ch; @@ -218,11 +219,11 @@ int main(int argc, char **argv) * Lock the folder for exclusive access. Lose the lock upon exit. The * command is not supposed to disappear into the background. */ - why = vstring_alloc(1); + why = dsn_vstring_alloc(1); if ((mp = mbox_open(folder, O_APPEND | O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR, (struct stat *) 0, -1, -1, lock_mask, why)) == 0) - msg_fatal("open file %s: %s", folder, vstring_str(why)); + msg_fatal("open file %s: %s", folder, vstring_str(why->vstring)); /* * Run the command. Remove the lock after completion. @@ -242,6 +243,7 @@ int main(int argc, char **argv) default: if (waitpid(pid, &status, 0) < 0) msg_fatal("waitpid: %m"); + vstream_fclose(mp->fp); mbox_release(mp); exit(WIFEXITED(status) ? WEXITSTATUS(status) : 1); } diff --git a/postfix/src/postlog/Makefile.in b/postfix/src/postlog/Makefile.in index 64f32b5d4..d8f03eec0 100644 --- a/postfix/src/postlog/Makefile.in +++ b/postfix/src/postlog/Makefile.in @@ -51,21 +51,22 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -postlog.o: postlog.c -postlog.o: ../../include/sys_defs.h +postlog.o: ../../include/mail_conf.h +postlog.o: ../../include/mail_params.h +postlog.o: ../../include/mail_task.h postlog.o: ../../include/msg.h -postlog.o: ../../include/vstring.h +postlog.o: ../../include/msg_output.h +postlog.o: ../../include/msg_syslog.h +postlog.o: ../../include/msg_vstream.h +postlog.o: ../../include/sys_defs.h postlog.o: ../../include/vbuf.h postlog.o: ../../include/vstream.h +postlog.o: ../../include/vstring.h postlog.o: ../../include/vstring_vstream.h -postlog.o: ../../include/msg_output.h -postlog.o: ../../include/msg_vstream.h -postlog.o: ../../include/msg_syslog.h -postlog.o: ../../include/mail_params.h -postlog.o: ../../include/mail_conf.h -postlog.o: ../../include/mail_task.h +postlog.o: postlog.c diff --git a/postfix/src/postmap/Makefile.in b/postfix/src/postmap/Makefile.in index 7761292e4..13b7cf7f3 100644 --- a/postfix/src/postmap/Makefile.in +++ b/postfix/src/postmap/Makefile.in @@ -71,29 +71,30 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -postmap.o: postmap.c -postmap.o: ../../include/sys_defs.h +postmap.o: ../../include/argv.h +postmap.o: ../../include/dict.h +postmap.o: ../../include/mail_conf.h +postmap.o: ../../include/mail_dict.h +postmap.o: ../../include/mail_params.h +postmap.o: ../../include/mail_task.h +postmap.o: ../../include/mkmap.h postmap.o: ../../include/msg.h -postmap.o: ../../include/mymalloc.h -postmap.o: ../../include/vstring.h -postmap.o: ../../include/vbuf.h -postmap.o: ../../include/vstream.h -postmap.o: ../../include/msg_vstream.h postmap.o: ../../include/msg_syslog.h +postmap.o: ../../include/msg_vstream.h +postmap.o: ../../include/mymalloc.h postmap.o: ../../include/readlline.h -postmap.o: ../../include/stringops.h +postmap.o: ../../include/set_eugid.h postmap.o: ../../include/split_at.h +postmap.o: ../../include/stringops.h +postmap.o: ../../include/sys_defs.h +postmap.o: ../../include/vbuf.h +postmap.o: ../../include/vstream.h +postmap.o: ../../include/vstring.h postmap.o: ../../include/vstring_vstream.h -postmap.o: ../../include/set_eugid.h -postmap.o: ../../include/mail_conf.h -postmap.o: ../../include/mail_dict.h -postmap.o: ../../include/mail_params.h -postmap.o: ../../include/mkmap.h -postmap.o: ../../include/dict.h -postmap.o: ../../include/argv.h -postmap.o: ../../include/mail_task.h +postmap.o: postmap.c diff --git a/postfix/src/postqueue/Makefile.in b/postfix/src/postqueue/Makefile.in index f3a523b5e..b4b9f6a4d 100644 --- a/postfix/src/postqueue/Makefile.in +++ b/postfix/src/postqueue/Makefile.in @@ -47,35 +47,36 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -postqueue.o: postqueue.c -postqueue.o: ../../include/sys_defs.h -postqueue.o: ../../include/msg.h -postqueue.o: ../../include/mymalloc.h -postqueue.o: ../../include/clean_env.h -postqueue.o: ../../include/vstream.h -postqueue.o: ../../include/vbuf.h -postqueue.o: ../../include/msg_vstream.h -postqueue.o: ../../include/msg_syslog.h postqueue.o: ../../include/argv.h -postqueue.o: ../../include/safe.h +postqueue.o: ../../include/attr.h +postqueue.o: ../../include/clean_env.h postqueue.o: ../../include/connect.h +postqueue.o: ../../include/debug_process.h +postqueue.o: ../../include/flush_clnt.h postqueue.o: ../../include/iostuff.h -postqueue.o: ../../include/valid_hostname.h -postqueue.o: ../../include/mail_proto.h -postqueue.o: ../../include/attr.h -postqueue.o: ../../include/mail_params.h postqueue.o: ../../include/mail_conf.h -postqueue.o: ../../include/mail_task.h -postqueue.o: ../../include/debug_process.h -postqueue.o: ../../include/mail_run.h postqueue.o: ../../include/mail_flush.h -postqueue.o: ../../include/flush_clnt.h +postqueue.o: ../../include/mail_params.h +postqueue.o: ../../include/mail_proto.h +postqueue.o: ../../include/mail_run.h +postqueue.o: ../../include/mail_task.h +postqueue.o: ../../include/msg.h +postqueue.o: ../../include/msg_syslog.h +postqueue.o: ../../include/msg_vstream.h +postqueue.o: ../../include/mymalloc.h +postqueue.o: ../../include/safe.h postqueue.o: ../../include/smtp_stream.h -postqueue.o: ../../include/vstring.h +postqueue.o: ../../include/sys_defs.h postqueue.o: ../../include/user_acl.h +postqueue.o: ../../include/valid_hostname.h postqueue.o: ../../include/valid_mailhost_addr.h +postqueue.o: ../../include/vbuf.h +postqueue.o: ../../include/vstream.h +postqueue.o: ../../include/vstring.h +postqueue.o: postqueue.c diff --git a/postfix/src/postsuper/Makefile.in b/postfix/src/postsuper/Makefile.in index df0dfa08a..62075eac6 100644 --- a/postfix/src/postsuper/Makefile.in +++ b/postfix/src/postsuper/Makefile.in @@ -47,28 +47,29 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -postsuper.o: postsuper.c -postsuper.o: ../../include/sys_defs.h -postsuper.o: ../../include/mymalloc.h +postsuper.o: ../../include/argv.h +postsuper.o: ../../include/mail_conf.h +postsuper.o: ../../include/mail_open_ok.h +postsuper.o: ../../include/mail_params.h +postsuper.o: ../../include/mail_queue.h +postsuper.o: ../../include/mail_task.h postsuper.o: ../../include/msg.h postsuper.o: ../../include/msg_syslog.h -postsuper.o: ../../include/vstream.h -postsuper.o: ../../include/vbuf.h postsuper.o: ../../include/msg_vstream.h -postsuper.o: ../../include/scan_dir.h -postsuper.o: ../../include/vstring.h +postsuper.o: ../../include/mymalloc.h postsuper.o: ../../include/safe.h +postsuper.o: ../../include/sane_fsops.h +postsuper.o: ../../include/scan_dir.h postsuper.o: ../../include/set_ugid.h -postsuper.o: ../../include/argv.h +postsuper.o: ../../include/sys_defs.h +postsuper.o: ../../include/vbuf.h +postsuper.o: ../../include/vstream.h +postsuper.o: ../../include/vstring.h postsuper.o: ../../include/vstring_vstream.h -postsuper.o: ../../include/sane_fsops.h -postsuper.o: ../../include/mail_task.h -postsuper.o: ../../include/mail_conf.h -postsuper.o: ../../include/mail_params.h -postsuper.o: ../../include/mail_queue.h -postsuper.o: ../../include/mail_open_ok.h +postsuper.o: postsuper.c diff --git a/postfix/src/proxymap/Makefile.in b/postfix/src/proxymap/Makefile.in index deb28075c..bc78e18ff 100644 --- a/postfix/src/proxymap/Makefile.in +++ b/postfix/src/proxymap/Makefile.in @@ -47,26 +47,27 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -proxymap.o: proxymap.c -proxymap.o: ../../include/sys_defs.h -proxymap.o: ../../include/msg.h -proxymap.o: ../../include/mymalloc.h -proxymap.o: ../../include/vstring.h -proxymap.o: ../../include/vbuf.h -proxymap.o: ../../include/htable.h -proxymap.o: ../../include/stringops.h -proxymap.o: ../../include/dict.h -proxymap.o: ../../include/vstream.h proxymap.o: ../../include/argv.h +proxymap.o: ../../include/attr.h +proxymap.o: ../../include/dict.h +proxymap.o: ../../include/dict_proxy.h +proxymap.o: ../../include/htable.h +proxymap.o: ../../include/iostuff.h proxymap.o: ../../include/mail_conf.h proxymap.o: ../../include/mail_params.h proxymap.o: ../../include/mail_proto.h -proxymap.o: ../../include/iostuff.h -proxymap.o: ../../include/attr.h -proxymap.o: ../../include/dict_proxy.h proxymap.o: ../../include/mail_server.h +proxymap.o: ../../include/msg.h +proxymap.o: ../../include/mymalloc.h +proxymap.o: ../../include/stringops.h +proxymap.o: ../../include/sys_defs.h +proxymap.o: ../../include/vbuf.h +proxymap.o: ../../include/vstream.h +proxymap.o: ../../include/vstring.h +proxymap.o: proxymap.c diff --git a/postfix/src/qmgr/Makefile.in b/postfix/src/qmgr/Makefile.in index 91f19f176..6e7f13063 100644 --- a/postfix/src/qmgr/Makefile.in +++ b/postfix/src/qmgr/Makefile.in @@ -54,219 +54,222 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -qmgr.o: qmgr.c -qmgr.o: ../../include/sys_defs.h -qmgr.o: ../../include/msg.h -qmgr.o: ../../include/events.h -qmgr.o: ../../include/vstream.h -qmgr.o: ../../include/vbuf.h -qmgr.o: ../../include/dict.h qmgr.o: ../../include/argv.h -qmgr.o: ../../include/mail_queue.h -qmgr.o: ../../include/vstring.h -qmgr.o: ../../include/recipient_list.h +qmgr.o: ../../include/attr.h +qmgr.o: ../../include/dict.h +qmgr.o: ../../include/events.h +qmgr.o: ../../include/flush_clnt.h +qmgr.o: ../../include/iostuff.h qmgr.o: ../../include/mail_conf.h +qmgr.o: ../../include/mail_flow.h qmgr.o: ../../include/mail_params.h qmgr.o: ../../include/mail_proto.h -qmgr.o: ../../include/iostuff.h -qmgr.o: ../../include/attr.h -qmgr.o: ../../include/mail_flow.h -qmgr.o: ../../include/flush_clnt.h -qmgr.o: ../../include/master_proto.h +qmgr.o: ../../include/mail_queue.h qmgr.o: ../../include/mail_server.h -qmgr.o: qmgr.h +qmgr.o: ../../include/master_proto.h +qmgr.o: ../../include/msg.h +qmgr.o: ../../include/recipient_list.h qmgr.o: ../../include/scan_dir.h -qmgr_active.o: qmgr_active.c -qmgr_active.o: ../../include/sys_defs.h -qmgr_active.o: ../../include/msg.h +qmgr.o: ../../include/sys_defs.h +qmgr.o: ../../include/vbuf.h +qmgr.o: ../../include/vstream.h +qmgr.o: ../../include/vstring.h +qmgr.o: qmgr.c +qmgr.o: qmgr.h +qmgr_active.o: ../../include/abounce.h +qmgr_active.o: ../../include/bounce.h +qmgr_active.o: ../../include/defer.h +qmgr_active.o: ../../include/deliver_request.h qmgr_active.o: ../../include/events.h -qmgr_active.o: ../../include/mymalloc.h -qmgr_active.o: ../../include/vstream.h -qmgr_active.o: ../../include/vbuf.h -qmgr_active.o: ../../include/mail_params.h qmgr_active.o: ../../include/mail_open_ok.h +qmgr_active.o: ../../include/mail_params.h qmgr_active.o: ../../include/mail_queue.h -qmgr_active.o: ../../include/vstring.h +qmgr_active.o: ../../include/msg.h +qmgr_active.o: ../../include/mymalloc.h +qmgr_active.o: ../../include/rec_type.h qmgr_active.o: ../../include/recipient_list.h -qmgr_active.o: ../../include/bounce.h -qmgr_active.o: ../../include/deliver_request.h -qmgr_active.o: ../../include/defer.h +qmgr_active.o: ../../include/scan_dir.h +qmgr_active.o: ../../include/sys_defs.h qmgr_active.o: ../../include/trace.h -qmgr_active.o: ../../include/abounce.h -qmgr_active.o: ../../include/rec_type.h +qmgr_active.o: ../../include/vbuf.h +qmgr_active.o: ../../include/vstream.h +qmgr_active.o: ../../include/vstring.h qmgr_active.o: qmgr.h -qmgr_active.o: ../../include/scan_dir.h -qmgr_bounce.o: qmgr_bounce.c -qmgr_bounce.o: ../../include/sys_defs.h +qmgr_active.o: qmgr_active.c qmgr_bounce.o: ../../include/bounce.h +qmgr_bounce.o: ../../include/deliver_completed.h qmgr_bounce.o: ../../include/deliver_request.h -qmgr_bounce.o: ../../include/vstring.h +qmgr_bounce.o: ../../include/recipient_list.h +qmgr_bounce.o: ../../include/scan_dir.h +qmgr_bounce.o: ../../include/sys_defs.h qmgr_bounce.o: ../../include/vbuf.h qmgr_bounce.o: ../../include/vstream.h -qmgr_bounce.o: ../../include/recipient_list.h -qmgr_bounce.o: ../../include/deliver_completed.h +qmgr_bounce.o: ../../include/vstring.h qmgr_bounce.o: qmgr.h -qmgr_bounce.o: ../../include/scan_dir.h -qmgr_defer.o: qmgr_defer.c -qmgr_defer.o: ../../include/sys_defs.h -qmgr_defer.o: ../../include/msg.h -qmgr_defer.o: ../../include/vstream.h -qmgr_defer.o: ../../include/vbuf.h -qmgr_defer.o: ../../include/defer.h +qmgr_bounce.o: qmgr_bounce.c qmgr_defer.o: ../../include/bounce.h +qmgr_defer.o: ../../include/defer.h qmgr_defer.o: ../../include/deliver_request.h -qmgr_defer.o: ../../include/vstring.h +qmgr_defer.o: ../../include/msg.h qmgr_defer.o: ../../include/recipient_list.h -qmgr_defer.o: qmgr.h qmgr_defer.o: ../../include/scan_dir.h -qmgr_deliver.o: qmgr_deliver.c -qmgr_deliver.o: ../../include/sys_defs.h -qmgr_deliver.o: ../../include/msg.h -qmgr_deliver.o: ../../include/vstring.h -qmgr_deliver.o: ../../include/vbuf.h -qmgr_deliver.o: ../../include/vstream.h -qmgr_deliver.o: ../../include/vstring_vstream.h +qmgr_defer.o: ../../include/sys_defs.h +qmgr_defer.o: ../../include/vbuf.h +qmgr_defer.o: ../../include/vstream.h +qmgr_defer.o: ../../include/vstring.h +qmgr_defer.o: qmgr.h +qmgr_defer.o: qmgr_defer.c +qmgr_deliver.o: ../../include/attr.h +qmgr_deliver.o: ../../include/deliver_request.h +qmgr_deliver.o: ../../include/dsn_util.h qmgr_deliver.o: ../../include/events.h qmgr_deliver.o: ../../include/iostuff.h -qmgr_deliver.o: ../../include/mail_queue.h +qmgr_deliver.o: ../../include/mail_params.h qmgr_deliver.o: ../../include/mail_proto.h -qmgr_deliver.o: ../../include/attr.h +qmgr_deliver.o: ../../include/mail_queue.h +qmgr_deliver.o: ../../include/msg.h qmgr_deliver.o: ../../include/recipient_list.h -qmgr_deliver.o: ../../include/mail_params.h -qmgr_deliver.o: ../../include/deliver_request.h +qmgr_deliver.o: ../../include/scan_dir.h +qmgr_deliver.o: ../../include/stringops.h +qmgr_deliver.o: ../../include/sys_defs.h +qmgr_deliver.o: ../../include/vbuf.h qmgr_deliver.o: ../../include/verp_sender.h +qmgr_deliver.o: ../../include/vstream.h +qmgr_deliver.o: ../../include/vstring.h +qmgr_deliver.o: ../../include/vstring_vstream.h qmgr_deliver.o: qmgr.h -qmgr_deliver.o: ../../include/scan_dir.h -qmgr_enable.o: qmgr_enable.c -qmgr_enable.o: ../../include/sys_defs.h +qmgr_deliver.o: qmgr_deliver.c qmgr_enable.o: ../../include/msg.h -qmgr_enable.o: ../../include/vstream.h +qmgr_enable.o: ../../include/scan_dir.h +qmgr_enable.o: ../../include/sys_defs.h qmgr_enable.o: ../../include/vbuf.h +qmgr_enable.o: ../../include/vstream.h qmgr_enable.o: qmgr.h -qmgr_enable.o: ../../include/scan_dir.h -qmgr_entry.o: qmgr_entry.c -qmgr_entry.o: ../../include/sys_defs.h +qmgr_enable.o: qmgr_enable.c +qmgr_entry.o: ../../include/deliver_request.h +qmgr_entry.o: ../../include/events.h +qmgr_entry.o: ../../include/mail_params.h qmgr_entry.o: ../../include/msg.h qmgr_entry.o: ../../include/mymalloc.h -qmgr_entry.o: ../../include/events.h -qmgr_entry.o: ../../include/vstream.h +qmgr_entry.o: ../../include/recipient_list.h +qmgr_entry.o: ../../include/scan_dir.h +qmgr_entry.o: ../../include/sys_defs.h qmgr_entry.o: ../../include/vbuf.h -qmgr_entry.o: ../../include/mail_params.h -qmgr_entry.o: ../../include/deliver_request.h +qmgr_entry.o: ../../include/vstream.h qmgr_entry.o: ../../include/vstring.h -qmgr_entry.o: ../../include/recipient_list.h qmgr_entry.o: qmgr.h -qmgr_entry.o: ../../include/scan_dir.h -qmgr_job.o: qmgr_job.c -qmgr_job.o: ../../include/sys_defs.h -qmgr_job.o: ../../include/msg.h +qmgr_entry.o: qmgr_entry.c qmgr_job.o: ../../include/htable.h +qmgr_job.o: ../../include/msg.h qmgr_job.o: ../../include/mymalloc.h qmgr_job.o: ../../include/sane_time.h -qmgr_job.o: qmgr.h -qmgr_job.o: ../../include/vstream.h -qmgr_job.o: ../../include/vbuf.h qmgr_job.o: ../../include/scan_dir.h -qmgr_message.o: qmgr_message.c -qmgr_message.o: ../../include/sys_defs.h -qmgr_message.o: ../../include/msg.h -qmgr_message.o: ../../include/mymalloc.h -qmgr_message.o: ../../include/vstring.h -qmgr_message.o: ../../include/vbuf.h -qmgr_message.o: ../../include/vstream.h -qmgr_message.o: ../../include/split_at.h -qmgr_message.o: ../../include/valid_hostname.h +qmgr_job.o: ../../include/sys_defs.h +qmgr_job.o: ../../include/vbuf.h +qmgr_job.o: ../../include/vstream.h +qmgr_job.o: qmgr.h +qmgr_job.o: qmgr_job.c qmgr_message.o: ../../include/argv.h -qmgr_message.o: ../../include/stringops.h -qmgr_message.o: ../../include/myflock.h -qmgr_message.o: ../../include/sane_time.h -qmgr_message.o: ../../include/dict.h -qmgr_message.o: ../../include/mail_queue.h -qmgr_message.o: ../../include/mail_params.h +qmgr_message.o: ../../include/attr.h qmgr_message.o: ../../include/canon_addr.h -qmgr_message.o: ../../include/record.h -qmgr_message.o: ../../include/rec_type.h -qmgr_message.o: ../../include/sent.h -qmgr_message.o: ../../include/deliver_request.h -qmgr_message.o: ../../include/recipient_list.h qmgr_message.o: ../../include/deliver_completed.h -qmgr_message.o: ../../include/opened.h -qmgr_message.o: ../../include/verp_sender.h -qmgr_message.o: ../../include/mail_proto.h +qmgr_message.o: ../../include/deliver_request.h +qmgr_message.o: ../../include/dict.h qmgr_message.o: ../../include/iostuff.h -qmgr_message.o: ../../include/attr.h +qmgr_message.o: ../../include/mail_params.h +qmgr_message.o: ../../include/mail_proto.h +qmgr_message.o: ../../include/mail_queue.h +qmgr_message.o: ../../include/msg.h +qmgr_message.o: ../../include/myflock.h +qmgr_message.o: ../../include/mymalloc.h +qmgr_message.o: ../../include/opened.h qmgr_message.o: ../../include/qmgr_user.h -qmgr_message.o: ../../include/split_addr.h -qmgr_message.o: ../../include/rewrite_clnt.h +qmgr_message.o: ../../include/rec_type.h +qmgr_message.o: ../../include/recipient_list.h +qmgr_message.o: ../../include/record.h qmgr_message.o: ../../include/resolve_clnt.h -qmgr_message.o: qmgr.h +qmgr_message.o: ../../include/rewrite_clnt.h +qmgr_message.o: ../../include/sane_time.h qmgr_message.o: ../../include/scan_dir.h -qmgr_move.o: qmgr_move.c -qmgr_move.o: ../../include/sys_defs.h +qmgr_message.o: ../../include/sent.h +qmgr_message.o: ../../include/split_addr.h +qmgr_message.o: ../../include/split_at.h +qmgr_message.o: ../../include/stringops.h +qmgr_message.o: ../../include/sys_defs.h +qmgr_message.o: ../../include/valid_hostname.h +qmgr_message.o: ../../include/vbuf.h +qmgr_message.o: ../../include/verp_sender.h +qmgr_message.o: ../../include/vstream.h +qmgr_message.o: ../../include/vstring.h +qmgr_message.o: qmgr.h +qmgr_message.o: qmgr_message.c +qmgr_move.o: ../../include/mail_queue.h +qmgr_move.o: ../../include/mail_scan_dir.h qmgr_move.o: ../../include/msg.h -qmgr_move.o: ../../include/scan_dir.h qmgr_move.o: ../../include/recipient_list.h -qmgr_move.o: ../../include/mail_queue.h -qmgr_move.o: ../../include/vstring.h +qmgr_move.o: ../../include/scan_dir.h +qmgr_move.o: ../../include/sys_defs.h qmgr_move.o: ../../include/vbuf.h qmgr_move.o: ../../include/vstream.h -qmgr_move.o: ../../include/mail_scan_dir.h +qmgr_move.o: ../../include/vstring.h qmgr_move.o: qmgr.h -qmgr_peer.o: qmgr_peer.c -qmgr_peer.o: ../../include/sys_defs.h -qmgr_peer.o: ../../include/msg.h +qmgr_move.o: qmgr_move.c qmgr_peer.o: ../../include/htable.h +qmgr_peer.o: ../../include/msg.h qmgr_peer.o: ../../include/mymalloc.h -qmgr_peer.o: qmgr.h -qmgr_peer.o: ../../include/vstream.h -qmgr_peer.o: ../../include/vbuf.h qmgr_peer.o: ../../include/scan_dir.h -qmgr_queue.o: qmgr_queue.c -qmgr_queue.o: ../../include/sys_defs.h -qmgr_queue.o: ../../include/msg.h -qmgr_queue.o: ../../include/mymalloc.h +qmgr_peer.o: ../../include/sys_defs.h +qmgr_peer.o: ../../include/vbuf.h +qmgr_peer.o: ../../include/vstream.h +qmgr_peer.o: qmgr.h +qmgr_peer.o: qmgr_peer.c qmgr_queue.o: ../../include/events.h qmgr_queue.o: ../../include/htable.h qmgr_queue.o: ../../include/mail_params.h +qmgr_queue.o: ../../include/msg.h +qmgr_queue.o: ../../include/mymalloc.h qmgr_queue.o: ../../include/recipient_list.h -qmgr_queue.o: qmgr.h -qmgr_queue.o: ../../include/vstream.h -qmgr_queue.o: ../../include/vbuf.h qmgr_queue.o: ../../include/scan_dir.h -qmgr_rcpt_list.o: qmgr_rcpt_list.c -qmgr_rcpt_list.o: ../../include/sys_defs.h +qmgr_queue.o: ../../include/sys_defs.h +qmgr_queue.o: ../../include/vbuf.h +qmgr_queue.o: ../../include/vstream.h +qmgr_queue.o: qmgr.h +qmgr_queue.o: qmgr_queue.c qmgr_rcpt_list.o: ../../include/mymalloc.h -qmgr_rcpt_list.o: qmgr.h -qmgr_rcpt_list.o: ../../include/vstream.h -qmgr_rcpt_list.o: ../../include/vbuf.h qmgr_rcpt_list.o: ../../include/scan_dir.h -qmgr_scan.o: qmgr_scan.c -qmgr_scan.o: ../../include/sys_defs.h +qmgr_rcpt_list.o: ../../include/sys_defs.h +qmgr_rcpt_list.o: ../../include/vbuf.h +qmgr_rcpt_list.o: ../../include/vstream.h +qmgr_rcpt_list.o: qmgr.h +qmgr_rcpt_list.o: qmgr_rcpt_list.c +qmgr_scan.o: ../../include/mail_scan_dir.h qmgr_scan.o: ../../include/msg.h qmgr_scan.o: ../../include/mymalloc.h qmgr_scan.o: ../../include/scan_dir.h -qmgr_scan.o: ../../include/mail_scan_dir.h -qmgr_scan.o: qmgr.h -qmgr_scan.o: ../../include/vstream.h +qmgr_scan.o: ../../include/sys_defs.h qmgr_scan.o: ../../include/vbuf.h -qmgr_transport.o: qmgr_transport.c -qmgr_transport.o: ../../include/sys_defs.h -qmgr_transport.o: ../../include/msg.h -qmgr_transport.o: ../../include/htable.h +qmgr_scan.o: ../../include/vstream.h +qmgr_scan.o: qmgr.h +qmgr_scan.o: qmgr_scan.c +qmgr_transport.o: ../../include/attr.h qmgr_transport.o: ../../include/events.h -qmgr_transport.o: ../../include/mymalloc.h -qmgr_transport.o: ../../include/vstream.h -qmgr_transport.o: ../../include/vbuf.h +qmgr_transport.o: ../../include/htable.h qmgr_transport.o: ../../include/iostuff.h -qmgr_transport.o: ../../include/mail_proto.h -qmgr_transport.o: ../../include/attr.h -qmgr_transport.o: ../../include/recipient_list.h qmgr_transport.o: ../../include/mail_conf.h qmgr_transport.o: ../../include/mail_params.h -qmgr_transport.o: qmgr.h +qmgr_transport.o: ../../include/mail_proto.h +qmgr_transport.o: ../../include/msg.h +qmgr_transport.o: ../../include/mymalloc.h +qmgr_transport.o: ../../include/recipient_list.h qmgr_transport.o: ../../include/scan_dir.h +qmgr_transport.o: ../../include/sys_defs.h +qmgr_transport.o: ../../include/vbuf.h +qmgr_transport.o: ../../include/vstream.h +qmgr_transport.o: qmgr.h +qmgr_transport.o: qmgr_transport.c diff --git a/postfix/src/qmgr/qmgr.h b/postfix/src/qmgr/qmgr.h index 976520636..6b394eab6 100644 --- a/postfix/src/qmgr/qmgr.h +++ b/postfix/src/qmgr/qmgr.h @@ -149,6 +149,7 @@ struct QMGR_TRANSPORT { * updated */ int blocker_tag; /* for marking blocker jobs */ QMGR_TRANSPORT_LIST peers; /* linkage */ + char *dsn; /* why unavailable */ char *reason; /* why unavailable */ }; @@ -158,7 +159,7 @@ struct QMGR_TRANSPORT { typedef void (*QMGR_TRANSPORT_ALLOC_NOTIFY) (QMGR_TRANSPORT *, VSTREAM *); extern QMGR_TRANSPORT *qmgr_transport_select(void); extern void qmgr_transport_alloc(QMGR_TRANSPORT *, QMGR_TRANSPORT_ALLOC_NOTIFY); -extern void qmgr_transport_throttle(QMGR_TRANSPORT *, const char *); +extern void qmgr_transport_throttle(QMGR_TRANSPORT *, const char *, const char *); extern void qmgr_transport_unthrottle(QMGR_TRANSPORT *); extern QMGR_TRANSPORT *qmgr_transport_create(const char *); extern QMGR_TRANSPORT *qmgr_transport_find(const char *); @@ -187,6 +188,7 @@ struct QMGR_QUEUE { QMGR_ENTRY_LIST todo; /* todo queue entries */ QMGR_ENTRY_LIST busy; /* messages on the wire */ QMGR_QUEUE_LIST peers; /* neighbor queues */ + char *dsn; /* why unavailable */ char *reason; /* why unavailable */ time_t clog_time_to_warn; /* time of last warning */ int blocker_tag; /* tagged if blocks job list */ @@ -199,7 +201,7 @@ extern int qmgr_queue_count; extern QMGR_QUEUE *qmgr_queue_create(QMGR_TRANSPORT *, const char *, const char *); extern void qmgr_queue_done(QMGR_QUEUE *); -extern void qmgr_queue_throttle(QMGR_QUEUE *, const char *); +extern void qmgr_queue_throttle(QMGR_QUEUE *, const char *, const char *); extern void qmgr_queue_unthrottle(QMGR_QUEUE *); extern QMGR_QUEUE *qmgr_queue_find(QMGR_TRANSPORT *, const char *); @@ -371,14 +373,15 @@ extern void qmgr_peer_free(QMGR_PEER *); /* * qmgr_defer.c */ -extern void qmgr_defer_transport(QMGR_TRANSPORT *, const char *); -extern void qmgr_defer_todo(QMGR_QUEUE *, const char *); -extern void qmgr_defer_recipient(QMGR_MESSAGE *, QMGR_RCPT *, const char *); +extern void qmgr_defer_transport(QMGR_TRANSPORT *, const char *, const char *); +extern void qmgr_defer_todo(QMGR_QUEUE *, const char *, const char *); +extern void qmgr_defer_recipient(QMGR_MESSAGE *, QMGR_RCPT *, const char *, const char *); /* * qmgr_bounce.c */ -extern void PRINTFLIKE(3, 4) qmgr_bounce_recipient(QMGR_MESSAGE *, QMGR_RCPT *, const char *,...); +extern void PRINTFLIKE(4, 5) qmgr_bounce_recipient(QMGR_MESSAGE *, QMGR_RCPT *, + const char *, const char *,...); /* * qmgr_deliver.c diff --git a/postfix/src/qmgr/qmgr_bounce.c b/postfix/src/qmgr/qmgr_bounce.c index 92196bdaa..8daffb2d2 100644 --- a/postfix/src/qmgr/qmgr_bounce.c +++ b/postfix/src/qmgr/qmgr_bounce.c @@ -6,9 +6,11 @@ /* SYNOPSIS /* #include "qmgr.h" /* -/* QMGR_QUEUE *qmgr_bounce_recipient(message, recipient, format, ...) +/* QMGR_QUEUE *qmgr_bounce_recipient(message, recipient, +/* dsn, format, ...) /* QMGR_MESSAGE *message; /* QMGR_RCPT *recipient; +/* const char *dsn; /* const char *format; /* DESCRIPTION /* qmgr_bounce_recipient() produces a bounce log record. @@ -22,6 +24,8 @@ /* Open queue file with the message being bounced. /* .IP recipient /* The recipient that will not be delivered. +/* .IP dsn +/* RFC 1893 detail code. /* .IP format /* Free-format text that describes why delivery will not happen. /* DIAGNOSTICS @@ -61,7 +65,7 @@ /* qmgr_bounce_recipient - bounce one message recipient */ void qmgr_bounce_recipient(QMGR_MESSAGE *message, QMGR_RCPT *recipient, - const char *format,...) + const char *dsn, const char *format,...) { va_list ap; int status; @@ -69,8 +73,8 @@ void qmgr_bounce_recipient(QMGR_MESSAGE *message, QMGR_RCPT *recipient, va_start(ap, format); status = vbounce_append(message->tflags, message->queue_id, recipient->orig_rcpt, recipient->address, - recipient->offset, "none", message->arrival_time, - format, ap); + recipient->offset, "none", dsn, + message->arrival_time, format, ap); va_end(ap); if (status == 0) diff --git a/postfix/src/qmgr/qmgr_defer.c b/postfix/src/qmgr/qmgr_defer.c index 715adf435..59f1892e0 100644 --- a/postfix/src/qmgr/qmgr_defer.c +++ b/postfix/src/qmgr/qmgr_defer.c @@ -6,17 +6,20 @@ /* SYNOPSIS /* #include "qmgr.h" /* -/* void qmgr_defer_recipient(message, recipient, reason) +/* void qmgr_defer_recipient(message, recipient, dsn, reason) /* QMGR_MESSAGE *message; /* QMGR_RCPT *recipient; +/* const char *dsn; /* const char *reason; /* -/* void qmgr_defer_todo(queue, reason) +/* void qmgr_defer_todo(queue, dsn, reason) /* QMGR_QUEUE *queue; +/* const char *dsn; /* const char *reason; /* -/* QMGR_QUEUE *qmgr_defer_transport(transport, reason) +/* QMGR_QUEUE *qmgr_defer_transport(transport, dsn, reason) /* QMGR_TRANSPORT *transport; +/* const char *dsn; /* const char *reason; /* DESCRIPTION /* qmgr_defer_recipient() defers delivery of the named message to @@ -43,6 +46,8 @@ /* host (or local user). /* .IP transport /* Specifies a message delivery transport. +/* .IP dsn +/* X.YY.ZZ Error detail as specified in RFC 1893. /* .IP reason /* Free-format text that describes why delivery is deferred; this /* used for logging purposes, and for updating the message-specific @@ -86,7 +91,8 @@ /* qmgr_defer_transport - defer todo entries for named transport */ -void qmgr_defer_transport(QMGR_TRANSPORT *transport, const char *reason) +void qmgr_defer_transport(QMGR_TRANSPORT *transport, const char *dsn, + const char *reason) { char *myname = "qmgr_defer_transport"; QMGR_QUEUE *queue; @@ -95,23 +101,25 @@ void qmgr_defer_transport(QMGR_TRANSPORT *transport, const char *reason) /* * Sanity checks. */ - if (reason == 0) + if (dsn == 0 || *dsn == 0) + msg_panic("%s: null dsn", myname); + if (reason == 0 || *reason == 0) msg_panic("%s: null reason", myname); if (msg_verbose) - msg_info("defer transport %s: %s", transport->name, reason); + msg_info("defer transport %s: %s %s", transport->name, dsn, reason); /* * Proceed carefully. Queues may disappear as a side effect. */ for (queue = transport->queue_list.next; queue; queue = next) { next = queue->peers.next; - qmgr_defer_todo(queue, reason); + qmgr_defer_todo(queue, dsn, reason); } } /* qmgr_defer_todo - defer all todo queue entries for specific site */ -void qmgr_defer_todo(QMGR_QUEUE *queue, const char *reason) +void qmgr_defer_todo(QMGR_QUEUE *queue, const char *dsn, const char *reason) { char *myname = "qmgr_defer_todo"; QMGR_ENTRY *entry; @@ -123,10 +131,12 @@ void qmgr_defer_todo(QMGR_QUEUE *queue, const char *reason) /* * Sanity checks. */ - if (reason == 0) + if (dsn == 0 || *dsn == 0) + msg_panic("%s: null dsn", myname); + if (reason == 0 || *reason == 0) msg_panic("%s: null reason", myname); if (msg_verbose) - msg_info("defer site %s: %s", queue->name, reason); + msg_info("defer site %s: %s %s", queue->name, dsn, reason); /* * Proceed carefully. Queue entries will disappear as a side effect. @@ -136,7 +146,7 @@ void qmgr_defer_todo(QMGR_QUEUE *queue, const char *reason) message = entry->message; for (nrcpt = 0; nrcpt < entry->rcpt_list.len; nrcpt++) { recipient = entry->rcpt_list.info + nrcpt; - qmgr_defer_recipient(message, recipient, reason); + qmgr_defer_recipient(message, recipient, dsn, reason); } qmgr_entry_done(entry, QMGR_QUEUE_TODO); } @@ -145,14 +155,16 @@ void qmgr_defer_todo(QMGR_QUEUE *queue, const char *reason) /* qmgr_defer_recipient - defer delivery of specific recipient */ void qmgr_defer_recipient(QMGR_MESSAGE *message, QMGR_RCPT *recipient, - const char *reason) + const char *dsn, const char *reason) { char *myname = "qmgr_defer_recipient"; /* * Sanity checks. */ - if (reason == 0) + if (dsn == 0 || *dsn == 0) + msg_panic("%s: null dsn", myname); + if (reason == 0 || *reason == 0) msg_panic("%s: reason 0", myname); /* @@ -160,7 +172,7 @@ void qmgr_defer_recipient(QMGR_MESSAGE *message, QMGR_RCPT *recipient, */ message->flags |= defer_append(message->tflags, message->queue_id, recipient->orig_rcpt, recipient->address, - recipient->offset, "none", + recipient->offset, "none", dsn, message->arrival_time, - "delivery temporarily suspended: %s", reason); + "delivery temporarily suspended: %s", reason); } diff --git a/postfix/src/qmgr/qmgr_deliver.c b/postfix/src/qmgr/qmgr_deliver.c index 28463a0e6..486963d53 100644 --- a/postfix/src/qmgr/qmgr_deliver.c +++ b/postfix/src/qmgr/qmgr_deliver.c @@ -60,6 +60,7 @@ #include #include #include +#include /* Global library. */ @@ -69,6 +70,7 @@ #include #include #include +#include /* Application-specific. */ @@ -167,9 +169,9 @@ static int qmgr_deliver_send_request(QMGR_ENTRY *entry, VSTREAM *stream) ATTR_TYPE_STR, MAIL_ATTR_PROTO_NAME, message->client_proto, ATTR_TYPE_STR, MAIL_ATTR_HELO_NAME, message->client_helo, ATTR_TYPE_STR, MAIL_ATTR_SASL_METHOD, message->sasl_method, - ATTR_TYPE_STR, MAIL_ATTR_SASL_USERNAME, message->sasl_username, + ATTR_TYPE_STR, MAIL_ATTR_SASL_USERNAME, message->sasl_username, ATTR_TYPE_STR, MAIL_ATTR_SASL_SENDER, message->sasl_sender, - ATTR_TYPE_STR, MAIL_ATTR_RWR_CONTEXT, message->rewrite_context, + ATTR_TYPE_STR, MAIL_ATTR_RWR_CONTEXT, message->rewrite_context, ATTR_TYPE_END); if (sender_buf != 0) vstring_free(sender_buf); @@ -215,6 +217,7 @@ static void qmgr_deliver_update(int unused_event, char *context) QMGR_MESSAGE *message = entry->message; VSTRING *reason = vstring_alloc(1); int status; + DSN_SPLIT dp; /* * The message transport has responded. Stop the watchdog timer. @@ -241,10 +244,11 @@ static void qmgr_deliver_update(int unused_event, char *context) */ if (status == DELIVER_STAT_CRASH) { message->flags |= DELIVER_STAT_DEFER; - qmgr_transport_throttle(transport, "unknown mail transport error"); + qmgr_transport_throttle(transport, "4.3.0", + "unknown mail transport error"); msg_warn("transport %s failure -- see a previous warning/fatal/panic logfile record for the problem description", transport->name); - qmgr_defer_transport(transport, transport->reason); + qmgr_defer_transport(transport, transport->dsn, transport->reason); } /* @@ -259,9 +263,12 @@ static void qmgr_deliver_update(int unused_event, char *context) if (status == DELIVER_STAT_DEFER) { message->flags |= DELIVER_STAT_DEFER; if (VSTRING_LEN(reason)) { - qmgr_queue_throttle(queue, vstring_str(reason)); + /* Sanitize the DSN status from delivery agent. */ + dsn_split(&dp, "4.0.0", printable(vstring_str(reason), '?')); + qmgr_queue_throttle(queue, dp.dsn, *dp.text ? + dp.text : "unknown problem"); if (queue->window == 0) - qmgr_defer_todo(queue, queue->reason); + qmgr_defer_todo(queue, queue->dsn, queue->reason); } } @@ -302,8 +309,9 @@ void qmgr_deliver(QMGR_TRANSPORT *transport, VSTREAM *stream) * while some other queue manipulation is happening. */ if (qmgr_deliver_initial_reply(stream) != 0) { - qmgr_transport_throttle(transport, "mail transport unavailable"); - qmgr_defer_transport(transport, transport->reason); + qmgr_transport_throttle(transport, "4.3.0", + "mail transport unavailable"); + qmgr_defer_transport(transport, transport->dsn, transport->reason); (void) vstream_fclose(stream); return; } @@ -328,8 +336,9 @@ void qmgr_deliver(QMGR_TRANSPORT *transport, VSTREAM *stream) */ if (qmgr_deliver_send_request(entry, stream) < 0) { qmgr_entry_unselect(entry); - qmgr_transport_throttle(transport, "mail transport unavailable"); - qmgr_defer_transport(transport, transport->reason); + qmgr_transport_throttle(transport, "4.3.0", + "mail transport unavailable"); + qmgr_defer_transport(transport, transport->dsn, transport->reason); /* warning: entry may be a dangling pointer here */ (void) vstream_fclose(stream); return; diff --git a/postfix/src/qmgr/qmgr_message.c b/postfix/src/qmgr/qmgr_message.c index 9d341c85c..84b8d278d 100644 --- a/postfix/src/qmgr/qmgr_message.c +++ b/postfix/src/qmgr/qmgr_message.c @@ -826,10 +826,11 @@ static int qmgr_resolve_one(QMGR_MESSAGE *message, QMGR_RCPT *recipient, else resolve_clnt_verify(addr, reply); if (reply->flags & RESOLVE_FLAG_FAIL) { - qmgr_defer_recipient(message, recipient, "address resolver failure"); + qmgr_defer_recipient(message, recipient, + "4.3.0", "address resolver failure"); return (-1); } else if (reply->flags & RESOLVE_FLAG_ERROR) { - qmgr_bounce_recipient(message, recipient, + qmgr_bounce_recipient(message, recipient, "5.1.3", "bad address syntax: \"%s\"", addr); return (-1); } else { @@ -924,7 +925,7 @@ static void qmgr_message_resolve(QMGR_MESSAGE *message) * the queue manager process does not help. */ if (recipient->address[0] == 0) { - qmgr_bounce_recipient(message, recipient, + qmgr_bounce_recipient(message, recipient, "5.1.3", "null recipient address"); continue; } @@ -941,7 +942,7 @@ static void qmgr_message_resolve(QMGR_MESSAGE *message) * where it cannot be bypassed. */ if (var_allow_min_user == 0 && recipient->address[0] == '-') { - qmgr_bounce_recipient(message, recipient, + qmgr_bounce_recipient(message, recipient, "5.1.3", "invalid recipient syntax: \"%s\"", recipient->address); continue; @@ -965,7 +966,8 @@ static void qmgr_message_resolve(QMGR_MESSAGE *message) && !var_double_bounce_sender[len]) { status = sent(message->tflags, message->queue_id, recipient->orig_rcpt, recipient->address, - recipient->offset, "none", message->arrival_time, + recipient->offset, "none", "2.0.0", + message->arrival_time, "undeliverable postmaster notification discarded"); if (status == 0) { deliver_completed(message->fp, recipient->offset); @@ -988,7 +990,8 @@ static void qmgr_message_resolve(QMGR_MESSAGE *message) if (strcmp(*cpp, STR(reply.transport)) == 0) break; if (*cpp) { - qmgr_defer_recipient(message, recipient, "deferred transport"); + qmgr_defer_recipient(message, recipient, + "4.3.2", "deferred transport"); continue; } } @@ -1006,7 +1009,8 @@ static void qmgr_message_resolve(QMGR_MESSAGE *message) * This transport is dead. Defer delivery to this recipient. */ if ((transport->flags & QMGR_TRANSPORT_STAT_DEAD) != 0) { - qmgr_defer_recipient(message, recipient, transport->reason); + qmgr_defer_recipient(message, recipient, transport->dsn, + transport->reason); continue; } @@ -1073,7 +1077,7 @@ static void qmgr_message_resolve(QMGR_MESSAGE *message) * This queue is dead. Defer delivery to this recipient. */ if (queue->window == 0) { - qmgr_defer_recipient(message, recipient, queue->reason); + qmgr_defer_recipient(message, recipient, queue->dsn, queue->reason); continue; } diff --git a/postfix/src/qmgr/qmgr_queue.c b/postfix/src/qmgr/qmgr_queue.c index c7d88e83d..7371a6a3d 100644 --- a/postfix/src/qmgr/qmgr_queue.c +++ b/postfix/src/qmgr/qmgr_queue.c @@ -20,8 +20,9 @@ /* QMGR_TRANSPORT *transport; /* const char *name; /* -/* void qmgr_queue_throttle(queue, reason) +/* void qmgr_queue_throttle(queue, dsn, reason) /* QMGR_QUEUE *queue; +/* const char *dsn; /* const char *reason; /* /* void qmgr_queue_unthrottle(queue) @@ -131,6 +132,10 @@ void qmgr_queue_unthrottle(QMGR_QUEUE *queue) */ if (queue->window == 0) { event_cancel_timer(qmgr_queue_unthrottle_wrapper, (char *) queue); + if (queue->dsn == 0) + msg_panic("%s: queue %s: window 0 dsn 0", myname, queue->name); + myfree(queue->dsn); + queue->dsn = 0; if (queue->reason == 0) msg_panic("%s: queue %s: window 0 reason 0", myname, queue->name); myfree(queue->reason); @@ -152,18 +157,22 @@ void qmgr_queue_unthrottle(QMGR_QUEUE *queue) /* qmgr_queue_throttle - handle destination delivery failure */ -void qmgr_queue_throttle(QMGR_QUEUE *queue, const char *reason) +void qmgr_queue_throttle(QMGR_QUEUE *queue, const char *dsn, + const char *reason) { char *myname = "qmgr_queue_throttle"; /* * Sanity checks. */ + if (queue->dsn) + msg_panic("%s: queue %s: spurious dsn %s", + myname, queue->name, queue->dsn); if (queue->reason) msg_panic("%s: queue %s: spurious reason %s", myname, queue->name, queue->reason); if (msg_verbose) - msg_info("%s: queue %s: %s", myname, queue->name, reason); + msg_info("%s: queue %s: %s %s", myname, queue->name, dsn, reason); /* * Decrease the destination's concurrency limit until we reach zero, at @@ -178,6 +187,7 @@ void qmgr_queue_throttle(QMGR_QUEUE *queue, const char *reason) * Special case for a site that just was declared dead. */ if (queue->window == 0) { + queue->dsn = mystrdup(dsn); queue->reason = mystrdup(reason); event_request_timer(qmgr_queue_unthrottle_wrapper, (char *) queue, var_min_backoff_time); @@ -203,6 +213,9 @@ void qmgr_queue_done(QMGR_QUEUE *queue) msg_panic("%s: queue not empty: %s", myname, queue->name); if (queue->window <= 0) msg_panic("%s: window %d", myname, queue->window); + if (queue->dsn) + msg_panic("%s: queue %s: spurious dsn %s", + myname, queue->name, queue->dsn); if (queue->reason) msg_panic("%s: queue %s: spurious reason %s", myname, queue->name, queue->reason); @@ -242,6 +255,7 @@ QMGR_QUEUE *qmgr_queue_create(QMGR_TRANSPORT *transport, const char *name, queue->window = transport->init_dest_concurrency; QMGR_LIST_INIT(queue->todo); QMGR_LIST_INIT(queue->busy); + queue->dsn = 0; queue->reason = 0; queue->clog_time_to_warn = 0; queue->blocker_tag = 0; diff --git a/postfix/src/qmgr/qmgr_transport.c b/postfix/src/qmgr/qmgr_transport.c index 204880962..41e9c7b2b 100644 --- a/postfix/src/qmgr/qmgr_transport.c +++ b/postfix/src/qmgr/qmgr_transport.c @@ -18,8 +18,9 @@ /* QMGR_TRANSPORT *transport; /* void (*notify)(QMGR_TRANSPORT *transport, VSTREAM *fp); /* -/* void qmgr_transport_throttle(transport, reason) +/* void qmgr_transport_throttle(transport, dsn, reason) /* QMGR_TRANSPORT *transport; +/* const char *dsn; /* const char *reason; /* /* void qmgr_transport_unthrottle(transport) @@ -133,6 +134,10 @@ void qmgr_transport_unthrottle(QMGR_TRANSPORT *transport) if (msg_verbose) msg_info("%s: transport %s", myname, transport->name); transport->flags &= ~QMGR_TRANSPORT_STAT_DEAD; + if (transport->dsn == 0) + msg_panic("%s: transport %s: null dsn", myname, transport->name); + myfree(transport->dsn); + transport->dsn = 0; if (transport->reason == 0) msg_panic("%s: transport %s: null reason", myname, transport->name); myfree(transport->reason); @@ -144,7 +149,8 @@ void qmgr_transport_unthrottle(QMGR_TRANSPORT *transport) /* qmgr_transport_throttle - disable delivery process allocation */ -void qmgr_transport_throttle(QMGR_TRANSPORT *transport, const char *reason) +void qmgr_transport_throttle(QMGR_TRANSPORT *transport, const char *dsn, + const char *reason) { char *myname = "qmgr_transport_throttle"; @@ -155,9 +161,13 @@ void qmgr_transport_throttle(QMGR_TRANSPORT *transport, const char *reason) */ if ((transport->flags & QMGR_TRANSPORT_STAT_DEAD) == 0) { if (msg_verbose) - msg_info("%s: transport %s: reason: %s", - myname, transport->name, reason); + msg_info("%s: transport %s: dsn: %s reason: %s", + myname, transport->name, dsn, reason); transport->flags |= QMGR_TRANSPORT_STAT_DEAD; + if (transport->dsn) + msg_panic("%s: transport %s: spurious dsn: %s", + myname, transport->name, transport->dsn); + transport->dsn = mystrdup(dsn); if (transport->reason) msg_panic("%s: transport %s: spurious reason: %s", myname, transport->name, transport->reason); @@ -291,7 +301,7 @@ void qmgr_transport_alloc(QMGR_TRANSPORT *transport, QMGR_TRANSPORT_ALLOC_NOT if ((stream = mail_connect(MAIL_CLASS_PRIVATE, transport->name, BLOCK_MODE)) == 0) { msg_warn("connect to transport %s: %m", transport->name); - qmgr_transport_throttle(transport, "transport is unavailable"); + qmgr_transport_throttle(transport, "4.3.0", "transport is unavailable"); return; } alloc = (QMGR_TRANSPORT_ALLOC *) mymalloc(sizeof(*alloc)); @@ -361,6 +371,7 @@ QMGR_TRANSPORT *qmgr_transport_create(const char *name) transport->candidate_cache_current = 0; transport->candidate_cache_time = (time_t) 0; transport->blocker_tag = 1; + transport->dsn = 0; transport->reason = 0; if (qmgr_transport_byname == 0) qmgr_transport_byname = htable_create(10); diff --git a/postfix/src/qmqpd/Makefile.in b/postfix/src/qmqpd/Makefile.in index b61043840..4b83fa5e9 100644 --- a/postfix/src/qmqpd/Makefile.in +++ b/postfix/src/qmqpd/Makefile.in @@ -59,70 +59,71 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -qmqpd.o: qmqpd.c -qmqpd.o: ../../include/sys_defs.h -qmqpd.o: ../../include/msg.h -qmqpd.o: ../../include/mymalloc.h -qmqpd.o: ../../include/vstring.h -qmqpd.o: ../../include/vbuf.h -qmqpd.o: ../../include/vstream.h -qmqpd.o: ../../include/netstring.h -qmqpd.o: ../../include/dict.h qmqpd.o: ../../include/argv.h -qmqpd.o: ../../include/mail_params.h -qmqpd.o: ../../include/record.h -qmqpd.o: ../../include/rec_type.h -qmqpd.o: ../../include/mail_proto.h -qmqpd.o: ../../include/iostuff.h qmqpd.o: ../../include/attr.h qmqpd.o: ../../include/cleanup_user.h -qmqpd.o: ../../include/mail_date.h -qmqpd.o: ../../include/mail_conf.h qmqpd.o: ../../include/debug_peer.h +qmqpd.o: ../../include/dict.h +qmqpd.o: ../../include/input_transp.h +qmqpd.o: ../../include/iostuff.h +qmqpd.o: ../../include/lex_822.h +qmqpd.o: ../../include/mail_conf.h +qmqpd.o: ../../include/mail_date.h +qmqpd.o: ../../include/mail_params.h +qmqpd.o: ../../include/mail_proto.h +qmqpd.o: ../../include/mail_server.h qmqpd.o: ../../include/mail_stream.h -qmqpd.o: ../../include/namadr_list.h qmqpd.o: ../../include/match_list.h qmqpd.o: ../../include/match_ops.h +qmqpd.o: ../../include/match_parent_style.h +qmqpd.o: ../../include/msg.h +qmqpd.o: ../../include/mymalloc.h +qmqpd.o: ../../include/namadr_list.h +qmqpd.o: ../../include/netstring.h qmqpd.o: ../../include/quote_822_local.h qmqpd.o: ../../include/quote_flags.h -qmqpd.o: ../../include/match_parent_style.h -qmqpd.o: ../../include/lex_822.h +qmqpd.o: ../../include/rec_type.h +qmqpd.o: ../../include/record.h +qmqpd.o: ../../include/sys_defs.h +qmqpd.o: ../../include/vbuf.h qmqpd.o: ../../include/verp_sender.h -qmqpd.o: ../../include/input_transp.h -qmqpd.o: ../../include/mail_server.h +qmqpd.o: ../../include/vstream.h +qmqpd.o: ../../include/vstring.h +qmqpd.o: qmqpd.c qmqpd.o: qmqpd.h -qmqpd_peer.o: qmqpd_peer.c -qmqpd_peer.o: ../../include/sys_defs.h +qmqpd_peer.o: ../../include/attr.h +qmqpd_peer.o: ../../include/inet_proto.h +qmqpd_peer.o: ../../include/iostuff.h +qmqpd_peer.o: ../../include/mail_proto.h +qmqpd_peer.o: ../../include/mail_stream.h qmqpd_peer.o: ../../include/msg.h +qmqpd_peer.o: ../../include/myaddrinfo.h qmqpd_peer.o: ../../include/mymalloc.h +qmqpd_peer.o: ../../include/sock_addr.h qmqpd_peer.o: ../../include/stringops.h -qmqpd_peer.o: ../../include/vstring.h +qmqpd_peer.o: ../../include/sys_defs.h +qmqpd_peer.o: ../../include/valid_hostname.h +qmqpd_peer.o: ../../include/valid_mailhost_addr.h qmqpd_peer.o: ../../include/vbuf.h -qmqpd_peer.o: ../../include/myaddrinfo.h -qmqpd_peer.o: ../../include/sock_addr.h -qmqpd_peer.o: ../../include/inet_proto.h -qmqpd_peer.o: ../../include/mail_proto.h qmqpd_peer.o: ../../include/vstream.h -qmqpd_peer.o: ../../include/iostuff.h -qmqpd_peer.o: ../../include/attr.h -qmqpd_peer.o: ../../include/valid_mailhost_addr.h -qmqpd_peer.o: ../../include/valid_hostname.h +qmqpd_peer.o: ../../include/vstring.h qmqpd_peer.o: qmqpd.h -qmqpd_peer.o: ../../include/mail_stream.h -qmqpd_state.o: qmqpd_state.c -qmqpd_state.o: ../../include/sys_defs.h +qmqpd_peer.o: qmqpd_peer.c +qmqpd_state.o: ../../include/attr.h +qmqpd_state.o: ../../include/cleanup_user.h +qmqpd_state.o: ../../include/iostuff.h +qmqpd_state.o: ../../include/mail_proto.h +qmqpd_state.o: ../../include/mail_stream.h qmqpd_state.o: ../../include/mymalloc.h -qmqpd_state.o: ../../include/vstream.h +qmqpd_state.o: ../../include/sys_defs.h qmqpd_state.o: ../../include/vbuf.h +qmqpd_state.o: ../../include/vstream.h qmqpd_state.o: ../../include/vstring.h -qmqpd_state.o: ../../include/mail_stream.h -qmqpd_state.o: ../../include/cleanup_user.h -qmqpd_state.o: ../../include/mail_proto.h -qmqpd_state.o: ../../include/iostuff.h -qmqpd_state.o: ../../include/attr.h qmqpd_state.o: qmqpd.h +qmqpd_state.o: qmqpd_state.c diff --git a/postfix/src/scache/Makefile.in b/postfix/src/scache/Makefile.in index 9ce850494..3274b4cbd 100644 --- a/postfix/src/scache/Makefile.in +++ b/postfix/src/scache/Makefile.in @@ -47,24 +47,25 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -scache.o: scache.c -scache.o: ../../include/sys_defs.h -scache.o: ../../include/msg.h -scache.o: ../../include/iostuff.h -scache.o: ../../include/htable.h -scache.o: ../../include/ring.h +scache.o: ../../include/attr.h scache.o: ../../include/events.h +scache.o: ../../include/htable.h +scache.o: ../../include/iostuff.h +scache.o: ../../include/mail_conf.h scache.o: ../../include/mail_params.h scache.o: ../../include/mail_proto.h -scache.o: ../../include/vstream.h -scache.o: ../../include/vbuf.h -scache.o: ../../include/attr.h +scache.o: ../../include/mail_server.h +scache.o: ../../include/msg.h +scache.o: ../../include/ring.h scache.o: ../../include/scache.h +scache.o: ../../include/sys_defs.h +scache.o: ../../include/vbuf.h +scache.o: ../../include/vstream.h scache.o: ../../include/vstring.h -scache.o: ../../include/mail_server.h -scache.o: ../../include/mail_conf.h +scache.o: scache.c diff --git a/postfix/src/sendmail/Makefile.in b/postfix/src/sendmail/Makefile.in index 364e6a15a..b084ba65e 100644 --- a/postfix/src/sendmail/Makefile.in +++ b/postfix/src/sendmail/Makefile.in @@ -47,49 +47,50 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -sendmail.o: sendmail.c -sendmail.o: ../../include/sys_defs.h -sendmail.o: ../../include/msg.h -sendmail.o: ../../include/mymalloc.h -sendmail.o: ../../include/vstream.h -sendmail.o: ../../include/vbuf.h -sendmail.o: ../../include/msg_vstream.h -sendmail.o: ../../include/msg_syslog.h -sendmail.o: ../../include/vstring_vstream.h -sendmail.o: ../../include/vstring.h -sendmail.o: ../../include/username.h -sendmail.o: ../../include/fullname.h sendmail.o: ../../include/argv.h -sendmail.o: ../../include/safe.h -sendmail.o: ../../include/iostuff.h -sendmail.o: ../../include/stringops.h -sendmail.o: ../../include/set_ugid.h -sendmail.o: ../../include/connect.h -sendmail.o: ../../include/split_at.h -sendmail.o: ../../include/mail_queue.h -sendmail.o: ../../include/mail_proto.h sendmail.o: ../../include/attr.h -sendmail.o: ../../include/mail_params.h -sendmail.o: ../../include/record.h -sendmail.o: ../../include/rec_type.h -sendmail.o: ../../include/rec_streamlf.h -sendmail.o: ../../include/mail_conf.h sendmail.o: ../../include/cleanup_user.h -sendmail.o: ../../include/mail_task.h -sendmail.o: ../../include/mail_run.h +sendmail.o: ../../include/connect.h sendmail.o: ../../include/debug_process.h -sendmail.o: ../../include/tok822.h -sendmail.o: ../../include/resolve_clnt.h +sendmail.o: ../../include/deliver_request.h +sendmail.o: ../../include/fullname.h +sendmail.o: ../../include/header_opts.h +sendmail.o: ../../include/iostuff.h +sendmail.o: ../../include/mail_conf.h sendmail.o: ../../include/mail_flush.h +sendmail.o: ../../include/mail_params.h +sendmail.o: ../../include/mail_proto.h +sendmail.o: ../../include/mail_queue.h +sendmail.o: ../../include/mail_run.h sendmail.o: ../../include/mail_stream.h -sendmail.o: ../../include/verp_sender.h -sendmail.o: ../../include/deliver_request.h -sendmail.o: ../../include/recipient_list.h +sendmail.o: ../../include/mail_task.h sendmail.o: ../../include/mime_state.h -sendmail.o: ../../include/header_opts.h +sendmail.o: ../../include/msg.h +sendmail.o: ../../include/msg_syslog.h +sendmail.o: ../../include/msg_vstream.h +sendmail.o: ../../include/mymalloc.h +sendmail.o: ../../include/rec_streamlf.h +sendmail.o: ../../include/rec_type.h +sendmail.o: ../../include/recipient_list.h +sendmail.o: ../../include/record.h +sendmail.o: ../../include/resolve_clnt.h +sendmail.o: ../../include/safe.h +sendmail.o: ../../include/set_ugid.h +sendmail.o: ../../include/split_at.h +sendmail.o: ../../include/stringops.h +sendmail.o: ../../include/sys_defs.h +sendmail.o: ../../include/tok822.h sendmail.o: ../../include/user_acl.h +sendmail.o: ../../include/username.h +sendmail.o: ../../include/vbuf.h +sendmail.o: ../../include/verp_sender.h +sendmail.o: ../../include/vstream.h +sendmail.o: ../../include/vstring.h +sendmail.o: ../../include/vstring_vstream.h +sendmail.o: sendmail.c diff --git a/postfix/src/showq/Makefile.in b/postfix/src/showq/Makefile.in index 285d77adc..4d7c8cd93 100644 --- a/postfix/src/showq/Makefile.in +++ b/postfix/src/showq/Makefile.in @@ -47,35 +47,36 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -showq.o: showq.c -showq.o: ../../include/sys_defs.h -showq.o: ../../include/msg.h -showq.o: ../../include/scan_dir.h -showq.o: ../../include/vstring.h -showq.o: ../../include/vbuf.h -showq.o: ../../include/vstream.h -showq.o: ../../include/vstring_vstream.h -showq.o: ../../include/stringops.h -showq.o: ../../include/mymalloc.h +showq.o: ../../include/attr.h +showq.o: ../../include/bounce_log.h showq.o: ../../include/htable.h -showq.o: ../../include/mail_queue.h -showq.o: ../../include/mail_open_ok.h -showq.o: ../../include/mail_proto.h showq.o: ../../include/iostuff.h -showq.o: ../../include/attr.h +showq.o: ../../include/mail_addr.h +showq.o: ../../include/mail_conf.h showq.o: ../../include/mail_date.h +showq.o: ../../include/mail_open_ok.h showq.o: ../../include/mail_params.h +showq.o: ../../include/mail_proto.h +showq.o: ../../include/mail_queue.h showq.o: ../../include/mail_scan_dir.h -showq.o: ../../include/mail_conf.h -showq.o: ../../include/record.h -showq.o: ../../include/rec_type.h +showq.o: ../../include/mail_server.h +showq.o: ../../include/msg.h +showq.o: ../../include/mymalloc.h showq.o: ../../include/quote_822_local.h showq.o: ../../include/quote_flags.h -showq.o: ../../include/mail_addr.h -showq.o: ../../include/bounce_log.h -showq.o: ../../include/mail_server.h +showq.o: ../../include/rec_type.h +showq.o: ../../include/record.h +showq.o: ../../include/scan_dir.h +showq.o: ../../include/stringops.h +showq.o: ../../include/sys_defs.h +showq.o: ../../include/vbuf.h +showq.o: ../../include/vstream.h +showq.o: ../../include/vstring.h +showq.o: ../../include/vstring_vstream.h +showq.o: showq.c diff --git a/postfix/src/smtp/Makefile.in b/postfix/src/smtp/Makefile.in index 16cae7bd2..2e464af0a 100644 --- a/postfix/src/smtp/Makefile.in +++ b/postfix/src/smtp/Makefile.in @@ -69,405 +69,421 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -smtp.o: smtp.c -smtp.o: ../../include/sys_defs.h -smtp.o: ../../include/dict.h -smtp.o: ../../include/vstream.h -smtp.o: ../../include/vbuf.h smtp.o: ../../include/argv.h +smtp.o: ../../include/debug_peer.h +smtp.o: ../../include/deliver_request.h +smtp.o: ../../include/dict.h +smtp.o: ../../include/dsn_util.h +smtp.o: ../../include/ext_prop.h +smtp.o: ../../include/flush_clnt.h +smtp.o: ../../include/htable.h +smtp.o: ../../include/mail_conf.h +smtp.o: ../../include/mail_params.h +smtp.o: ../../include/mail_server.h +smtp.o: ../../include/maps.h +smtp.o: ../../include/match_list.h +smtp.o: ../../include/match_ops.h smtp.o: ../../include/msg.h smtp.o: ../../include/mymalloc.h smtp.o: ../../include/name_mask.h -smtp.o: ../../include/deliver_request.h -smtp.o: ../../include/vstring.h smtp.o: ../../include/recipient_list.h -smtp.o: ../../include/mail_params.h -smtp.o: ../../include/mail_conf.h -smtp.o: ../../include/debug_peer.h -smtp.o: ../../include/flush_clnt.h +smtp.o: ../../include/resolve_clnt.h smtp.o: ../../include/scache.h smtp.o: ../../include/string_list.h -smtp.o: ../../include/match_list.h -smtp.o: ../../include/match_ops.h -smtp.o: ../../include/maps.h -smtp.o: ../../include/ext_prop.h -smtp.o: ../../include/mail_server.h -smtp.o: smtp.h -smtp.o: ../../include/htable.h -smtp.o: ../../include/tok822.h -smtp.o: ../../include/resolve_clnt.h +smtp.o: ../../include/sys_defs.h smtp.o: ../../include/tls.h +smtp.o: ../../include/tok822.h +smtp.o: ../../include/vbuf.h +smtp.o: ../../include/vstream.h +smtp.o: ../../include/vstring.h +smtp.o: smtp.c +smtp.o: smtp.h smtp.o: smtp_sasl.h -smtp_addr.o: smtp_addr.c -smtp_addr.o: ../../include/sys_defs.h -smtp_addr.o: ../../include/msg.h -smtp_addr.o: ../../include/vstring.h -smtp_addr.o: ../../include/vbuf.h -smtp_addr.o: ../../include/mymalloc.h +smtp_addr.o: ../../include/argv.h +smtp_addr.o: ../../include/deliver_request.h +smtp_addr.o: ../../include/dict.h +smtp_addr.o: ../../include/dns.h +smtp_addr.o: ../../include/dsn_util.h +smtp_addr.o: ../../include/htable.h smtp_addr.o: ../../include/inet_addr_list.h -smtp_addr.o: ../../include/myaddrinfo.h -smtp_addr.o: ../../include/stringops.h smtp_addr.o: ../../include/inet_proto.h smtp_addr.o: ../../include/mail_params.h +smtp_addr.o: ../../include/maps.h +smtp_addr.o: ../../include/match_list.h +smtp_addr.o: ../../include/match_ops.h +smtp_addr.o: ../../include/msg.h +smtp_addr.o: ../../include/myaddrinfo.h +smtp_addr.o: ../../include/mymalloc.h smtp_addr.o: ../../include/own_inet_addr.h -smtp_addr.o: ../../include/dns.h -smtp_addr.o: ../../include/sock_addr.h -smtp_addr.o: smtp.h -smtp_addr.o: ../../include/vstream.h -smtp_addr.o: ../../include/argv.h -smtp_addr.o: ../../include/htable.h -smtp_addr.o: ../../include/deliver_request.h smtp_addr.o: ../../include/recipient_list.h +smtp_addr.o: ../../include/resolve_clnt.h smtp_addr.o: ../../include/scache.h +smtp_addr.o: ../../include/sock_addr.h smtp_addr.o: ../../include/string_list.h -smtp_addr.o: ../../include/match_list.h -smtp_addr.o: ../../include/match_ops.h -smtp_addr.o: ../../include/maps.h -smtp_addr.o: ../../include/dict.h -smtp_addr.o: ../../include/tok822.h -smtp_addr.o: ../../include/resolve_clnt.h +smtp_addr.o: ../../include/stringops.h +smtp_addr.o: ../../include/sys_defs.h smtp_addr.o: ../../include/tls.h +smtp_addr.o: ../../include/tok822.h +smtp_addr.o: ../../include/vbuf.h +smtp_addr.o: ../../include/vstream.h +smtp_addr.o: ../../include/vstring.h +smtp_addr.o: smtp.h +smtp_addr.o: smtp_addr.c smtp_addr.o: smtp_addr.h -smtp_chat.o: smtp_chat.c -smtp_chat.o: ../../include/sys_defs.h -smtp_chat.o: ../../include/msg.h -smtp_chat.o: ../../include/vstring.h -smtp_chat.o: ../../include/vbuf.h -smtp_chat.o: ../../include/vstream.h smtp_chat.o: ../../include/argv.h -smtp_chat.o: ../../include/stringops.h -smtp_chat.o: ../../include/line_wrap.h -smtp_chat.o: ../../include/mymalloc.h -smtp_chat.o: ../../include/recipient_list.h +smtp_chat.o: ../../include/cleanup_user.h smtp_chat.o: ../../include/deliver_request.h -smtp_chat.o: ../../include/smtp_stream.h -smtp_chat.o: ../../include/mail_params.h +smtp_chat.o: ../../include/dict.h +smtp_chat.o: ../../include/dsn_util.h +smtp_chat.o: ../../include/htable.h +smtp_chat.o: ../../include/line_wrap.h smtp_chat.o: ../../include/mail_addr.h -smtp_chat.o: ../../include/post_mail.h -smtp_chat.o: ../../include/cleanup_user.h smtp_chat.o: ../../include/mail_error.h -smtp_chat.o: ../../include/name_mask.h -smtp_chat.o: smtp.h -smtp_chat.o: ../../include/htable.h -smtp_chat.o: ../../include/scache.h -smtp_chat.o: ../../include/string_list.h +smtp_chat.o: ../../include/mail_params.h +smtp_chat.o: ../../include/maps.h smtp_chat.o: ../../include/match_list.h smtp_chat.o: ../../include/match_ops.h -smtp_chat.o: ../../include/maps.h -smtp_chat.o: ../../include/dict.h -smtp_chat.o: ../../include/tok822.h +smtp_chat.o: ../../include/msg.h +smtp_chat.o: ../../include/mymalloc.h +smtp_chat.o: ../../include/name_mask.h +smtp_chat.o: ../../include/post_mail.h +smtp_chat.o: ../../include/recipient_list.h smtp_chat.o: ../../include/resolve_clnt.h +smtp_chat.o: ../../include/scache.h +smtp_chat.o: ../../include/smtp_stream.h +smtp_chat.o: ../../include/string_list.h +smtp_chat.o: ../../include/stringops.h +smtp_chat.o: ../../include/sys_defs.h smtp_chat.o: ../../include/tls.h -smtp_connect.o: smtp_connect.c -smtp_connect.o: ../../include/sys_defs.h -smtp_connect.o: ../../include/msg.h -smtp_connect.o: ../../include/vstream.h -smtp_connect.o: ../../include/vbuf.h -smtp_connect.o: ../../include/vstring.h -smtp_connect.o: ../../include/split_at.h -smtp_connect.o: ../../include/mymalloc.h -smtp_connect.o: ../../include/inet_addr_list.h -smtp_connect.o: ../../include/myaddrinfo.h -smtp_connect.o: ../../include/iostuff.h -smtp_connect.o: ../../include/timed_connect.h -smtp_connect.o: ../../include/stringops.h -smtp_connect.o: ../../include/host_port.h -smtp_connect.o: ../../include/sane_connect.h -smtp_connect.o: ../../include/sock_addr.h -smtp_connect.o: ../../include/mail_params.h -smtp_connect.o: ../../include/own_inet_addr.h +smtp_chat.o: ../../include/tok822.h +smtp_chat.o: ../../include/vbuf.h +smtp_chat.o: ../../include/vstream.h +smtp_chat.o: ../../include/vstring.h +smtp_chat.o: smtp.h +smtp_chat.o: smtp_chat.c +smtp_connect.o: ../../include/argv.h +smtp_connect.o: ../../include/attr.h smtp_connect.o: ../../include/deliver_pass.h smtp_connect.o: ../../include/deliver_request.h -smtp_connect.o: ../../include/recipient_list.h -smtp_connect.o: ../../include/mail_proto.h -smtp_connect.o: ../../include/attr.h -smtp_connect.o: ../../include/mail_error.h -smtp_connect.o: ../../include/name_mask.h +smtp_connect.o: ../../include/dict.h smtp_connect.o: ../../include/dns.h -smtp_connect.o: smtp.h -smtp_connect.o: ../../include/argv.h +smtp_connect.o: ../../include/dsn_util.h +smtp_connect.o: ../../include/host_port.h smtp_connect.o: ../../include/htable.h -smtp_connect.o: ../../include/scache.h -smtp_connect.o: ../../include/string_list.h +smtp_connect.o: ../../include/inet_addr_list.h +smtp_connect.o: ../../include/iostuff.h +smtp_connect.o: ../../include/mail_error.h +smtp_connect.o: ../../include/mail_params.h +smtp_connect.o: ../../include/mail_proto.h +smtp_connect.o: ../../include/maps.h smtp_connect.o: ../../include/match_list.h smtp_connect.o: ../../include/match_ops.h -smtp_connect.o: ../../include/maps.h -smtp_connect.o: ../../include/dict.h -smtp_connect.o: ../../include/tok822.h +smtp_connect.o: ../../include/msg.h +smtp_connect.o: ../../include/myaddrinfo.h +smtp_connect.o: ../../include/mymalloc.h +smtp_connect.o: ../../include/name_mask.h +smtp_connect.o: ../../include/own_inet_addr.h +smtp_connect.o: ../../include/recipient_list.h smtp_connect.o: ../../include/resolve_clnt.h +smtp_connect.o: ../../include/sane_connect.h +smtp_connect.o: ../../include/scache.h +smtp_connect.o: ../../include/sock_addr.h +smtp_connect.o: ../../include/split_at.h +smtp_connect.o: ../../include/string_list.h +smtp_connect.o: ../../include/stringops.h +smtp_connect.o: ../../include/sys_defs.h +smtp_connect.o: ../../include/timed_connect.h smtp_connect.o: ../../include/tls.h +smtp_connect.o: ../../include/tok822.h +smtp_connect.o: ../../include/vbuf.h +smtp_connect.o: ../../include/vstream.h +smtp_connect.o: ../../include/vstring.h +smtp_connect.o: smtp.h smtp_connect.o: smtp_addr.h +smtp_connect.o: smtp_connect.c smtp_connect.o: smtp_reuse.h -smtp_map11.o: smtp_map11.c -smtp_map11.o: ../../include/sys_defs.h -smtp_map11.o: ../../include/msg.h -smtp_map11.o: ../../include/vstring.h -smtp_map11.o: ../../include/vbuf.h -smtp_map11.o: ../../include/dict.h -smtp_map11.o: ../../include/vstream.h smtp_map11.o: ../../include/argv.h -smtp_map11.o: ../../include/tok822.h -smtp_map11.o: ../../include/resolve_clnt.h -smtp_map11.o: ../../include/valid_hostname.h +smtp_map11.o: ../../include/deliver_request.h +smtp_map11.o: ../../include/dict.h +smtp_map11.o: ../../include/dsn_util.h +smtp_map11.o: ../../include/htable.h smtp_map11.o: ../../include/mail_addr_map.h smtp_map11.o: ../../include/maps.h +smtp_map11.o: ../../include/match_list.h +smtp_map11.o: ../../include/match_ops.h +smtp_map11.o: ../../include/msg.h smtp_map11.o: ../../include/quote_822_local.h smtp_map11.o: ../../include/quote_flags.h -smtp_map11.o: smtp.h -smtp_map11.o: ../../include/htable.h -smtp_map11.o: ../../include/deliver_request.h smtp_map11.o: ../../include/recipient_list.h +smtp_map11.o: ../../include/resolve_clnt.h smtp_map11.o: ../../include/scache.h smtp_map11.o: ../../include/string_list.h -smtp_map11.o: ../../include/match_list.h -smtp_map11.o: ../../include/match_ops.h +smtp_map11.o: ../../include/sys_defs.h smtp_map11.o: ../../include/tls.h -smtp_proto.o: smtp_proto.c -smtp_proto.o: ../../include/sys_defs.h -smtp_proto.o: ../../include/msg.h -smtp_proto.o: ../../include/vstring.h -smtp_proto.o: ../../include/vbuf.h -smtp_proto.o: ../../include/vstream.h -smtp_proto.o: ../../include/vstring_vstream.h -smtp_proto.o: ../../include/stringops.h -smtp_proto.o: ../../include/mymalloc.h +smtp_map11.o: ../../include/tok822.h +smtp_map11.o: ../../include/valid_hostname.h +smtp_map11.o: ../../include/vbuf.h +smtp_map11.o: ../../include/vstream.h +smtp_map11.o: ../../include/vstring.h +smtp_map11.o: smtp.h +smtp_map11.o: smtp_map11.c +smtp_proto.o: ../../include/argv.h +smtp_proto.o: ../../include/attr.h +smtp_proto.o: ../../include/bounce.h +smtp_proto.o: ../../include/defer.h +smtp_proto.o: ../../include/deliver_request.h +smtp_proto.o: ../../include/dict.h +smtp_proto.o: ../../include/dsn_util.h +smtp_proto.o: ../../include/ehlo_mask.h +smtp_proto.o: ../../include/ext_prop.h +smtp_proto.o: ../../include/header_opts.h +smtp_proto.o: ../../include/htable.h smtp_proto.o: ../../include/iostuff.h -smtp_proto.o: ../../include/split_at.h -smtp_proto.o: ../../include/name_code.h +smtp_proto.o: ../../include/lex_822.h +smtp_proto.o: ../../include/mail_addr_map.h smtp_proto.o: ../../include/mail_params.h -smtp_proto.o: ../../include/smtp_stream.h +smtp_proto.o: ../../include/mail_proto.h smtp_proto.o: ../../include/mail_queue.h -smtp_proto.o: ../../include/recipient_list.h -smtp_proto.o: ../../include/deliver_request.h -smtp_proto.o: ../../include/defer.h -smtp_proto.o: ../../include/bounce.h -smtp_proto.o: ../../include/record.h -smtp_proto.o: ../../include/rec_type.h -smtp_proto.o: ../../include/off_cvt.h +smtp_proto.o: ../../include/maps.h smtp_proto.o: ../../include/mark_corrupt.h +smtp_proto.o: ../../include/match_list.h +smtp_proto.o: ../../include/match_ops.h +smtp_proto.o: ../../include/mime_state.h +smtp_proto.o: ../../include/msg.h +smtp_proto.o: ../../include/mymalloc.h +smtp_proto.o: ../../include/name_code.h +smtp_proto.o: ../../include/off_cvt.h smtp_proto.o: ../../include/quote_821_local.h smtp_proto.o: ../../include/quote_flags.h -smtp_proto.o: ../../include/mail_proto.h -smtp_proto.o: ../../include/attr.h -smtp_proto.o: ../../include/mime_state.h -smtp_proto.o: ../../include/header_opts.h -smtp_proto.o: ../../include/ehlo_mask.h -smtp_proto.o: ../../include/maps.h -smtp_proto.o: ../../include/dict.h -smtp_proto.o: ../../include/argv.h -smtp_proto.o: ../../include/tok822.h +smtp_proto.o: ../../include/rec_type.h +smtp_proto.o: ../../include/recipient_list.h +smtp_proto.o: ../../include/record.h smtp_proto.o: ../../include/resolve_clnt.h -smtp_proto.o: ../../include/mail_addr_map.h -smtp_proto.o: ../../include/ext_prop.h -smtp_proto.o: ../../include/lex_822.h -smtp_proto.o: smtp.h -smtp_proto.o: ../../include/htable.h smtp_proto.o: ../../include/scache.h +smtp_proto.o: ../../include/smtp_stream.h +smtp_proto.o: ../../include/split_at.h smtp_proto.o: ../../include/string_list.h -smtp_proto.o: ../../include/match_list.h -smtp_proto.o: ../../include/match_ops.h +smtp_proto.o: ../../include/stringops.h +smtp_proto.o: ../../include/sys_defs.h smtp_proto.o: ../../include/tls.h +smtp_proto.o: ../../include/tok822.h +smtp_proto.o: ../../include/vbuf.h +smtp_proto.o: ../../include/vstream.h +smtp_proto.o: ../../include/vstring.h +smtp_proto.o: ../../include/vstring_vstream.h +smtp_proto.o: smtp.h +smtp_proto.o: smtp_proto.c smtp_proto.o: smtp_sasl.h -smtp_rcpt.o: smtp_rcpt.c -smtp_rcpt.o: ../../include/sys_defs.h -smtp_rcpt.o: ../../include/msg.h -smtp_rcpt.o: ../../include/deliver_request.h -smtp_rcpt.o: ../../include/vstring.h -smtp_rcpt.o: ../../include/vbuf.h -smtp_rcpt.o: ../../include/vstream.h -smtp_rcpt.o: ../../include/recipient_list.h -smtp_rcpt.o: ../../include/deliver_completed.h -smtp_rcpt.o: ../../include/sent.h -smtp_rcpt.o: smtp.h smtp_rcpt.o: ../../include/argv.h +smtp_rcpt.o: ../../include/deliver_completed.h +smtp_rcpt.o: ../../include/deliver_request.h +smtp_rcpt.o: ../../include/dict.h +smtp_rcpt.o: ../../include/dsn_util.h smtp_rcpt.o: ../../include/htable.h -smtp_rcpt.o: ../../include/scache.h -smtp_rcpt.o: ../../include/string_list.h +smtp_rcpt.o: ../../include/maps.h smtp_rcpt.o: ../../include/match_list.h smtp_rcpt.o: ../../include/match_ops.h -smtp_rcpt.o: ../../include/maps.h -smtp_rcpt.o: ../../include/dict.h -smtp_rcpt.o: ../../include/tok822.h +smtp_rcpt.o: ../../include/msg.h +smtp_rcpt.o: ../../include/recipient_list.h smtp_rcpt.o: ../../include/resolve_clnt.h +smtp_rcpt.o: ../../include/scache.h +smtp_rcpt.o: ../../include/sent.h +smtp_rcpt.o: ../../include/string_list.h +smtp_rcpt.o: ../../include/sys_defs.h smtp_rcpt.o: ../../include/tls.h -smtp_reuse.o: smtp_reuse.c -smtp_reuse.o: ../../include/sys_defs.h -smtp_reuse.o: ../../include/msg.h -smtp_reuse.o: ../../include/mymalloc.h -smtp_reuse.o: ../../include/vstream.h -smtp_reuse.o: ../../include/vbuf.h -smtp_reuse.o: ../../include/vstring.h -smtp_reuse.o: ../../include/htable.h -smtp_reuse.o: ../../include/stringops.h -smtp_reuse.o: ../../include/scache.h -smtp_reuse.o: ../../include/mail_params.h -smtp_reuse.o: smtp.h +smtp_rcpt.o: ../../include/tok822.h +smtp_rcpt.o: ../../include/vbuf.h +smtp_rcpt.o: ../../include/vstream.h +smtp_rcpt.o: ../../include/vstring.h +smtp_rcpt.o: smtp.h +smtp_rcpt.o: smtp_rcpt.c smtp_reuse.o: ../../include/argv.h smtp_reuse.o: ../../include/deliver_request.h -smtp_reuse.o: ../../include/recipient_list.h -smtp_reuse.o: ../../include/string_list.h +smtp_reuse.o: ../../include/dict.h +smtp_reuse.o: ../../include/dns.h +smtp_reuse.o: ../../include/dsn_util.h +smtp_reuse.o: ../../include/htable.h +smtp_reuse.o: ../../include/mail_params.h +smtp_reuse.o: ../../include/maps.h smtp_reuse.o: ../../include/match_list.h smtp_reuse.o: ../../include/match_ops.h -smtp_reuse.o: ../../include/maps.h -smtp_reuse.o: ../../include/dict.h -smtp_reuse.o: ../../include/tok822.h +smtp_reuse.o: ../../include/msg.h +smtp_reuse.o: ../../include/myaddrinfo.h +smtp_reuse.o: ../../include/mymalloc.h +smtp_reuse.o: ../../include/recipient_list.h smtp_reuse.o: ../../include/resolve_clnt.h +smtp_reuse.o: ../../include/scache.h +smtp_reuse.o: ../../include/sock_addr.h +smtp_reuse.o: ../../include/string_list.h +smtp_reuse.o: ../../include/stringops.h +smtp_reuse.o: ../../include/sys_defs.h smtp_reuse.o: ../../include/tls.h +smtp_reuse.o: ../../include/tok822.h +smtp_reuse.o: ../../include/vbuf.h +smtp_reuse.o: ../../include/vstream.h +smtp_reuse.o: ../../include/vstring.h +smtp_reuse.o: smtp.h +smtp_reuse.o: smtp_reuse.c smtp_reuse.o: smtp_reuse.h -smtp_reuse.o: ../../include/dns.h -smtp_reuse.o: ../../include/sock_addr.h -smtp_reuse.o: ../../include/myaddrinfo.h -smtp_sasl_glue.o: smtp_sasl_glue.c -smtp_sasl_glue.o: ../../include/sys_defs.h -smtp_sasl_glue.o: ../../include/msg.h -smtp_sasl_glue.o: ../../include/mymalloc.h -smtp_sasl_glue.o: ../../include/stringops.h -smtp_sasl_glue.o: ../../include/vstring.h -smtp_sasl_glue.o: ../../include/vbuf.h -smtp_sasl_glue.o: ../../include/split_at.h -smtp_sasl_glue.o: ../../include/name_mask.h +smtp_sasl_glue.o: ../../include/argv.h +smtp_sasl_glue.o: ../../include/deliver_request.h +smtp_sasl_glue.o: ../../include/dict.h +smtp_sasl_glue.o: ../../include/dsn_util.h +smtp_sasl_glue.o: ../../include/htable.h smtp_sasl_glue.o: ../../include/mail_params.h -smtp_sasl_glue.o: ../../include/string_list.h +smtp_sasl_glue.o: ../../include/maps.h smtp_sasl_glue.o: ../../include/match_list.h smtp_sasl_glue.o: ../../include/match_ops.h -smtp_sasl_glue.o: ../../include/maps.h -smtp_sasl_glue.o: ../../include/dict.h -smtp_sasl_glue.o: ../../include/vstream.h -smtp_sasl_glue.o: ../../include/argv.h -smtp_sasl_glue.o: smtp.h -smtp_sasl_glue.o: ../../include/htable.h -smtp_sasl_glue.o: ../../include/deliver_request.h +smtp_sasl_glue.o: ../../include/msg.h +smtp_sasl_glue.o: ../../include/mymalloc.h +smtp_sasl_glue.o: ../../include/name_mask.h smtp_sasl_glue.o: ../../include/recipient_list.h -smtp_sasl_glue.o: ../../include/scache.h -smtp_sasl_glue.o: ../../include/tok822.h smtp_sasl_glue.o: ../../include/resolve_clnt.h +smtp_sasl_glue.o: ../../include/scache.h +smtp_sasl_glue.o: ../../include/split_at.h +smtp_sasl_glue.o: ../../include/string_list.h +smtp_sasl_glue.o: ../../include/stringops.h +smtp_sasl_glue.o: ../../include/sys_defs.h smtp_sasl_glue.o: ../../include/tls.h +smtp_sasl_glue.o: ../../include/tok822.h +smtp_sasl_glue.o: ../../include/vbuf.h +smtp_sasl_glue.o: ../../include/vstream.h +smtp_sasl_glue.o: ../../include/vstring.h +smtp_sasl_glue.o: smtp.h smtp_sasl_glue.o: smtp_sasl.h -smtp_sasl_proto.o: smtp_sasl_proto.c -smtp_sasl_proto.o: ../../include/sys_defs.h -smtp_sasl_proto.o: ../../include/msg.h -smtp_sasl_proto.o: ../../include/mymalloc.h -smtp_sasl_proto.o: ../../include/stringops.h -smtp_sasl_proto.o: ../../include/vstring.h -smtp_sasl_proto.o: ../../include/vbuf.h -smtp_sasl_proto.o: ../../include/mail_params.h -smtp_sasl_proto.o: smtp.h -smtp_sasl_proto.o: ../../include/vstream.h +smtp_sasl_glue.o: smtp_sasl_glue.c smtp_sasl_proto.o: ../../include/argv.h -smtp_sasl_proto.o: ../../include/htable.h smtp_sasl_proto.o: ../../include/deliver_request.h -smtp_sasl_proto.o: ../../include/recipient_list.h -smtp_sasl_proto.o: ../../include/scache.h -smtp_sasl_proto.o: ../../include/string_list.h +smtp_sasl_proto.o: ../../include/dict.h +smtp_sasl_proto.o: ../../include/dsn_util.h +smtp_sasl_proto.o: ../../include/htable.h +smtp_sasl_proto.o: ../../include/mail_params.h +smtp_sasl_proto.o: ../../include/maps.h smtp_sasl_proto.o: ../../include/match_list.h smtp_sasl_proto.o: ../../include/match_ops.h -smtp_sasl_proto.o: ../../include/maps.h -smtp_sasl_proto.o: ../../include/dict.h -smtp_sasl_proto.o: ../../include/tok822.h +smtp_sasl_proto.o: ../../include/msg.h +smtp_sasl_proto.o: ../../include/mymalloc.h +smtp_sasl_proto.o: ../../include/recipient_list.h smtp_sasl_proto.o: ../../include/resolve_clnt.h +smtp_sasl_proto.o: ../../include/scache.h +smtp_sasl_proto.o: ../../include/string_list.h +smtp_sasl_proto.o: ../../include/stringops.h +smtp_sasl_proto.o: ../../include/sys_defs.h smtp_sasl_proto.o: ../../include/tls.h +smtp_sasl_proto.o: ../../include/tok822.h +smtp_sasl_proto.o: ../../include/vbuf.h +smtp_sasl_proto.o: ../../include/vstream.h +smtp_sasl_proto.o: ../../include/vstring.h +smtp_sasl_proto.o: smtp.h smtp_sasl_proto.o: smtp_sasl.h -smtp_session.o: smtp_session.c -smtp_session.o: ../../include/sys_defs.h -smtp_session.o: ../../include/msg.h -smtp_session.o: ../../include/mymalloc.h -smtp_session.o: ../../include/vstream.h -smtp_session.o: ../../include/vbuf.h -smtp_session.o: ../../include/stringops.h -smtp_session.o: ../../include/vstring.h -smtp_session.o: ../../include/mime_state.h -smtp_session.o: ../../include/header_opts.h +smtp_sasl_proto.o: smtp_sasl_proto.c +smtp_session.o: ../../include/argv.h smtp_session.o: ../../include/debug_peer.h -smtp_session.o: ../../include/mail_params.h -smtp_session.o: ../../include/maps.h +smtp_session.o: ../../include/deliver_request.h smtp_session.o: ../../include/dict.h -smtp_session.o: ../../include/argv.h -smtp_session.o: smtp.h +smtp_session.o: ../../include/dsn_util.h +smtp_session.o: ../../include/header_opts.h smtp_session.o: ../../include/htable.h -smtp_session.o: ../../include/deliver_request.h -smtp_session.o: ../../include/recipient_list.h -smtp_session.o: ../../include/scache.h -smtp_session.o: ../../include/string_list.h +smtp_session.o: ../../include/mail_params.h +smtp_session.o: ../../include/maps.h smtp_session.o: ../../include/match_list.h smtp_session.o: ../../include/match_ops.h -smtp_session.o: ../../include/tok822.h +smtp_session.o: ../../include/mime_state.h +smtp_session.o: ../../include/msg.h +smtp_session.o: ../../include/mymalloc.h +smtp_session.o: ../../include/recipient_list.h smtp_session.o: ../../include/resolve_clnt.h +smtp_session.o: ../../include/scache.h +smtp_session.o: ../../include/string_list.h +smtp_session.o: ../../include/stringops.h +smtp_session.o: ../../include/sys_defs.h smtp_session.o: ../../include/tls.h -smtp_state.o: smtp_state.c -smtp_state.o: ../../include/sys_defs.h -smtp_state.o: ../../include/mymalloc.h -smtp_state.o: ../../include/vstring.h -smtp_state.o: ../../include/vbuf.h -smtp_state.o: ../../include/mail_params.h -smtp_state.o: smtp.h -smtp_state.o: ../../include/vstream.h +smtp_session.o: ../../include/tok822.h +smtp_session.o: ../../include/vbuf.h +smtp_session.o: ../../include/vstream.h +smtp_session.o: ../../include/vstring.h +smtp_session.o: smtp.h +smtp_session.o: smtp_sasl.h +smtp_session.o: smtp_session.c smtp_state.o: ../../include/argv.h -smtp_state.o: ../../include/htable.h smtp_state.o: ../../include/deliver_request.h -smtp_state.o: ../../include/recipient_list.h -smtp_state.o: ../../include/scache.h -smtp_state.o: ../../include/string_list.h +smtp_state.o: ../../include/dict.h +smtp_state.o: ../../include/dsn_util.h +smtp_state.o: ../../include/htable.h +smtp_state.o: ../../include/mail_params.h +smtp_state.o: ../../include/maps.h smtp_state.o: ../../include/match_list.h smtp_state.o: ../../include/match_ops.h -smtp_state.o: ../../include/maps.h -smtp_state.o: ../../include/dict.h -smtp_state.o: ../../include/tok822.h +smtp_state.o: ../../include/mymalloc.h +smtp_state.o: ../../include/recipient_list.h smtp_state.o: ../../include/resolve_clnt.h +smtp_state.o: ../../include/scache.h +smtp_state.o: ../../include/string_list.h +smtp_state.o: ../../include/sys_defs.h smtp_state.o: ../../include/tls.h +smtp_state.o: ../../include/tok822.h +smtp_state.o: ../../include/vbuf.h +smtp_state.o: ../../include/vstream.h +smtp_state.o: ../../include/vstring.h +smtp_state.o: smtp.h smtp_state.o: smtp_sasl.h -smtp_trouble.o: smtp_trouble.c -smtp_trouble.o: ../../include/sys_defs.h -smtp_trouble.o: ../../include/msg.h -smtp_trouble.o: ../../include/vstring.h -smtp_trouble.o: ../../include/vbuf.h -smtp_trouble.o: ../../include/stringops.h -smtp_trouble.o: ../../include/mymalloc.h -smtp_trouble.o: ../../include/smtp_stream.h -smtp_trouble.o: ../../include/vstream.h -smtp_trouble.o: ../../include/deliver_request.h -smtp_trouble.o: ../../include/recipient_list.h -smtp_trouble.o: ../../include/deliver_completed.h +smtp_state.o: smtp_state.c +smtp_trouble.o: ../../include/argv.h smtp_trouble.o: ../../include/bounce.h smtp_trouble.o: ../../include/defer.h -smtp_trouble.o: ../../include/mail_error.h -smtp_trouble.o: ../../include/name_mask.h -smtp_trouble.o: smtp.h -smtp_trouble.o: ../../include/argv.h +smtp_trouble.o: ../../include/deliver_completed.h +smtp_trouble.o: ../../include/deliver_request.h +smtp_trouble.o: ../../include/dict.h +smtp_trouble.o: ../../include/dsn_util.h smtp_trouble.o: ../../include/htable.h -smtp_trouble.o: ../../include/scache.h -smtp_trouble.o: ../../include/string_list.h +smtp_trouble.o: ../../include/mail_error.h +smtp_trouble.o: ../../include/maps.h smtp_trouble.o: ../../include/match_list.h smtp_trouble.o: ../../include/match_ops.h -smtp_trouble.o: ../../include/maps.h -smtp_trouble.o: ../../include/dict.h -smtp_trouble.o: ../../include/tok822.h +smtp_trouble.o: ../../include/msg.h +smtp_trouble.o: ../../include/mymalloc.h +smtp_trouble.o: ../../include/name_mask.h +smtp_trouble.o: ../../include/recipient_list.h smtp_trouble.o: ../../include/resolve_clnt.h +smtp_trouble.o: ../../include/scache.h +smtp_trouble.o: ../../include/smtp_stream.h +smtp_trouble.o: ../../include/string_list.h +smtp_trouble.o: ../../include/stringops.h +smtp_trouble.o: ../../include/sys_defs.h smtp_trouble.o: ../../include/tls.h -smtp_unalias.o: smtp_unalias.c -smtp_unalias.o: ../../include/sys_defs.h +smtp_trouble.o: ../../include/tok822.h +smtp_trouble.o: ../../include/vbuf.h +smtp_trouble.o: ../../include/vstream.h +smtp_trouble.o: ../../include/vstring.h +smtp_trouble.o: smtp.h +smtp_trouble.o: smtp_trouble.c +smtp_unalias.o: ../../include/argv.h +smtp_unalias.o: ../../include/deliver_request.h +smtp_unalias.o: ../../include/dict.h +smtp_unalias.o: ../../include/dns.h +smtp_unalias.o: ../../include/dsn_util.h smtp_unalias.o: ../../include/htable.h -smtp_unalias.o: ../../include/vstring.h -smtp_unalias.o: ../../include/vbuf.h +smtp_unalias.o: ../../include/maps.h +smtp_unalias.o: ../../include/match_list.h +smtp_unalias.o: ../../include/match_ops.h smtp_unalias.o: ../../include/msg.h -smtp_unalias.o: ../../include/dns.h -smtp_unalias.o: ../../include/sock_addr.h smtp_unalias.o: ../../include/myaddrinfo.h -smtp_unalias.o: smtp.h -smtp_unalias.o: ../../include/vstream.h -smtp_unalias.o: ../../include/argv.h -smtp_unalias.o: ../../include/deliver_request.h smtp_unalias.o: ../../include/recipient_list.h +smtp_unalias.o: ../../include/resolve_clnt.h smtp_unalias.o: ../../include/scache.h +smtp_unalias.o: ../../include/sock_addr.h smtp_unalias.o: ../../include/string_list.h -smtp_unalias.o: ../../include/match_list.h -smtp_unalias.o: ../../include/match_ops.h -smtp_unalias.o: ../../include/maps.h -smtp_unalias.o: ../../include/dict.h -smtp_unalias.o: ../../include/tok822.h -smtp_unalias.o: ../../include/resolve_clnt.h +smtp_unalias.o: ../../include/sys_defs.h smtp_unalias.o: ../../include/tls.h +smtp_unalias.o: ../../include/tok822.h +smtp_unalias.o: ../../include/vbuf.h +smtp_unalias.o: ../../include/vstream.h +smtp_unalias.o: ../../include/vstring.h +smtp_unalias.o: smtp.h +smtp_unalias.o: smtp_unalias.c diff --git a/postfix/src/smtp/smtp.c b/postfix/src/smtp/smtp.c index b0bbf70ff..5455059fd 100644 --- a/postfix/src/smtp/smtp.c +++ b/postfix/src/smtp/smtp.c @@ -47,6 +47,7 @@ /* RFC 1652 (8bit-MIME transport) /* RFC 1870 (Message Size Declaration) /* RFC 2045 (MIME: Format of Internet Message Bodies) +/* RFC 2034 (Enhanced Error Codes) /* RFC 2046 (MIME: Media Types) /* RFC 2554 (AUTH command) /* RFC 2821 (SMTP protocol) diff --git a/postfix/src/smtp/smtp.h b/postfix/src/smtp/smtp.h index 2aa7a363c..4328e6426 100644 --- a/postfix/src/smtp/smtp.h +++ b/postfix/src/smtp/smtp.h @@ -32,6 +32,7 @@ #include #include #include +#include /* * Postfix TLS library. @@ -247,6 +248,7 @@ extern int smtp_quit(SMTP_STATE *); */ typedef struct SMTP_RESP { /* server response */ int code; /* status */ + char dsn[DSN_BUFSIZE]; /* DSN detail */ char *str; /* text */ VSTRING *buf; /* origin of text */ } SMTP_RESP; @@ -296,16 +298,18 @@ extern void smtp_chat_notify(SMTP_SESSION *); #define SMTP_RCPT_LEFT(state) (state)->rcpt_left extern void smtp_rcpt_cleanup(SMTP_STATE *); -extern void smtp_rcpt_done(SMTP_STATE *, const char *, RECIPIENT *); +extern void smtp_rcpt_done(SMTP_STATE *, const char *, const char *, RECIPIENT *); /* * smtp_trouble.c */ -extern int PRINTFLIKE(3, 4) smtp_conn_fail(SMTP_STATE *, int, char *,...); -extern int PRINTFLIKE(3, 4) smtp_site_fail(SMTP_STATE *, int, char *,...); -extern int PRINTFLIKE(3, 4) smtp_mesg_fail(SMTP_STATE *, int, char *,...); -extern void PRINTFLIKE(4, 5) smtp_rcpt_fail(SMTP_STATE *, int, RECIPIENT *, char *,...); -extern int smtp_stream_except(SMTP_STATE *, int, char *); +extern int PRINTFLIKE(4, 5) smtp_site_fail(SMTP_STATE *, const char *, int, + const char *,...); +extern int PRINTFLIKE(4, 5) smtp_mesg_fail(SMTP_STATE *, const char *, int, + const char *,...); +extern void PRINTFLIKE(5, 6) smtp_rcpt_fail(SMTP_STATE *, const char *, int, + RECIPIENT *, const char *,...); +extern int smtp_stream_except(SMTP_STATE *, int, const char *); /* * smtp_unalias.c diff --git a/postfix/src/smtp/smtp_addr.c b/postfix/src/smtp/smtp_addr.c index 24f08902a..7609800af 100644 --- a/postfix/src/smtp/smtp_addr.c +++ b/postfix/src/smtp/smtp_addr.c @@ -9,13 +9,13 @@ /* DNS_RR *smtp_domain_addr(name, misc_flags, why, found_myself) /* char *name; /* int misc_flags; -/* VSTRING *why; +/* DSN_VSTRING *why; /* int *found_myself; /* /* DNS_RR *smtp_host_addr(name, misc_flags, why) /* char *name; /* int misc_flags; -/* VSTRING *why; +/* DSN_VSTRING *why; /* DESCRIPTION /* This module implements Internet address lookups. By default, /* lookups are done via the Internet domain name service (DNS). @@ -56,7 +56,7 @@ /* .IP SMTP_ERR_LOOP /* The local machine is the best mail exchanger. /* .PP -/* In addition, a textual description of the problem is made available +/* In addition, a description of the problem is made available /* via the \fIwhy\fR argument. /* LICENSE /* .ad @@ -96,6 +96,7 @@ #include #include +#include /* DNS library. */ @@ -128,7 +129,8 @@ static void smtp_print_addr(char *what, DNS_RR *addr_list) /* smtp_addr_one - address lookup for one host name */ -static DNS_RR *smtp_addr_one(DNS_RR *addr_list, char *host, unsigned pref, VSTRING *why) +static DNS_RR *smtp_addr_one(DNS_RR *addr_list, char *host, unsigned pref, + DSN_VSTRING *why) { char *myname = "smtp_addr_one"; DNS_RR *addr = 0; @@ -146,7 +148,7 @@ static DNS_RR *smtp_addr_one(DNS_RR *addr_list, char *host, unsigned pref, VSTRI * Interpret a numerical name as an address. */ if (hostaddr_to_sockaddr(host, (char *) 0, 0, &res0) == 0 - && strchr((char *) proto_info->sa_family_list, res0->ai_family) != 0) { + && strchr((char *) proto_info->sa_family_list, res0->ai_family) != 0) { if ((addr = dns_sa_to_rr(host, pref, res0->ai_addr)) == 0) msg_fatal("host %s: conversion error for address family %d: %m", host, ((struct sockaddr *) (res0->ai_addr))->sa_family); @@ -159,21 +161,25 @@ static DNS_RR *smtp_addr_one(DNS_RR *addr_list, char *host, unsigned pref, VSTRI * Use DNS lookup, but keep the option open to use native name service. */ if (smtp_host_lookup_mask & SMTP_HOST_FLAG_DNS) { - switch (dns_lookup_v(host, RES_DEFNAMES, &addr, (VSTRING *) 0, why, - DNS_REQ_FLAG_ALL, proto_info->dns_atype_list)) { + switch (dns_lookup_v(host, RES_DEFNAMES, &addr, (VSTRING *) 0, + why->vstring, DNS_REQ_FLAG_ALL, + proto_info->dns_atype_list)) { case DNS_OK: for (rr = addr; rr; rr = rr->next) rr->pref = pref; addr_list = dns_rr_append(addr_list, addr); return (addr_list); default: + dsn_vstring_update(why, "4.4.3", ""); smtp_errno = SMTP_ERR_RETRY; return (addr_list); case DNS_FAIL: + dsn_vstring_update(why, "4.4.3", ""); if (smtp_errno != SMTP_ERR_RETRY) smtp_errno = SMTP_ERR_FAIL; return (addr_list); case DNS_NOTFOUND: + dsn_vstring_update(why, "4.4.4", ""); if (smtp_errno != SMTP_ERR_RETRY) smtp_errno = SMTP_ERR_FAIL; /* maybe native naming service will succeed */ @@ -186,10 +192,19 @@ static DNS_RR *smtp_addr_one(DNS_RR *addr_list, char *host, unsigned pref, VSTRI */ #define RETRY_AI_ERROR(e) \ ((e) == EAI_AGAIN || (e) == EAI_MEMORY || (e) == EAI_SYSTEM) +#ifdef EAI_NODATA +#define DSN_NOHOST(e) \ + ((e) == EAI_AGAIN || (e) == EAI_NODATA || (e) == EAI_NONAME) +#else +#define DSN_NOHOST(e) \ + ((e) == EAI_AGAIN || (e) == EAI_NONAME) +#endif if (smtp_host_lookup_mask & SMTP_HOST_FLAG_NATIVE) { if ((aierr = hostname_to_sockaddr(host, (char *) 0, 0, &res0)) != 0) { - vstring_sprintf(why, "%s: %s", host, MAI_STRERROR(aierr)); + dsn_vstring_update(why, DSN_NOHOST(aierr) ? "4.4.4" : "4.3.0", + "unable to look up host %s: %s", + host, MAI_STRERROR(aierr)); if (smtp_errno != SMTP_ERR_RETRY) smtp_errno = (RETRY_AI_ERROR(aierr) ? SMTP_ERR_RETRY : SMTP_ERR_FAIL); @@ -208,7 +223,7 @@ static DNS_RR *smtp_addr_one(DNS_RR *addr_list, char *host, unsigned pref, VSTRI } freeaddrinfo(res0); if (found == 0) { - vstring_sprintf(why, "%s: host not found", host); + dsn_vstring_update(why, "5.4.4", "%s: host not found", host); smtp_errno = SMTP_ERR_FAIL; } return (addr_list); @@ -223,7 +238,7 @@ static DNS_RR *smtp_addr_one(DNS_RR *addr_list, char *host, unsigned pref, VSTRI /* smtp_addr_list - address lookup for a list of mail exchangers */ -static DNS_RR *smtp_addr_list(DNS_RR *mx_names, VSTRING *why) +static DNS_RR *smtp_addr_list(DNS_RR *mx_names, DSN_VSTRING *why) { DNS_RR *addr_list = 0; DNS_RR *rr; @@ -333,7 +348,7 @@ static int smtp_compare_pref(DNS_RR *a, DNS_RR *b) /* smtp_domain_addr - mail exchanger address lookup */ -DNS_RR *smtp_domain_addr(char *name, int misc_flags, VSTRING *why, +DNS_RR *smtp_domain_addr(char *name, int misc_flags, DSN_VSTRING *why, int *found_myself) { DNS_RR *mx_names; @@ -397,13 +412,15 @@ DNS_RR *smtp_domain_addr(char *name, int misc_flags, VSTRING *why, * at hostnames provides a partial solution for MX hosts behind a NAT * gateway. */ - switch (dns_lookup(name, T_MX, 0, &mx_names, (VSTRING *) 0, why)) { + switch (dns_lookup(name, T_MX, 0, &mx_names, (VSTRING *) 0, why->vstring)) { default: + dsn_vstring_update(why, "4.4.3", ""); smtp_errno = SMTP_ERR_RETRY; if (var_ign_mx_lookup_err) addr_list = smtp_host_addr(name, misc_flags, why); break; case DNS_FAIL: + dsn_vstring_update(why, "5.4.3", ""); smtp_errno = SMTP_ERR_FAIL; if (var_ign_mx_lookup_err) addr_list = smtp_host_addr(name, misc_flags, why); @@ -414,6 +431,7 @@ DNS_RR *smtp_domain_addr(char *name, int misc_flags, VSTRING *why, addr_list = smtp_addr_list(mx_names, why); dns_rr_free(mx_names); if (addr_list == 0) { + /* DSN and text does not change. */ if (var_smtp_defer_mxaddr) smtp_errno = SMTP_ERR_RETRY; msg_warn("no MX host for %s has a valid address record", name); @@ -427,12 +445,14 @@ DNS_RR *smtp_domain_addr(char *name, int misc_flags, VSTRING *why, addr_list = smtp_truncate_self(addr_list, self->pref); if (addr_list == 0) { if (best_pref != best_found) { - vstring_sprintf(why, "unable to find primary relay for %s", - name); + dsn_vstring_update(why, "4.4.4", + "unable to find primary relay for %s", + name); smtp_errno = SMTP_ERR_RETRY; } else { - vstring_sprintf(why, "mail for %s loops back to myself", - name); + dsn_vstring_update(why, "5.3.5", + "mail for %s loops back to myself", + name); smtp_errno = SMTP_ERR_LOOP; } } @@ -456,7 +476,7 @@ DNS_RR *smtp_domain_addr(char *name, int misc_flags, VSTRING *why, /* smtp_host_addr - direct host lookup */ -DNS_RR *smtp_host_addr(char *host, int misc_flags, VSTRING *why) +DNS_RR *smtp_host_addr(char *host, int misc_flags, DSN_VSTRING *why) { DNS_RR *addr_list; @@ -472,7 +492,8 @@ DNS_RR *smtp_host_addr(char *host, int misc_flags, VSTRING *why) && (misc_flags & SMTP_MISC_FLAG_LOOP_DETECT) && smtp_find_self(addr_list) != 0) { dns_rr_free(addr_list); - vstring_sprintf(why, "mail for %s loops back to myself", host); + dsn_vstring_update(why, "5.3.5", + "mail for %s loops back to myself", host); smtp_errno = SMTP_ERR_LOOP; return (0); } diff --git a/postfix/src/smtp/smtp_addr.h b/postfix/src/smtp/smtp_addr.h index 6e211fe33..da907c8fe 100644 --- a/postfix/src/smtp/smtp_addr.h +++ b/postfix/src/smtp/smtp_addr.h @@ -8,6 +8,11 @@ /* DESCRIPTION /* .nf + /* + * Global library. + */ +#include + /* * DNS library. */ @@ -16,8 +21,8 @@ /* * Internal interfaces. */ -extern DNS_RR *smtp_host_addr(char *, int, VSTRING *); -extern DNS_RR *smtp_domain_addr(char *, int, VSTRING *, int *); +extern DNS_RR *smtp_host_addr(char *, int, DSN_VSTRING *); +extern DNS_RR *smtp_domain_addr(char *, int, DSN_VSTRING *, int *); /* LICENSE /* .ad diff --git a/postfix/src/smtp/smtp_chat.c b/postfix/src/smtp/smtp_chat.c index 4cb579498..b25647a6d 100644 --- a/postfix/src/smtp/smtp_chat.c +++ b/postfix/src/smtp/smtp_chat.c @@ -9,6 +9,7 @@ /* typedef struct { /* .in +4 /* int code; +/* char dsn[...]; /* char *str; /* VSTRING *buf; /* .in -4 @@ -78,6 +79,7 @@ #include #include #include +#include /* Utility library. */ @@ -98,6 +100,7 @@ #include #include #include +#include /* Application-specific. */ @@ -198,6 +201,8 @@ SMTP_RESP *smtp_chat_resp(SMTP_SESSION *session) static SMTP_RESP rdata; char *cp; int last_char; + int three_digs = 0; + size_t len; /* * Initialize the response data buffer. @@ -238,7 +243,7 @@ SMTP_RESP *smtp_chat_resp(SMTP_SESSION *session) */ for (cp = STR(session->buffer); *cp && ISDIGIT(*cp); cp++) /* void */ ; - if (cp - STR(session->buffer) == 3) { + if ((three_digs = (cp - STR(session->buffer) == 3)) != 0) { if (*cp == '-') continue; if (*cp == ' ' || *cp == 0) @@ -246,7 +251,25 @@ SMTP_RESP *smtp_chat_resp(SMTP_SESSION *session) } session->error_mask |= MAIL_ERROR_PROTOCOL; } - rdata.code = atoi(STR(session->buffer)); + + /* + * Extract RFC 821 reply code and RFC 2034 detail. Use a default detail + * code if none was given. + */ + rdata.dsn[0] = 0; + if (three_digs != 0) { + rdata.code = atoi(STR(session->buffer)); + for (cp = STR(session->buffer) + 4; *cp == ' '; cp++) + /* void */ ; + if ((len = dsn_valid(cp)) > 0 && len < sizeof(rdata.dsn)) { + DSN_BUF_UPDATE(rdata.dsn, cp, len); + } else if (strchr("245", STR(session->buffer)[0]) != 0) { + DSN_BUF_UPDATE(rdata.dsn, "0.0.0", sizeof("0.0.0") - 1); + rdata.dsn[0] = STR(session->buffer)[0]; + } + } else { + rdata.code = 0; + } VSTRING_TERMINATE(rdata.buf); rdata.str = STR(rdata.buf); return (&rdata); diff --git a/postfix/src/smtp/smtp_connect.c b/postfix/src/smtp/smtp_connect.c index ecaa2ebfa..b01c1201f 100644 --- a/postfix/src/smtp/smtp_connect.c +++ b/postfix/src/smtp/smtp_connect.c @@ -91,6 +91,7 @@ #include #include #include +#include /* DNS library. */ @@ -126,7 +127,7 @@ static VSTRING *smtp_salvage(VSTREAM *stream) /* smtp_connect_addr - connect to explicit address */ static SMTP_SESSION *smtp_connect_addr(const char *dest, DNS_RR *addr, - unsigned port, VSTRING *why, + unsigned port, DSN_VSTRING *why, int sess_flags) { char *myname = "smtp_connect_addr"; @@ -150,6 +151,8 @@ static SMTP_SESSION *smtp_connect_addr(const char *dest, DNS_RR *addr, if (dns_rr_to_sa(addr, port, sa, &salen) != 0) { msg_warn("%s: skip address type %s: %m", myname, dns_strtype(addr->type)); + dsn_vstring_update(why, "4.4.0", + "network address conversion failed: %m"); smtp_errno = SMTP_ERR_RETRY; return (0); } @@ -239,8 +242,8 @@ static SMTP_SESSION *smtp_connect_addr(const char *dest, DNS_RR *addr, conn_stat = sane_connect(sock, sa, salen); } if (conn_stat < 0) { - vstring_sprintf(why, "connect to %s[%s]: %m", - addr->name, hostaddr.buf); + dsn_vstring_update(why, "4.4.1", "connect to %s[%s]: %m", + addr->name, hostaddr.buf); smtp_errno = SMTP_ERR_RETRY; close(sock); return (0); @@ -250,8 +253,8 @@ static SMTP_SESSION *smtp_connect_addr(const char *dest, DNS_RR *addr, * Skip this host if it takes no action within some time limit. */ if (read_wait(sock, var_smtp_helo_tmout) < 0) { - vstring_sprintf(why, "connect to %s[%s]: read timeout", - addr->name, hostaddr.buf); + dsn_vstring_update(why, "4.4.2", "connect to %s[%s]: read timeout", + addr->name, hostaddr.buf); smtp_errno = SMTP_ERR_RETRY; close(sock); return (0); @@ -262,8 +265,9 @@ static SMTP_SESSION *smtp_connect_addr(const char *dest, DNS_RR *addr, */ stream = vstream_fdopen(sock, O_RDWR); if ((ch = VSTREAM_GETC(stream)) == VSTREAM_EOF) { - vstring_sprintf(why, "connect to %s[%s]: server dropped connection without sending the initial SMTP greeting", - addr->name, hostaddr.buf); + dsn_vstring_update(why, "4.4.0", + "connect to %s[%s]: server dropped connection without sending the initial SMTP greeting", + addr->name, hostaddr.buf); smtp_errno = SMTP_ERR_RETRY; vstream_fclose(stream); return (0); @@ -276,12 +280,15 @@ static SMTP_SESSION *smtp_connect_addr(const char *dest, DNS_RR *addr, * also means that we have to salvage the server's response ourself so * that it can be included in logging or in non-delivery reports. It does * not hurt if we keep the test for a 4xx or 5xx greeting in smtp_helo(). + * + * Do not propagate the server's DSN code. We are skipping this problem! */ if (ch == '4' || (ch == '5' && var_smtp_skip_5xx_greeting)) { VSTRING *salvage_buf = smtp_salvage(stream); - vstring_sprintf(why, "connect to %s[%s]: server refused to talk to me: %s", - addr->name, hostaddr.buf, STR(salvage_buf)); + dsn_vstring_update(why, "4.3.0", + "connect to %s[%s]: server refused to talk to me: %s", + addr->name, hostaddr.buf, STR(salvage_buf)); vstring_free(salvage_buf); smtp_errno = SMTP_ERR_RETRY; vstream_fclose(stream); @@ -506,7 +513,7 @@ static int smtp_reuse_session(SMTP_STATE *state, int lookup_mx, int smtp_connect(SMTP_STATE *state) { DELIVER_REQUEST *request = state->request; - VSTRING *why = vstring_alloc(10); + DSN_VSTRING *why = dsn_vstring_alloc(10); char *dest_buf; char *domain; unsigned port; @@ -686,7 +693,7 @@ int smtp_connect(SMTP_STATE *state) smtp_xfer(state); smtp_cleanup_session(state); } else { - msg_info("%s (port %d)", vstring_str(why), ntohs(port)); + msg_info("%s (port %d)", STR(why->vstring), ntohs(port)); } } dns_rr_free(addr_list); @@ -715,6 +722,7 @@ int smtp_connect(SMTP_STATE *state) */ if (IS_FALLBACK_RELAY(cpp, sites, non_fallback_sites)) { msg_warn("%s configuration problem", VAR_FALLBACK_RELAY); + dsn_vstring_update(why, "4.3.5", ""); smtp_errno = SMTP_ERR_RETRY; } @@ -724,6 +732,7 @@ int smtp_connect(SMTP_STATE *state) */ else if (strcmp(sites->argv[0], var_relayhost) == 0) { msg_warn("%s configuration problem", VAR_RELAYHOST); + dsn_vstring_update(why, "4.3.5", ""); smtp_errno = SMTP_ERR_RETRY; } @@ -744,11 +753,16 @@ int smtp_connect(SMTP_STATE *state) /* * We still need to bounce or defer some left-over recipients: - * either mail loops or some backup mail server was unavailable. + * either mail loops or some mail server was unavailable. */ state->final_server = 1; /* XXX */ - smtp_site_fail(state, smtp_errno == SMTP_ERR_RETRY ? 450 : 550, - "%s", vstring_str(why)); + if (smtp_errno == SMTP_ERR_RETRY) { + why->dsn[0] = '4'; + smtp_site_fail(state, why->dsn, 450, "%s", STR(why->vstring)); + } else { + why->dsn[0] = '5'; + smtp_site_fail(state, why->dsn, 550, "%s", STR(why->vstring)); + } /* * Sanity check. Don't silently lose recipients. @@ -765,6 +779,6 @@ int smtp_connect(SMTP_STATE *state) if (HAVE_NEXTHOP_STATE(state)) FREE_NEXTHOP_STATE(state); argv_free(sites); - vstring_free(why); + dsn_vstring_free(why); return (state->status); } diff --git a/postfix/src/smtp/smtp_proto.c b/postfix/src/smtp/smtp_proto.c index ebbe53f1a..f360af9db 100644 --- a/postfix/src/smtp/smtp_proto.c +++ b/postfix/src/smtp/smtp_proto.c @@ -91,6 +91,7 @@ #include #include #include /* shutdown(2) */ +#include /* ntohs() */ #include #include #include /* 44BSD stdarg.h uses abort() */ @@ -272,10 +273,12 @@ int smtp_helo(SMTP_STATE *state, NOCLOBBER int misc_flags) case 2: break; case 5: - if (var_smtp_skip_5xx_greeting) + if (var_smtp_skip_5xx_greeting) { resp->code = 400; + resp->dsn[0] = '4'; + } default: - return (smtp_site_fail(state, resp->code, + return (smtp_site_fail(state, resp->dsn, resp->code, "host %s refused to talk to me: %s", session->namaddr, translit(resp->str, "\n", " "))); @@ -333,7 +336,7 @@ int smtp_helo(SMTP_STATE *state, NOCLOBBER int misc_flags) if ((session->features & SMTP_FEATURE_ESMTP) == 0) { smtp_chat_cmd(session, "HELO %s", var_smtp_helo_name); if ((resp = smtp_chat_resp(session))->code / 100 != 2) - return (smtp_site_fail(state, resp->code, + return (smtp_site_fail(state, resp->dsn, resp->code, "host %s refused to talk to me: %s", session->namaddr, translit(resp->str, "\n", " "))); @@ -372,8 +375,11 @@ int smtp_helo(SMTP_STATE *state, NOCLOBBER int misc_flags) && (misc_flags & SMTP_MISC_FLAG_LOOP_DETECT) != 0) { msg_warn("host %s replied to HELO/EHLO with my own hostname %s", session->namaddr, var_myhostname); - return (smtp_site_fail(state, - (session->features & SMTP_FEATURE_BEST_MX) ? 550 : 450, + return ((session->features & SMTP_FEATURE_BEST_MX) ? + smtp_site_fail(state, "5.3.5", 550, + "mail for %s loops back to myself", + request->nexthop) : + smtp_site_fail(state, "4.3.5", 450, "mail for %s loops back to myself", request->nexthop)); } @@ -514,7 +520,7 @@ int smtp_helo(SMTP_STATE *state, NOCLOBBER int misc_flags) */ session->features &= ~SMTP_FEATURE_STARTTLS; if (session->tls_enforce_tls) - return (smtp_site_fail(state, resp->code, + return (smtp_site_fail(state, resp->dsn, resp->code, "TLS is required, but host %s refused to start TLS: %s", session->namaddr, translit(resp->str, "\n", " "))); @@ -530,16 +536,16 @@ int smtp_helo(SMTP_STATE *state, NOCLOBBER int misc_flags) */ if (session->tls_enforce_tls) { if (!(session->features & SMTP_FEATURE_STARTTLS)) { - return (smtp_site_fail(state, 450, + return (smtp_site_fail(state, "4.7.4", 450, "TLS is required, but was not offered by host %s", session->namaddr)); } else if (smtp_tls_ctx == 0) { - return (smtp_site_fail(state, 450, + return (smtp_site_fail(state, "4.7.5", 450, "TLS is required, but our TLS engine is unavailable")); } else { msg_warn("%s: TLS is required but unavailable, don't know why", myname); - return (smtp_site_fail(state, 450, + return (smtp_site_fail(state, "4.7.0", 450, "TLS is required, but not available")); } } @@ -594,9 +600,7 @@ static int smtp_start_tls(SMTP_STATE *state, int misc_flags) * use TLS session caching??? */ serverid = vstring_alloc(10); - vstring_sprintf(serverid, "%s:%s:%u", - session->host, session->addr, - ntohs(session->port)); + vstring_sprintf(serverid, "%s:%u", session->addr, ntohs(session->port)); if (session->helo && strcasecmp(session->host, session->helo) != 0) vstring_sprintf_append(serverid, ":%s", session->helo); session->tls_context = @@ -608,7 +612,7 @@ static int smtp_start_tls(SMTP_STATE *state, int misc_flags) &(session->tls_info)); vstring_free(serverid); if (session->tls_context == 0) - return (smtp_site_fail(state, 450, + return (smtp_site_fail(state, "4.7.5", 450, "Cannot start TLS: handshake failure")); /* @@ -630,7 +634,7 @@ static int smtp_start_tls(SMTP_STATE *state, int misc_flags) tls_client_stop(smtp_tls_ctx, session->stream, var_smtp_starttls_tmout, 1, &(session->tls_info)); - return (smtp_site_fail(state, 450, + return (smtp_site_fail(state, "4.7.5", 450, "TLS failure: Cannot verify server certificate")); } } @@ -649,7 +653,7 @@ static int smtp_start_tls(SMTP_STATE *state, int misc_flags) tls_client_stop(smtp_tls_ctx, session->stream, var_smtp_starttls_tmout, 1, &(session->tls_info)); - return (smtp_site_fail(state, 450, + return (smtp_site_fail(state, "4.7.5", 450, "TLS failure: Cannot verify server hostname")); } } @@ -1202,7 +1206,7 @@ static int smtp_loop(SMTP_STATE *state, NOCLOBBER int send_state, */ case SMTP_STATE_MAIL: if (resp->code / 100 != 2) { - smtp_mesg_fail(state, resp->code, + smtp_mesg_fail(state, resp->dsn, resp->code, "host %s said: %s (in reply to %s)", session->namaddr, translit(resp->str, "\n", " "), @@ -1227,17 +1231,21 @@ static int smtp_loop(SMTP_STATE *state, NOCLOBBER int send_state, case SMTP_STATE_RCPT: if (!mail_from_rejected) { #ifdef notdef - if (resp->code == 552) + if (resp->code == 552) { resp->code = 452; + resp->dsn[0] = '4'; + } #endif rcpt = request->rcpt_list.info + recv_rcpt; if (resp->code / 100 == 2) { ++nrcpt; /* If trace-only, mark the recipient done. */ if (DEL_REQ_TRACE_ONLY(request->flags)) - smtp_rcpt_done(state, resp->str, rcpt); + smtp_rcpt_done(state, resp->dsn, + resp->str, rcpt); } else { - smtp_rcpt_fail(state, resp->code, rcpt, + smtp_rcpt_fail(state, resp->dsn, + resp->code, rcpt, "host %s said: %s (in reply to %s)", session->namaddr, translit(resp->str, "\n", " "), @@ -1259,7 +1267,7 @@ static int smtp_loop(SMTP_STATE *state, NOCLOBBER int send_state, case SMTP_STATE_DATA: if (resp->code / 100 != 3) { if (nrcpt > 0) - smtp_mesg_fail(state, resp->code, + smtp_mesg_fail(state, resp->dsn, resp->code, "host %s said: %s (in reply to %s)", session->namaddr, translit(resp->str, "\n", " "), @@ -1281,7 +1289,7 @@ static int smtp_loop(SMTP_STATE *state, NOCLOBBER int send_state, case SMTP_STATE_DOT: if (nrcpt > 0) { if (resp->code / 100 != 2) { - smtp_mesg_fail(state, resp->code, + smtp_mesg_fail(state, resp->dsn, resp->code, "host %s said: %s (in reply to %s)", session->namaddr, translit(resp->str, "\n", " "), @@ -1290,7 +1298,8 @@ static int smtp_loop(SMTP_STATE *state, NOCLOBBER int send_state, for (nrcpt = 0; nrcpt < recv_rcpt; nrcpt++) { rcpt = request->rcpt_list.info + nrcpt; if (!SMTP_RCPT_ISMARKED(rcpt)) - smtp_rcpt_done(state, resp->str, rcpt); + smtp_rcpt_done(state, resp->dsn, + resp->str, rcpt); } } } @@ -1410,7 +1419,7 @@ static int smtp_loop(SMTP_STATE *state, NOCLOBBER int send_state, vstring_str(session->scratch), VSTRING_LEN(session->scratch)); if (mime_errs) { - smtp_mesg_fail(state, 554, + smtp_mesg_fail(state, "5.6.5", 554, "MIME 7-bit conversion failed: %s", mime_state_error(mime_errs)); RETURN(0); @@ -1432,7 +1441,7 @@ static int smtp_loop(SMTP_STATE *state, NOCLOBBER int send_state, mime_errs = mime_state_update(session->mime_state, rec_type, "", 0); if (mime_errs) { - smtp_mesg_fail(state, 554, + smtp_mesg_fail(state, "5.6.5", 554, "MIME 7-bit conversion failed: %s", mime_state_error(mime_errs)); RETURN(0); @@ -1494,7 +1503,7 @@ int smtp_xfer(SMTP_STATE *state) * connection caching. */ if (session->size_limit > 0 && session->size_limit < request->data_size) { - smtp_mesg_fail(state, 552, + smtp_mesg_fail(state, "5.3.4", 552, "message size %lu exceeds size limit %.0f of server %s", request->data_size, (double) session->size_limit, session->namaddr); diff --git a/postfix/src/smtp/smtp_rcpt.c b/postfix/src/smtp/smtp_rcpt.c index 027991896..35cdda6b0 100644 --- a/postfix/src/smtp/smtp_rcpt.c +++ b/postfix/src/smtp/smtp_rcpt.c @@ -26,8 +26,9 @@ /* int SMTP_RCPT_LEFT(state) /* SMTP_STATE *state; /* -/* void smtp_rcpt_done(state, reply, rcpt) +/* void smtp_rcpt_done(state, dsn, reply, rcpt) /* SMTP_STATE *state; +/* const char *dsn; /* const char *reply; /* RECIPIENT *rcpt; /* DESCRIPTION @@ -123,7 +124,8 @@ /* smtp_rcpt_done - mark recipient as done or else */ -void smtp_rcpt_done(SMTP_STATE *state, const char *reply, RECIPIENT *rcpt) +void smtp_rcpt_done(SMTP_STATE *state, const char *dsn, + const char *reply, RECIPIENT *rcpt) { DELIVER_REQUEST *request = state->request; SMTP_SESSION *session = state->session; @@ -136,7 +138,7 @@ void smtp_rcpt_done(SMTP_STATE *state, const char *reply, RECIPIENT *rcpt) status = sent(DEL_REQ_TRACE_FLAGS(request->flags), request->queue_id, rcpt->orig_addr, rcpt->address, rcpt->offset, - session->namaddr, + session->namaddr, dsn, request->arrival_time, "%s", reply); if (status == 0) diff --git a/postfix/src/smtp/smtp_sasl_proto.c b/postfix/src/smtp/smtp_sasl_proto.c index 4dcd20b05..6653f5923 100644 --- a/postfix/src/smtp/smtp_sasl_proto.c +++ b/postfix/src/smtp/smtp_sasl_proto.c @@ -166,7 +166,7 @@ int smtp_sasl_helo_login(SMTP_STATE *state) ret = 0; smtp_sasl_start(session, VAR_SMTP_SASL_OPTS, var_smtp_sasl_opts); if (smtp_sasl_authenticate(session, why) <= 0) { - ret = smtp_site_fail(state, 450, "Authentication failed: %s", + ret = smtp_site_fail(state, "4.7.0", 450, "Authentication failed: %s", vstring_str(why)); /* Session reuse is disabled. */ } diff --git a/postfix/src/smtp/smtp_session.c b/postfix/src/smtp/smtp_session.c index 64cb7f273..453cc9e69 100644 --- a/postfix/src/smtp/smtp_session.c +++ b/postfix/src/smtp/smtp_session.c @@ -129,13 +129,6 @@ /* * Per-site policies can override main.cf settings. - * - * XXX 200412 This does not work as some people may expect. A policy that - * specifies "use TLS" in a policy file while TLS is turned off in main.cf - * cannot work, because there is no OpenSSL context for creating sessions - * (that context exists only if TLS is enabled via main.cf settings; the - * OpenSSL context is created at process initialization time and cannot be - * created on the fly). */ typedef struct { int dont_use; /* don't use TLS */ diff --git a/postfix/src/smtp/smtp_trouble.c b/postfix/src/smtp/smtp_trouble.c index 435a1ae35..e8bf0e842 100644 --- a/postfix/src/smtp/smtp_trouble.c +++ b/postfix/src/smtp/smtp_trouble.c @@ -6,26 +6,29 @@ /* SYNOPSIS /* #include "smtp.h" /* -/* int smtp_site_fail(state, code, format, ...) +/* int smtp_site_fail(state, dsn, code, format, ...) /* SMTP_STATE *state; +/* const char *dsn; /* int code; -/* char *format; +/* const char *format; /* -/* int smtp_mesg_fail(state, code, format, ...) +/* int smtp_mesg_fail(state, dsn, code, format, ...) /* SMTP_STATE *state; +/* const char *dsn; /* int code; -/* char *format; +/* const char *format; /* -/* void smtp_rcpt_fail(state, code, recipient, format, ...) +/* void smtp_rcpt_fail(state, dsn, code, recipient, format, ...) /* SMTP_STATE *state; +/* const char *dsn; /* int code; /* RECIPIENT *recipient; -/* char *format; +/* const char *format; /* /* int smtp_stream_except(state, exception, description) /* SMTP_STATE *state; /* int exception; -/* char *description; +/* const char *description; /* DESCRIPTION /* This module handles all non-fatal errors that can happen while /* attempting to deliver mail via SMTP, and implements the policy @@ -128,6 +131,7 @@ #include #include #include +#include /* Application-specific. */ @@ -159,7 +163,8 @@ static void smtp_check_code(SMTP_SESSION *session, int code) /* smtp_site_fail - skip site, defer or bounce all recipients */ -int smtp_site_fail(SMTP_STATE *state, int code, char *format,...) +int smtp_site_fail(SMTP_STATE *state, const char *dsn, int code, + const char *format,...) { DELIVER_REQUEST *request = state->request; SMTP_SESSION *session = state->session; @@ -174,7 +179,11 @@ int smtp_site_fail(SMTP_STATE *state, int code, char *format,...) * Initialize. */ va_start(ap, format); - vstring_vsprintf(why, format, ap); + if (code < 400 || code > 599) { + vstring_sprintf(why, "Protocol error: "); + dsn = "5.5.0"; + } + vstring_vsprintf_append(why, format, ap); va_end(ap); /* @@ -206,7 +215,7 @@ int smtp_site_fail(SMTP_STATE *state, int code, char *format,...) (DEL_REQ_TRACE_FLAGS(request->flags), request->queue_id, rcpt->orig_addr, rcpt->address, rcpt->offset, session ? session->namaddr : "none", - request->arrival_time, "%s", vstring_str(why)); + dsn, request->arrival_time, "%s", vstring_str(why)); if (status == 0) deliver_completed(state->src, rcpt->offset); SMTP_RCPT_DROP(state, rcpt); @@ -214,7 +223,7 @@ int smtp_site_fail(SMTP_STATE *state, int code, char *format,...) } /* XXX This assumes no fall-back relay. */ if (soft_error && request->hop_status == 0) - request->hop_status = mystrdup(vstring_str(why)); + request->hop_status = dsn_prepend(dsn, vstring_str(why)); } if (session) smtp_check_code(session, code); @@ -234,7 +243,8 @@ int smtp_site_fail(SMTP_STATE *state, int code, char *format,...) /* smtp_mesg_fail - skip site, defer all recipients, or bounce all recipients */ -int smtp_mesg_fail(SMTP_STATE *state, int code, char *format,...) +int smtp_mesg_fail(SMTP_STATE *state, const char *dsn, + int code, const char *format,...) { DELIVER_REQUEST *request = state->request; SMTP_SESSION *session = state->session; @@ -249,7 +259,11 @@ int smtp_mesg_fail(SMTP_STATE *state, int code, char *format,...) * Initialize. */ va_start(ap, format); - vstring_vsprintf(why, format, ap); + if (code < 400 || code > 599) { + vstring_sprintf(why, "Protocol error: "); + dsn = "5.5.0"; + } + vstring_vsprintf_append(why, format, ap); va_end(ap); /* @@ -281,7 +295,7 @@ int smtp_mesg_fail(SMTP_STATE *state, int code, char *format,...) (DEL_REQ_TRACE_FLAGS(request->flags), request->queue_id, rcpt->orig_addr, rcpt->address, rcpt->offset, session ? session->namaddr : "none", - request->arrival_time, "%s", vstring_str(why)); + dsn, request->arrival_time, "%s", vstring_str(why)); if (status == 0) deliver_completed(state->src, rcpt->offset); SMTP_RCPT_DROP(state, rcpt); @@ -300,14 +314,15 @@ int smtp_mesg_fail(SMTP_STATE *state, int code, char *format,...) /* smtp_rcpt_fail - skip, defer, or bounce recipient */ -void smtp_rcpt_fail(SMTP_STATE *state, int code, RECIPIENT *rcpt, - char *format,...) +void smtp_rcpt_fail(SMTP_STATE *state, const char *dsn, int code, + RECIPIENT *rcpt, const char *format,...) { DELIVER_REQUEST *request = state->request; SMTP_SESSION *session = state->session; int status; int soft_error = SMTP_SOFT(code); va_list ap; + VSTRING *why = vstring_alloc(100); /* * Sanity check. @@ -315,20 +330,25 @@ void smtp_rcpt_fail(SMTP_STATE *state, int code, RECIPIENT *rcpt, if (SMTP_RCPT_ISMARKED(rcpt)) msg_panic("smtp_rcpt_fail: recipient <%s> is marked", rcpt->address); + /* + * Initialize. + */ + va_start(ap, format); + if (code < 400 || code > 599) { + vstring_sprintf(why, "Protocol error: "); + dsn = "5.5.0"; + } + vstring_vsprintf_append(why, format, ap); + va_end(ap); + /* * Don't defer this recipient record just yet when this error qualifies * for trying other mail servers. Just log something informative to show * why we're skipping this recipient now. */ if (soft_error && state->final_server == 0) { - VSTRING *buf = vstring_alloc(100); - - va_start(ap, format); - vstring_vsprintf(buf, format, ap); - va_end(ap); - msg_info("%s: %s", request->queue_id, vstring_str(buf)); + msg_info("%s: %s", request->queue_id, vstring_str(why)); SMTP_RCPT_KEEP(state, rcpt); - vstring_free(buf); } /* @@ -340,13 +360,11 @@ void smtp_rcpt_fail(SMTP_STATE *state, int code, RECIPIENT *rcpt, * that did qualify for delivery to a backup server. */ else { - va_start(ap, format); - status = (soft_error ? vdefer_append : vbounce_append) + status = (soft_error ? defer_append : bounce_append) (DEL_REQ_TRACE_FLAGS(request->flags), request->queue_id, rcpt->orig_addr, rcpt->address, rcpt->offset, session ? session->namaddr : "none", - request->arrival_time, format, ap); - va_end(ap); + dsn, request->arrival_time, "%s", vstring_str(why)); if (status == 0) deliver_completed(state->src, rcpt->offset); SMTP_RCPT_DROP(state, rcpt); @@ -354,17 +372,23 @@ void smtp_rcpt_fail(SMTP_STATE *state, int code, RECIPIENT *rcpt, } if (session) smtp_check_code(session, code); + + /* + * Cleanup. + */ + vstring_free(why); } /* smtp_stream_except - defer domain after I/O problem */ -int smtp_stream_except(SMTP_STATE *state, int code, char *description) +int smtp_stream_except(SMTP_STATE *state, int code, const char *description) { DELIVER_REQUEST *request = state->request; SMTP_SESSION *session = state->session; RECIPIENT *rcpt; int nrcpt; VSTRING *why = vstring_alloc(100); + const char *dsn; /* * Sanity check. @@ -381,10 +405,12 @@ int smtp_stream_except(SMTP_STATE *state, int code, char *description) case SMTP_ERR_EOF: vstring_sprintf(why, "lost connection with %s while %s", session->namaddr, description); + dsn = "4.4.2"; break; case SMTP_ERR_TIME: vstring_sprintf(why, "conversation with %s timed out while %s", session->namaddr, description); + dsn = "4.4.2"; break; } @@ -416,10 +442,13 @@ int smtp_stream_except(SMTP_STATE *state, int code, char *description) request->queue_id, rcpt->orig_addr, rcpt->address, rcpt->offset, session->namaddr, - request->arrival_time, + dsn, request->arrival_time, "%s", vstring_str(why)); SMTP_RCPT_DROP(state, rcpt); } + /* XXX This assumes no fall-back relay. */ + if (request->hop_status == 0) + request->hop_status = dsn_prepend(dsn, vstring_str(why)); } /* diff --git a/postfix/src/smtpd/Makefile.in b/postfix/src/smtpd/Makefile.in index 88a8dbe9b..b265a4474 100644 --- a/postfix/src/smtpd/Makefile.in +++ b/postfix/src/smtpd/Makefile.in @@ -59,14 +59,6 @@ clean: tidy: clean -depend: $(MAKES) - (sed '1,/^# do not edit/!d' Makefile.in; \ - set -e; for i in [a-z][a-z0-9]*.c; do \ - $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in - @$(EXPORT) make -f Makefile.in Makefile 1>&2 - tests: smtpd_check_test smtpd_check_test2 smtpd_acl_test smtpd_exp_test \ smtpd_token_test smtpd_check_test4 @@ -105,281 +97,292 @@ smtpd_token_test: smtpd_token smtpd_token.in smtpd_token.ref diff smtpd_token.ref smtpd_token.tmp rm -f smtpd_token.tmp +depend: $(MAKES) + (sed '1,/^# do not edit/!d' Makefile.in; \ + set -e; for i in [a-z][a-z0-9]*.c; do \ + $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + @$(EXPORT) make -f Makefile.in Makefile 1>&2 + # do not edit below this line - it is generated by 'make depend' -smtpd.o: smtpd.c -smtpd.o: ../../include/sys_defs.h -smtpd.o: ../../include/msg.h -smtpd.o: ../../include/mymalloc.h -smtpd.o: ../../include/vstring.h -smtpd.o: ../../include/vbuf.h -smtpd.o: ../../include/vstream.h -smtpd.o: ../../include/vstring_vstream.h -smtpd.o: ../../include/stringops.h -smtpd.o: ../../include/events.h -smtpd.o: ../../include/smtp_stream.h -smtpd.o: ../../include/valid_hostname.h -smtpd.o: ../../include/dict.h +smtpd.o: ../../include/anvil_clnt.h smtpd.o: ../../include/argv.h -smtpd.o: ../../include/watchdog.h -smtpd.o: ../../include/iostuff.h -smtpd.o: ../../include/split_at.h -smtpd.o: ../../include/name_code.h -smtpd.o: ../../include/mail_params.h -smtpd.o: ../../include/record.h -smtpd.o: ../../include/rec_type.h -smtpd.o: ../../include/mail_proto.h smtpd.o: ../../include/attr.h +smtpd.o: ../../include/attr_clnt.h smtpd.o: ../../include/cleanup_user.h -smtpd.o: ../../include/mail_date.h -smtpd.o: ../../include/mail_conf.h -smtpd.o: ../../include/off_cvt.h smtpd.o: ../../include/debug_peer.h -smtpd.o: ../../include/mail_error.h -smtpd.o: ../../include/name_mask.h +smtpd.o: ../../include/dict.h +smtpd.o: ../../include/ehlo_mask.h +smtpd.o: ../../include/events.h smtpd.o: ../../include/flush_clnt.h -smtpd.o: ../../include/mail_stream.h +smtpd.o: ../../include/input_transp.h +smtpd.o: ../../include/iostuff.h +smtpd.o: ../../include/is_header.h +smtpd.o: ../../include/lex_822.h +smtpd.o: ../../include/mail_conf.h +smtpd.o: ../../include/mail_date.h +smtpd.o: ../../include/mail_error.h +smtpd.o: ../../include/mail_params.h +smtpd.o: ../../include/mail_proto.h smtpd.o: ../../include/mail_queue.h -smtpd.o: ../../include/tok822.h -smtpd.o: ../../include/resolve_clnt.h -smtpd.o: ../../include/verp_sender.h -smtpd.o: ../../include/string_list.h +smtpd.o: ../../include/mail_server.h +smtpd.o: ../../include/mail_stream.h +smtpd.o: ../../include/maps.h smtpd.o: ../../include/match_list.h smtpd.o: ../../include/match_ops.h +smtpd.o: ../../include/msg.h +smtpd.o: ../../include/myaddrinfo.h +smtpd.o: ../../include/mymalloc.h +smtpd.o: ../../include/namadr_list.h +smtpd.o: ../../include/name_code.h +smtpd.o: ../../include/name_mask.h +smtpd.o: ../../include/off_cvt.h smtpd.o: ../../include/quote_822_local.h smtpd.o: ../../include/quote_flags.h -smtpd.o: ../../include/lex_822.h -smtpd.o: ../../include/namadr_list.h -smtpd.o: ../../include/input_transp.h -smtpd.o: ../../include/is_header.h -smtpd.o: ../../include/anvil_clnt.h -smtpd.o: ../../include/attr_clnt.h -smtpd.o: ../../include/ehlo_mask.h -smtpd.o: ../../include/maps.h +smtpd.o: ../../include/rec_type.h +smtpd.o: ../../include/record.h +smtpd.o: ../../include/resolve_clnt.h +smtpd.o: ../../include/smtp_stream.h +smtpd.o: ../../include/split_at.h +smtpd.o: ../../include/string_list.h +smtpd.o: ../../include/stringops.h +smtpd.o: ../../include/sys_defs.h +smtpd.o: ../../include/tls.h +smtpd.o: ../../include/tok822.h +smtpd.o: ../../include/valid_hostname.h smtpd.o: ../../include/valid_mailhost_addr.h -smtpd.o: ../../include/mail_server.h -smtpd.o: smtpd_token.h +smtpd.o: ../../include/vbuf.h +smtpd.o: ../../include/verp_sender.h +smtpd.o: ../../include/vstream.h +smtpd.o: ../../include/vstring.h +smtpd.o: ../../include/vstring_vstream.h +smtpd.o: ../../include/watchdog.h +smtpd.o: smtpd.c smtpd.o: smtpd.h -smtpd.o: ../../include/myaddrinfo.h -smtpd.o: ../../include/tls.h -smtpd.o: smtpd_check.h smtpd.o: smtpd_chat.h -smtpd.o: smtpd_sasl_proto.h -smtpd.o: smtpd_sasl_glue.h +smtpd.o: smtpd_check.h smtpd.o: smtpd_proxy.h -smtpd_chat.o: smtpd_chat.c -smtpd_chat.o: ../../include/sys_defs.h -smtpd_chat.o: ../../include/msg.h +smtpd.o: smtpd_sasl_glue.h +smtpd.o: smtpd_sasl_proto.h +smtpd.o: smtpd_token.h smtpd_chat.o: ../../include/argv.h -smtpd_chat.o: ../../include/vstring.h -smtpd_chat.o: ../../include/vbuf.h -smtpd_chat.o: ../../include/vstream.h -smtpd_chat.o: ../../include/stringops.h -smtpd_chat.o: ../../include/line_wrap.h -smtpd_chat.o: ../../include/mymalloc.h -smtpd_chat.o: ../../include/smtp_stream.h -smtpd_chat.o: ../../include/record.h -smtpd_chat.o: ../../include/rec_type.h -smtpd_chat.o: ../../include/mail_proto.h -smtpd_chat.o: ../../include/iostuff.h smtpd_chat.o: ../../include/attr.h -smtpd_chat.o: ../../include/mail_params.h -smtpd_chat.o: ../../include/mail_addr.h -smtpd_chat.o: ../../include/post_mail.h smtpd_chat.o: ../../include/cleanup_user.h +smtpd_chat.o: ../../include/iostuff.h +smtpd_chat.o: ../../include/line_wrap.h +smtpd_chat.o: ../../include/mail_addr.h smtpd_chat.o: ../../include/mail_error.h -smtpd_chat.o: ../../include/name_mask.h -smtpd_chat.o: smtpd.h -smtpd_chat.o: ../../include/myaddrinfo.h +smtpd_chat.o: ../../include/mail_params.h +smtpd_chat.o: ../../include/mail_proto.h smtpd_chat.o: ../../include/mail_stream.h +smtpd_chat.o: ../../include/msg.h +smtpd_chat.o: ../../include/myaddrinfo.h +smtpd_chat.o: ../../include/mymalloc.h +smtpd_chat.o: ../../include/name_mask.h +smtpd_chat.o: ../../include/post_mail.h +smtpd_chat.o: ../../include/rec_type.h +smtpd_chat.o: ../../include/record.h +smtpd_chat.o: ../../include/smtp_stream.h +smtpd_chat.o: ../../include/stringops.h +smtpd_chat.o: ../../include/sys_defs.h smtpd_chat.o: ../../include/tls.h +smtpd_chat.o: ../../include/vbuf.h +smtpd_chat.o: ../../include/vstream.h +smtpd_chat.o: ../../include/vstring.h +smtpd_chat.o: smtpd.h +smtpd_chat.o: smtpd_chat.c smtpd_chat.o: smtpd_chat.h -smtpd_check.o: smtpd_check.c -smtpd_check.o: ../../include/sys_defs.h -smtpd_check.o: ../../include/msg.h -smtpd_check.o: ../../include/vstring.h -smtpd_check.o: ../../include/vbuf.h -smtpd_check.o: ../../include/split_at.h -smtpd_check.o: ../../include/fsspace.h -smtpd_check.o: ../../include/stringops.h -smtpd_check.o: ../../include/valid_hostname.h smtpd_check.o: ../../include/argv.h -smtpd_check.o: ../../include/mymalloc.h +smtpd_check.o: ../../include/attr.h +smtpd_check.o: ../../include/attr_clnt.h +smtpd_check.o: ../../include/cleanup_user.h +smtpd_check.o: ../../include/ctable.h +smtpd_check.o: ../../include/deliver_request.h smtpd_check.o: ../../include/dict.h -smtpd_check.o: ../../include/vstream.h +smtpd_check.o: ../../include/dns.h +smtpd_check.o: ../../include/domain_list.h +smtpd_check.o: ../../include/dsn_util.h +smtpd_check.o: ../../include/fsspace.h smtpd_check.o: ../../include/htable.h -smtpd_check.o: ../../include/ctable.h +smtpd_check.o: ../../include/inet_addr_list.h +smtpd_check.o: ../../include/inet_proto.h +smtpd_check.o: ../../include/input_transp.h +smtpd_check.o: ../../include/iostuff.h +smtpd_check.o: ../../include/is_header.h smtpd_check.o: ../../include/mac_expand.h smtpd_check.o: ../../include/mac_parse.h -smtpd_check.o: ../../include/attr_clnt.h -smtpd_check.o: ../../include/attr.h -smtpd_check.o: ../../include/myaddrinfo.h -smtpd_check.o: ../../include/inet_proto.h -smtpd_check.o: ../../include/dns.h -smtpd_check.o: ../../include/sock_addr.h -smtpd_check.o: ../../include/string_list.h +smtpd_check.o: ../../include/mail_addr.h +smtpd_check.o: ../../include/mail_addr_find.h +smtpd_check.o: ../../include/mail_conf.h +smtpd_check.o: ../../include/mail_error.h +smtpd_check.o: ../../include/mail_params.h +smtpd_check.o: ../../include/mail_proto.h +smtpd_check.o: ../../include/mail_stream.h +smtpd_check.o: ../../include/maps.h smtpd_check.o: ../../include/match_list.h smtpd_check.o: ../../include/match_ops.h +smtpd_check.o: ../../include/match_parent_style.h +smtpd_check.o: ../../include/msg.h +smtpd_check.o: ../../include/myaddrinfo.h +smtpd_check.o: ../../include/mymalloc.h smtpd_check.o: ../../include/namadr_list.h -smtpd_check.o: ../../include/domain_list.h -smtpd_check.o: ../../include/mail_params.h -smtpd_check.o: ../../include/rewrite_clnt.h -smtpd_check.o: ../../include/mail_proto.h -smtpd_check.o: ../../include/iostuff.h -smtpd_check.o: ../../include/resolve_clnt.h -smtpd_check.o: ../../include/mail_error.h smtpd_check.o: ../../include/name_mask.h -smtpd_check.o: ../../include/resolve_local.h smtpd_check.o: ../../include/own_inet_addr.h -smtpd_check.o: ../../include/inet_addr_list.h -smtpd_check.o: ../../include/mail_conf.h -smtpd_check.o: ../../include/maps.h -smtpd_check.o: ../../include/mail_addr_find.h -smtpd_check.o: ../../include/match_parent_style.h -smtpd_check.o: ../../include/strip_addr.h -smtpd_check.o: ../../include/virtual8_maps.h -smtpd_check.o: ../../include/cleanup_user.h -smtpd_check.o: ../../include/record.h smtpd_check.o: ../../include/rec_type.h -smtpd_check.o: ../../include/mail_addr.h -smtpd_check.o: ../../include/verify_clnt.h -smtpd_check.o: ../../include/deliver_request.h smtpd_check.o: ../../include/recipient_list.h -smtpd_check.o: ../../include/input_transp.h -smtpd_check.o: ../../include/is_header.h +smtpd_check.o: ../../include/record.h +smtpd_check.o: ../../include/resolve_clnt.h +smtpd_check.o: ../../include/resolve_local.h +smtpd_check.o: ../../include/rewrite_clnt.h +smtpd_check.o: ../../include/sock_addr.h +smtpd_check.o: ../../include/split_at.h +smtpd_check.o: ../../include/string_list.h +smtpd_check.o: ../../include/stringops.h +smtpd_check.o: ../../include/strip_addr.h +smtpd_check.o: ../../include/sys_defs.h +smtpd_check.o: ../../include/tls.h +smtpd_check.o: ../../include/valid_hostname.h smtpd_check.o: ../../include/valid_mailhost_addr.h +smtpd_check.o: ../../include/vbuf.h +smtpd_check.o: ../../include/verify_clnt.h +smtpd_check.o: ../../include/virtual8_maps.h +smtpd_check.o: ../../include/vstream.h +smtpd_check.o: ../../include/vstring.h smtpd_check.o: smtpd.h -smtpd_check.o: ../../include/mail_stream.h -smtpd_check.o: ../../include/tls.h -smtpd_check.o: smtpd_sasl_glue.h +smtpd_check.o: smtpd_check.c smtpd_check.o: smtpd_check.h -smtpd_peer.o: smtpd_peer.c -smtpd_peer.o: ../../include/sys_defs.h +smtpd_check.o: smtpd_sasl_glue.h +smtpd_peer.o: ../../include/argv.h +smtpd_peer.o: ../../include/attr.h +smtpd_peer.o: ../../include/inet_proto.h +smtpd_peer.o: ../../include/iostuff.h +smtpd_peer.o: ../../include/mail_proto.h +smtpd_peer.o: ../../include/mail_stream.h smtpd_peer.o: ../../include/msg.h +smtpd_peer.o: ../../include/myaddrinfo.h smtpd_peer.o: ../../include/mymalloc.h +smtpd_peer.o: ../../include/sock_addr.h smtpd_peer.o: ../../include/stringops.h -smtpd_peer.o: ../../include/vstring.h +smtpd_peer.o: ../../include/sys_defs.h +smtpd_peer.o: ../../include/tls.h +smtpd_peer.o: ../../include/valid_hostname.h +smtpd_peer.o: ../../include/valid_mailhost_addr.h smtpd_peer.o: ../../include/vbuf.h -smtpd_peer.o: ../../include/myaddrinfo.h -smtpd_peer.o: ../../include/sock_addr.h -smtpd_peer.o: ../../include/inet_proto.h -smtpd_peer.o: ../../include/mail_proto.h smtpd_peer.o: ../../include/vstream.h -smtpd_peer.o: ../../include/iostuff.h -smtpd_peer.o: ../../include/attr.h -smtpd_peer.o: ../../include/valid_mailhost_addr.h -smtpd_peer.o: ../../include/valid_hostname.h +smtpd_peer.o: ../../include/vstring.h smtpd_peer.o: smtpd.h -smtpd_peer.o: ../../include/argv.h -smtpd_peer.o: ../../include/mail_stream.h -smtpd_peer.o: ../../include/tls.h -smtpd_proxy.o: smtpd_proxy.c -smtpd_proxy.o: ../../include/sys_defs.h -smtpd_proxy.o: ../../include/msg.h -smtpd_proxy.o: ../../include/vstream.h -smtpd_proxy.o: ../../include/vbuf.h -smtpd_proxy.o: ../../include/vstring.h -smtpd_proxy.o: ../../include/stringops.h +smtpd_peer.o: smtpd_peer.c +smtpd_proxy.o: ../../include/argv.h +smtpd_proxy.o: ../../include/attr.h +smtpd_proxy.o: ../../include/cleanup_user.h smtpd_proxy.o: ../../include/connect.h smtpd_proxy.o: ../../include/iostuff.h -smtpd_proxy.o: ../../include/name_code.h smtpd_proxy.o: ../../include/mail_error.h -smtpd_proxy.o: ../../include/name_mask.h -smtpd_proxy.o: ../../include/smtp_stream.h -smtpd_proxy.o: ../../include/cleanup_user.h smtpd_proxy.o: ../../include/mail_params.h -smtpd_proxy.o: ../../include/rec_type.h smtpd_proxy.o: ../../include/mail_proto.h -smtpd_proxy.o: ../../include/attr.h -smtpd_proxy.o: smtpd.h -smtpd_proxy.o: ../../include/argv.h -smtpd_proxy.o: ../../include/myaddrinfo.h smtpd_proxy.o: ../../include/mail_stream.h +smtpd_proxy.o: ../../include/msg.h +smtpd_proxy.o: ../../include/myaddrinfo.h +smtpd_proxy.o: ../../include/name_code.h +smtpd_proxy.o: ../../include/name_mask.h +smtpd_proxy.o: ../../include/rec_type.h +smtpd_proxy.o: ../../include/smtp_stream.h +smtpd_proxy.o: ../../include/stringops.h +smtpd_proxy.o: ../../include/sys_defs.h smtpd_proxy.o: ../../include/tls.h +smtpd_proxy.o: ../../include/vbuf.h +smtpd_proxy.o: ../../include/vstream.h +smtpd_proxy.o: ../../include/vstring.h +smtpd_proxy.o: smtpd.h +smtpd_proxy.o: smtpd_proxy.c smtpd_proxy.o: smtpd_proxy.h -smtpd_sasl_glue.o: smtpd_sasl_glue.c -smtpd_sasl_glue.o: ../../include/sys_defs.h +smtpd_sasl_glue.o: ../../include/argv.h +smtpd_sasl_glue.o: ../../include/mail_params.h +smtpd_sasl_glue.o: ../../include/mail_stream.h +smtpd_sasl_glue.o: ../../include/match_list.h +smtpd_sasl_glue.o: ../../include/match_ops.h smtpd_sasl_glue.o: ../../include/msg.h +smtpd_sasl_glue.o: ../../include/myaddrinfo.h smtpd_sasl_glue.o: ../../include/mymalloc.h smtpd_sasl_glue.o: ../../include/namadr_list.h -smtpd_sasl_glue.o: ../../include/match_list.h -smtpd_sasl_glue.o: ../../include/match_ops.h smtpd_sasl_glue.o: ../../include/name_mask.h -smtpd_sasl_glue.o: ../../include/mail_params.h smtpd_sasl_glue.o: ../../include/smtp_stream.h -smtpd_sasl_glue.o: ../../include/vstring.h +smtpd_sasl_glue.o: ../../include/stringops.h +smtpd_sasl_glue.o: ../../include/sys_defs.h +smtpd_sasl_glue.o: ../../include/tls.h smtpd_sasl_glue.o: ../../include/vbuf.h smtpd_sasl_glue.o: ../../include/vstream.h +smtpd_sasl_glue.o: ../../include/vstring.h smtpd_sasl_glue.o: smtpd.h -smtpd_sasl_glue.o: ../../include/argv.h -smtpd_sasl_glue.o: ../../include/myaddrinfo.h -smtpd_sasl_glue.o: ../../include/mail_stream.h -smtpd_sasl_glue.o: ../../include/tls.h -smtpd_sasl_glue.o: smtpd_sasl_glue.h smtpd_sasl_glue.o: smtpd_chat.h -smtpd_sasl_proto.o: smtpd_sasl_proto.c -smtpd_sasl_proto.o: ../../include/sys_defs.h +smtpd_sasl_glue.o: smtpd_sasl_glue.c +smtpd_sasl_glue.o: smtpd_sasl_glue.h +smtpd_sasl_proto.o: ../../include/argv.h +smtpd_sasl_proto.o: ../../include/attr.h +smtpd_sasl_proto.o: ../../include/iostuff.h +smtpd_sasl_proto.o: ../../include/mail_error.h +smtpd_sasl_proto.o: ../../include/mail_params.h +smtpd_sasl_proto.o: ../../include/mail_proto.h +smtpd_sasl_proto.o: ../../include/mail_stream.h smtpd_sasl_proto.o: ../../include/msg.h +smtpd_sasl_proto.o: ../../include/myaddrinfo.h smtpd_sasl_proto.o: ../../include/mymalloc.h +smtpd_sasl_proto.o: ../../include/name_mask.h smtpd_sasl_proto.o: ../../include/stringops.h -smtpd_sasl_proto.o: ../../include/vstring.h +smtpd_sasl_proto.o: ../../include/sys_defs.h +smtpd_sasl_proto.o: ../../include/tls.h smtpd_sasl_proto.o: ../../include/vbuf.h -smtpd_sasl_proto.o: ../../include/mail_params.h -smtpd_sasl_proto.o: ../../include/mail_proto.h smtpd_sasl_proto.o: ../../include/vstream.h -smtpd_sasl_proto.o: ../../include/iostuff.h -smtpd_sasl_proto.o: ../../include/attr.h -smtpd_sasl_proto.o: ../../include/mail_error.h -smtpd_sasl_proto.o: ../../include/name_mask.h +smtpd_sasl_proto.o: ../../include/vstring.h smtpd_sasl_proto.o: smtpd.h -smtpd_sasl_proto.o: ../../include/argv.h -smtpd_sasl_proto.o: ../../include/myaddrinfo.h -smtpd_sasl_proto.o: ../../include/mail_stream.h -smtpd_sasl_proto.o: ../../include/tls.h -smtpd_sasl_proto.o: smtpd_token.h smtpd_sasl_proto.o: smtpd_chat.h -smtpd_sasl_proto.o: smtpd_sasl_proto.h smtpd_sasl_proto.o: smtpd_sasl_glue.h -smtpd_state.o: smtpd_state.c -smtpd_state.o: ../../include/sys_defs.h -smtpd_state.o: ../../include/events.h -smtpd_state.o: ../../include/mymalloc.h -smtpd_state.o: ../../include/vstream.h -smtpd_state.o: ../../include/vbuf.h -smtpd_state.o: ../../include/name_mask.h -smtpd_state.o: ../../include/msg.h +smtpd_sasl_proto.o: smtpd_sasl_proto.c +smtpd_sasl_proto.o: smtpd_sasl_proto.h +smtpd_sasl_proto.o: smtpd_token.h +smtpd_state.o: ../../include/argv.h +smtpd_state.o: ../../include/attr.h smtpd_state.o: ../../include/cleanup_user.h -smtpd_state.o: ../../include/mail_params.h +smtpd_state.o: ../../include/events.h +smtpd_state.o: ../../include/iostuff.h smtpd_state.o: ../../include/mail_error.h +smtpd_state.o: ../../include/mail_params.h smtpd_state.o: ../../include/mail_proto.h -smtpd_state.o: ../../include/iostuff.h -smtpd_state.o: ../../include/attr.h -smtpd_state.o: smtpd.h -smtpd_state.o: ../../include/vstring.h -smtpd_state.o: ../../include/argv.h -smtpd_state.o: ../../include/myaddrinfo.h smtpd_state.o: ../../include/mail_stream.h +smtpd_state.o: ../../include/msg.h +smtpd_state.o: ../../include/myaddrinfo.h +smtpd_state.o: ../../include/mymalloc.h +smtpd_state.o: ../../include/name_mask.h +smtpd_state.o: ../../include/sys_defs.h smtpd_state.o: ../../include/tls.h +smtpd_state.o: ../../include/vbuf.h +smtpd_state.o: ../../include/vstream.h +smtpd_state.o: ../../include/vstring.h +smtpd_state.o: smtpd.h smtpd_state.o: smtpd_chat.h smtpd_state.o: smtpd_sasl_glue.h -smtpd_token.o: smtpd_token.c -smtpd_token.o: ../../include/sys_defs.h -smtpd_token.o: ../../include/mymalloc.h +smtpd_state.o: smtpd_state.c smtpd_token.o: ../../include/mvect.h -smtpd_token.o: smtpd_token.h -smtpd_token.o: ../../include/vstring.h +smtpd_token.o: ../../include/mymalloc.h +smtpd_token.o: ../../include/sys_defs.h smtpd_token.o: ../../include/vbuf.h -smtpd_xforward.o: smtpd_xforward.c -smtpd_xforward.o: ../../include/sys_defs.h -smtpd_xforward.o: ../../include/mymalloc.h -smtpd_xforward.o: ../../include/msg.h -smtpd_xforward.o: ../../include/mail_proto.h -smtpd_xforward.o: ../../include/vstream.h -smtpd_xforward.o: ../../include/vbuf.h -smtpd_xforward.o: ../../include/iostuff.h -smtpd_xforward.o: ../../include/attr.h -smtpd_xforward.o: smtpd.h -smtpd_xforward.o: ../../include/vstring.h +smtpd_token.o: ../../include/vstring.h +smtpd_token.o: smtpd_token.c +smtpd_token.o: smtpd_token.h smtpd_xforward.o: ../../include/argv.h -smtpd_xforward.o: ../../include/myaddrinfo.h +smtpd_xforward.o: ../../include/attr.h +smtpd_xforward.o: ../../include/iostuff.h +smtpd_xforward.o: ../../include/mail_proto.h smtpd_xforward.o: ../../include/mail_stream.h +smtpd_xforward.o: ../../include/msg.h +smtpd_xforward.o: ../../include/myaddrinfo.h +smtpd_xforward.o: ../../include/mymalloc.h +smtpd_xforward.o: ../../include/sys_defs.h smtpd_xforward.o: ../../include/tls.h +smtpd_xforward.o: ../../include/vbuf.h +smtpd_xforward.o: ../../include/vstream.h +smtpd_xforward.o: ../../include/vstring.h +smtpd_xforward.o: smtpd.h +smtpd_xforward.o: smtpd_xforward.c diff --git a/postfix/src/smtpd/smtpd.c b/postfix/src/smtpd/smtpd.c index 756a4cd93..f5a5eef95 100644 --- a/postfix/src/smtpd/smtpd.c +++ b/postfix/src/smtpd/smtpd.c @@ -36,6 +36,7 @@ /* RFC 1869 (SMTP service extensions) /* RFC 1870 (Message Size Declaration) /* RFC 1985 (ETRN command) +/* RFC 2034 (Enhanced Error Codes) /* RFC 2554 (AUTH command) /* RFC 2821 (SMTP protocol) /* RFC 2920 (SMTP Pipelining) @@ -70,7 +71,7 @@ /* Disable the SMTP VRFY command. /* .IP "\fBsmtpd_noop_commands (empty)\fR" /* List of commands that the Postfix SMTP server replies to with "250 -/* Ok", without doing any syntax checks and without changing state. +/* 2.0.0 Ok", without doing any syntax checks and without changing state. /* .IP "\fBstrict_rfc821_envelopes (no)\fR" /* Require that addresses received in SMTP MAIL FROM and RCPT TO /* commands are enclosed with <>, and that those addresses do @@ -1041,6 +1042,11 @@ static int helo_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) { char *err; + /* + * RFC 2034: the text part of all 2xx, 4xx, and 5xx SMTP responses other + * than the initial greeting and any response to HELO or EHLO are + * prefaced with a status code as defined in RFC 1893. + */ if (argc < 2) { state->error_mask |= MAIL_ERROR_PROTOCOL; smtpd_chat_reply(state, "501 Syntax: HELO hostname"); @@ -1084,6 +1090,10 @@ static int ehlo_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) * XXX 2821 new feature: Section 4.1.4 specifies that a server must clear * all buffers and reset the state exactly as if a RSET command had been * issued. + * + * RFC 2034: the text part of all 2xx, 4xx, and 5xx SMTP responses other + * than the initial greeting and any response to HELO or EHLO are + * prefaced with a status code as defined in RFC 1893. */ if (argc < 2) { state->error_mask |= MAIL_ERROR_PROTOCOL; @@ -1330,8 +1340,8 @@ static void mail_open_stream(SMTPD_STATE *state) /* extract_addr - extract address from rubble */ -static char *extract_addr(SMTPD_STATE *state, SMTPD_TOKEN *arg, - int allow_empty_addr, int strict_rfc821) +static int extract_addr(SMTPD_STATE *state, SMTPD_TOKEN *arg, + int allow_empty_addr, int strict_rfc821) { char *myname = "extract_addr"; TOK822 *tree; @@ -1339,7 +1349,7 @@ static char *extract_addr(SMTPD_STATE *state, SMTPD_TOKEN *arg, TOK822 *addr = 0; int naddr; int non_addr; - char *err = 0; + int err = 0; char *junk = 0; char *text; char *colon; @@ -1402,7 +1412,7 @@ static char *extract_addr(SMTPD_STATE *state, SMTPD_TOKEN *arg, || (strict_rfc821 && (non_addr || *STR(arg->vstrval) != '<'))) { msg_warn("Illegal address syntax from %s in %s command: %s", state->namaddr, state->where, STR(arg->vstrval)); - err = "501 Bad address syntax"; + err = 1; } /* @@ -1428,7 +1438,7 @@ static char *extract_addr(SMTPD_STATE *state, SMTPD_TOKEN *arg, && smtpd_check_addr(STR(arg->vstrval)) != 0)) { msg_warn("Illegal address syntax from %s in %s command: %s", state->namaddr, state->where, STR(arg->vstrval)); - err = "501 Bad address syntax"; + err = 1; } /* @@ -1463,20 +1473,20 @@ static int mail_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) */ if (var_helo_required && state->helo_name == 0) { state->error_mask |= MAIL_ERROR_POLICY; - smtpd_chat_reply(state, "503 Error: send HELO/EHLO first"); + smtpd_chat_reply(state, "503 5.5.1 Error: send HELO/EHLO first"); return (-1); } #define IN_MAIL_TRANSACTION(state) ((state)->sender != 0) if (IN_MAIL_TRANSACTION(state)) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "503 Error: nested MAIL command"); + smtpd_chat_reply(state, "503 5.5.1 Error: nested MAIL command"); return (-1); } if (argc < 3 || strcasecmp(argv[1].strval, "from:") != 0) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Syntax: MAIL FROM:

"); + smtpd_chat_reply(state, "501 5.5.4 Syntax: MAIL FROM:
"); return (-1); } @@ -1493,7 +1503,7 @@ static int mail_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) && anvil_clnt_mail(anvil_clnt, state->service, state->addr, &rate) == ANVIL_STAT_OK && rate > var_smtpd_cmail_limit) { - smtpd_chat_reply(state, "421 %s Error: too much mail from %s", + smtpd_chat_reply(state, "421 4.7.0 %s Error: too much mail from %s", var_myhostname, state->addr); msg_warn("Message delivery request rate limit exceeded: %d from %s for service %s", rate, state->namaddr, state->service); @@ -1501,12 +1511,12 @@ static int mail_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) } if (argv[2].tokval == SMTPD_TOK_ERROR) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Bad sender address syntax"); + smtpd_chat_reply(state, "501 5.1.7 Bad sender address syntax"); return (-1); } - if ((err = extract_addr(state, argv + 2, PERMIT_EMPTY_ADDR, var_strict_rfc821_env)) != 0) { + if (extract_addr(state, argv + 2, PERMIT_EMPTY_ADDR, var_strict_rfc821_env) != 0) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "%s", err); + smtpd_chat_reply(state, "501 5.1.7 Bad sender address syntax"); return (-1); } for (narg = 3; narg < argc; narg++) { @@ -1519,12 +1529,12 @@ static int mail_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) /* Reject non-numeric size. */ if (!alldig(arg + 5)) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Bad message size syntax"); + smtpd_chat_reply(state, "501 5.5.4 Bad message size syntax"); return (-1); } /* Reject size overflow. */ if ((state->msg_size = off_cvt_string(arg + 5)) < 0) { - smtpd_chat_reply(state, "552 Message size exceeds file system imposed limit"); + smtpd_chat_reply(state, "552 5.3.4 Message size exceeds file system imposed limit"); state->error_mask |= MAIL_ERROR_POLICY; return (-1); } @@ -1544,19 +1554,20 @@ static int mail_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) verp_delims = arg + VERP_CMD_LEN + 1; if (verp_delims_verify(verp_delims) != 0) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Error: %s needs two characters from %s", + smtpd_chat_reply(state, + "501 5.5.4 Error: %s needs two characters from %s", VERP_CMD, var_verp_filter); return (-1); } } } else { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "555 Unsupported option: %s", arg); + smtpd_chat_reply(state, "555 5.5.4 Unsupported option: %s", arg); return (-1); } } if (verp_delims && argv[2].strval[0] == 0) { - smtpd_chat_reply(state, "503 Error: %s requires non-null sender", + smtpd_chat_reply(state, "503 5.5.4 Error: %s requires non-null sender", VERP_CMD); return (-1); } @@ -1590,7 +1601,7 @@ static int mail_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) state->verp_delims = mystrdup(verp_delims); if (USE_SMTPD_PROXY(state)) state->proxy_mail = mystrdup(STR(state->buffer)); - smtpd_chat_reply(state, "250 Ok"); + smtpd_chat_reply(state, "250 2.1.0 Ok"); return (0); } @@ -1679,13 +1690,13 @@ static int rcpt_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) */ if (!IN_MAIL_TRANSACTION(state)) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "503 Error: need MAIL command"); + smtpd_chat_reply(state, "503 5.5.1 Error: need MAIL command"); return (-1); } if (argc < 3 || strcasecmp(argv[1].strval, "to:") != 0) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Syntax: RCPT TO:
"); + smtpd_chat_reply(state, "501 5.5.4 Syntax: RCPT TO:
"); return (-1); } @@ -1702,7 +1713,8 @@ static int rcpt_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) && anvil_clnt_rcpt(anvil_clnt, state->service, state->addr, &rate) == ANVIL_STAT_OK && rate > var_smtpd_crcpt_limit) { - smtpd_chat_reply(state, "421 %s Error: too many recipients from %s", + smtpd_chat_reply(state, + "421 4.7.0 %s Error: too many recipients from %s", var_myhostname, state->addr); msg_warn("Recipient address rate limit exceeded: %d from %s for service %s", rate, state->namaddr, state->service); @@ -1710,24 +1722,24 @@ static int rcpt_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) } if (argv[2].tokval == SMTPD_TOK_ERROR) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Bad recipient address syntax"); + smtpd_chat_reply(state, "501 5.1.3 Bad recipient address syntax"); return (-1); } - if ((err = extract_addr(state, argv + 2, REJECT_EMPTY_ADDR, var_strict_rfc821_env)) != 0) { + if (extract_addr(state, argv + 2, REJECT_EMPTY_ADDR, var_strict_rfc821_env) != 0) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "%s", err); + smtpd_chat_reply(state, "501 5.1.3 Bad recipient address syntax"); return (-1); } for (narg = 3; narg < argc; narg++) { arg = argv[narg].strval; if (1) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "555 Unsupported option: %s", arg); + smtpd_chat_reply(state, "555 5.5.4 Unsupported option: %s", arg); return (-1); } } if (var_smtpd_rcpt_limit && state->rcpt_count >= var_smtpd_rcpt_limit) { - smtpd_chat_reply(state, "452 Error: too many recipients"); + smtpd_chat_reply(state, "452 4.5.3 Error: too many recipients"); if (state->rcpt_overshoot++ < var_smtpd_rcpt_overlim) return (0); state->error_mask |= MAIL_ERROR_POLICY; @@ -1794,7 +1806,7 @@ static int rcpt_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) rec_fputs(state->cleanup, REC_TYPE_RCPT, argv[2].strval); vstream_fflush(state->cleanup); } - smtpd_chat_reply(state, "250 Ok"); + smtpd_chat_reply(state, "250 2.1.5 Ok"); return (0); } @@ -1863,6 +1875,7 @@ static int data_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *unused_argv) VSTREAM *out_stream; int out_error; char **cpp; + CLEANUP_STAT_DETAIL *detail; #ifdef USE_TLS VSTRING *peer_CN; @@ -1878,15 +1891,15 @@ static int data_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *unused_argv) if (state->rcpt_count == 0) { if (!IN_MAIL_TRANSACTION(state)) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "503 Error: need RCPT command"); + smtpd_chat_reply(state, "503 5.5.1 Error: need RCPT command"); } else { - smtpd_chat_reply(state, "554 Error: no valid recipients"); + smtpd_chat_reply(state, "554 5.5.1 Error: no valid recipients"); } return (-1); } if (argc != 1) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Syntax: DATA"); + smtpd_chat_reply(state, "501 5.5.4 Syntax: DATA"); return (-1); } if (SMTPD_STAND_ALONE(state) == 0 && (err = smtpd_check_data(state)) != 0) { @@ -2077,8 +2090,10 @@ static int data_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *unused_argv) } else { state->error_mask |= MAIL_ERROR_SOFTWARE; state->err |= CLEANUP_STAT_PROXY; + detail = cleanup_stat_detail(CLEANUP_STAT_PROXY); vstring_sprintf(state->proxy_buffer, - "451 Error: queue file write error"); + "%d %s Error: %s", + detail->smtp, detail->dsn, detail->text); } } @@ -2113,34 +2128,49 @@ static int data_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *unused_argv) state->error_mask = 0; state->junk_cmds = 0; if (state->queue_id) - smtpd_chat_reply(state, "250 Ok: queued as %s", state->queue_id); + smtpd_chat_reply(state, + "250 2.0.0 Ok: queued as %s", state->queue_id); else smtpd_chat_reply(state, "%s", STR(state->proxy_buffer)); } else if ((state->err & CLEANUP_STAT_BAD) != 0) { state->error_mask |= MAIL_ERROR_SOFTWARE; - smtpd_chat_reply(state, "451 Error: internal error %d", state->err); + detail = cleanup_stat_detail(CLEANUP_STAT_BAD); + smtpd_chat_reply(state, "%d %s Error: internal error %d", + detail->smtp, detail->dsn, state->err); } else if ((state->err & CLEANUP_STAT_SIZE) != 0) { state->error_mask |= MAIL_ERROR_BOUNCE; - smtpd_chat_reply(state, "552 Error: message too large"); + detail = cleanup_stat_detail(CLEANUP_STAT_SIZE); + smtpd_chat_reply(state, "%d %s Error: %s", + detail->smtp, detail->dsn, detail->text); } else if ((state->err & CLEANUP_STAT_HOPS) != 0) { state->error_mask |= MAIL_ERROR_BOUNCE; - smtpd_chat_reply(state, "554 Error: too many hops"); + detail = cleanup_stat_detail(CLEANUP_STAT_HOPS); + smtpd_chat_reply(state, "%d %s Error: %s", + detail->smtp, detail->dsn, detail->text); } else if ((state->err & CLEANUP_STAT_CONT) != 0) { state->error_mask |= MAIL_ERROR_POLICY; - if (state->proxy_buffer) + detail = cleanup_stat_detail(CLEANUP_STAT_CONT); + if (state->proxy_buffer) { smtpd_chat_reply(state, "%s", STR(state->proxy_buffer)); - else - smtpd_chat_reply(state, "550 Error: %s", LEN(why) ? - STR(why) : "content rejected"); + } else if (why && LEN(why) > 0) { + smtpd_chat_reply(state, "%d %s", detail->smtp, STR(why)); + } else { + smtpd_chat_reply(state, "%d %s Error: %s", + detail->smtp, detail->dsn, detail->text); + } } else if ((state->err & CLEANUP_STAT_WRITE) != 0) { state->error_mask |= MAIL_ERROR_RESOURCE; - smtpd_chat_reply(state, "451 Error: queue file write error"); + detail = cleanup_stat_detail(CLEANUP_STAT_WRITE); + smtpd_chat_reply(state, "%d %s Error: %s", + detail->smtp, detail->dsn, detail->text); } else if ((state->err & CLEANUP_STAT_PROXY) != 0) { state->error_mask |= MAIL_ERROR_SOFTWARE; smtpd_chat_reply(state, "%s", STR(state->proxy_buffer)); } else { state->error_mask |= MAIL_ERROR_SOFTWARE; - smtpd_chat_reply(state, "451 Error: internal error %d", state->err); + detail = cleanup_stat_detail(CLEANUP_STAT_BAD); + smtpd_chat_reply(state, "%d %s Error: internal error %d", + detail->smtp, detail->dsn, state->err); } /* @@ -2165,7 +2195,7 @@ static int rset_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *unused_argv) */ if (argc != 1) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Syntax: RSET"); + smtpd_chat_reply(state, "501 5.5.4 Syntax: RSET"); return (-1); } @@ -2175,7 +2205,7 @@ static int rset_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *unused_argv) chat_reset(state, var_smtpd_hist_thrsh); mail_reset(state); rcpt_reset(state); - smtpd_chat_reply(state, "250 Ok"); + smtpd_chat_reply(state, "250 2.0.0 Ok"); return (0); } @@ -2198,11 +2228,11 @@ static int noop_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *unused_argv) */ if (argc != 1) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Syntax: NOOP"); + smtpd_chat_reply(state, "501 5.5.4 Syntax: NOOP"); return (-1); } #endif - smtpd_chat_reply(state, "250 Ok"); + smtpd_chat_reply(state, "250 2.0.0 Ok"); return (0); } @@ -2238,19 +2268,19 @@ static int vrfy_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) if (var_disable_vrfy_cmd) { state->error_mask |= MAIL_ERROR_POLICY; - smtpd_chat_reply(state, "502 VRFY command is disabled"); + smtpd_chat_reply(state, "502 5.5.1 VRFY command is disabled"); return (-1); } if (argc < 2) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Syntax: VRFY address"); + smtpd_chat_reply(state, "501 5.5.4 Syntax: VRFY address"); return (-1); } if (argc > 2) collapse_args(argc - 1, argv + 1); - if ((err = extract_addr(state, argv + 1, REJECT_EMPTY_ADDR, SLOPPY)) != 0) { + if (extract_addr(state, argv + 1, REJECT_EMPTY_ADDR, SLOPPY) != 0) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "%s", err); + smtpd_chat_reply(state, "501 5.1.3 Bad recipient address syntax"); return (-1); } if (SMTPD_STAND_ALONE(state) == 0 @@ -2268,7 +2298,7 @@ static int vrfy_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) * Reply code 250 is reserved for the case where the address is verified; * reply code 252 should be used when no definitive certainty exists. */ - smtpd_chat_reply(state, "252 %s", argv[1].strval); + smtpd_chat_reply(state, "252 2.0.0 %s", argv[1].strval); return (0); } @@ -2297,7 +2327,7 @@ static int etrn_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) return (-1); } if (argv[1].strval[0] == '@' || argv[1].strval[0] == '#') - argv[1].strval++; + argv[1].strval++; /* * As an extension to RFC 1985 we also allow an RFC 2821 address literal @@ -2354,7 +2384,7 @@ static int quit_cmd(SMTPD_STATE *state, int unused_argc, SMTPD_TOKEN *unused_arg /* * Don't bother checking the syntax. */ - smtpd_chat_reply(state, "221 Bye"); + smtpd_chat_reply(state, "221 2.0.0 Bye"); /* * When the "." and quit replies are pipelined, make sure they are @@ -2392,18 +2422,18 @@ static int xclient_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) */ if (IN_MAIL_TRANSACTION(state)) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "503 Error: MAIL transaction in progress"); + smtpd_chat_reply(state, "503 5.5.1 Error: MAIL transaction in progress"); return (-1); } if (argc < 2) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Syntax: %s attribute=value...", + smtpd_chat_reply(state, "501 5.5.4 Syntax: %s attribute=value...", XCLIENT_CMD); return (-1); } if (!xclient_allowed) { state->error_mask |= MAIL_ERROR_POLICY; - smtpd_chat_reply(state, "554 Error: insufficient authorization"); + smtpd_chat_reply(state, "550 5.7.0 Error: insufficient authorization"); return (-1); } #define STREQ(x,y) (strcasecmp((x), (y)) == 0) @@ -2424,7 +2454,7 @@ static int xclient_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) */ if ((attr_value = split_at(attr_name, '=')) == 0 || *attr_value == 0) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Error: attribute=value expected"); + smtpd_chat_reply(state, "501 5.5.4 Error: attribute=value expected"); return (-1); } printable(attr_value, '?'); @@ -2440,7 +2470,7 @@ static int xclient_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) } else { if (!valid_hostname(attr_value, DONT_GRIPE)) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Bad %s syntax: %s", + smtpd_chat_reply(state, "501 5.5.4 Bad %s syntax: %s", XCLIENT_NAME, attr_value); return (-1); } @@ -2460,7 +2490,7 @@ static int xclient_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) } else { if ((bare_value = valid_mailhost_addr(attr_value, DONT_GRIPE)) == 0) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Bad %s syntax: %s", + smtpd_chat_reply(state, "501 5.5.4 Bad %s syntax: %s", XCLIENT_ADDR, attr_value); return (-1); } @@ -2480,7 +2510,7 @@ static int xclient_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) } else { if (strlen(attr_value) > VALID_HOSTNAME_LEN) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Bad %s syntax: %s", + smtpd_chat_reply(state, "501 5.5.4 Bad %s syntax: %s", XCLIENT_HELO, attr_value); return (-1); } @@ -2495,7 +2525,7 @@ static int xclient_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) else if (STREQ(attr_name, XCLIENT_PROTO)) { if (name_code(proto_names, NAME_CODE_FLAG_NONE, attr_value) < 0) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Bad %s syntax: %s", + smtpd_chat_reply(state, "501 5.5.4 Bad %s syntax: %s", XCLIENT_PROTO, attr_value); return (-1); } @@ -2507,7 +2537,7 @@ static int xclient_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) */ else { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Bad %s attribute name: %s", + smtpd_chat_reply(state, "501 5.5.4 Bad %s attribute name: %s", XCLIENT_CMD, attr_name); return (-1); } @@ -2522,7 +2552,7 @@ static int xclient_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) state->namaddr = concatenate(state->name, "[", state->addr, "]", (char *) 0); } - smtpd_chat_reply(state, "250 Ok"); + smtpd_chat_reply(state, "250 2.0.0 Ok"); return (0); } @@ -2560,18 +2590,18 @@ static int xforward_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) */ if (IN_MAIL_TRANSACTION(state)) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "503 Error: MAIL transaction in progress"); + smtpd_chat_reply(state, "503 5.5.1 Error: MAIL transaction in progress"); return (-1); } if (argc < 2) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Syntax: %s attribute=value...", + smtpd_chat_reply(state, "501 5.5.4 Syntax: %s attribute=value...", XFORWARD_CMD); return (-1); } if (!xforward_allowed) { state->error_mask |= MAIL_ERROR_POLICY; - smtpd_chat_reply(state, "554 Error: insufficient authorization"); + smtpd_chat_reply(state, "550 5.7.0 Error: insufficient authorization"); return (-1); } @@ -2593,12 +2623,12 @@ static int xforward_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) */ if ((attr_value = split_at(attr_name, '=')) == 0 || *attr_value == 0) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Error: attribute=value expected"); + smtpd_chat_reply(state, "501 5.5.4 Error: attribute=value expected"); return (-1); } if (strlen(attr_value) > 255) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Error: attribute value too long"); + smtpd_chat_reply(state, "501 5.5.4 Error: attribute value too long"); return (-1); } printable(attr_value, '?'); @@ -2617,7 +2647,7 @@ static int xforward_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) neuter(attr_value, NEUTER_CHARACTERS, '?'); if (!valid_hostname(attr_value, DONT_GRIPE)) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Bad %s syntax: %s", + smtpd_chat_reply(state, "501 5.5.4 Bad %s syntax: %s", XFORWARD_NAME, attr_value); return (-1); } @@ -2638,7 +2668,7 @@ static int xforward_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) neuter(attr_value, NEUTER_CHARACTERS, '?'); if ((bare_value = valid_mailhost_addr(attr_value, DONT_GRIPE)) == 0) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Bad %s syntax: %s", + smtpd_chat_reply(state, "501 5.5.4 Bad %s syntax: %s", XFORWARD_ADDR, attr_value); return (-1); } @@ -2671,7 +2701,7 @@ static int xforward_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) } else { if (strlen(attr_value) > 64) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Bad %s syntax: %s", + smtpd_chat_reply(state, "501 5.5.4 Bad %s syntax: %s", XFORWARD_PROTO, attr_value); return (-1); } @@ -2690,7 +2720,7 @@ static int xforward_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) NAME_CODE_FLAG_NONE, attr_value)) < 0) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Bad %s syntax: %s", + smtpd_chat_reply(state, "501 5.5.4 Bad %s syntax: %s", XFORWARD_DOMAIN, attr_value); return (-1); } @@ -2702,7 +2732,7 @@ static int xforward_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) */ default: state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Bad %s attribute name: %s", + smtpd_chat_reply(state, "501 5.5.4 Bad %s attribute name: %s", XFORWARD_CMD, attr_name); return (-1); } @@ -2723,7 +2753,7 @@ static int xforward_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) state->xforward.addr, "]", (char *) 0) : mystrdup(state->xforward.name); } - smtpd_chat_reply(state, "250 Ok"); + smtpd_chat_reply(state, "250 2.0.0 Ok"); return (0); } @@ -2766,10 +2796,10 @@ static void smtpd_start_tls(SMTPD_STATE *state) * verification unless TLS is required. */ state->tls_context = - tls_server_start(smtpd_tls_ctx, state->client, - var_smtpd_starttls_tmout, - state->name, state->addr, &(state->tls_info), - (var_smtpd_tls_req_ccert && state->tls_enforce_tls)); + tls_server_start(smtpd_tls_ctx, state->client, + var_smtpd_starttls_tmout, + state->name, state->addr, &(state->tls_info), + (var_smtpd_tls_req_ccert && state->tls_enforce_tls)); /* * When the TLS handshake fails, the conversation is in an unknown state. @@ -2799,24 +2829,24 @@ static int starttls_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *unused_argv) { if (argc != 1) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Syntax: STARTTLS"); + smtpd_chat_reply(state, "501 5.5.4 Syntax: STARTTLS"); return (-1); } if (state->tls_context != 0) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "554 Error: TLS already active"); + smtpd_chat_reply(state, "554 5.5.1 Error: TLS already active"); return (-1); } if (state->tls_use_tls == 0) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "502 Error: command not implemented"); + smtpd_chat_reply(state, "502 5.5.1 Error: command not implemented"); return (-1); } if (smtpd_tls_ctx == 0) { - smtpd_chat_reply(state, "454 TLS not available due to local problem"); + smtpd_chat_reply(state, "454 4.3.0 TLS not available due to local problem"); return (-1); } - smtpd_chat_reply(state, "220 Ready to start TLS"); + smtpd_chat_reply(state, "220 2.0.0 Ready to start TLS"); smtp_flush(state->client); /* @@ -2937,7 +2967,7 @@ static void smtpd_proto(SMTPD_STATE *state, const char *service) case SMTP_ERR_TIME: state->reason = REASON_TIMEOUT; if (vstream_setjmp(state->client) == 0) - smtpd_chat_reply(state, "421 %s Error: timeout exceeded", + smtpd_chat_reply(state, "421 4.4.2 %s Error: timeout exceeded", var_myhostname); break; @@ -2979,14 +3009,14 @@ static void smtpd_proto(SMTPD_STATE *state, const char *service) && anvil_clnt_connect(anvil_clnt, service, state->addr, &count, &crate) == ANVIL_STAT_OK) { if (var_smtpd_cconn_limit > 0 && count > var_smtpd_cconn_limit) { - smtpd_chat_reply(state, "421 %s Error: too many connections from %s", + smtpd_chat_reply(state, "421 4.7.0 %s Error: too many connections from %s", var_myhostname, state->addr); msg_warn("Connection concurrency limit exceeded: %d from %s for service %s", count, state->namaddr, service); break; } if (var_smtpd_crate_limit > 0 && crate > var_smtpd_crate_limit) { - smtpd_chat_reply(state, "421 %s Error: too many connections from %s", + smtpd_chat_reply(state, "421 4.7.0 %s Error: too many connections from %s", var_myhostname, state->addr); msg_warn("Connection rate limit exceeded: %d from %s for service %s", crate, state->namaddr, service); @@ -2999,7 +3029,14 @@ static void smtpd_proto(SMTPD_STATE *state, const char *service) && (state->access_denied = smtpd_check_client(state)) != 0) { smtpd_chat_reply(state, "%s", state->access_denied); state->error_count++; - } else { + } + + /* + * RFC 2034: the text part of all 2xx, 4xx, and 5xx SMTP responses + * other than the initial greeting and any response to HELO or EHLO + * are prefaced with a status code as defined in RFC 1893. + */ + else { smtpd_chat_reply(state, "220 %s", var_smtpd_banner); } @@ -3007,7 +3044,7 @@ static void smtpd_proto(SMTPD_STATE *state, const char *service) if (state->error_count >= var_smtpd_hard_erlim) { state->reason = REASON_ERROR_LIMIT; state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "421 %s Error: too many errors", + smtpd_chat_reply(state, "421 4.7.0 %s Error: too many errors", var_myhostname); break; } @@ -3015,13 +3052,13 @@ static void smtpd_proto(SMTPD_STATE *state, const char *service) smtpd_chat_query(state); if ((argc = smtpd_token(vstring_str(state->buffer), &argv)) == 0) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "500 Error: bad syntax"); + smtpd_chat_reply(state, "500 5.5.2 Error: bad syntax"); state->error_count++; continue; } if (*var_smtpd_noop_cmds && string_list_match(smtpd_noop_cmds, argv[0].strval)) { - smtpd_chat_reply(state, "250 Ok"); + smtpd_chat_reply(state, "250 2.0.0 Ok"); if (state->junk_cmds++ > var_smtpd_junk_cmd_limit) state->error_count++; continue; @@ -3035,17 +3072,17 @@ static void smtpd_proto(SMTPD_STATE *state, const char *service) && string_list_match(smtpd_forbid_cmds, argv[0].strval))) { msg_warn("%s sent non-SMTP command: %.100s", state->namaddr, vstring_str(state->buffer)); - smtpd_chat_reply(state, "221 Error: I can break rules, too. Goodbye."); + smtpd_chat_reply(state, "221 2.7.0 Error: I can break rules, too. Goodbye."); break; } - smtpd_chat_reply(state, "502 Error: command not implemented"); + smtpd_chat_reply(state, "502 5.5.2 Error: command not recognized"); state->error_mask |= MAIL_ERROR_PROTOCOL; state->error_count++; continue; } /* XXX We use the real client for connect access control. */ if (state->access_denied && cmdp->action != quit_cmd) { - smtpd_chat_reply(state, "503 Error: access denied for %s", + smtpd_chat_reply(state, "503 5.7.0 Error: access denied for %s", state->namaddr); /* RFC 2821 Sec 3.1 */ state->error_count++; continue; @@ -3055,7 +3092,7 @@ static void smtpd_proto(SMTPD_STATE *state, const char *service) !state->tls_context && (cmdp->flags & SMTPD_CMD_FLAG_PRE_TLS) == 0) { smtpd_chat_reply(state, - "530 Must issue a STARTTLS command first"); + "530 5.7.0 Must issue a STARTTLS command first"); state->error_count++; continue; } @@ -3280,7 +3317,7 @@ static void post_jail_init(char *unused_name, char **unused_argv) * recipient checks, address mapping, header_body_checks?. */ smtpd_input_transp_mask = - input_transp_mask(VAR_INPUT_TRANSP, var_input_transp); + input_transp_mask(VAR_INPUT_TRANSP, var_input_transp); /* * Sanity checks. The queue_minfree value should be at least as large as diff --git a/postfix/src/smtpd/smtpd.h b/postfix/src/smtpd/smtpd.h index c17a5ba46..19aaeee9b 100644 --- a/postfix/src/smtpd/smtpd.h +++ b/postfix/src/smtpd/smtpd.h @@ -50,6 +50,8 @@ typedef struct SMTPD_DEFER { int active; /* is this active */ VSTRING *reason; /* reason for deferral */ + VSTRING *dsn; /* DSN detail */ + int code; /* SMTP reply code */ int class; /* error notification class */ } SMTPD_DEFER; diff --git a/postfix/src/smtpd/smtpd_acl.ref b/postfix/src/smtpd/smtpd_acl.ref index 0613b949b..06c40f461 100644 --- a/postfix/src/smtpd/smtpd_acl.ref +++ b/postfix/src/smtpd/smtpd_acl.ref @@ -16,8 +16,8 @@ OK OK >>> # Expect: REJECT >>> helo foo.dunno.com -./smtpd_check: : reject: HELO from localhost[127.0.0.1]: 554 : Helo command rejected: Access denied; proto=SMTP helo= -554 : Helo command rejected: Access denied +./smtpd_check: : reject: HELO from localhost[127.0.0.1]: 554 5.7.1 : Helo command rejected: Access denied; proto=SMTP helo= +554 5.7.1 : Helo command rejected: Access denied >>> # Expect: OK >>> helo bar.dunno.com OK @@ -31,8 +31,8 @@ OK OK >>> # Expect: REJECT >>> client foo.dunno.com 131.155.210.17 -./smtpd_check: : reject: CONNECT from foo.dunno.com[131.155.210.17]: 554 : Client host rejected: Access denied; proto=SMTP helo= -554 : Client host rejected: Access denied +./smtpd_check: : reject: CONNECT from foo.dunno.com[131.155.210.17]: 554 5.7.1 : Client host rejected: Access denied; proto=SMTP helo= +554 5.7.1 : Client host rejected: Access denied >>> # Expect: OK >>> client bar.dunno.com 131.155.210.17 OK @@ -47,19 +47,19 @@ OK OK >>> # Expect: REJECT >>> client bar.duno.com 131.155.210.19 -./smtpd_check: : reject: CONNECT from bar.duno.com[131.155.210.19]: 554 : Client host rejected: Access denied; proto=SMTP helo= -554 : Client host rejected: Access denied +./smtpd_check: : reject: CONNECT from bar.duno.com[131.155.210.19]: 554 5.7.1 : Client host rejected: Access denied; proto=SMTP helo= +554 5.7.1 : Client host rejected: Access denied >>> # Expect: REJECT >>> client bar.duno.com 44.33.22.11 -./smtpd_check: : reject: CONNECT from bar.duno.com[44.33.22.11]: 554 : Client host rejected: Access denied; proto=SMTP helo= -554 : Client host rejected: Access denied +./smtpd_check: : reject: CONNECT from bar.duno.com[44.33.22.11]: 554 5.7.1 : Client host rejected: Access denied; proto=SMTP helo= +554 5.7.1 : Client host rejected: Access denied >>> # Expect: OK >>> client bar.duno.com 44.33.22.55 OK >>> # Expect: REJECT >>> client bar.duno.com 44.33.44.33 -./smtpd_check: : reject: CONNECT from bar.duno.com[44.33.44.33]: 554 : Client host rejected: Access denied; proto=SMTP helo= -554 : Client host rejected: Access denied +./smtpd_check: : reject: CONNECT from bar.duno.com[44.33.44.33]: 554 5.7.1 : Client host rejected: Access denied; proto=SMTP helo= +554 5.7.1 : Client host rejected: Access denied >>> # >>> # Test check_mail_access() >>> # @@ -67,8 +67,8 @@ OK OK >>> # Expect: REJECT >>> mail reject@dunno.domain -./smtpd_check: : reject: MAIL from bar.duno.com[44.33.44.33]: 554 : Sender address rejected: Access denied; from= proto=SMTP helo= -554 : Sender address rejected: Access denied +./smtpd_check: : reject: MAIL from bar.duno.com[44.33.44.33]: 554 5.7.1 : Sender address rejected: Access denied; from= proto=SMTP helo= +554 5.7.1 : Sender address rejected: Access denied >>> # Expect: OK >>> mail ok@dunno.domain OK @@ -83,26 +83,26 @@ OK >>> # >>> # Expect: REJECT >>> mail reject@reject.domain -./smtpd_check: : reject: MAIL from bar.duno.com[44.33.44.33]: 554 : Sender address rejected: Access denied; from= proto=SMTP helo= -554 : Sender address rejected: Access denied +./smtpd_check: : reject: MAIL from bar.duno.com[44.33.44.33]: 554 5.7.1 : Sender address rejected: Access denied; from= proto=SMTP helo= +554 5.7.1 : Sender address rejected: Access denied >>> # Expect: OK >>> mail ok@reject.domain OK >>> # Expect: REJECT >>> mail anyone@reject.domain -./smtpd_check: : reject: MAIL from bar.duno.com[44.33.44.33]: 554 : Sender address rejected: Access denied; from= proto=SMTP helo= -554 : Sender address rejected: Access denied +./smtpd_check: : reject: MAIL from bar.duno.com[44.33.44.33]: 554 5.7.1 : Sender address rejected: Access denied; from= proto=SMTP helo= +554 5.7.1 : Sender address rejected: Access denied >>> # Expect: REJECT >>> mail good-sender@reject.domain -./smtpd_check: : reject: MAIL from bar.duno.com[44.33.44.33]: 554 : Sender address rejected: Access denied; from= proto=SMTP helo= -554 : Sender address rejected: Access denied +./smtpd_check: : reject: MAIL from bar.duno.com[44.33.44.33]: 554 5.7.1 : Sender address rejected: Access denied; from= proto=SMTP helo= +554 5.7.1 : Sender address rejected: Access denied >>> # >>> # Again, with a domain that accepts by default >>> # >>> # Expect: REJECT >>> mail reject@ok.domain -./smtpd_check: : reject: MAIL from bar.duno.com[44.33.44.33]: 554 : Sender address rejected: Access denied; from= proto=SMTP helo= -554 : Sender address rejected: Access denied +./smtpd_check: : reject: MAIL from bar.duno.com[44.33.44.33]: 554 5.7.1 : Sender address rejected: Access denied; from= proto=SMTP helo= +554 5.7.1 : Sender address rejected: Access denied >>> # Expect: OK >>> mail ok@ok.domain OK @@ -119,14 +119,14 @@ OK OK >>> # Expect: REJECT >>> rcpt reject@dunno.domain -./smtpd_check: : reject: RCPT from bar.duno.com[44.33.44.33]: 554 : Recipient address rejected: Access denied; from= to= proto=SMTP helo= -554 : Recipient address rejected: Access denied +./smtpd_check: : reject: RCPT from bar.duno.com[44.33.44.33]: 554 5.7.1 : Recipient address rejected: Access denied; from= to= proto=SMTP helo= +554 5.7.1 : Recipient address rejected: Access denied >>> # Expect: REJECT >>> recipient_delimiter + OK >>> rcpt reject+ext@dunno.domain -./smtpd_check: : reject: RCPT from bar.duno.com[44.33.44.33]: 554 : Recipient address rejected: Access denied; from= to= proto=SMTP helo= -554 : Recipient address rejected: Access denied +./smtpd_check: : reject: RCPT from bar.duno.com[44.33.44.33]: 554 5.7.1 : Recipient address rejected: Access denied; from= to= proto=SMTP helo= +554 5.7.1 : Recipient address rejected: Access denied >>> recipient_delimiter | OK >>> # Expect: OK @@ -150,26 +150,26 @@ OK >>> # >>> # Expect: REJECT >>> rcpt reject@reject.domain -./smtpd_check: : reject: RCPT from bar.duno.com[44.33.44.33]: 554 : Recipient address rejected: Access denied; from= to= proto=SMTP helo= -554 : Recipient address rejected: Access denied +./smtpd_check: : reject: RCPT from bar.duno.com[44.33.44.33]: 554 5.7.1 : Recipient address rejected: Access denied; from= to= proto=SMTP helo= +554 5.7.1 : Recipient address rejected: Access denied >>> # Expect: OK >>> rcpt ok@reject.domain OK >>> # Expect: REJECT >>> rcpt anyone@reject.domain -./smtpd_check: : reject: RCPT from bar.duno.com[44.33.44.33]: 554 : Recipient address rejected: Access denied; from= to= proto=SMTP helo= -554 : Recipient address rejected: Access denied +./smtpd_check: : reject: RCPT from bar.duno.com[44.33.44.33]: 554 5.7.1 : Recipient address rejected: Access denied; from= to= proto=SMTP helo= +554 5.7.1 : Recipient address rejected: Access denied >>> # Expect: REJECT >>> rcpt good-sender@reject.domain -./smtpd_check: : reject: RCPT from bar.duno.com[44.33.44.33]: 554 : Recipient address rejected: Access denied; from= to= proto=SMTP helo= -554 : Recipient address rejected: Access denied +./smtpd_check: : reject: RCPT from bar.duno.com[44.33.44.33]: 554 5.7.1 : Recipient address rejected: Access denied; from= to= proto=SMTP helo= +554 5.7.1 : Recipient address rejected: Access denied >>> # >>> # Again, with a domain that accepts by default >>> # >>> # Expect: REJECT >>> rcpt reject@ok.domain -./smtpd_check: : reject: RCPT from bar.duno.com[44.33.44.33]: 554 : Recipient address rejected: Access denied; from= to= proto=SMTP helo= -554 : Recipient address rejected: Access denied +./smtpd_check: : reject: RCPT from bar.duno.com[44.33.44.33]: 554 5.7.1 : Recipient address rejected: Access denied; from= to= proto=SMTP helo= +554 5.7.1 : Recipient address rejected: Access denied >>> # Expect: OK >>> rcpt ok@ok.domain OK @@ -183,5 +183,5 @@ OK >>> # check_sender_access specific >>> # >>> mail <> -./smtpd_check: : reject: MAIL from bar.duno.com[44.33.44.33]: 550 <>: Sender address rejected: Go away postmaster; from=<> proto=SMTP helo= -550 <>: Sender address rejected: Go away postmaster +./smtpd_check: : reject: MAIL from bar.duno.com[44.33.44.33]: 550 5.0.0 <>: Sender address rejected: Go away postmaster; from=<> proto=SMTP helo= +550 5.0.0 <>: Sender address rejected: Go away postmaster diff --git a/postfix/src/smtpd/smtpd_chat.c b/postfix/src/smtpd/smtpd_chat.c index db0a2c4b6..2962b1efb 100644 --- a/postfix/src/smtpd/smtpd_chat.c +++ b/postfix/src/smtpd/smtpd_chat.c @@ -144,8 +144,12 @@ void smtpd_chat_reply(SMTPD_STATE *state, char *format,...) va_start(ap, format); vstring_vsprintf(state->buffer, format, ap); va_end(ap); - if (var_soft_bounce && STR(state->buffer)[0] == '5') + /* All 5xx replies must have a 5.xx.xx detail code. */ + if (var_soft_bounce && STR(state->buffer)[0] == '5') { STR(state->buffer)[0] = '4'; + if (STR(state->buffer)[4] == '5') + STR(state->buffer)[4] = '4'; + } smtp_chat_append(state, "Out: "); if (msg_verbose) diff --git a/postfix/src/smtpd/smtpd_check.c b/postfix/src/smtpd/smtpd_check.c index 5e59e2b9c..14689ec5f 100644 --- a/postfix/src/smtpd/smtpd_check.c +++ b/postfix/src/smtpd/smtpd_check.c @@ -226,6 +226,7 @@ #include #include #include +#include /* Application-specific. */ @@ -290,8 +291,10 @@ static MAPS *smtpd_sender_login_maps; static DOMAIN_LIST *relay_domains; static NAMADR_LIST *mynetworks; static NAMADR_LIST *perm_mx_networks; + #ifdef USE_TLS static MAPS *relay_ccerts; + #endif /* @@ -375,31 +378,32 @@ static int check_rcpt_maps(SMTPD_STATE *, const char *, const char *); * permit-style restriction fails. Otherwise, we could reject legitimate * mail. */ -static void PRINTFLIKE(3, 4) defer_if(SMTPD_DEFER *, int, const char *,...); - -#define DEFER_IF_REJECT2(state, class, fmt, a1, a2) \ - defer_if(&(state)->defer_if_reject, (class), (fmt), (a1), (a2)) -#define DEFER_IF_REJECT3(state, class, fmt, a1, a2, a3) \ - defer_if(&(state)->defer_if_reject, (class), (fmt), (a1), (a2), (a3)) -#define DEFER_IF_REJECT4(state, class, fmt, a1, a2, a3, a4) \ - defer_if(&(state)->defer_if_reject, (class), (fmt), (a1), (a2), (a3), (a4)) -#define DEFER_IF_PERMIT2(state, class, fmt, a1, a2) do { \ +static void PRINTFLIKE(5, 6) defer_if(SMTPD_DEFER *, int, int, const char *, const char *,...); +static int PRINTFLIKE(5, 6) smtpd_check_reject(SMTPD_STATE *, int, int, const char *, const char *,...); + +#define DEFER_IF_REJECT2(state, class, code, dsn, fmt, a1, a2) \ + defer_if(&(state)->defer_if_reject, (class), (code), (dsn), (fmt), (a1), (a2)) +#define DEFER_IF_REJECT3(state, class, code, dsn, fmt, a1, a2, a3) \ + defer_if(&(state)->defer_if_reject, (class), (code), (dsn), (fmt), (a1), (a2), (a3)) +#define DEFER_IF_REJECT4(state, class, code, dsn, fmt, a1, a2, a3, a4) \ + defer_if(&(state)->defer_if_reject, (class), (code), (dsn), (fmt), (a1), (a2), (a3), (a4)) +#define DEFER_IF_PERMIT2(state, class, code, dsn, fmt, a1, a2) do { \ if ((state)->warn_if_reject == 0) \ - defer_if(&(state)->defer_if_permit, (class), (fmt), (a1), (a2)); \ + defer_if(&(state)->defer_if_permit, (class), (code), (dsn), (fmt), (a1), (a2)); \ else \ - (void) smtpd_check_reject((state), (class), (fmt), (a1), (a2)); \ + (void) smtpd_check_reject((state), (class), (code), (dsn), (fmt), (a1), (a2)); \ } while (0) -#define DEFER_IF_PERMIT3(state, class, fmt, a1, a2, a3) do { \ +#define DEFER_IF_PERMIT3(state, class, code, dsn, fmt, a1, a2, a3) do { \ if ((state)->warn_if_reject == 0) \ - defer_if(&(state)->defer_if_permit, (class), (fmt), (a1), (a2), (a3)); \ + defer_if(&(state)->defer_if_permit, (class), (code), (dsn), (fmt), (a1), (a2), (a3)); \ else \ - (void) smtpd_check_reject((state), (class), (fmt), (a1), (a2), (a3)); \ + (void) smtpd_check_reject((state), (class), (code), (dsn), (fmt), (a1), (a2), (a3)); \ } while (0) -#define DEFER_IF_PERMIT4(state, class, fmt, a1, a2, a3, a4) do { \ +#define DEFER_IF_PERMIT4(state, class, code, dsn, fmt, a1, a2, a3, a4) do { \ if ((state)->warn_if_reject == 0) \ - defer_if(&(state)->defer_if_permit, (class), (fmt), (a1), (a2), (a3), (a4)); \ + defer_if(&(state)->defer_if_permit, (class), (code), (dsn), (fmt), (a1), (a2), (a3), (a4)); \ else \ - (void) smtpd_check_reject((state), (class), (fmt), (a1), (a2), (a3), (a4)); \ + (void) smtpd_check_reject((state), (class), (code), (dsn), (fmt), (a1), (a2), (a3), (a4)); \ } while (0) /* @@ -756,7 +760,8 @@ static void log_whatsup(SMTPD_STATE *state, const char *whatsup, /* smtpd_check_reject - do the boring things that must be done */ static int smtpd_check_reject(SMTPD_STATE *state, int error_class, - char *format,...) + int code, const char *dsn, + const char *format,...) { va_list ap; int warn_if_reject; @@ -777,30 +782,35 @@ static int smtpd_check_reject(SMTPD_STATE *state, int error_class, /* * Update the error class mask, and format the response. XXX What about * multi-line responses? For now we cheat and send whitespace. + * + * Format the response before complaining about configuration errors, so + * that we can show the error in context. */ state->error_mask |= error_class; + vstring_sprintf(error_text, "%d %s ", code, dsn); va_start(ap, format); - vstring_vsprintf(error_text, format, ap); + vstring_vsprintf_append(error_text, format, ap); va_end(ap); - /* - * Ensure RFC compliance. We could do this inside smtpd_chat_reply() and - * switch to multi-line for long replies. - */ - vstring_truncate(error_text, 510); - VSTRING_TERMINATE(error_text); - /* * Validate the response, that is, the response must begin with a * three-digit status code, and the first digit must be 4 or 5. If the * response is bad, log a warning and send a generic response instead. */ - if ((STR(error_text)[0] != '4' && STR(error_text)[0] != '5') - || !ISDIGIT(STR(error_text)[1]) || !ISDIGIT(STR(error_text)[2]) - || ISDIGIT(STR(error_text)[3])) { - msg_warn("response code configuration error: %s", STR(error_text)); - vstring_strcpy(error_text, "450 Service unavailable"); + if (code < 400 || code > 599) { + msg_warn("SMTP reply code configuration error: %s", STR(error_text)); + vstring_strcpy(error_text, "450 4.7.1 Service unavailable"); } + if (!dsn_valid(STR(error_text) + 4)) { + msg_warn("DSN detail code configuration error: %s", STR(error_text)); + vstring_strcpy(error_text, "450 4.7.1 Service unavailable"); + } + + /* + * Ensure RFC compliance. We could do this inside smtpd_chat_reply() and + * switch to multi-line for long replies. + */ + vstring_truncate(error_text, 510); printable(STR(error_text), ' '); /* @@ -811,6 +821,8 @@ static int smtpd_check_reject(SMTPD_STATE *state, int error_class, if (!warn_if_reject && state->defer_if_reject.active && STR(error_text)[0] == '5') { state->warn_if_reject = state->defer_if_reject.active = 0; return (smtpd_check_reject(state, state->defer_if_reject.class, + state->defer_if_reject.code, + STR(state->defer_if_reject.dsn), "%s", STR(state->defer_if_reject.reason))); } @@ -836,6 +848,12 @@ static int smtpd_check_reject(SMTPD_STATE *state, int error_class, if (var_soft_bounce && STR(error_text)[0] == '5') STR(error_text)[0] = '4'; + /* + * In any case, enforce consistency between the SMTP code and DSN code. + * SMTP has the higher precedence since it came here first. + */ + STR(error_text)[4] = STR(error_text)[0]; + /* * Log what is happening. When the sysadmin discards policy violation * postmaster notices, this may be the only trace left that service was @@ -848,7 +866,9 @@ static int smtpd_check_reject(SMTPD_STATE *state, int error_class, /* defer_if - prepare to change our mind */ -static void defer_if(SMTPD_DEFER *defer, int error_class, const char *fmt,...) +static void defer_if(SMTPD_DEFER *defer, int error_class, + int code, const char *dsn, + const char *fmt,...) { va_list ap; @@ -859,6 +879,10 @@ static void defer_if(SMTPD_DEFER *defer, int error_class, const char *fmt,...) if (defer->active == 0) { defer->active = 1; defer->class = error_class; + defer->code = code; + if (defer->dsn == 0) + defer->dsn = vstring_alloc(10); + vstring_strcpy(defer->dsn, dsn); if (defer->reason == 0) defer->reason = vstring_alloc(10); va_start(ap, fmt); @@ -872,8 +896,9 @@ static void defer_if(SMTPD_DEFER *defer, int error_class, const char *fmt,...) static void reject_dict_retry(SMTPD_STATE *state, const char *reply_name) { longjmp(smtpd_check_buf, smtpd_check_reject(state, MAIL_ERROR_RESOURCE, - "%d <%s>: Temporary lookup failure", - 451, reply_name)); + 451, "4.3.0", + "<%s>: Temporary lookup failure", + reply_name)); } /* check_mail_addr_find - reject with temporary failure if dict lookup fails */ @@ -903,9 +928,9 @@ static int reject_unknown_client(SMTPD_STATE *state) if (strcasecmp(state->name, "unknown") == 0) return (smtpd_check_reject(state, MAIL_ERROR_POLICY, - "%d Client host rejected: cannot find your hostname, [%s]", state->peer_code == SMTPD_PEER_CODE_PERM ? - var_unk_client_code : 450, + var_unk_client_code : 450, "4.7.1", + "Client host rejected: cannot find your hostname, [%s]", state->addr)); return (SMTPD_CHECK_DUNNO); } @@ -984,8 +1009,9 @@ static int reject_invalid_hostaddr(SMTPD_STATE *state, char *addr, */ if (!valid_mailhost_addr(test_addr, DONT_GRIPE)) stat = smtpd_check_reject(state, MAIL_ERROR_POLICY, - "%d <%s>: %s rejected: invalid ip address", - var_bad_name_code, reply_name, reply_class); + var_bad_name_code, "5.5.2", + "<%s>: %s rejected: invalid ip address", + reply_name, reply_class); else stat = SMTPD_CHECK_DUNNO; @@ -1021,8 +1047,9 @@ static int reject_invalid_hostname(SMTPD_STATE *state, char *name, if (!valid_hostname(test_name, DONT_GRIPE) && !valid_hostaddr(test_name, DONT_GRIPE)) /* XXX back compat */ stat = smtpd_check_reject(state, MAIL_ERROR_POLICY, - "%d <%s>: %s rejected: Invalid name", - var_bad_name_code, reply_name, reply_class); + var_bad_name_code, "5.5.2", + "<%s>: %s rejected: Invalid name", + reply_name, reply_class); else stat = SMTPD_CHECK_DUNNO; @@ -1057,8 +1084,9 @@ static int reject_non_fqdn_hostname(SMTPD_STATE *state, char *name, */ if (!valid_hostname(test_name, DONT_GRIPE) || !strchr(test_name, '.')) stat = smtpd_check_reject(state, MAIL_ERROR_POLICY, - "%d <%s>: %s rejected: need fully-qualified hostname", - var_non_fqdn_code, reply_name, reply_class); + var_non_fqdn_code, "5.5.2", + "<%s>: %s rejected: need fully-qualified hostname", + reply_name, reply_class); else stat = SMTPD_CHECK_DUNNO; @@ -1093,12 +1121,13 @@ static int reject_unknown_hostname(SMTPD_STATE *state, char *name, RR_ADDR_TYPES, T_MX, 0); if (dns_status == DNS_NOTFOUND) return (smtpd_check_reject(state, MAIL_ERROR_POLICY, - "%d <%s>: %s rejected: Host not found", - var_unk_name_code, + var_unk_name_code, "4.1.0", + "<%s>: %s rejected: Host not found", reply_name, reply_class)); else if (dns_status != DNS_OK) DEFER_IF_PERMIT2(state, MAIL_ERROR_POLICY, - "450 <%s>: %s rejected: Host not found", + 450, "4.1.0", + "<%s>: %s rejected: Host not found", reply_name, reply_class); return (SMTPD_CHECK_DUNNO); } @@ -1119,12 +1148,16 @@ static int reject_unknown_mailhost(SMTPD_STATE *state, const char *name, RR_ADDR_TYPES, T_MX, 0); if (dns_status == DNS_NOTFOUND) return (smtpd_check_reject(state, MAIL_ERROR_POLICY, - "%d <%s>: %s rejected: Domain not found", var_unk_addr_code, + strcmp(reply_class, SMTPD_NAME_SENDER) == 0 ? + "4.1.8" : "4.1.2", + "<%s>: %s rejected: Domain not found", reply_name, reply_class)); else if (dns_status != DNS_OK) DEFER_IF_PERMIT2(state, MAIL_ERROR_POLICY, - "450 <%s>: %s rejected: Domain not found", + 450, strcmp(reply_class, SMTPD_NAME_SENDER) == 0 ? + "4.1.8" : "4.1.2", + "<%s>: %s rejected: Domain not found", reply_name, reply_class); return (SMTPD_CHECK_DUNNO); } @@ -1142,9 +1175,8 @@ static int permit_tls_clientcerts(SMTPD_STATE *state, int permit_all_certs) if (state->tls_info.peer_verified && permit_all_certs) { if (msg_verbose) msg_info("Relaying allowed for all verified client certificates"); - return(SMTPD_CHECK_OK); + return (SMTPD_CHECK_OK); } - if (state->tls_info.peer_verified && state->tls_info.peer_fingerprint) { low_name = lowercase(mystrdup(state->tls_info.peer_fingerprint)); found = maps_find(relay_ccerts, low_name, DICT_FLAG_FIXED); @@ -1159,6 +1191,7 @@ static int permit_tls_clientcerts(SMTPD_STATE *state, int permit_all_certs) } return (SMTPD_CHECK_DUNNO); } + #endif /* check_relay_domains - OK/FAIL for message relaying */ @@ -1198,8 +1231,9 @@ static int check_relay_domains(SMTPD_STATE *state, char *recipient, * Deny relaying between sites that both are not in relay_domains. */ return (smtpd_check_reject(state, MAIL_ERROR_POLICY, - "%d <%s>: %s rejected: Relay access denied", - var_relay_code, reply_name, reply_class)); + var_relay_code, "5.7.1", + "<%s>: %s rejected: Relay access denied", + reply_name, reply_class)); } /* permit_auth_destination - OK for message relaying */ @@ -1270,8 +1304,9 @@ static int reject_unauth_destination(SMTPD_STATE *state, char *recipient) * Reject relaying to sites that are not listed in relay_domains. */ return (smtpd_check_reject(state, MAIL_ERROR_POLICY, - "%d <%s>: Relay access denied", - var_relay_code, recipient)); + var_relay_code, "5.7.1", + "<%s>: Relay access denied", + recipient)); } /* reject_unauth_pipelining - reject improper use of SMTP command pipelining */ @@ -1291,7 +1326,8 @@ static int reject_unauth_pipelining(SMTPD_STATE *state, && (strcasecmp(state->protocol, MAIL_PROTO_ESMTP) != 0 || strcasecmp(state->where, "DATA") == 0)) { return (smtpd_check_reject(state, MAIL_ERROR_PROTOCOL, - "503 <%s>: %s rejected: Improper use of SMTP command pipelining", + 503, "5.5.0", + "<%s>: %s rejected: Improper use of SMTP command pipelining", reply_name, reply_class)); } return (SMTPD_CHECK_DUNNO); @@ -1321,10 +1357,11 @@ static int all_auth_mx_addr(SMTPD_STATE *state, char *host, * Verify that all host addresses are within permit_mx_backup_networks. */ dns_status = dns_lookup_v(host, 0, &addr_list, (VSTRING *) 0, (VSTRING *) 0, - DNS_REQ_FLAG_ALL, inet_proto_info()->dns_atype_list); + DNS_REQ_FLAG_ALL, inet_proto_info()->dns_atype_list); if (dns_status != DNS_OK) { DEFER_IF_REJECT3(state, MAIL_ERROR_POLICY, - "450 <%s>: %s rejected: Unable to look up host %s as mail exchanger", + 450, "4.4.4", + "<%s>: %s rejected: Unable to look up host %s as mail exchanger", reply_name, reply_class, host); return (NOPE); } @@ -1378,7 +1415,8 @@ static int has_my_addr(SMTPD_STATE *state, const char *host, aierr = hostname_to_sockaddr(host, (char *) 0, 0, &res0); if (aierr) { DEFER_IF_REJECT4(state, MAIL_ERROR_POLICY, - "450 <%s>: %s rejected: Unable to look up mail exchanger host %s: %s", + 450, "4.4.4", + "<%s>: %s rejected: Unable to look up mail exchanger host %s: %s", reply_name, reply_class, host, MAI_STRERROR(aierr)); return (NOPE); } @@ -1548,7 +1586,8 @@ static int permit_mx_backup(SMTPD_STATE *state, const char *recipient, SMTPD_CHECK_OK : SMTPD_CHECK_DUNNO); if (dns_status != DNS_OK) { DEFER_IF_REJECT2(state, MAIL_ERROR_POLICY, - "450 <%s>: %s rejected: Unable to look up mail exchanger information", + 450, "4.4.4", + "<%s>: %s rejected: Unable to look up mail exchanger information", reply_name, reply_class); return (SMTPD_CHECK_DUNNO); } @@ -1615,8 +1654,9 @@ static int reject_non_fqdn_address(SMTPD_STATE *state, char *addr, */ if (!*test_dom || !valid_hostname(test_dom, DONT_GRIPE) || !strchr(test_dom, '.')) stat = smtpd_check_reject(state, MAIL_ERROR_POLICY, - "%d <%s>: %s rejected: need fully-qualified address", - var_non_fqdn_code, reply_name, reply_class); + var_non_fqdn_code, "4.5.2", + "<%s>: %s rejected: need fully-qualified address", + reply_name, reply_class); else stat = SMTPD_CHECK_DUNNO; @@ -1695,7 +1735,9 @@ static int reject_unverified_address(SMTPD_STATE *state, const char *addr, if (verify_status != VRFY_STAT_OK) { msg_warn("%s service failure", var_verify_service); DEFER_IF_PERMIT2(state, MAIL_ERROR_POLICY, - "450 <%s>: %s rejected: address verification problem", + 450, strcmp(reply_class, SMTPD_NAME_SENDER) == 0 ? + "4.1.0" : "4.1.1", + "<%s>: %s rejected: address verification problem", reply_name, reply_class); rqst_status = SMTPD_CHECK_DUNNO; } else { @@ -1707,7 +1749,9 @@ static int reject_unverified_address(SMTPD_STATE *state, const char *addr, case DEL_RCPT_STAT_TODO: case DEL_RCPT_STAT_DEFER: DEFER_IF_PERMIT3(state, MAIL_ERROR_POLICY, - "450 <%s>: %s rejected: unverified address: %.250s", + 450, strcmp(reply_class, SMTPD_NAME_SENDER) == 0 ? + "4.1.0" : "4.1.1", + "<%s>: %s rejected: unverified address: %.250s", reply_name, reply_class, STR(why)); rqst_status = SMTPD_CHECK_DUNNO; break; @@ -1718,9 +1762,13 @@ static int reject_unverified_address(SMTPD_STATE *state, const char *addr, if (unv_addr_code / 100 == 2) rqst_status = SMTPD_CHECK_DUNNO; else - rqst_status = smtpd_check_reject(state, MAIL_ERROR_POLICY, - "%d <%s>: %s rejected: undeliverable address: %s", - unv_addr_code, reply_name, reply_class, STR(why)); + rqst_status = + smtpd_check_reject(state, MAIL_ERROR_POLICY, + unv_addr_code, + strcmp(reply_class, SMTPD_NAME_SENDER) == 0 ? + "4.1.0" : "4.1.1", + "<%s>: %s rejected: undeliverable address: %s", + reply_name, reply_class, STR(why)); break; } } @@ -1754,7 +1802,8 @@ static int can_delegate_action(SMTPD_STATE *state, const char *table, /* not_in_client_helo - not in client or helo restriction context */ static int not_in_client_helo(SMTPD_STATE *state, const char *table, - const char *action, const char *reply_class) + const char *action, + const char *unused_reply_class) { /* @@ -1795,6 +1844,8 @@ static int check_table_result(SMTPD_STATE *state, const char *table, int status; const char *cmd_text; int cmd_len; + static char def_dsn[] = "0.0.0"; + DSN_SPLIT dp; /* * Parse into command and text. Do not change the input. @@ -1820,10 +1871,12 @@ static int check_table_result(SMTPD_STATE *state, const char *table, * response. */ if (STREQUAL(value, "REJECT", cmd_len)) { + dsn_split(&dp, "5.7.1", cmd_text); return (smtpd_check_reject(state, MAIL_ERROR_POLICY, - "%d <%s>: %s rejected: %s", - var_access_map_code, reply_name, reply_class, - *cmd_text ? cmd_text : "Access denied")); + var_access_map_code, dp.dsn, + "<%s>: %s rejected: %s", + reply_name, reply_class, + *dp.text ? dp.text : "Access denied")); } /* @@ -1927,10 +1980,12 @@ static int check_table_result(SMTPD_STATE *state, const char *table, * generate a generic error response. */ if (STREQUAL(value, DEFER_IF_PERMIT, cmd_len)) { + dsn_split(&dp, "4.7.1", cmd_text); DEFER_IF_PERMIT3(state, MAIL_ERROR_POLICY, - "450 <%s>: %s rejected: %s", + 450, dp.dsn, + "<%s>: %s rejected: %s", reply_name, reply_class, - *cmd_text ? cmd_text : "Service unavailable"); + *dp.text ? dp.text : "Service unavailable"); return (SMTPD_CHECK_DUNNO); } @@ -1939,10 +1994,12 @@ static int check_table_result(SMTPD_STATE *state, const char *table, * generate a generic error response. */ if (STREQUAL(value, DEFER_IF_REJECT, cmd_len)) { + dsn_split(&dp, "4.7.1", cmd_text); DEFER_IF_REJECT3(state, MAIL_ERROR_POLICY, - "450 <%s>: %s rejected: %s", + 450, dp.dsn, + "<%s>: %s rejected: %s", reply_name, reply_class, - *cmd_text ? cmd_text : "Service unavailable"); + *dp.text ? dp.text : "Service unavailable"); return (SMTPD_CHECK_DUNNO); } @@ -1977,13 +2034,20 @@ static int check_table_result(SMTPD_STATE *state, const char *table, /* * 4xx or 5xx means NO as well. smtpd_check_reject() will validate the * response status code. + * + * If the caller specifies an RFC 1893 enhanced status code, put it + * immediately after the SMTP status code as described in RFC 2034. */ if (cmd_len == 3 && *cmd_text - && ISDIGIT(value[0]) && ISDIGIT(value[1]) && ISDIGIT(value[2])) { + && (value[0] == '4' || value[0] == '5') + && ISDIGIT(value[1]) && ISDIGIT(value[2])) { code = atoi(value); + def_dsn[0] = value[0]; + dsn_split(&dp, def_dsn, cmd_text); return (smtpd_check_reject(state, MAIL_ERROR_POLICY, - "%d <%s>: %s rejected: %s", - code, reply_name, reply_class, cmd_text)); + code, dp.dsn, + "<%s>: %s rejected: %s", + reply_name, reply_class, dp.text)); } /* @@ -2006,7 +2070,8 @@ static int check_table_result(SMTPD_STATE *state, const char *table, msg_warn("do not specify lookup tables inside SMTPD access maps"); msg_warn("define a restriction class and specify its name instead."); longjmp(smtpd_check_buf, smtpd_check_reject(state, MAIL_ERROR_SOFTWARE, - "451 Server configuration error")); + 451, "4.3.5", + "Server configuration error")); } /* @@ -2016,7 +2081,8 @@ static int check_table_result(SMTPD_STATE *state, const char *table, msg_warn("SMTPD access map %s entry %s causes unreasonable recursion", table, value); longjmp(smtpd_check_buf, smtpd_check_reject(state, MAIL_ERROR_SOFTWARE, - "451 Server configuration error")); + 451, "4.3.5", + "Server configuration error")); } /* @@ -2776,6 +2842,8 @@ static int rbl_reject_reply(SMTPD_STATE *state, SMTPD_RBL_STATE *rbl, char *low_name; SMTPD_RBL_EXPAND_CONTEXT rbl_exp; int result; + DSN_SPLIT dp; + int code; /* * Use the server-specific reply template or use the default one. @@ -2806,7 +2874,27 @@ static int rbl_reject_reply(SMTPD_STATE *state, SMTPD_RBL_STATE *rbl, myname, rbl_domain, template); template = 0; /* pretend not found */ } - result = smtpd_check_reject(state, MAIL_ERROR_POLICY, "%s", STR(why)); + + /* + * XXX Impedance mis-match. + * + * Validate the response, that is, the response must begin with a + * three-digit status code, and the first digit must be 4 or 5. If the + * response is bad, log a warning and send a generic response instead. + */ + if ((STR(why)[0] != '4' && STR(why)[0] != '5') + || !ISDIGIT(STR(why)[1]) || !ISDIGIT(STR(why)[2]) + || STR(why)[3] != ' ') { + msg_warn("rbl response code configuration error: %s", STR(why)); + result = smtpd_check_reject(state, MAIL_ERROR_POLICY, + 450, "4.7.1", "Service unavailable"); + } else { + code = atoi(STR(why)); + dsn_split(&dp, "4.7.1", STR(why) + 4); + result = smtpd_check_reject(state, MAIL_ERROR_POLICY, + code, dp.dsn, "%s", *dp.text ? + dp.text : "Service unavailable"); + } /* * Clean up. @@ -2987,8 +3075,8 @@ static int reject_auth_sender_login_mismatch(SMTPD_STATE *state, const char *sen myfree(saved_owners); } if (!found) - return (smtpd_check_reject(state, MAIL_ERROR_POLICY, - "553 <%s>: Sender address rejected: not owned by user %s", + return (smtpd_check_reject(state, MAIL_ERROR_POLICY, 553, "5.7.1", + "<%s>: Sender address rejected: not owned by user %s", sender, state->sasl_username)); } return (SMTPD_CHECK_DUNNO); @@ -3011,8 +3099,8 @@ static int reject_unauth_sender_login_mismatch(SMTPD_STATE *state, const char *s reject_dict_retry(state, sender); if (check_mail_addr_find(state, sender, smtpd_sender_login_maps, STR(reply->recipient), (char **) 0) != 0) - return (smtpd_check_reject(state, MAIL_ERROR_POLICY, - "553 <%s>: Sender address rejected: not logged in", sender)); + return (smtpd_check_reject(state, MAIL_ERROR_POLICY, 553, "5.7.1", + "<%s>: Sender address rejected: not logged in", sender)); } return (SMTPD_CHECK_DUNNO); } @@ -3089,7 +3177,8 @@ static int check_policy_service(SMTPD_STATE *state, const char *server, ATTR_TYPE_STR, MAIL_ATTR_ACTION, action, ATTR_TYPE_END) != 1) { return (smtpd_check_reject(state, MAIL_ERROR_POLICY, - "450 Server configuration problem")); + 451, "4.3.5", + "Server configuration problem")); } else { /* @@ -3121,7 +3210,8 @@ static int is_map_command(SMTPD_STATE *state, const char *name, msg_warn("restriction %s: bad argument \"%s\": need maptype:mapname", command, **argp); longjmp(smtpd_check_buf, smtpd_check_reject(state, MAIL_ERROR_SOFTWARE, - "451 Server configuration error")); + 451, "4.3.5", + "Server configuration error")); } else { return (1); } @@ -3137,7 +3227,8 @@ static void forbid_whitelist(SMTPD_STATE *state, const char *name, msg_warn("this is not allowed for security reasons"); msg_warn("use DUNNO instead of OK if you want to make an exception"); longjmp(smtpd_check_buf, smtpd_check_reject(state, MAIL_ERROR_SOFTWARE, - "451 Server configuration error")); + 451, "4.3.5", + "Server configuration error")); } } @@ -3187,8 +3278,10 @@ static int generic_checks(SMTPD_STATE *state, ARGV *restrictions, msg_warn("specify one of (%s, %s, %s, %s, %s) before %s restriction \"%s\"", CHECK_CLIENT_ACL, CHECK_HELO_ACL, CHECK_SENDER_ACL, CHECK_RECIP_ACL, CHECK_ETRN_ACL, reply_class, name); - longjmp(smtpd_check_buf, smtpd_check_reject(state, - MAIL_ERROR_SOFTWARE, "451 Server configuration error")); + longjmp(smtpd_check_buf, + smtpd_check_reject(state, MAIL_ERROR_SOFTWARE, + 451, "4.3.5", + "Server configuration error")); } name = def_acl; cpp -= 1; @@ -3204,15 +3297,17 @@ static int generic_checks(SMTPD_STATE *state, ARGV *restrictions, cpp[1], PERMIT_ALL); } else if (strcasecmp(name, DEFER_ALL) == 0) { status = smtpd_check_reject(state, MAIL_ERROR_POLICY, - "%d <%s>: %s rejected: Try again later", - var_defer_code, reply_name, reply_class); + var_defer_code, "4.3.2", + "<%s>: %s rejected: Try again later", + reply_name, reply_class); if (cpp[1] != 0 && state->warn_if_reject == 0) msg_warn("restriction `%s' after `%s' is ignored", cpp[1], DEFER_ALL); } else if (strcasecmp(name, REJECT_ALL) == 0) { status = smtpd_check_reject(state, MAIL_ERROR_POLICY, - "%d <%s>: %s rejected: Access denied", - var_reject_code, reply_name, reply_class); + var_reject_code, "5.7.1", + "<%s>: %s rejected: Access denied", + reply_name, reply_class); if (cpp[1] != 0 && state->warn_if_reject == 0) msg_warn("restriction `%s' after `%s' is ignored", cpp[1], REJECT_ALL); @@ -3222,25 +3317,31 @@ static int generic_checks(SMTPD_STATE *state, ARGV *restrictions, if (cpp[1] == 0 || strchr(cpp[1], ':') == 0) { msg_warn("restriction %s must be followed by transport:server", CHECK_POLICY_SERVICE); - longjmp(smtpd_check_buf, smtpd_check_reject(state, - MAIL_ERROR_SOFTWARE, "451 Server configuration error")); + longjmp(smtpd_check_buf, + smtpd_check_reject(state, MAIL_ERROR_SOFTWARE, + 451, "4.3.5", + "Server configuration error")); } else status = check_policy_service(state, *++cpp, reply_name, reply_class, def_acl); } else if (strcasecmp(name, DEFER_IF_PERMIT) == 0) { DEFER_IF_PERMIT2(state, MAIL_ERROR_POLICY, - "450 <%s>: %s rejected: defer_if_permit requested", + 450, "4.7.0", + "<%s>: %s rejected: defer_if_permit requested", reply_name, reply_class); } else if (strcasecmp(name, DEFER_IF_REJECT) == 0) { DEFER_IF_REJECT2(state, MAIL_ERROR_POLICY, - "450 <%s>: %s rejected: defer_if_reject requested", + 450, "4.7.0", + "<%s>: %s rejected: defer_if_reject requested", reply_name, reply_class); #ifdef SNAPSHOT } else if (strcasecmp(name, SLEEP) == 0) { if (cpp[1] == 0 || alldig(cpp[1]) == 0) { msg_warn("restriction %s must be followed by number", SLEEP); - longjmp(smtpd_check_buf, smtpd_check_reject(state, - MAIL_ERROR_SOFTWARE, "451 Server configuration error")); + longjmp(smtpd_check_buf, + smtpd_check_reject(state, MAIL_ERROR_SOFTWARE, + 451, "4.3.5", + "Server configuration error")); } else sleep(atoi(*++cpp)); #endif @@ -3462,9 +3563,9 @@ static int generic_checks(SMTPD_STATE *state, ARGV *restrictions, #endif #ifdef USE_TLS } else if (strcasecmp(name, PERMIT_TLS_ALL_CLIENTCERTS) == 0) { - status = permit_tls_clientcerts(state, 1); + status = permit_tls_clientcerts(state, 1); } else if (strcasecmp(name, PERMIT_TLS_CLIENTCERTS) == 0) { - status = permit_tls_clientcerts(state, 0); + status = permit_tls_clientcerts(state, 0); #endif } else if (strcasecmp(name, REJECT_UNKNOWN_RCPTDOM) == 0) { if (state->recipient) @@ -3505,8 +3606,9 @@ static int generic_checks(SMTPD_STATE *state, ARGV *restrictions, if (state->sender && *state->sender == 0 && state->rcpt_count > (strcmp(state->where, "DATA") ? 0 : 1)) status = smtpd_check_reject(state, MAIL_ERROR_POLICY, - "%d <%s>: %s rejected: Multi-recipient bounce", - var_mul_rcpt_code, reply_name, reply_class); + var_mul_rcpt_code, "5.5.3", + "<%s>: %s rejected: Multi-recipient bounce", + reply_name, reply_class); } else if (strcasecmp(name, REJECT_UNVERIFIED_RECIP) == 0) { if (state->recipient && *state->recipient) status = reject_unverified_address(state, state->recipient, @@ -3537,8 +3639,10 @@ static int generic_checks(SMTPD_STATE *state, ARGV *restrictions, */ else { msg_warn("unknown smtpd restriction: \"%s\"", name); - longjmp(smtpd_check_buf, smtpd_check_reject(state, - MAIL_ERROR_SOFTWARE, "451 Server configuration error")); + longjmp(smtpd_check_buf, + smtpd_check_reject(state, MAIL_ERROR_SOFTWARE, + 451, "4.3.5", + "Server configuration error")); } if (msg_verbose) msg_info("%s: name=%s status=%d", myname, name, status); @@ -3874,6 +3978,8 @@ char *smtpd_check_rcpt(SMTPD_STATE *state, char *recipient) */ if (status != SMTPD_CHECK_REJECT && state->defer_if_permit.active) status = smtpd_check_reject(state, state->defer_if_permit.class, + state->defer_if_permit.code, + STR(state->defer_if_permit.dsn), "%s", STR(state->defer_if_permit.reason)); /* @@ -3945,6 +4051,8 @@ char *smtpd_check_etrn(SMTPD_STATE *state, char *domain) */ if (status != SMTPD_CHECK_REJECT && state->defer_if_permit.active) status = smtpd_check_reject(state, state->defer_if_permit.class, + state->defer_if_permit.code, + STR(state->defer_if_permit.dsn), "%s", STR(state->defer_if_permit.reason)); SMTPD_CHECK_ETRN_RETURN(status == SMTPD_CHECK_REJECT ? STR(error_text) : 0); @@ -4033,9 +4141,11 @@ static int check_rcpt_maps(SMTPD_STATE *state, const char *recipient, */ if (strcmp(STR(reply->transport), MAIL_SERVICE_ERROR) == 0) return (smtpd_check_reject(state, MAIL_ERROR_BOUNCE, - "%d <%s>: %s rejected: %s", (reply->flags & RESOLVE_CLASS_ALIAS) ? var_virt_alias_code : 550, + strcmp(reply_class, SMTPD_NAME_SENDER) == 0 ? + "5.1.0" : "5.1.1", + "<%s>: %s rejected: %s", recipient, reply_class, STR(reply->nexthop))); @@ -4071,9 +4181,12 @@ static int check_rcpt_maps(SMTPD_STATE *state, const char *recipient, strlen(MAIL_ADDR_MAIL_DAEMON)) && NOMATCH(local_rcpt_maps, CONST_STR(reply->recipient))) return (smtpd_check_reject(state, MAIL_ERROR_BOUNCE, - "%d <%s>: %s rejected: User unknown%s", - var_local_rcpt_code, recipient, - reply_class, var_show_unk_rcpt_table ? + var_local_rcpt_code, + strcmp(reply_class, SMTPD_NAME_SENDER) == 0 ? + "5.1.0" : "5.1.1", + "<%s>: %s rejected: User unknown%s", + recipient, reply_class, + var_show_unk_rcpt_table ? " in local recipient table" : "")); break; @@ -4084,9 +4197,12 @@ static int check_rcpt_maps(SMTPD_STATE *state, const char *recipient, if (*var_virt_mailbox_maps && NOMATCH(virt_mailbox_maps, CONST_STR(reply->recipient))) return (smtpd_check_reject(state, MAIL_ERROR_BOUNCE, - "%d <%s>: %s rejected: User unknown%s", - var_virt_mailbox_code, recipient, - reply_class, var_show_unk_rcpt_table ? + var_virt_mailbox_code, + strcmp(reply_class, SMTPD_NAME_SENDER) == 0 ? + "5.1.0" : "5.1.1", + "<%s>: %s rejected: User unknown%s", + recipient, reply_class, + var_show_unk_rcpt_table ? " in virtual mailbox table" : "")); break; @@ -4097,9 +4213,12 @@ static int check_rcpt_maps(SMTPD_STATE *state, const char *recipient, if (*var_relay_rcpt_maps && NOMATCH(relay_rcpt_maps, CONST_STR(reply->recipient))) return (smtpd_check_reject(state, MAIL_ERROR_BOUNCE, - "%d <%s>: %s rejected: User unknown%s", - var_relay_rcpt_code, recipient, - reply_class, var_show_unk_rcpt_table ? + var_relay_rcpt_code, + strcmp(reply_class, SMTPD_NAME_SENDER) == 0 ? + "5.1.0" : "5.1.1", + "<%s>: %s rejected: User unknown%s", + recipient, reply_class, + var_show_unk_rcpt_table ? " in relay recipient table" : "")); break; } @@ -4134,7 +4253,8 @@ char *smtpd_check_size(SMTPD_STATE *state, off_t size) if (var_message_limit > 0 && size > var_message_limit) { (void) smtpd_check_reject(state, MAIL_ERROR_POLICY, - "552 Message size exceeds fixed limit"); + 552, "5.2.3", + "Message size exceeds fixed limit"); return (STR(error_text)); } fsspace(".", &fsbuf); @@ -4148,7 +4268,8 @@ char *smtpd_check_size(SMTPD_STATE *state, off_t size) if (BLOCKS(var_queue_minfree) >= fsbuf.block_free || BLOCKS(var_message_limit) >= fsbuf.block_free / 1.5) { (void) smtpd_check_reject(state, MAIL_ERROR_RESOURCE, - "452 Insufficient system storage"); + 452, "4.3.1", + "Insufficient system storage"); msg_warn("not enough free space in mail queue: %lu bytes < " "1.5*message size limit", (unsigned long) fsbuf.block_free * fsbuf.block_size); @@ -4198,6 +4319,8 @@ char *smtpd_check_data(SMTPD_STATE *state) */ if (status != SMTPD_CHECK_REJECT && state->defer_if_permit.active) status = smtpd_check_reject(state, state->defer_if_permit.class, + state->defer_if_permit.code, + STR(state->defer_if_permit.dsn), "%s", STR(state->defer_if_permit.reason)); if (state->rcpt_count > 1) @@ -4247,6 +4370,8 @@ char *smtpd_check_eod(SMTPD_STATE *state) */ if (status != SMTPD_CHECK_REJECT && state->defer_if_permit.active) status = smtpd_check_reject(state, state->defer_if_permit.class, + state->defer_if_permit.code, + STR(state->defer_if_permit.dsn), "%s", STR(state->defer_if_permit.reason)); if (state->rcpt_count > 1) @@ -4323,6 +4448,7 @@ char *var_relay_rcpt_maps; char *var_verify_sender; char *var_smtpd_sasl_opts; char *var_local_rwr_clients; +char *var_smtpd_relay_ccerts; typedef struct { char *name; @@ -4365,6 +4491,7 @@ static STRING_TABLE string_table[] = { VAR_MAIL_NAME, DEF_MAIL_NAME, &var_mail_name, VAR_SMTPD_SASL_OPTS, DEF_SMTPD_SASL_OPTS, &var_smtpd_sasl_opts, VAR_LOC_RWR_CLIENTS, DEF_LOC_RWR_CLIENTS, &var_local_rwr_clients, + VAR_RELAY_CCERTS, DEF_RELAY_CCERTS, &var_smtpd_relay_ccerts, 0, }; diff --git a/postfix/src/smtpd/smtpd_check.ref b/postfix/src/smtpd/smtpd_check.ref index 0b96f5f22..4ee694abd 100644 --- a/postfix/src/smtpd/smtpd_check.ref +++ b/postfix/src/smtpd/smtpd_check.ref @@ -17,23 +17,23 @@ OK >>> client_restrictions permit_mynetworks,reject_unknown_client,hash:./smtpd_check_access OK >>> client unknown 131.155.210.17 -./smtpd_check: : reject: CONNECT from unknown[131.155.210.17]: 450 Client host rejected: cannot find your hostname, [131.155.210.17]; proto=SMTP -450 Client host rejected: cannot find your hostname, [131.155.210.17] +./smtpd_check: : reject: CONNECT from unknown[131.155.210.17]: 450 4.7.1 Client host rejected: cannot find your hostname, [131.155.210.17]; proto=SMTP +450 4.7.1 Client host rejected: cannot find your hostname, [131.155.210.17] >>> client unknown 168.100.189.13 OK >>> client random.bad.domain 123.123.123.123 -./smtpd_check: : reject: CONNECT from random.bad.domain[123.123.123.123]: 554 : Client host rejected: match bad.domain; proto=SMTP -554 : Client host rejected: match bad.domain +./smtpd_check: : reject: CONNECT from random.bad.domain[123.123.123.123]: 554 5.0.0 : Client host rejected: match bad.domain; proto=SMTP +554 5.0.0 : Client host rejected: match bad.domain >>> client friend.bad.domain 123.123.123.123 OK >>> client bad.domain 123.123.123.123 -./smtpd_check: : reject: CONNECT from bad.domain[123.123.123.123]: 554 : Client host rejected: match bad.domain; proto=SMTP -554 : Client host rejected: match bad.domain +./smtpd_check: : reject: CONNECT from bad.domain[123.123.123.123]: 554 5.0.0 : Client host rejected: match bad.domain; proto=SMTP +554 5.0.0 : Client host rejected: match bad.domain >>> client wzv.win.tue.nl 131.155.210.17 OK >>> client aa.win.tue.nl 131.155.210.18 -./smtpd_check: : reject: CONNECT from aa.win.tue.nl[131.155.210.18]: 554 : Client host rejected: match 131.155.210; proto=SMTP -554 : Client host rejected: match 131.155.210 +./smtpd_check: : reject: CONNECT from aa.win.tue.nl[131.155.210.18]: 554 5.0.0 : Client host rejected: match 131.155.210; proto=SMTP +554 5.0.0 : Client host rejected: match 131.155.210 >>> client_restrictions permit_mynetworks OK >>> # @@ -44,41 +44,41 @@ OK >>> client unknown 131.155.210.17 OK >>> helo foo. -./smtpd_check: : reject: HELO from unknown[131.155.210.17]: 450 Client host rejected: cannot find your hostname, [131.155.210.17]; proto=SMTP helo= -450 Client host rejected: cannot find your hostname, [131.155.210.17] +./smtpd_check: : reject: HELO from unknown[131.155.210.17]: 450 4.7.1 Client host rejected: cannot find your hostname, [131.155.210.17]; proto=SMTP helo= +450 4.7.1 Client host rejected: cannot find your hostname, [131.155.210.17] >>> client foo 123.123.123.123 OK >>> helo foo. -./smtpd_check: : reject: HELO from foo[123.123.123.123]: 450 : Helo command rejected: Host not found; proto=SMTP helo= -450 : Helo command rejected: Host not found +./smtpd_check: : reject: HELO from foo[123.123.123.123]: 450 4.1.0 : Helo command rejected: Host not found; proto=SMTP helo= +450 4.1.0 : Helo command rejected: Host not found >>> helo foo -./smtpd_check: : reject: HELO from foo[123.123.123.123]: 450 : Helo command rejected: Host not found; proto=SMTP helo= -450 : Helo command rejected: Host not found +./smtpd_check: : reject: HELO from foo[123.123.123.123]: 450 4.1.0 : Helo command rejected: Host not found; proto=SMTP helo= +450 4.1.0 : Helo command rejected: Host not found >>> helo spike.porcupine.org -./smtpd_check: : reject: HELO from foo[123.123.123.123]: 554 : Helo command rejected: name server spike.porcupine.org; proto=SMTP helo= -554 : Helo command rejected: name server spike.porcupine.org +./smtpd_check: : reject: HELO from foo[123.123.123.123]: 554 5.7.1 : Helo command rejected: name server spike.porcupine.org; proto=SMTP helo= +554 5.7.1 : Helo command rejected: name server spike.porcupine.org >>> helo_restrictions permit_mynetworks,reject_unknown_client,reject_invalid_hostname,hash:./smtpd_check_access OK >>> helo random.bad.domain -./smtpd_check: : reject: HELO from foo[123.123.123.123]: 554 : Helo command rejected: match bad.domain; proto=SMTP helo= -554 : Helo command rejected: match bad.domain +./smtpd_check: : reject: HELO from foo[123.123.123.123]: 554 5.0.0 : Helo command rejected: match bad.domain; proto=SMTP helo= +554 5.0.0 : Helo command rejected: match bad.domain >>> helo friend.bad.domain OK >>> helo_restrictions reject_invalid_hostname,reject_unknown_hostname OK >>> helo 123.123.123.123 -./smtpd_check: : reject: HELO from foo[123.123.123.123]: 450 <123.123.123.123>: Helo command rejected: Host not found; proto=SMTP helo=<123.123.123.123> -450 <123.123.123.123>: Helo command rejected: Host not found +./smtpd_check: : reject: HELO from foo[123.123.123.123]: 450 4.1.0 <123.123.123.123>: Helo command rejected: Host not found; proto=SMTP helo=<123.123.123.123> +450 4.1.0 <123.123.123.123>: Helo command rejected: Host not found >>> helo [123.123.123.123] OK >>> helo [::] -./smtpd_check: : reject: HELO from foo[123.123.123.123]: 501 <[::]>: Helo command rejected: invalid ip address; proto=SMTP helo=<[::]> -501 <[::]>: Helo command rejected: invalid ip address +./smtpd_check: : reject: HELO from foo[123.123.123.123]: 501 5.5.2 <[::]>: Helo command rejected: invalid ip address; proto=SMTP helo=<[::]> +501 5.5.2 <[::]>: Helo command rejected: invalid ip address >>> helo [ipv6:::] OK >>> helo [ipv6::::] -./smtpd_check: : reject: HELO from foo[123.123.123.123]: 501 <[ipv6::::]>: Helo command rejected: invalid ip address; proto=SMTP helo=<[ipv6::::]> -501 <[ipv6::::]>: Helo command rejected: invalid ip address +./smtpd_check: : reject: HELO from foo[123.123.123.123]: 501 5.5.2 <[ipv6::::]>: Helo command rejected: invalid ip address; proto=SMTP helo=<[ipv6::::]> +501 5.5.2 <[ipv6::::]>: Helo command rejected: invalid ip address >>> helo_restrictions permit_naked_ip_address,reject_invalid_hostname,reject_unknown_hostname OK >>> helo 123.123.123.123 @@ -92,8 +92,8 @@ OK >>> client unknown 131.155.210.17 OK >>> mail foo@watson.ibm.com -./smtpd_check: : reject: MAIL from unknown[131.155.210.17]: 450 Client host rejected: cannot find your hostname, [131.155.210.17]; from= proto=SMTP helo=<123.123.123.123> -450 Client host rejected: cannot find your hostname, [131.155.210.17] +./smtpd_check: : reject: MAIL from unknown[131.155.210.17]: 450 4.7.1 Client host rejected: cannot find your hostname, [131.155.210.17]; from= proto=SMTP helo=<123.123.123.123> +450 4.7.1 Client host rejected: cannot find your hostname, [131.155.210.17] >>> client unknown 168.100.189.13 OK >>> mail foo@watson.ibm.com @@ -107,30 +107,30 @@ OK >>> mail foo@watson.ibm.com OK >>> mail foo@bad.domain -./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 450 : Sender address rejected: Domain not found; from= proto=SMTP helo=<123.123.123.123> -450 : Sender address rejected: Domain not found +./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 450 4.1.8 : Sender address rejected: Domain not found; from= proto=SMTP helo=<123.123.123.123> +450 4.1.8 : Sender address rejected: Domain not found >>> sender_restrictions hash:./smtpd_check_access OK >>> mail bad-sender@any.domain -./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 : Sender address rejected: match bad-sender@; from= proto=SMTP helo=<123.123.123.123> -554 : Sender address rejected: match bad-sender@ +./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 5.0.0 : Sender address rejected: match bad-sender@; from= proto=SMTP helo=<123.123.123.123> +554 5.0.0 : Sender address rejected: match bad-sender@ >>> mail bad-sender@good.domain OK >>> mail reject@this.address -./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 : Sender address rejected: match reject@this.address; from= proto=SMTP helo=<123.123.123.123> -554 : Sender address rejected: match reject@this.address +./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 5.0.0 : Sender address rejected: match reject@this.address; from= proto=SMTP helo=<123.123.123.123> +554 5.0.0 : Sender address rejected: match reject@this.address >>> mail Reject@this.address -./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 : Sender address rejected: match reject@this.address; from= proto=SMTP helo=<123.123.123.123> -554 : Sender address rejected: match reject@this.address +./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 5.0.0 : Sender address rejected: match reject@this.address; from= proto=SMTP helo=<123.123.123.123> +554 5.0.0 : Sender address rejected: match reject@this.address >>> mail foo@bad.domain -./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 : Sender address rejected: match bad.domain; from= proto=SMTP helo=<123.123.123.123> -554 : Sender address rejected: match bad.domain +./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 5.0.0 : Sender address rejected: match bad.domain; from= proto=SMTP helo=<123.123.123.123> +554 5.0.0 : Sender address rejected: match bad.domain >>> mail foo@Bad.domain -./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 : Sender address rejected: match bad.domain; from= proto=SMTP helo=<123.123.123.123> -554 : Sender address rejected: match bad.domain +./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 5.0.0 : Sender address rejected: match bad.domain; from= proto=SMTP helo=<123.123.123.123> +554 5.0.0 : Sender address rejected: match bad.domain >>> mail foo@random.bad.domain -./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 : Sender address rejected: match bad.domain; from= proto=SMTP helo=<123.123.123.123> -554 : Sender address rejected: match bad.domain +./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 5.0.0 : Sender address rejected: match bad.domain; from= proto=SMTP helo=<123.123.123.123> +554 5.0.0 : Sender address rejected: match bad.domain >>> mail foo@friend.bad.domain OK >>> # @@ -141,8 +141,8 @@ OK >>> client unknown 131.155.210.17 OK >>> rcpt foo@watson.ibm.com -./smtpd_check: : reject: RCPT from unknown[131.155.210.17]: 450 Client host rejected: cannot find your hostname, [131.155.210.17]; from= to= proto=SMTP helo=<123.123.123.123> -450 Client host rejected: cannot find your hostname, [131.155.210.17] +./smtpd_check: : reject: RCPT from unknown[131.155.210.17]: 450 4.7.1 Client host rejected: cannot find your hostname, [131.155.210.17]; from= to= proto=SMTP helo=<123.123.123.123> +450 4.7.1 Client host rejected: cannot find your hostname, [131.155.210.17] >>> client unknown 168.100.189.13 OK >>> rcpt foo@watson.ibm.com @@ -151,8 +151,8 @@ OK OK >>> rcpt foo@watson.ibm.com ./smtpd_check: warning: support for restriction "check_relay_domains" will be removed from Postfix; use "reject_unauth_destination" instead -./smtpd_check: : reject: RCPT from foo[123.123.123.123]: 554 : Recipient address rejected: Relay access denied; from= to= proto=SMTP helo=<123.123.123.123> -554 : Recipient address rejected: Relay access denied +./smtpd_check: : reject: RCPT from foo[123.123.123.123]: 554 5.7.1 : Recipient address rejected: Relay access denied; from= to= proto=SMTP helo=<123.123.123.123> +554 5.7.1 : Recipient address rejected: Relay access denied >>> rcpt foo@porcupine.org OK >>> recipient_restrictions check_relay_domains @@ -166,26 +166,26 @@ OK >>> client foo 123.123.123.123 OK >>> rcpt foo@watson.ibm.com -./smtpd_check: : reject: RCPT from foo[123.123.123.123]: 554 : Recipient address rejected: Relay access denied; from= to= proto=SMTP helo=<123.123.123.123> -554 : Recipient address rejected: Relay access denied +./smtpd_check: : reject: RCPT from foo[123.123.123.123]: 554 5.7.1 : Recipient address rejected: Relay access denied; from= to= proto=SMTP helo=<123.123.123.123> +554 5.7.1 : Recipient address rejected: Relay access denied >>> rcpt foo@porcupine.org OK >>> recipient_restrictions hash:./smtpd_check_access OK >>> mail bad-sender@any.domain -./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 : Sender address rejected: match bad-sender@; from= proto=SMTP helo=<123.123.123.123> -554 : Sender address rejected: match bad-sender@ +./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 5.0.0 : Sender address rejected: match bad-sender@; from= proto=SMTP helo=<123.123.123.123> +554 5.0.0 : Sender address rejected: match bad-sender@ >>> mail bad-sender@good.domain OK >>> mail reject@this.address -./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 : Sender address rejected: match reject@this.address; from= proto=SMTP helo=<123.123.123.123> -554 : Sender address rejected: match reject@this.address +./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 5.0.0 : Sender address rejected: match reject@this.address; from= proto=SMTP helo=<123.123.123.123> +554 5.0.0 : Sender address rejected: match reject@this.address >>> mail foo@bad.domain -./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 : Sender address rejected: match bad.domain; from= proto=SMTP helo=<123.123.123.123> -554 : Sender address rejected: match bad.domain +./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 5.0.0 : Sender address rejected: match bad.domain; from= proto=SMTP helo=<123.123.123.123> +554 5.0.0 : Sender address rejected: match bad.domain >>> mail foo@random.bad.domain -./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 : Sender address rejected: match bad.domain; from= proto=SMTP helo=<123.123.123.123> -554 : Sender address rejected: match bad.domain +./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 5.0.0 : Sender address rejected: match bad.domain; from= proto=SMTP helo=<123.123.123.123> +554 5.0.0 : Sender address rejected: match bad.domain >>> mail foo@friend.bad.domain OK >>> # @@ -197,8 +197,8 @@ OK ./smtpd_check: warning: support for restriction "reject_maps_rbl" will be removed from Postfix; use "reject_rbl_client domain-name" instead OK >>> client foo 127.0.0.2 -./smtpd_check: : reject: CONNECT from foo[127.0.0.2]: 554 Service unavailable; Client host [127.0.0.2] blocked using relays.mail-abuse.org; from= proto=SMTP helo=<123.123.123.123> -554 Service unavailable; Client host [127.0.0.2] blocked using relays.mail-abuse.org +./smtpd_check: : reject: CONNECT from foo[127.0.0.2]: 554 5.7.1 Service unavailable; Client host [127.0.0.2] blocked using relays.mail-abuse.org; from= proto=SMTP helo=<123.123.123.123> +554 5.7.1 Service unavailable; Client host [127.0.0.2] blocked using relays.mail-abuse.org >>> # >>> # Hybrids >>> # @@ -207,8 +207,8 @@ OK >>> client foo 131.155.210.17 OK >>> rcpt foo@watson.ibm.com -./smtpd_check: : reject: RCPT from foo[131.155.210.17]: 554 : Recipient address rejected: Relay access denied; from= to= proto=SMTP helo=<123.123.123.123> -554 : Recipient address rejected: Relay access denied +./smtpd_check: : reject: RCPT from foo[131.155.210.17]: 554 5.7.1 : Recipient address rejected: Relay access denied; from= to= proto=SMTP helo=<123.123.123.123> +554 5.7.1 : Recipient address rejected: Relay access denied >>> recipient_restrictions check_client_access,hash:./smtpd_check_access,check_relay_domains OK >>> client foo 131.155.210.17 @@ -220,11 +220,11 @@ OK >>> recipient_restrictions check_helo_access,hash:./smtpd_check_access,check_relay_domains OK >>> helo bad.domain -./smtpd_check: : reject: HELO from foo[131.155.210.17]: 554 : Helo command rejected: match bad.domain; from= proto=SMTP helo= -554 : Helo command rejected: match bad.domain +./smtpd_check: : reject: HELO from foo[131.155.210.17]: 554 5.0.0 : Helo command rejected: match bad.domain; from= proto=SMTP helo= +554 5.0.0 : Helo command rejected: match bad.domain >>> rcpt foo@porcupine.org -./smtpd_check: : reject: RCPT from foo[131.155.210.17]: 554 : Helo command rejected: match bad.domain; from= to= proto=SMTP helo= -554 : Helo command rejected: match bad.domain +./smtpd_check: : reject: RCPT from foo[131.155.210.17]: 554 5.0.0 : Helo command rejected: match bad.domain; from= to= proto=SMTP helo= +554 5.0.0 : Helo command rejected: match bad.domain >>> helo 131.155.210.17 OK >>> rcpt foo@porcupine.org @@ -232,11 +232,11 @@ OK >>> recipient_restrictions check_sender_access,hash:./smtpd_check_access,check_relay_domains OK >>> mail foo@bad.domain -./smtpd_check: : reject: MAIL from foo[131.155.210.17]: 554 : Sender address rejected: match bad.domain; from= proto=SMTP helo=<131.155.210.17> -554 : Sender address rejected: match bad.domain +./smtpd_check: : reject: MAIL from foo[131.155.210.17]: 554 5.0.0 : Sender address rejected: match bad.domain; from= proto=SMTP helo=<131.155.210.17> +554 5.0.0 : Sender address rejected: match bad.domain >>> rcpt foo@porcupine.org -./smtpd_check: : reject: RCPT from foo[131.155.210.17]: 554 : Sender address rejected: match bad.domain; from= to= proto=SMTP helo=<131.155.210.17> -554 : Sender address rejected: match bad.domain +./smtpd_check: : reject: RCPT from foo[131.155.210.17]: 554 5.0.0 : Sender address rejected: match bad.domain; from= to= proto=SMTP helo=<131.155.210.17> +554 5.0.0 : Sender address rejected: match bad.domain >>> mail foo@friend.bad.domain OK >>> rcpt foo@porcupine.org @@ -266,15 +266,15 @@ OK >>> mail foo@good.domain OK >>> rcpt foo@porcupine.org -./smtpd_check: : reject: RCPT from foo[131.155.210.17]: 554 : Helo command rejected: match bad.domain; from= to= proto=SMTP helo= -554 : Helo command rejected: match bad.domain +./smtpd_check: : reject: RCPT from foo[131.155.210.17]: 554 5.0.0 : Helo command rejected: match bad.domain; from= to= proto=SMTP helo= +554 5.0.0 : Helo command rejected: match bad.domain >>> helo good.domain OK >>> mail foo@bad.domain OK >>> rcpt foo@porcupine.org -./smtpd_check: : reject: RCPT from foo[131.155.210.17]: 554 : Sender address rejected: match bad.domain; from= to= proto=SMTP helo= -554 : Sender address rejected: match bad.domain +./smtpd_check: : reject: RCPT from foo[131.155.210.17]: 554 5.0.0 : Sender address rejected: match bad.domain; from= to= proto=SMTP helo= +554 5.0.0 : Sender address rejected: match bad.domain >>> # >>> # FQDN restrictions >>> # @@ -289,28 +289,28 @@ OK >>> helo foo.bar OK >>> helo foo -./smtpd_check: : reject: HELO from foo[131.155.210.17]: 504 : Helo command rejected: need fully-qualified hostname; from= proto=SMTP helo= -504 : Helo command rejected: need fully-qualified hostname +./smtpd_check: : reject: HELO from foo[131.155.210.17]: 504 5.5.2 : Helo command rejected: need fully-qualified hostname; from= proto=SMTP helo= +504 5.5.2 : Helo command rejected: need fully-qualified hostname >>> mail foo@foo.bar. OK >>> mail foo@foo.bar OK >>> mail foo@foo -./smtpd_check: : reject: MAIL from foo[131.155.210.17]: 504 : Sender address rejected: need fully-qualified address; from= proto=SMTP helo= -504 : Sender address rejected: need fully-qualified address +./smtpd_check: : reject: MAIL from foo[131.155.210.17]: 504 5.5.2 : Sender address rejected: need fully-qualified address; from= proto=SMTP helo= +504 5.5.2 : Sender address rejected: need fully-qualified address >>> mail foo -./smtpd_check: : reject: MAIL from foo[131.155.210.17]: 504 : Sender address rejected: need fully-qualified address; from= proto=SMTP helo= -504 : Sender address rejected: need fully-qualified address +./smtpd_check: : reject: MAIL from foo[131.155.210.17]: 504 5.5.2 : Sender address rejected: need fully-qualified address; from= proto=SMTP helo= +504 5.5.2 : Sender address rejected: need fully-qualified address >>> rcpt foo@foo.bar. OK >>> rcpt foo@foo.bar OK >>> rcpt foo@foo -./smtpd_check: : reject: RCPT from foo[131.155.210.17]: 504 : Recipient address rejected: need fully-qualified address; from= to= proto=SMTP helo= -504 : Recipient address rejected: need fully-qualified address +./smtpd_check: : reject: RCPT from foo[131.155.210.17]: 504 5.5.2 : Recipient address rejected: need fully-qualified address; from= to= proto=SMTP helo= +504 5.5.2 : Recipient address rejected: need fully-qualified address >>> rcpt foo -./smtpd_check: : reject: RCPT from foo[131.155.210.17]: 504 : Recipient address rejected: need fully-qualified address; from= to= proto=SMTP helo= -504 : Recipient address rejected: need fully-qualified address +./smtpd_check: : reject: RCPT from foo[131.155.210.17]: 504 5.5.2 : Recipient address rejected: need fully-qualified address; from= to= proto=SMTP helo= +504 5.5.2 : Recipient address rejected: need fully-qualified address >>> # >>> # Numerical HELO checks >>> # @@ -321,71 +321,71 @@ OK OK >>> helo [321.255.255.255] ./smtpd_check: warning: restriction permit_naked_ip_address is deprecated. Use permit_mynetworks instead -./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 <[321.255.255.255]>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<[321.255.255.255]> -501 <[321.255.255.255]>: Helo command rejected: invalid ip address +./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 5.5.2 <[321.255.255.255]>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<[321.255.255.255]> +501 5.5.2 <[321.255.255.255]>: Helo command rejected: invalid ip address >>> helo [0.255.255.255] ./smtpd_check: warning: restriction permit_naked_ip_address is deprecated. Use permit_mynetworks instead -./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 <[0.255.255.255]>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<[0.255.255.255]> -501 <[0.255.255.255]>: Helo command rejected: invalid ip address +./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 5.5.2 <[0.255.255.255]>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<[0.255.255.255]> +501 5.5.2 <[0.255.255.255]>: Helo command rejected: invalid ip address >>> helo [1.2.3.321] ./smtpd_check: warning: restriction permit_naked_ip_address is deprecated. Use permit_mynetworks instead -./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 <[1.2.3.321]>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<[1.2.3.321]> -501 <[1.2.3.321]>: Helo command rejected: invalid ip address +./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 5.5.2 <[1.2.3.321]>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<[1.2.3.321]> +501 5.5.2 <[1.2.3.321]>: Helo command rejected: invalid ip address >>> helo [1.2.3] ./smtpd_check: warning: restriction permit_naked_ip_address is deprecated. Use permit_mynetworks instead -./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 <[1.2.3]>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<[1.2.3]> -501 <[1.2.3]>: Helo command rejected: invalid ip address +./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 5.5.2 <[1.2.3]>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<[1.2.3]> +501 5.5.2 <[1.2.3]>: Helo command rejected: invalid ip address >>> helo [1.2.3.4.5] ./smtpd_check: warning: restriction permit_naked_ip_address is deprecated. Use permit_mynetworks instead -./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 <[1.2.3.4.5]>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<[1.2.3.4.5]> -501 <[1.2.3.4.5]>: Helo command rejected: invalid ip address +./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 5.5.2 <[1.2.3.4.5]>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<[1.2.3.4.5]> +501 5.5.2 <[1.2.3.4.5]>: Helo command rejected: invalid ip address >>> helo [1..2.3.4] ./smtpd_check: warning: restriction permit_naked_ip_address is deprecated. Use permit_mynetworks instead -./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 <[1..2.3.4]>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<[1..2.3.4]> -501 <[1..2.3.4]>: Helo command rejected: invalid ip address +./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 5.5.2 <[1..2.3.4]>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<[1..2.3.4]> +501 5.5.2 <[1..2.3.4]>: Helo command rejected: invalid ip address >>> helo [.1.2.3.4] ./smtpd_check: warning: restriction permit_naked_ip_address is deprecated. Use permit_mynetworks instead -./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 <[.1.2.3.4]>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<[.1.2.3.4]> -501 <[.1.2.3.4]>: Helo command rejected: invalid ip address +./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 5.5.2 <[.1.2.3.4]>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<[.1.2.3.4]> +501 5.5.2 <[.1.2.3.4]>: Helo command rejected: invalid ip address >>> helo [1.2.3.4.5.] ./smtpd_check: warning: restriction permit_naked_ip_address is deprecated. Use permit_mynetworks instead -./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 <[1.2.3.4.5.]>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<[1.2.3.4.5.]> -501 <[1.2.3.4.5.]>: Helo command rejected: invalid ip address +./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 5.5.2 <[1.2.3.4.5.]>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<[1.2.3.4.5.]> +501 5.5.2 <[1.2.3.4.5.]>: Helo command rejected: invalid ip address >>> helo 1.2.3.4 ./smtpd_check: warning: restriction permit_naked_ip_address is deprecated. Use permit_mynetworks instead OK >>> helo 321.255.255.255 ./smtpd_check: warning: restriction permit_naked_ip_address is deprecated. Use permit_mynetworks instead -./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 <321.255.255.255>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<321.255.255.255> -501 <321.255.255.255>: Helo command rejected: invalid ip address +./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 5.5.2 <321.255.255.255>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<321.255.255.255> +501 5.5.2 <321.255.255.255>: Helo command rejected: invalid ip address >>> helo 0.255.255.255 ./smtpd_check: warning: restriction permit_naked_ip_address is deprecated. Use permit_mynetworks instead -./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 <0.255.255.255>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<0.255.255.255> -501 <0.255.255.255>: Helo command rejected: invalid ip address +./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 5.5.2 <0.255.255.255>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<0.255.255.255> +501 5.5.2 <0.255.255.255>: Helo command rejected: invalid ip address >>> helo 1.2.3.321 ./smtpd_check: warning: restriction permit_naked_ip_address is deprecated. Use permit_mynetworks instead -./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 <1.2.3.321>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<1.2.3.321> -501 <1.2.3.321>: Helo command rejected: invalid ip address +./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 5.5.2 <1.2.3.321>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<1.2.3.321> +501 5.5.2 <1.2.3.321>: Helo command rejected: invalid ip address >>> helo 1.2.3 ./smtpd_check: warning: restriction permit_naked_ip_address is deprecated. Use permit_mynetworks instead -./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 <1.2.3>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<1.2.3> -501 <1.2.3>: Helo command rejected: invalid ip address +./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 5.5.2 <1.2.3>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<1.2.3> +501 5.5.2 <1.2.3>: Helo command rejected: invalid ip address >>> helo 1.2.3.4.5 ./smtpd_check: warning: restriction permit_naked_ip_address is deprecated. Use permit_mynetworks instead -./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 <1.2.3.4.5>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<1.2.3.4.5> -501 <1.2.3.4.5>: Helo command rejected: invalid ip address +./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 5.5.2 <1.2.3.4.5>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<1.2.3.4.5> +501 5.5.2 <1.2.3.4.5>: Helo command rejected: invalid ip address >>> helo 1..2.3.4 ./smtpd_check: warning: restriction permit_naked_ip_address is deprecated. Use permit_mynetworks instead -./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 <1..2.3.4>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<1..2.3.4> -501 <1..2.3.4>: Helo command rejected: invalid ip address +./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 5.5.2 <1..2.3.4>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<1..2.3.4> +501 5.5.2 <1..2.3.4>: Helo command rejected: invalid ip address >>> helo .1.2.3.4 ./smtpd_check: warning: restriction permit_naked_ip_address is deprecated. Use permit_mynetworks instead -./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 <.1.2.3.4>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<.1.2.3.4> -501 <.1.2.3.4>: Helo command rejected: invalid ip address +./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 5.5.2 <.1.2.3.4>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<.1.2.3.4> +501 5.5.2 <.1.2.3.4>: Helo command rejected: invalid ip address >>> helo 1.2.3.4.5. ./smtpd_check: warning: restriction permit_naked_ip_address is deprecated. Use permit_mynetworks instead -./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 <1.2.3.4.5.>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<1.2.3.4.5.> -501 <1.2.3.4.5.>: Helo command rejected: invalid ip address +./smtpd_check: : reject: HELO from foo[131.155.210.17]: 501 5.5.2 <1.2.3.4.5.>: Helo command rejected: invalid ip address; from= proto=SMTP helo=<1.2.3.4.5.> +501 5.5.2 <1.2.3.4.5.>: Helo command rejected: invalid ip address >>> # >>> # The defer restriction >>> # @@ -394,5 +394,5 @@ OK >>> helo_restrictions defer OK >>> helo foobar -./smtpd_check: : reject: HELO from foo[131.155.210.17]: 444 : Helo command rejected: Try again later; from= proto=SMTP helo= -444 : Helo command rejected: Try again later +./smtpd_check: : reject: HELO from foo[131.155.210.17]: 444 4.3.2 : Helo command rejected: Try again later; from= proto=SMTP helo= +444 4.3.2 : Helo command rejected: Try again later diff --git a/postfix/src/smtpd/smtpd_check.ref2 b/postfix/src/smtpd/smtpd_check.ref2 index 8b178fb40..71c6274ed 100644 --- a/postfix/src/smtpd/smtpd_check.ref2 +++ b/postfix/src/smtpd/smtpd_check.ref2 @@ -17,23 +17,23 @@ OK >>> client_restrictions permit_mynetworks,reject_unknown_client,check_client_access,hash:./smtpd_check_access OK >>> client unknown 131.155.210.17 -./smtpd_check: : reject: CONNECT from unknown[131.155.210.17]: 450 Client host rejected: cannot find your hostname, [131.155.210.17]; proto=SMTP -450 Client host rejected: cannot find your hostname, [131.155.210.17] +./smtpd_check: : reject: CONNECT from unknown[131.155.210.17]: 450 4.7.1 Client host rejected: cannot find your hostname, [131.155.210.17]; proto=SMTP +450 4.7.1 Client host rejected: cannot find your hostname, [131.155.210.17] >>> client unknown 168.100.189.13 OK >>> client random.bad.domain 123.123.123.123 -./smtpd_check: : reject: CONNECT from random.bad.domain[123.123.123.123]: 554 : Client host rejected: match bad.domain; proto=SMTP -554 : Client host rejected: match bad.domain +./smtpd_check: : reject: CONNECT from random.bad.domain[123.123.123.123]: 554 5.0.0 : Client host rejected: match bad.domain; proto=SMTP +554 5.0.0 : Client host rejected: match bad.domain >>> client friend.bad.domain 123.123.123.123 OK >>> client bad.domain 123.123.123.123 -./smtpd_check: : reject: CONNECT from bad.domain[123.123.123.123]: 554 : Client host rejected: match bad.domain; proto=SMTP -554 : Client host rejected: match bad.domain +./smtpd_check: : reject: CONNECT from bad.domain[123.123.123.123]: 554 5.0.0 : Client host rejected: match bad.domain; proto=SMTP +554 5.0.0 : Client host rejected: match bad.domain >>> client wzv.win.tue.nl 131.155.210.17 OK >>> client aa.win.tue.nl 131.155.210.18 -./smtpd_check: : reject: CONNECT from aa.win.tue.nl[131.155.210.18]: 554 : Client host rejected: match 131.155.210; proto=SMTP -554 : Client host rejected: match 131.155.210 +./smtpd_check: : reject: CONNECT from aa.win.tue.nl[131.155.210.18]: 554 5.0.0 : Client host rejected: match 131.155.210; proto=SMTP +554 5.0.0 : Client host rejected: match 131.155.210 >>> client_restrictions permit_mynetworks OK >>> # @@ -44,24 +44,24 @@ OK >>> client unknown 131.155.210.17 OK >>> helo foo. -./smtpd_check: : reject: HELO from unknown[131.155.210.17]: 450 Client host rejected: cannot find your hostname, [131.155.210.17]; proto=SMTP helo= -450 Client host rejected: cannot find your hostname, [131.155.210.17] +./smtpd_check: : reject: HELO from unknown[131.155.210.17]: 450 4.7.1 Client host rejected: cannot find your hostname, [131.155.210.17]; proto=SMTP helo= +450 4.7.1 Client host rejected: cannot find your hostname, [131.155.210.17] >>> client foo 123.123.123.123 OK >>> helo foo. -./smtpd_check: : reject: HELO from foo[123.123.123.123]: 450 : Helo command rejected: Host not found; proto=SMTP helo= -450 : Helo command rejected: Host not found +./smtpd_check: : reject: HELO from foo[123.123.123.123]: 450 4.1.0 : Helo command rejected: Host not found; proto=SMTP helo= +450 4.1.0 : Helo command rejected: Host not found >>> helo foo -./smtpd_check: : reject: HELO from foo[123.123.123.123]: 450 : Helo command rejected: Host not found; proto=SMTP helo= -450 : Helo command rejected: Host not found +./smtpd_check: : reject: HELO from foo[123.123.123.123]: 450 4.1.0 : Helo command rejected: Host not found; proto=SMTP helo= +450 4.1.0 : Helo command rejected: Host not found >>> helo spike.porcupine.org -./smtpd_check: : reject: HELO from foo[123.123.123.123]: 554 : Helo command rejected: name server spike.porcupine.org; proto=SMTP helo= -554 : Helo command rejected: name server spike.porcupine.org +./smtpd_check: : reject: HELO from foo[123.123.123.123]: 554 5.7.1 : Helo command rejected: name server spike.porcupine.org; proto=SMTP helo= +554 5.7.1 : Helo command rejected: name server spike.porcupine.org >>> helo_restrictions permit_mynetworks,reject_unknown_client,reject_invalid_hostname,check_helo_access,hash:./smtpd_check_access OK >>> helo random.bad.domain -./smtpd_check: : reject: HELO from foo[123.123.123.123]: 554 : Helo command rejected: match bad.domain; proto=SMTP helo= -554 : Helo command rejected: match bad.domain +./smtpd_check: : reject: HELO from foo[123.123.123.123]: 554 5.0.0 : Helo command rejected: match bad.domain; proto=SMTP helo= +554 5.0.0 : Helo command rejected: match bad.domain >>> helo friend.bad.domain OK >>> # @@ -72,8 +72,8 @@ OK >>> client unknown 131.155.210.17 OK >>> mail foo@watson.ibm.com -./smtpd_check: : reject: MAIL from unknown[131.155.210.17]: 450 Client host rejected: cannot find your hostname, [131.155.210.17]; from= proto=SMTP helo= -450 Client host rejected: cannot find your hostname, [131.155.210.17] +./smtpd_check: : reject: MAIL from unknown[131.155.210.17]: 450 4.7.1 Client host rejected: cannot find your hostname, [131.155.210.17]; from= proto=SMTP helo= +450 4.7.1 Client host rejected: cannot find your hostname, [131.155.210.17] >>> client unknown 168.100.189.13 OK >>> mail foo@watson.ibm.com @@ -87,30 +87,30 @@ OK >>> mail foo@watson.ibm.com OK >>> mail foo@bad.domain -./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 450 : Sender address rejected: Domain not found; from= proto=SMTP helo= -450 : Sender address rejected: Domain not found +./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 450 4.1.8 : Sender address rejected: Domain not found; from= proto=SMTP helo= +450 4.1.8 : Sender address rejected: Domain not found >>> sender_restrictions check_sender_access,hash:./smtpd_check_access OK >>> mail bad-sender@any.domain -./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 : Sender address rejected: match bad-sender@; from= proto=SMTP helo= -554 : Sender address rejected: match bad-sender@ +./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 5.0.0 : Sender address rejected: match bad-sender@; from= proto=SMTP helo= +554 5.0.0 : Sender address rejected: match bad-sender@ >>> mail bad-sender@good.domain OK >>> mail reject@this.address -./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 : Sender address rejected: match reject@this.address; from= proto=SMTP helo= -554 : Sender address rejected: match reject@this.address +./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 5.0.0 : Sender address rejected: match reject@this.address; from= proto=SMTP helo= +554 5.0.0 : Sender address rejected: match reject@this.address >>> mail Reject@this.address -./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 : Sender address rejected: match reject@this.address; from= proto=SMTP helo= -554 : Sender address rejected: match reject@this.address +./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 5.0.0 : Sender address rejected: match reject@this.address; from= proto=SMTP helo= +554 5.0.0 : Sender address rejected: match reject@this.address >>> mail foo@bad.domain -./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 : Sender address rejected: match bad.domain; from= proto=SMTP helo= -554 : Sender address rejected: match bad.domain +./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 5.0.0 : Sender address rejected: match bad.domain; from= proto=SMTP helo= +554 5.0.0 : Sender address rejected: match bad.domain >>> mail foo@Bad.domain -./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 : Sender address rejected: match bad.domain; from= proto=SMTP helo= -554 : Sender address rejected: match bad.domain +./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 5.0.0 : Sender address rejected: match bad.domain; from= proto=SMTP helo= +554 5.0.0 : Sender address rejected: match bad.domain >>> mail foo@random.bad.domain -./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 : Sender address rejected: match bad.domain; from= proto=SMTP helo= -554 : Sender address rejected: match bad.domain +./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 5.0.0 : Sender address rejected: match bad.domain; from= proto=SMTP helo= +554 5.0.0 : Sender address rejected: match bad.domain >>> mail foo@friend.bad.domain OK >>> # @@ -121,8 +121,8 @@ OK >>> client unknown 131.155.210.17 OK >>> rcpt foo@watson.ibm.com -./smtpd_check: : reject: RCPT from unknown[131.155.210.17]: 450 Client host rejected: cannot find your hostname, [131.155.210.17]; from= to= proto=SMTP helo= -450 Client host rejected: cannot find your hostname, [131.155.210.17] +./smtpd_check: : reject: RCPT from unknown[131.155.210.17]: 450 4.7.1 Client host rejected: cannot find your hostname, [131.155.210.17]; from= to= proto=SMTP helo= +450 4.7.1 Client host rejected: cannot find your hostname, [131.155.210.17] >>> client unknown 168.100.189.13 OK >>> rcpt foo@watson.ibm.com @@ -131,8 +131,8 @@ OK OK >>> rcpt foo@watson.ibm.com ./smtpd_check: warning: support for restriction "check_relay_domains" will be removed from Postfix; use "reject_unauth_destination" instead -./smtpd_check: : reject: RCPT from foo[123.123.123.123]: 554 : Recipient address rejected: Relay access denied; from= to= proto=SMTP helo= -554 : Recipient address rejected: Relay access denied +./smtpd_check: : reject: RCPT from foo[123.123.123.123]: 554 5.7.1 : Recipient address rejected: Relay access denied; from= to= proto=SMTP helo= +554 5.7.1 : Recipient address rejected: Relay access denied >>> rcpt foo@porcupine.org OK >>> recipient_restrictions check_relay_domains @@ -146,26 +146,26 @@ OK >>> client foo 123.123.123.123 OK >>> rcpt foo@watson.ibm.com -./smtpd_check: : reject: RCPT from foo[123.123.123.123]: 554 : Recipient address rejected: Relay access denied; from= to= proto=SMTP helo= -554 : Recipient address rejected: Relay access denied +./smtpd_check: : reject: RCPT from foo[123.123.123.123]: 554 5.7.1 : Recipient address rejected: Relay access denied; from= to= proto=SMTP helo= +554 5.7.1 : Recipient address rejected: Relay access denied >>> rcpt foo@porcupine.org OK >>> recipient_restrictions check_recipient_access,hash:./smtpd_check_access OK >>> mail bad-sender@any.domain -./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 : Sender address rejected: match bad-sender@; from= proto=SMTP helo= -554 : Sender address rejected: match bad-sender@ +./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 5.0.0 : Sender address rejected: match bad-sender@; from= proto=SMTP helo= +554 5.0.0 : Sender address rejected: match bad-sender@ >>> mail bad-sender@good.domain OK >>> mail reject@this.address -./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 : Sender address rejected: match reject@this.address; from= proto=SMTP helo= -554 : Sender address rejected: match reject@this.address +./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 5.0.0 : Sender address rejected: match reject@this.address; from= proto=SMTP helo= +554 5.0.0 : Sender address rejected: match reject@this.address >>> mail foo@bad.domain -./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 : Sender address rejected: match bad.domain; from= proto=SMTP helo= -554 : Sender address rejected: match bad.domain +./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 5.0.0 : Sender address rejected: match bad.domain; from= proto=SMTP helo= +554 5.0.0 : Sender address rejected: match bad.domain >>> mail foo@random.bad.domain -./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 : Sender address rejected: match bad.domain; from= proto=SMTP helo= -554 : Sender address rejected: match bad.domain +./smtpd_check: : reject: MAIL from foo[123.123.123.123]: 554 5.0.0 : Sender address rejected: match bad.domain; from= proto=SMTP helo= +554 5.0.0 : Sender address rejected: match bad.domain >>> mail foo@friend.bad.domain OK >>> # @@ -177,8 +177,8 @@ OK ./smtpd_check: warning: support for restriction "reject_maps_rbl" will be removed from Postfix; use "reject_rbl_client domain-name" instead OK >>> client foo 127.0.0.2 -./smtpd_check: : reject: CONNECT from foo[127.0.0.2]: 554 Service unavailable; Client host [127.0.0.2] blocked using relays.mail-abuse.org; from= proto=SMTP helo= -554 Service unavailable; Client host [127.0.0.2] blocked using relays.mail-abuse.org +./smtpd_check: : reject: CONNECT from foo[127.0.0.2]: 554 5.7.1 Service unavailable; Client host [127.0.0.2] blocked using relays.mail-abuse.org; from= proto=SMTP helo= +554 5.7.1 Service unavailable; Client host [127.0.0.2] blocked using relays.mail-abuse.org >>> # >>> # unknown sender/recipient domain >>> # @@ -191,13 +191,13 @@ OK >>> rcpt wietse@porcupine.org OK >>> rcpt wietse@no.recipient.domain -./smtpd_check: : reject: RCPT from foo[127.0.0.2]: 554 : Recipient address rejected: Domain not found; from= to= proto=SMTP helo= -554 : Recipient address rejected: Domain not found +./smtpd_check: : reject: RCPT from foo[127.0.0.2]: 554 5.1.2 : Recipient address rejected: Domain not found; from= to= proto=SMTP helo= +554 5.1.2 : Recipient address rejected: Domain not found >>> mail wietse@no.sender.domain OK >>> rcpt wietse@porcupine.org -./smtpd_check: : reject: RCPT from foo[127.0.0.2]: 554 : Sender address rejected: Domain not found; from= to= proto=SMTP helo= -554 : Sender address rejected: Domain not found +./smtpd_check: : reject: RCPT from foo[127.0.0.2]: 554 5.1.8 : Sender address rejected: Domain not found; from= to= proto=SMTP helo= +554 5.1.8 : Sender address rejected: Domain not found >>> # >>> # {permit_auth,reject_unauth}_destination >>> # @@ -208,15 +208,15 @@ OK >>> recipient_restrictions permit_auth_destination,reject OK >>> rcpt user@foo.org -./smtpd_check: : reject: RCPT from foo[127.0.0.2]: 554 : Recipient address rejected: Access denied; from= to= proto=SMTP helo= -554 : Recipient address rejected: Access denied +./smtpd_check: : reject: RCPT from foo[127.0.0.2]: 554 5.7.1 : Recipient address rejected: Access denied; from= to= proto=SMTP helo= +554 5.7.1 : Recipient address rejected: Access denied >>> rcpt user@foo.com OK >>> recipient_restrictions reject_unauth_destination,permit OK >>> rcpt user@foo.org -./smtpd_check: : reject: RCPT from foo[127.0.0.2]: 554 : Relay access denied; from= to= proto=SMTP helo= -554 : Relay access denied +./smtpd_check: : reject: RCPT from foo[127.0.0.2]: 554 5.7.1 : Relay access denied; from= to= proto=SMTP helo= +554 5.7.1 : Relay access denied >>> rcpt user@foo.com OK >>> # @@ -229,8 +229,8 @@ OK >>> client spike.porcupine.org 160.100.189.2 2 OK >>> client unknown 1.1.1.1 4 -./smtpd_check: : reject: CONNECT from unknown[1.1.1.1]: 450 Client host rejected: cannot find your hostname, [1.1.1.1]; from= proto=SMTP helo= -450 Client host rejected: cannot find your hostname, [1.1.1.1] +./smtpd_check: : reject: CONNECT from unknown[1.1.1.1]: 450 4.7.1 Client host rejected: cannot find your hostname, [1.1.1.1]; from= proto=SMTP helo= +450 4.7.1 Client host rejected: cannot find your hostname, [1.1.1.1] >>> client unknown 1.1.1.1 5 -./smtpd_check: : reject: CONNECT from unknown[1.1.1.1]: 550 Client host rejected: cannot find your hostname, [1.1.1.1]; from= proto=SMTP helo= -550 Client host rejected: cannot find your hostname, [1.1.1.1] +./smtpd_check: : reject: CONNECT from unknown[1.1.1.1]: 550 5.7.1 Client host rejected: cannot find your hostname, [1.1.1.1]; from= proto=SMTP helo= +550 5.7.1 Client host rejected: cannot find your hostname, [1.1.1.1] diff --git a/postfix/src/smtpd/smtpd_check.ref4 b/postfix/src/smtpd/smtpd_check.ref4 index 687827480..c66eb705a 100644 --- a/postfix/src/smtpd/smtpd_check.ref4 +++ b/postfix/src/smtpd/smtpd_check.ref4 @@ -11,8 +11,8 @@ OK >>> sender_restrictions hash:./smtpd_check_access OK >>> mail rejecttext@bad.domain -./smtpd_check: : reject: MAIL from localhost[127.0.0.1]: 554 : Sender address rejected: text; from= proto=SMTP -554 : Sender address rejected: text +./smtpd_check: : reject: MAIL from localhost[127.0.0.1]: 554 5.7.1 : Sender address rejected: text; from= proto=SMTP +554 5.7.1 : Sender address rejected: text >>> mail filter@filter.domain ./smtpd_check: warning: access map hash:./smtpd_check_access entry "filter@filter.domain" has FILTER entry without value OK diff --git a/postfix/src/smtpd/smtpd_exp.ref b/postfix/src/smtpd/smtpd_exp.ref index fcee7f2a3..c04381ba8 100644 --- a/postfix/src/smtpd/smtpd_exp.ref +++ b/postfix/src/smtpd/smtpd_exp.ref @@ -30,8 +30,8 @@ OK >>> client foo 127.0.0.2 OK >>> rcpt rname@rdomain -./smtpd_check: : reject: RCPT from foo[127.0.0.2]: 554 Service unavailable; Client host [127.0.0.2] blocked using relays.mail-abuse.org; from= to= proto=SMTP helo= -554 Service unavailable; Client host [127.0.0.2] blocked using relays.mail-abuse.org +./smtpd_check: : reject: RCPT from foo[127.0.0.2]: 554 5.7.1 Service unavailable; Client host [127.0.0.2] blocked using relays.mail-abuse.org; from= to= proto=SMTP helo= +554 5.7.1 Service unavailable; Client host [127.0.0.2] blocked using relays.mail-abuse.org >>> # >>> recipient_restrictions reject_rbl_client,relays.mail-abuse.org OK @@ -42,15 +42,15 @@ OK >>> client foo 127.0.0.2 OK >>> rcpt rname@rdomain -./smtpd_check: : reject: RCPT from foo[127.0.0.2]: 554 Service unavailable; Client host [127.0.0.2] blocked using relays.mail-abuse.org; from= to= proto=SMTP helo= -554 Service unavailable; Client host [127.0.0.2] blocked using relays.mail-abuse.org +./smtpd_check: : reject: RCPT from foo[127.0.0.2]: 554 5.7.1 Service unavailable; Client host [127.0.0.2] blocked using relays.mail-abuse.org; from= to= proto=SMTP helo= +554 5.7.1 Service unavailable; Client host [127.0.0.2] blocked using relays.mail-abuse.org >>> recipient_restrictions reject_rbl_client,relays.mail-abuse.org=127.0.0.2 OK >>> client foo 127.0.0.2 OK >>> rcpt rname@rdomain -./smtpd_check: : reject: RCPT from foo[127.0.0.2]: 554 Service unavailable; Client host [127.0.0.2] blocked using relays.mail-abuse.org=127.0.0.2; from= to= proto=SMTP helo= -554 Service unavailable; Client host [127.0.0.2] blocked using relays.mail-abuse.org=127.0.0.2 +./smtpd_check: : reject: RCPT from foo[127.0.0.2]: 554 5.7.1 Service unavailable; Client host [127.0.0.2] blocked using relays.mail-abuse.org=127.0.0.2; from= to= proto=SMTP helo= +554 5.7.1 Service unavailable; Client host [127.0.0.2] blocked using relays.mail-abuse.org=127.0.0.2 >>> client foo 127.0.0.1 OK >>> rcpt rname@rdomain @@ -65,8 +65,8 @@ OK >>> mail sname@example.tld OK >>> rcpt rname@rdomain -./smtpd_check: : reject: RCPT from spike.porcupine.org[168.100.189.2]: 554 client=spike.porcupine.org[168.100.189.2] client_address=168.100.189.2 client_name=spike.porcupine.org helo_name=foobar sender=sname@example.tld sender_name=sname sender_domain=example.tld recipient=rname@rdomain recipient_name=rname recipient_domain=rdomain rbl_code=554 rbl_domain=dsn.rfc-ignorant.org rbl_txt=Not supporting null originator (DSN) rbl_what=sname@example.tld rbl_class=Sender address; from= to= proto=SMTP helo= -554 client=spike.porcupine.org[168.100.189.2] client_address=168.100.189.2 client_name=spike.porcupine.org helo_name=foobar sender=sname@example.tld sender_name=sname sender_domain=example.tld recipient=rname@rdomain recipient_name=rname recipient_domain=rdomain rbl_code=554 rbl_domain=dsn.rfc-ignorant.org rbl_txt=Not supporting null originator (DSN) rbl_what=sname@example.tld rbl_class=Sender address +./smtpd_check: : reject: RCPT from spike.porcupine.org[168.100.189.2]: 554 5.7.1 client=spike.porcupine.org[168.100.189.2] client_address=168.100.189.2 client_name=spike.porcupine.org helo_name=foobar sender=sname@example.tld sender_name=sname sender_domain=example.tld recipient=rname@rdomain recipient_name=rname recipient_domain=rdomain rbl_code=554 rbl_domain=dsn.rfc-ignorant.org rbl_txt=Not supporting null originator (DSN) rbl_what=sname@example.tld rbl_class=Sender address; from= to= proto=SMTP helo= +554 5.7.1 client=spike.porcupine.org[168.100.189.2] client_address=168.100.189.2 client_name=spike.porcupine.org helo_name=foobar sender=sname@example.tld sender_name=sname sender_domain=example.tld recipient=rname@rdomain recipient_name=rname recipient_domain=rdomain rbl_code=554 rbl_domain=dsn.rfc-ignorant.org rbl_txt=Not supporting null originator (DSN) rbl_what=sname@example.tld rbl_class=Sender address >>> mail sname@sdomain OK >>> rcpt rname@rdomain @@ -81,8 +81,8 @@ OK >>> mail sname@sdomain OK >>> rcpt rname@rdomain -./smtpd_check: : reject: RCPT from example.tld[1.2.3.4]: 554 client=example.tld[1.2.3.4] client_address=1.2.3.4 client_name=example.tld helo_name=foobar sender=sname@sdomain sender_name=sname sender_domain=sdomain recipient=rname@rdomain recipient_name=rname recipient_domain=rdomain rbl_code=554 rbl_domain=dsn.rfc-ignorant.org rbl_txt=Not supporting null originator (DSN) rbl_what=example.tld rbl_class=Client host; from= to= proto=SMTP helo= -554 client=example.tld[1.2.3.4] client_address=1.2.3.4 client_name=example.tld helo_name=foobar sender=sname@sdomain sender_name=sname sender_domain=sdomain recipient=rname@rdomain recipient_name=rname recipient_domain=rdomain rbl_code=554 rbl_domain=dsn.rfc-ignorant.org rbl_txt=Not supporting null originator (DSN) rbl_what=example.tld rbl_class=Client host +./smtpd_check: : reject: RCPT from example.tld[1.2.3.4]: 554 5.7.1 client=example.tld[1.2.3.4] client_address=1.2.3.4 client_name=example.tld helo_name=foobar sender=sname@sdomain sender_name=sname sender_domain=sdomain recipient=rname@rdomain recipient_name=rname recipient_domain=rdomain rbl_code=554 rbl_domain=dsn.rfc-ignorant.org rbl_txt=Not supporting null originator (DSN) rbl_what=example.tld rbl_class=Client host; from= to= proto=SMTP helo= +554 5.7.1 client=example.tld[1.2.3.4] client_address=1.2.3.4 client_name=example.tld helo_name=foobar sender=sname@sdomain sender_name=sname sender_domain=sdomain recipient=rname@rdomain recipient_name=rname recipient_domain=rdomain rbl_code=554 rbl_domain=dsn.rfc-ignorant.org rbl_txt=Not supporting null originator (DSN) rbl_what=example.tld rbl_class=Client host >>> # >>> # RHSBL recipient domain name >>> # @@ -95,8 +95,8 @@ OK >>> rcpt rname@rdomain OK >>> rcpt rname@example.tld -./smtpd_check: : reject: RCPT from spike.porcupine.org[168.100.189.2]: 554 client=spike.porcupine.org[168.100.189.2] client_address=168.100.189.2 client_name=spike.porcupine.org helo_name=foobar sender=sname@sdomain sender_name=sname sender_domain=sdomain recipient=rname@example.tld recipient_name=rname recipient_domain=example.tld rbl_code=554 rbl_domain=dsn.rfc-ignorant.org rbl_txt=Not supporting null originator (DSN) rbl_what=rname@example.tld rbl_class=Recipient address; from= to= proto=SMTP helo= -554 client=spike.porcupine.org[168.100.189.2] client_address=168.100.189.2 client_name=spike.porcupine.org helo_name=foobar sender=sname@sdomain sender_name=sname sender_domain=sdomain recipient=rname@example.tld recipient_name=rname recipient_domain=example.tld rbl_code=554 rbl_domain=dsn.rfc-ignorant.org rbl_txt=Not supporting null originator (DSN) rbl_what=rname@example.tld rbl_class=Recipient address +./smtpd_check: : reject: RCPT from spike.porcupine.org[168.100.189.2]: 554 5.7.1 client=spike.porcupine.org[168.100.189.2] client_address=168.100.189.2 client_name=spike.porcupine.org helo_name=foobar sender=sname@sdomain sender_name=sname sender_domain=sdomain recipient=rname@example.tld recipient_name=rname recipient_domain=example.tld rbl_code=554 rbl_domain=dsn.rfc-ignorant.org rbl_txt=Not supporting null originator (DSN) rbl_what=rname@example.tld rbl_class=Recipient address; from= to= proto=SMTP helo= +554 5.7.1 client=spike.porcupine.org[168.100.189.2] client_address=168.100.189.2 client_name=spike.porcupine.org helo_name=foobar sender=sname@sdomain sender_name=sname sender_domain=sdomain recipient=rname@example.tld recipient_name=rname recipient_domain=example.tld rbl_code=554 rbl_domain=dsn.rfc-ignorant.org rbl_txt=Not supporting null originator (DSN) rbl_what=rname@example.tld rbl_class=Recipient address >>> # >>> # RHSBL helo domain name >>> # @@ -107,8 +107,8 @@ OK >>> mail sname@sdomain OK >>> rcpt rname@rdomain -./smtpd_check: : reject: RCPT from spike.porcupine.org[168.100.189.2]: 554 Service unavailable; Helo command [example.tld] blocked using abuse.rfc-ignorant.org; Not supporting abuse@domain; from= to= proto=SMTP helo= -554 Service unavailable; Helo command [example.tld] blocked using abuse.rfc-ignorant.org; Not supporting abuse@domain +./smtpd_check: : reject: RCPT from spike.porcupine.org[168.100.189.2]: 554 5.7.1 Service unavailable; Helo command [example.tld] blocked using abuse.rfc-ignorant.org; Not supporting abuse@domain; from= to= proto=SMTP helo= +554 5.7.1 Service unavailable; Helo command [example.tld] blocked using abuse.rfc-ignorant.org; Not supporting abuse@domain >>> # >>> # Check MX access >>> # @@ -133,19 +133,19 @@ OK >>> rcpt foo@verisign.com OK >>> rcpt foo@1.2.3.porcupine.org -./smtpd_check: : reject: RCPT from spike.porcupine.org[168.100.189.2]: 554 : Recipient address rejected: mail server 10.10.10.10; from= to= proto=SMTP helo= -554 : Recipient address rejected: mail server 10.10.10.10 +./smtpd_check: : reject: RCPT from spike.porcupine.org[168.100.189.2]: 554 5.7.1 : Recipient address rejected: mail server 10.10.10.10; from= to= proto=SMTP helo= +554 5.7.1 : Recipient address rejected: mail server 10.10.10.10 >>> # >>> # Check NS access >>> # >>> helo_restrictions check_helo_ns_access,hash:smtpd_check_access OK >>> helo email-publisher.com -./smtpd_check: : reject: HELO from spike.porcupine.org[168.100.189.2]: 554 : Helo command rejected: Access denied; from= proto=SMTP helo= -554 : Helo command rejected: Access denied +./smtpd_check: : reject: HELO from spike.porcupine.org[168.100.189.2]: 554 5.7.1 : Helo command rejected: Access denied; from= proto=SMTP helo= +554 5.7.1 : Helo command rejected: Access denied >>> helo ns1.topica.com -./smtpd_check: : reject: HELO from spike.porcupine.org[168.100.189.2]: 554 : Helo command rejected: Access denied; from= proto=SMTP helo= -554 : Helo command rejected: Access denied +./smtpd_check: : reject: HELO from spike.porcupine.org[168.100.189.2]: 554 5.7.1 : Helo command rejected: Access denied; from= proto=SMTP helo= +554 5.7.1 : Helo command rejected: Access denied >>> #helo verisign-wildcard.com >>> helo example.tld ./smtpd_check: warning: Unable to look up NS host for example.tld: Host not found @@ -153,21 +153,21 @@ OK >>> sender_restrictions check_sender_ns_access,hash:smtpd_check_access OK >>> mail foo@email-publisher.com -./smtpd_check: : reject: MAIL from spike.porcupine.org[168.100.189.2]: 554 : Sender address rejected: Access denied; from= proto=SMTP helo= -554 : Sender address rejected: Access denied +./smtpd_check: : reject: MAIL from spike.porcupine.org[168.100.189.2]: 554 5.7.1 : Sender address rejected: Access denied; from= proto=SMTP helo= +554 5.7.1 : Sender address rejected: Access denied >>> mail foo@ns1.topica.com -./smtpd_check: : reject: MAIL from spike.porcupine.org[168.100.189.2]: 554 : Sender address rejected: Access denied; from= proto=SMTP helo= -554 : Sender address rejected: Access denied +./smtpd_check: : reject: MAIL from spike.porcupine.org[168.100.189.2]: 554 5.7.1 : Sender address rejected: Access denied; from= proto=SMTP helo= +554 5.7.1 : Sender address rejected: Access denied >>> #mail foo@verisign-wildcard.com >>> recipient_restrictions check_recipient_ns_access,hash:smtpd_check_access OK >>> rcpt foo@email-publisher.com -./smtpd_check: : reject: RCPT from spike.porcupine.org[168.100.189.2]: 554 : Recipient address rejected: Access denied; from= to= proto=SMTP helo= -554 : Recipient address rejected: Access denied +./smtpd_check: : reject: RCPT from spike.porcupine.org[168.100.189.2]: 554 5.7.1 : Recipient address rejected: Access denied; from= to= proto=SMTP helo= +554 5.7.1 : Recipient address rejected: Access denied >>> rcpt foo@ns1.topica.com -./smtpd_check: : reject: RCPT from spike.porcupine.org[168.100.189.2]: 554 : Recipient address rejected: Access denied; from= to= proto=SMTP helo= -554 : Recipient address rejected: Access denied +./smtpd_check: : reject: RCPT from spike.porcupine.org[168.100.189.2]: 554 5.7.1 : Recipient address rejected: Access denied; from= to= proto=SMTP helo= +554 5.7.1 : Recipient address rejected: Access denied >>> #rcpt foo@verisign-wildcard.com >>> rcpt foo@1.2.3.porcupine.org -./smtpd_check: : reject: RCPT from spike.porcupine.org[168.100.189.2]: 554 : Recipient address rejected: name server spike.porcupine.org; from= to= proto=SMTP helo= -554 : Recipient address rejected: name server spike.porcupine.org +./smtpd_check: : reject: RCPT from spike.porcupine.org[168.100.189.2]: 554 5.7.1 : Recipient address rejected: name server spike.porcupine.org; from= to= proto=SMTP helo= +554 5.7.1 : Recipient address rejected: name server spike.porcupine.org diff --git a/postfix/src/smtpd/smtpd_proxy.c b/postfix/src/smtpd/smtpd_proxy.c index 861f72d29..9ceac0389 100644 --- a/postfix/src/smtpd/smtpd_proxy.c +++ b/postfix/src/smtpd/smtpd_proxy.c @@ -248,6 +248,7 @@ int smtpd_proxy_open(SMTPD_STATE *state, const char *service, XFORWARD_DOMAIN, SMTPD_PROXY_XFORWARD_DOMAIN, 0, 0, }; + CLEANUP_STAT_DETAIL *detail; /* * This buffer persists beyond the end of a proxy session so we can @@ -263,8 +264,10 @@ int smtpd_proxy_open(SMTPD_STATE *state, const char *service, state->error_mask |= MAIL_ERROR_SOFTWARE; state->err |= CLEANUP_STAT_PROXY; msg_warn("connect to proxy service %s: %m", service); + detail = cleanup_stat_detail(CLEANUP_STAT_PROXY); vstring_sprintf(state->proxy_buffer, - "451 Error: queue file write error"); + "%d %s Error: %s", + detail->smtp, detail->dsn, detail->text); return (-1); } state->proxy = vstream_fdopen(fd, O_RDWR); @@ -280,8 +283,10 @@ int smtpd_proxy_open(SMTPD_STATE *state, const char *service, * that the client expects a MAIL FROM or RCPT TO reply. */ if (smtpd_proxy_cmd(state, SMTPD_PROX_WANT_OK, SMTPD_PROXY_CONNECT) != 0) { + detail = cleanup_stat_detail(CLEANUP_STAT_PROXY); vstring_sprintf(state->proxy_buffer, - "451 Error: queue file write error"); + "%d %s Error: %s", + detail->smtp, detail->dsn, detail->text); smtpd_proxy_close(state); return (-1); } @@ -294,8 +299,10 @@ int smtpd_proxy_open(SMTPD_STATE *state, const char *service, * RCPT TO reply. */ if (smtpd_proxy_cmd(state, SMTPD_PROX_WANT_OK, "EHLO %s", ehlo_name) != 0) { + detail = cleanup_stat_detail(CLEANUP_STAT_PROXY); vstring_sprintf(state->proxy_buffer, - "451 Error: queue file write error"); + "%d %s Error: %s", + detail->smtp, detail->dsn, detail->text); smtpd_proxy_close(state); return (-1); } @@ -344,8 +351,10 @@ int smtpd_proxy_open(SMTPD_STATE *state, const char *service, bad = smtpd_xforward_flush(state, buf); vstring_free(buf); if (bad) { + detail = cleanup_stat_detail(CLEANUP_STAT_PROXY); vstring_sprintf(state->proxy_buffer, - "451 Error: queue file write error"); + "%d %s Error: %s", + detail->smtp, detail->dsn, detail->text); smtpd_proxy_close(state); return (-1); } @@ -409,6 +418,7 @@ int smtpd_proxy_cmd(SMTPD_STATE *state, int expect, const char *fmt,...) int last_char; int err = 0; static VSTRING *buffer = 0; + CLEANUP_STAT_DETAIL *detail; /* * Errors first. Be prepared for delayed errors from the DATA phase. @@ -420,8 +430,10 @@ int smtpd_proxy_cmd(SMTPD_STATE *state, int expect, const char *fmt,...) && smtpd_proxy_rdwr_error(state->proxy, err))) { state->error_mask |= MAIL_ERROR_SOFTWARE; state->err |= CLEANUP_STAT_PROXY; + detail = cleanup_stat_detail(CLEANUP_STAT_PROXY); vstring_sprintf(state->proxy_buffer, - "451 Error: queue file write error"); + "%d %s Error: %s", + detail->smtp, detail->dsn, detail->text); return (-1); } diff --git a/postfix/src/smtpd/smtpd_sasl_glue.c b/postfix/src/smtpd/smtpd_sasl_glue.c index 63f3d8183..74ac5e5bf 100644 --- a/postfix/src/smtpd/smtpd_sasl_glue.c +++ b/postfix/src/smtpd/smtpd_sasl_glue.c @@ -387,7 +387,7 @@ char *smtpd_sasl_authenticate(SMTPD_STATE *state, dec_buffer = STR(state->sasl_decoded); if (SASL_DECODE64(init_response, reply_len, dec_buffer, reply_len, &dec_length) != SASL_OK) - return ("501 Authentication failed: malformed initial response"); + return ("501 5.7.0 Authentication failed: malformed initial response"); if (msg_verbose) msg_info("%s: decoded initial response %s", myname, dec_buffer); } else { @@ -439,13 +439,13 @@ char *smtpd_sasl_authenticate(SMTPD_STATE *state, */ smtpd_chat_query(state); if (strcmp(vstring_str(state->buffer), "*") == 0) - return ("501 Authentication aborted"); /* XXX */ + return ("501 5.7.0 Authentication aborted"); /* XXX */ reply_len = VSTRING_LEN(state->buffer); VSTRING_SPACE(state->sasl_decoded, reply_len); if (SASL_DECODE64(vstring_str(state->buffer), reply_len, STR(state->sasl_decoded), reply_len, &dec_length) != SASL_OK) - return ("501 Error: malformed authentication response"); + return ("501 5.7.0 Error: malformed authentication response"); if (msg_verbose) msg_info("%s: decoded response: %.*s", myname, (int) dec_length, STR(state->sasl_decoded)); @@ -465,7 +465,7 @@ char *smtpd_sasl_authenticate(SMTPD_STATE *state, * The authentication protocol was completed. */ if (result != SASL_OK) - return ("535 Error: authentication failed"); + return ("535 5.7.0 Error: authentication failed"); /* * Authentication succeeded. Find out the login name for logging and for diff --git a/postfix/src/smtpd/smtpd_sasl_proto.c b/postfix/src/smtpd/smtpd_sasl_proto.c index 60b2ace13..3e200cdfc 100644 --- a/postfix/src/smtpd/smtpd_sasl_proto.c +++ b/postfix/src/smtpd/smtpd_sasl_proto.c @@ -128,29 +128,29 @@ int smtpd_sasl_auth_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) if (var_helo_required && state->helo_name == 0) { state->error_mask |= MAIL_ERROR_POLICY; - smtpd_chat_reply(state, "503 Error: send HELO/EHLO first"); + smtpd_chat_reply(state, "503 5.5.1 Error: send HELO/EHLO first"); return (-1); } if (SMTPD_STAND_ALONE(state) || !var_smtpd_sasl_enable) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "503 Error: authentication not enabled"); + smtpd_chat_reply(state, "503 5.5.1 Error: authentication not enabled"); return (-1); } #ifdef USE_TLS if (state->tls_auth_only && !state->tls_context) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "538 Encryption required for requested authentication mechanism"); + smtpd_chat_reply(state, "538 5.7.0 Encryption required for requested authentication mechanism"); return (-1); } #endif if (state->sasl_username) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "503 Error: already authenticated"); + smtpd_chat_reply(state, "503 5.5.1 Error: already authenticated"); return (-1); } if (argc < 2 || argc > 3) { state->error_mask |= MAIL_ERROR_PROTOCOL; - smtpd_chat_reply(state, "501 Syntax: AUTH mechanism"); + smtpd_chat_reply(state, "501 5.5.4 Syntax: AUTH mechanism"); return (-1); } @@ -168,7 +168,7 @@ int smtpd_sasl_auth_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv) smtpd_chat_reply(state, "%s", err); return (-1); } - smtpd_chat_reply(state, "235 Authentication successful"); + smtpd_chat_reply(state, "235 2.0.0 Authentication successful"); return (0); } @@ -189,17 +189,17 @@ char *smtpd_sasl_mail_opt(SMTPD_STATE *state, const char *addr) */ if (!var_smtpd_sasl_enable) { state->error_mask |= MAIL_ERROR_PROTOCOL; - return ("503 Error: authentication disabled"); + return ("503 5.5.4 Error: authentication disabled"); } #if 0 if (state->sasl_username == 0) { state->error_mask |= MAIL_ERROR_PROTOCOL; - return ("503 Error: send AUTH command first"); + return ("503 5.5.4 Error: send AUTH command first"); } #endif if (state->sasl_sender != 0) { state->error_mask |= MAIL_ERROR_PROTOCOL; - return ("503 Error: multiple AUTH= options"); + return ("503 5.5.4 Error: multiple AUTH= options"); } if (strcmp(addr, "<>") != 0) { state->sasl_sender = mystrdup(addr); diff --git a/postfix/src/smtpd/smtpd_state.c b/postfix/src/smtpd/smtpd_state.c index d8116b280..6a78d6ec5 100644 --- a/postfix/src/smtpd/smtpd_state.c +++ b/postfix/src/smtpd/smtpd_state.c @@ -108,7 +108,9 @@ void smtpd_state_init(SMTPD_STATE *state, VSTREAM *stream, state->defer_if_permit_client = 0; state->defer_if_permit_helo = 0; state->defer_if_permit_sender = 0; + state->defer_if_reject.dsn = 0; state->defer_if_reject.reason = 0; + state->defer_if_permit.dsn = 0; state->defer_if_permit.reason = 0; state->discard = 0; state->expand_buf = 0; @@ -176,8 +178,12 @@ void smtpd_state_reset(SMTPD_STATE *state) * Buffers that are created on the fly and that may be shared among mail * deliveries within the same SMTP session. */ + if (state->defer_if_permit.dsn) + vstring_free(state->defer_if_permit.dsn); if (state->defer_if_permit.reason) vstring_free(state->defer_if_permit.reason); + if (state->defer_if_reject.dsn) + vstring_free(state->defer_if_reject.dsn); if (state->defer_if_reject.reason) vstring_free(state->defer_if_reject.reason); if (state->expand_buf) diff --git a/postfix/src/smtpstone/Makefile.in b/postfix/src/smtpstone/Makefile.in index e05b1bc02..9f8d9683a 100644 --- a/postfix/src/smtpstone/Makefile.in +++ b/postfix/src/smtpstone/Makefile.in @@ -68,79 +68,80 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -qmqp-sink.o: qmqp-sink.c -qmqp-sink.o: ../../include/sys_defs.h -qmqp-sink.o: ../../include/msg.h -qmqp-sink.o: ../../include/vstring.h -qmqp-sink.o: ../../include/vbuf.h -qmqp-sink.o: ../../include/vstream.h -qmqp-sink.o: ../../include/listen.h -qmqp-sink.o: ../../include/iostuff.h qmqp-sink.o: ../../include/events.h -qmqp-sink.o: ../../include/mymalloc.h +qmqp-sink.o: ../../include/inet_proto.h +qmqp-sink.o: ../../include/iostuff.h +qmqp-sink.o: ../../include/listen.h +qmqp-sink.o: ../../include/msg.h qmqp-sink.o: ../../include/msg_vstream.h +qmqp-sink.o: ../../include/mymalloc.h qmqp-sink.o: ../../include/netstring.h -qmqp-sink.o: ../../include/inet_proto.h qmqp-sink.o: ../../include/qmqp_proto.h -qmqp-source.o: qmqp-source.c -qmqp-source.o: ../../include/sys_defs.h -qmqp-source.o: ../../include/msg.h -qmqp-source.o: ../../include/msg_vstream.h -qmqp-source.o: ../../include/vstream.h -qmqp-source.o: ../../include/vbuf.h -qmqp-source.o: ../../include/vstring.h -qmqp-source.o: ../../include/get_hostname.h -qmqp-source.o: ../../include/split_at.h +qmqp-sink.o: ../../include/sys_defs.h +qmqp-sink.o: ../../include/vbuf.h +qmqp-sink.o: ../../include/vstream.h +qmqp-sink.o: ../../include/vstring.h +qmqp-sink.o: qmqp-sink.c qmqp-source.o: ../../include/connect.h -qmqp-source.o: ../../include/iostuff.h -qmqp-source.o: ../../include/mymalloc.h qmqp-source.o: ../../include/events.h -qmqp-source.o: ../../include/netstring.h -qmqp-source.o: ../../include/sane_connect.h +qmqp-source.o: ../../include/get_hostname.h qmqp-source.o: ../../include/host_port.h -qmqp-source.o: ../../include/myaddrinfo.h qmqp-source.o: ../../include/inet_proto.h +qmqp-source.o: ../../include/iostuff.h qmqp-source.o: ../../include/mail_date.h +qmqp-source.o: ../../include/msg.h +qmqp-source.o: ../../include/msg_vstream.h +qmqp-source.o: ../../include/myaddrinfo.h +qmqp-source.o: ../../include/mymalloc.h +qmqp-source.o: ../../include/netstring.h qmqp-source.o: ../../include/qmqp_proto.h -smtp-sink.o: smtp-sink.c -smtp-sink.o: ../../include/sys_defs.h -smtp-sink.o: ../../include/msg.h -smtp-sink.o: ../../include/vstring.h -smtp-sink.o: ../../include/vbuf.h -smtp-sink.o: ../../include/vstream.h -smtp-sink.o: ../../include/vstring_vstream.h +qmqp-source.o: ../../include/sane_connect.h +qmqp-source.o: ../../include/split_at.h +qmqp-source.o: ../../include/sys_defs.h +qmqp-source.o: ../../include/vbuf.h +qmqp-source.o: ../../include/vstream.h +qmqp-source.o: ../../include/vstring.h +qmqp-source.o: qmqp-source.c +smtp-sink.o: ../../include/events.h smtp-sink.o: ../../include/get_hostname.h -smtp-sink.o: ../../include/listen.h +smtp-sink.o: ../../include/inet_proto.h smtp-sink.o: ../../include/iostuff.h -smtp-sink.o: ../../include/events.h -smtp-sink.o: ../../include/mymalloc.h +smtp-sink.o: ../../include/listen.h +smtp-sink.o: ../../include/msg.h smtp-sink.o: ../../include/msg_vstream.h -smtp-sink.o: ../../include/stringops.h +smtp-sink.o: ../../include/mymalloc.h smtp-sink.o: ../../include/sane_accept.h -smtp-sink.o: ../../include/inet_proto.h smtp-sink.o: ../../include/smtp_stream.h -smtp-source.o: smtp-source.c -smtp-source.o: ../../include/sys_defs.h -smtp-source.o: ../../include/msg.h -smtp-source.o: ../../include/msg_vstream.h -smtp-source.o: ../../include/vstream.h -smtp-source.o: ../../include/vbuf.h -smtp-source.o: ../../include/vstring.h -smtp-source.o: ../../include/vstring_vstream.h -smtp-source.o: ../../include/get_hostname.h -smtp-source.o: ../../include/split_at.h +smtp-sink.o: ../../include/stringops.h +smtp-sink.o: ../../include/sys_defs.h +smtp-sink.o: ../../include/vbuf.h +smtp-sink.o: ../../include/vstream.h +smtp-sink.o: ../../include/vstring.h +smtp-sink.o: ../../include/vstring_vstream.h +smtp-sink.o: smtp-sink.c smtp-source.o: ../../include/connect.h -smtp-source.o: ../../include/iostuff.h -smtp-source.o: ../../include/mymalloc.h smtp-source.o: ../../include/events.h -smtp-source.o: ../../include/sane_connect.h +smtp-source.o: ../../include/get_hostname.h smtp-source.o: ../../include/host_port.h -smtp-source.o: ../../include/myaddrinfo.h smtp-source.o: ../../include/inet_proto.h -smtp-source.o: ../../include/smtp_stream.h +smtp-source.o: ../../include/iostuff.h smtp-source.o: ../../include/mail_date.h +smtp-source.o: ../../include/msg.h +smtp-source.o: ../../include/msg_vstream.h +smtp-source.o: ../../include/myaddrinfo.h +smtp-source.o: ../../include/mymalloc.h +smtp-source.o: ../../include/sane_connect.h +smtp-source.o: ../../include/smtp_stream.h +smtp-source.o: ../../include/split_at.h +smtp-source.o: ../../include/sys_defs.h +smtp-source.o: ../../include/vbuf.h +smtp-source.o: ../../include/vstream.h +smtp-source.o: ../../include/vstring.h +smtp-source.o: ../../include/vstring_vstream.h +smtp-source.o: smtp-source.c diff --git a/postfix/src/smtpstone/smtp-sink.c b/postfix/src/smtpstone/smtp-sink.c index 090a66ff7..f42e453c0 100644 --- a/postfix/src/smtpstone/smtp-sink.c +++ b/postfix/src/smtpstone/smtp-sink.c @@ -38,6 +38,7 @@ /* Do not announce ESMTP support. /* .IP "\fB-f \fIcommand,command,...\fR" /* Reject the specified commands with a hard (5xx) error code. +/* This option implies \fB-p\fR. /* .IP \fB-F\fR /* Disable XFORWARD support. /* .IP "\fB-h\fI hostname\fR" @@ -57,6 +58,7 @@ /* specified commands. /* .IP "\fB-r \fIcommand,command,...\fR" /* Reject the specified commands with a soft (4xx) error code. +/* This option implies \fB-p\fR. /* .IP "\fB-s \fIcommand,command,...\fR" /* Log the named commands to syslogd. /* Examples of commands that can be logged are HELO, EHLO, LHLO, MAIL, @@ -644,6 +646,7 @@ int main(int argc, char **argv) break; case 'f': set_cmds_flags(optarg, FLAG_HARD_ERR); + disable_pipelining = 1; break; case 'F': disable_xforward = 1; @@ -671,6 +674,7 @@ int main(int argc, char **argv) break; case 'r': set_cmds_flags(optarg, FLAG_SOFT_ERR); + disable_pipelining = 1; break; case 's': openlog(basename(argv[0]), LOG_PID, LOG_MAIL); diff --git a/postfix/src/spawn/Makefile.in b/postfix/src/spawn/Makefile.in index a755e3610..e2859cde4 100644 --- a/postfix/src/spawn/Makefile.in +++ b/postfix/src/spawn/Makefile.in @@ -47,23 +47,24 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -spawn.o: spawn.c -spawn.o: ../../include/sys_defs.h -spawn.o: ../../include/msg.h spawn.o: ../../include/argv.h spawn.o: ../../include/dict.h -spawn.o: ../../include/vstream.h -spawn.o: ../../include/vbuf.h +spawn.o: ../../include/mail_conf.h +spawn.o: ../../include/mail_params.h +spawn.o: ../../include/mail_server.h +spawn.o: ../../include/msg.h spawn.o: ../../include/mymalloc.h +spawn.o: ../../include/set_eugid.h spawn.o: ../../include/spawn_command.h spawn.o: ../../include/split_at.h +spawn.o: ../../include/sys_defs.h spawn.o: ../../include/timed_wait.h -spawn.o: ../../include/set_eugid.h -spawn.o: ../../include/mail_params.h -spawn.o: ../../include/mail_server.h -spawn.o: ../../include/mail_conf.h +spawn.o: ../../include/vbuf.h +spawn.o: ../../include/vstream.h +spawn.o: spawn.c diff --git a/postfix/src/tls/Makefile.in b/postfix/src/tls/Makefile.in index d524015fa..113b30504 100644 --- a/postfix/src/tls/Makefile.in +++ b/postfix/src/tls/Makefile.in @@ -75,159 +75,160 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -tls_bio_ops.o: tls_bio_ops.c -tls_bio_ops.o: ../../include/sys_defs.h -tls_bio_ops.o: ../../include/msg.h tls_bio_ops.o: ../../include/iostuff.h -tls_bio_ops.o: tls.h -tls_bio_ops.o: ../../include/vstream.h +tls_bio_ops.o: ../../include/msg.h +tls_bio_ops.o: ../../include/sys_defs.h tls_bio_ops.o: ../../include/vbuf.h +tls_bio_ops.o: ../../include/vstream.h tls_bio_ops.o: ../../include/vstring.h -tls_certkey.o: tls_certkey.c -tls_certkey.o: ../../include/sys_defs.h +tls_bio_ops.o: tls.h +tls_bio_ops.o: tls_bio_ops.c tls_certkey.o: ../../include/msg.h -tls_certkey.o: tls.h -tls_certkey.o: ../../include/vstream.h +tls_certkey.o: ../../include/sys_defs.h tls_certkey.o: ../../include/vbuf.h +tls_certkey.o: ../../include/vstream.h tls_certkey.o: ../../include/vstring.h -tls_client.o: tls_client.c -tls_client.o: ../../include/sys_defs.h +tls_certkey.o: tls.h +tls_certkey.o: tls_certkey.c +tls_client.o: ../../include/mail_params.h +tls_client.o: ../../include/msg.h tls_client.o: ../../include/mymalloc.h -tls_client.o: ../../include/vstring.h +tls_client.o: ../../include/stringops.h +tls_client.o: ../../include/sys_defs.h tls_client.o: ../../include/vbuf.h tls_client.o: ../../include/vstream.h -tls_client.o: ../../include/stringops.h -tls_client.o: ../../include/msg.h -tls_client.o: ../../include/mail_params.h -tls_client.o: tls_mgr.h +tls_client.o: ../../include/vstring.h tls_client.o: tls.h -tls_dh.o: tls_dh.c -tls_dh.o: ../../include/sys_defs.h +tls_client.o: tls_client.c +tls_client.o: tls_mgr.h tls_dh.o: ../../include/msg.h -tls_dh.o: tls.h -tls_dh.o: ../../include/vstream.h +tls_dh.o: ../../include/sys_defs.h tls_dh.o: ../../include/vbuf.h +tls_dh.o: ../../include/vstream.h tls_dh.o: ../../include/vstring.h -tls_mgr.o: tls_mgr.c -tls_mgr.o: ../../include/sys_defs.h -tls_mgr.o: ../../include/msg.h -tls_mgr.o: ../../include/vstream.h -tls_mgr.o: ../../include/vbuf.h -tls_mgr.o: ../../include/vstring.h +tls_dh.o: tls.h +tls_dh.o: tls_dh.c tls_mgr.o: ../../include/attr.h tls_mgr.o: ../../include/attr_clnt.h +tls_mgr.o: ../../include/iostuff.h tls_mgr.o: ../../include/mail_params.h tls_mgr.o: ../../include/mail_proto.h -tls_mgr.o: ../../include/iostuff.h +tls_mgr.o: ../../include/msg.h +tls_mgr.o: ../../include/sys_defs.h +tls_mgr.o: ../../include/vbuf.h +tls_mgr.o: ../../include/vstream.h +tls_mgr.o: ../../include/vstring.h +tls_mgr.o: tls_mgr.c tls_mgr.o: tls_mgr.h -tls_misc.o: tls_misc.c -tls_misc.o: ../../include/sys_defs.h -tls_misc.o: ../../include/vstream.h -tls_misc.o: ../../include/vbuf.h tls_misc.o: ../../include/msg.h tls_misc.o: ../../include/mymalloc.h +tls_misc.o: ../../include/sys_defs.h +tls_misc.o: ../../include/vbuf.h +tls_misc.o: ../../include/vstream.h tls_misc.o: ../../include/vstring.h tls_misc.o: tls.h -tls_prng_dev.o: tls_prng_dev.c -tls_prng_dev.o: ../../include/sys_defs.h -tls_prng_dev.o: ../../include/msg.h -tls_prng_dev.o: ../../include/mymalloc.h +tls_misc.o: tls_misc.c tls_prng_dev.o: ../../include/connect.h tls_prng_dev.o: ../../include/iostuff.h +tls_prng_dev.o: ../../include/msg.h +tls_prng_dev.o: ../../include/mymalloc.h +tls_prng_dev.o: ../../include/sys_defs.h tls_prng_dev.o: tls_prng.h -tls_prng_egd.o: tls_prng_egd.c -tls_prng_egd.o: ../../include/sys_defs.h -tls_prng_egd.o: ../../include/msg.h -tls_prng_egd.o: ../../include/mymalloc.h +tls_prng_dev.o: tls_prng_dev.c tls_prng_egd.o: ../../include/connect.h tls_prng_egd.o: ../../include/iostuff.h +tls_prng_egd.o: ../../include/msg.h +tls_prng_egd.o: ../../include/mymalloc.h +tls_prng_egd.o: ../../include/sys_defs.h tls_prng_egd.o: tls_prng.h -tls_prng_exch.o: tls_prng_exch.c -tls_prng_exch.o: ../../include/sys_defs.h -tls_prng_exch.o: ../../include/msg.h -tls_prng_exch.o: ../../include/mymalloc.h +tls_prng_egd.o: tls_prng_egd.c tls_prng_exch.o: ../../include/iostuff.h +tls_prng_exch.o: ../../include/msg.h tls_prng_exch.o: ../../include/myflock.h +tls_prng_exch.o: ../../include/mymalloc.h +tls_prng_exch.o: ../../include/sys_defs.h tls_prng_exch.o: tls_prng.h -tls_prng_file.o: tls_prng_file.c -tls_prng_file.o: ../../include/sys_defs.h -tls_prng_file.o: ../../include/msg.h -tls_prng_file.o: ../../include/mymalloc.h +tls_prng_exch.o: tls_prng_exch.c tls_prng_file.o: ../../include/connect.h tls_prng_file.o: ../../include/iostuff.h +tls_prng_file.o: ../../include/msg.h +tls_prng_file.o: ../../include/mymalloc.h +tls_prng_file.o: ../../include/sys_defs.h tls_prng_file.o: tls_prng.h -tls_rsa.o: tls_rsa.c +tls_prng_file.o: tls_prng_file.c tls_rsa.o: ../../include/sys_defs.h -tls_rsa.o: tls.h -tls_rsa.o: ../../include/vstream.h tls_rsa.o: ../../include/vbuf.h +tls_rsa.o: ../../include/vstream.h tls_rsa.o: ../../include/vstring.h -tls_scache.o: tls_scache.c -tls_scache.o: ../../include/sys_defs.h -tls_scache.o: ../../include/msg.h -tls_scache.o: ../../include/dict.h -tls_scache.o: ../../include/vstream.h -tls_scache.o: ../../include/vbuf.h +tls_rsa.o: tls.h +tls_rsa.o: tls_rsa.c tls_scache.o: ../../include/argv.h -tls_scache.o: ../../include/stringops.h -tls_scache.o: ../../include/vstring.h -tls_scache.o: ../../include/mymalloc.h +tls_scache.o: ../../include/dict.h tls_scache.o: ../../include/hex_code.h +tls_scache.o: ../../include/msg.h tls_scache.o: ../../include/myflock.h +tls_scache.o: ../../include/mymalloc.h +tls_scache.o: ../../include/stringops.h +tls_scache.o: ../../include/sys_defs.h +tls_scache.o: ../../include/vbuf.h +tls_scache.o: ../../include/vstream.h +tls_scache.o: ../../include/vstring.h +tls_scache.o: tls_scache.c tls_scache.o: tls_scache.h -tls_seed.o: tls_seed.c -tls_seed.o: ../../include/sys_defs.h tls_seed.o: ../../include/msg.h -tls_seed.o: ../../include/vstring.h +tls_seed.o: ../../include/sys_defs.h tls_seed.o: ../../include/vbuf.h -tls_seed.o: tls_mgr.h -tls_seed.o: tls.h tls_seed.o: ../../include/vstream.h -tls_server.o: tls_server.c -tls_server.o: ../../include/sys_defs.h -tls_server.o: ../../include/mymalloc.h -tls_server.o: ../../include/vstring.h -tls_server.o: ../../include/vbuf.h -tls_server.o: ../../include/vstream.h -tls_server.o: ../../include/dict.h +tls_seed.o: ../../include/vstring.h +tls_seed.o: tls.h +tls_seed.o: tls_mgr.h +tls_seed.o: tls_seed.c tls_server.o: ../../include/argv.h -tls_server.o: ../../include/stringops.h -tls_server.o: ../../include/msg.h +tls_server.o: ../../include/dict.h tls_server.o: ../../include/hex_code.h tls_server.o: ../../include/mail_params.h -tls_server.o: tls_mgr.h +tls_server.o: ../../include/msg.h +tls_server.o: ../../include/mymalloc.h +tls_server.o: ../../include/stringops.h +tls_server.o: ../../include/sys_defs.h +tls_server.o: ../../include/vbuf.h +tls_server.o: ../../include/vstream.h +tls_server.o: ../../include/vstring.h tls_server.o: tls.h -tls_session.o: tls_session.c -tls_session.o: ../../include/sys_defs.h -tls_session.o: ../../include/vstream.h -tls_session.o: ../../include/vbuf.h +tls_server.o: tls_mgr.h +tls_server.o: tls_server.c tls_session.o: ../../include/msg.h tls_session.o: ../../include/mymalloc.h -tls_session.o: tls.h +tls_session.o: ../../include/sys_defs.h +tls_session.o: ../../include/vbuf.h +tls_session.o: ../../include/vstream.h tls_session.o: ../../include/vstring.h -tls_stream.o: tls_stream.c -tls_stream.o: ../../include/sys_defs.h +tls_session.o: tls.h +tls_session.o: tls_session.c tls_stream.o: ../../include/iostuff.h -tls_stream.o: ../../include/vstream.h -tls_stream.o: ../../include/vbuf.h tls_stream.o: ../../include/msg.h -tls_stream.o: tls.h +tls_stream.o: ../../include/sys_defs.h +tls_stream.o: ../../include/vbuf.h +tls_stream.o: ../../include/vstream.h tls_stream.o: ../../include/vstring.h -tls_temp.o: tls_temp.c +tls_stream.o: tls.h +tls_stream.o: tls_stream.c tls_temp.o: ../../include/sys_defs.h -tls_temp.o: tls.h -tls_temp.o: ../../include/vstream.h tls_temp.o: ../../include/vbuf.h +tls_temp.o: ../../include/vstream.h tls_temp.o: ../../include/vstring.h -tls_verify.o: tls_verify.c -tls_verify.o: ../../include/sys_defs.h +tls_temp.o: tls.h +tls_temp.o: tls_temp.c tls_verify.o: ../../include/msg.h -tls_verify.o: tls.h -tls_verify.o: ../../include/vstream.h +tls_verify.o: ../../include/sys_defs.h tls_verify.o: ../../include/vbuf.h +tls_verify.o: ../../include/vstream.h tls_verify.o: ../../include/vstring.h +tls_verify.o: tls.h +tls_verify.o: tls_verify.c diff --git a/postfix/src/tlsmgr/Makefile.in b/postfix/src/tlsmgr/Makefile.in index ddfd530a6..e3333d3ee 100644 --- a/postfix/src/tlsmgr/Makefile.in +++ b/postfix/src/tlsmgr/Makefile.in @@ -43,36 +43,37 @@ clean: tidy: clean +tests: + depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 -tests: - # do not edit below this line - it is generated by 'make depend' -tlsmgr.o: tlsmgr.c -tlsmgr.o: ../../include/sys_defs.h -tlsmgr.o: ../../include/msg.h +tlsmgr.o: ../../include/argv.h +tlsmgr.o: ../../include/attr.h +tlsmgr.o: ../../include/dict.h tlsmgr.o: ../../include/events.h -tlsmgr.o: ../../include/stringops.h -tlsmgr.o: ../../include/vstring.h -tlsmgr.o: ../../include/vbuf.h -tlsmgr.o: ../../include/mymalloc.h tlsmgr.o: ../../include/iostuff.h -tlsmgr.o: ../../include/vstream.h -tlsmgr.o: ../../include/vstring_vstream.h -tlsmgr.o: ../../include/attr.h tlsmgr.o: ../../include/mail_conf.h tlsmgr.o: ../../include/mail_params.h -tlsmgr.o: ../../include/tls_mgr.h tlsmgr.o: ../../include/mail_proto.h -tlsmgr.o: ../../include/master_proto.h tlsmgr.o: ../../include/mail_server.h +tlsmgr.o: ../../include/master_proto.h +tlsmgr.o: ../../include/msg.h +tlsmgr.o: ../../include/mymalloc.h +tlsmgr.o: ../../include/stringops.h +tlsmgr.o: ../../include/sys_defs.h +tlsmgr.o: ../../include/tls_mgr.h tlsmgr.o: ../../include/tls_prng.h tlsmgr.o: ../../include/tls_scache.h -tlsmgr.o: ../../include/dict.h -tlsmgr.o: ../../include/argv.h +tlsmgr.o: ../../include/vbuf.h +tlsmgr.o: ../../include/vstream.h +tlsmgr.o: ../../include/vstring.h +tlsmgr.o: ../../include/vstring_vstream.h +tlsmgr.o: tlsmgr.c diff --git a/postfix/src/trivial-rewrite/Makefile.in b/postfix/src/trivial-rewrite/Makefile.in index dfe21f6e2..ec1c77061 100644 --- a/postfix/src/trivial-rewrite/Makefile.in +++ b/postfix/src/trivial-rewrite/Makefile.in @@ -53,104 +53,105 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -resolve.o: resolve.c -resolve.o: ../../include/sys_defs.h -resolve.o: ../../include/msg.h -resolve.o: ../../include/vstring.h -resolve.o: ../../include/vbuf.h -resolve.o: ../../include/vstream.h -resolve.o: ../../include/vstring_vstream.h -resolve.o: ../../include/split_at.h -resolve.o: ../../include/valid_hostname.h -resolve.o: ../../include/stringops.h -resolve.o: ../../include/mymalloc.h -resolve.o: ../../include/mail_params.h -resolve.o: ../../include/mail_proto.h -resolve.o: ../../include/iostuff.h +resolve.o: ../../include/argv.h resolve.o: ../../include/attr.h -resolve.o: ../../include/resolve_local.h +resolve.o: ../../include/dict.h +resolve.o: ../../include/domain_list.h +resolve.o: ../../include/iostuff.h +resolve.o: ../../include/mail_addr_find.h resolve.o: ../../include/mail_conf.h +resolve.o: ../../include/mail_params.h +resolve.o: ../../include/mail_proto.h +resolve.o: ../../include/maps.h +resolve.o: ../../include/match_list.h +resolve.o: ../../include/match_ops.h +resolve.o: ../../include/match_parent_style.h +resolve.o: ../../include/msg.h +resolve.o: ../../include/mymalloc.h resolve.o: ../../include/quote_822_local.h resolve.o: ../../include/quote_flags.h -resolve.o: ../../include/tok822.h resolve.o: ../../include/resolve_clnt.h -resolve.o: ../../include/domain_list.h -resolve.o: ../../include/match_list.h -resolve.o: ../../include/match_ops.h +resolve.o: ../../include/resolve_local.h +resolve.o: ../../include/split_at.h resolve.o: ../../include/string_list.h -resolve.o: ../../include/match_parent_style.h -resolve.o: ../../include/maps.h -resolve.o: ../../include/dict.h -resolve.o: ../../include/argv.h -resolve.o: ../../include/mail_addr_find.h +resolve.o: ../../include/stringops.h +resolve.o: ../../include/sys_defs.h +resolve.o: ../../include/tok822.h +resolve.o: ../../include/valid_hostname.h resolve.o: ../../include/valid_mailhost_addr.h -resolve.o: trivial-rewrite.h +resolve.o: ../../include/vbuf.h +resolve.o: ../../include/vstream.h +resolve.o: ../../include/vstring.h +resolve.o: ../../include/vstring_vstream.h +resolve.o: resolve.c resolve.o: transport.h -rewrite.o: rewrite.c -rewrite.o: ../../include/sys_defs.h -rewrite.o: ../../include/msg.h -rewrite.o: ../../include/vstring.h -rewrite.o: ../../include/vbuf.h -rewrite.o: ../../include/vstream.h -rewrite.o: ../../include/vstring_vstream.h -rewrite.o: ../../include/split_at.h +resolve.o: trivial-rewrite.h +rewrite.o: ../../include/attr.h +rewrite.o: ../../include/iostuff.h +rewrite.o: ../../include/mail_conf.h rewrite.o: ../../include/mail_params.h rewrite.o: ../../include/mail_proto.h -rewrite.o: ../../include/iostuff.h -rewrite.o: ../../include/attr.h +rewrite.o: ../../include/msg.h +rewrite.o: ../../include/resolve_clnt.h rewrite.o: ../../include/resolve_local.h +rewrite.o: ../../include/split_at.h +rewrite.o: ../../include/sys_defs.h rewrite.o: ../../include/tok822.h -rewrite.o: ../../include/resolve_clnt.h -rewrite.o: ../../include/mail_conf.h +rewrite.o: ../../include/vbuf.h +rewrite.o: ../../include/vstream.h +rewrite.o: ../../include/vstring.h +rewrite.o: ../../include/vstring_vstream.h +rewrite.o: rewrite.c rewrite.o: trivial-rewrite.h -transport.o: transport.c -transport.o: ../../include/sys_defs.h -transport.o: ../../include/msg.h -transport.o: ../../include/stringops.h -transport.o: ../../include/vstring.h -transport.o: ../../include/vbuf.h -transport.o: ../../include/mymalloc.h -transport.o: ../../include/split_at.h -transport.o: ../../include/dict.h -transport.o: ../../include/vstream.h transport.o: ../../include/argv.h -transport.o: ../../include/strip_addr.h +transport.o: ../../include/attr.h +transport.o: ../../include/dict.h +transport.o: ../../include/iostuff.h transport.o: ../../include/mail_params.h +transport.o: ../../include/mail_proto.h transport.o: ../../include/maps.h -transport.o: ../../include/match_parent_style.h transport.o: ../../include/match_ops.h -transport.o: ../../include/mail_proto.h -transport.o: ../../include/iostuff.h -transport.o: ../../include/attr.h +transport.o: ../../include/match_parent_style.h +transport.o: ../../include/msg.h +transport.o: ../../include/mymalloc.h +transport.o: ../../include/split_at.h +transport.o: ../../include/stringops.h +transport.o: ../../include/strip_addr.h +transport.o: ../../include/sys_defs.h +transport.o: ../../include/vbuf.h +transport.o: ../../include/vstream.h +transport.o: ../../include/vstring.h +transport.o: transport.c transport.o: transport.h -trivial-rewrite.o: trivial-rewrite.c -trivial-rewrite.o: ../../include/sys_defs.h -trivial-rewrite.o: ../../include/msg.h -trivial-rewrite.o: ../../include/vstring.h -trivial-rewrite.o: ../../include/vbuf.h -trivial-rewrite.o: ../../include/vstream.h -trivial-rewrite.o: ../../include/vstring_vstream.h -trivial-rewrite.o: ../../include/split_at.h -trivial-rewrite.o: ../../include/stringops.h -trivial-rewrite.o: ../../include/dict.h trivial-rewrite.o: ../../include/argv.h +trivial-rewrite.o: ../../include/attr.h +trivial-rewrite.o: ../../include/dict.h trivial-rewrite.o: ../../include/events.h -trivial-rewrite.o: ../../include/mail_params.h -trivial-rewrite.o: ../../include/mail_proto.h trivial-rewrite.o: ../../include/iostuff.h -trivial-rewrite.o: ../../include/attr.h -trivial-rewrite.o: ../../include/resolve_local.h +trivial-rewrite.o: ../../include/mail_addr.h trivial-rewrite.o: ../../include/mail_conf.h +trivial-rewrite.o: ../../include/mail_params.h +trivial-rewrite.o: ../../include/mail_proto.h +trivial-rewrite.o: ../../include/mail_server.h +trivial-rewrite.o: ../../include/maps.h +trivial-rewrite.o: ../../include/msg.h trivial-rewrite.o: ../../include/resolve_clnt.h +trivial-rewrite.o: ../../include/resolve_local.h trivial-rewrite.o: ../../include/rewrite_clnt.h +trivial-rewrite.o: ../../include/split_at.h +trivial-rewrite.o: ../../include/stringops.h +trivial-rewrite.o: ../../include/sys_defs.h trivial-rewrite.o: ../../include/tok822.h -trivial-rewrite.o: ../../include/mail_addr.h -trivial-rewrite.o: ../../include/mail_server.h -trivial-rewrite.o: trivial-rewrite.h +trivial-rewrite.o: ../../include/vbuf.h +trivial-rewrite.o: ../../include/vstream.h +trivial-rewrite.o: ../../include/vstring.h +trivial-rewrite.o: ../../include/vstring_vstream.h trivial-rewrite.o: transport.h -trivial-rewrite.o: ../../include/maps.h +trivial-rewrite.o: trivial-rewrite.c +trivial-rewrite.o: trivial-rewrite.h diff --git a/postfix/src/util/Makefile.in b/postfix/src/util/Makefile.in index ea4c68980..34685b848 100644 --- a/postfix/src/util/Makefile.in +++ b/postfix/src/util/Makefile.in @@ -389,14 +389,6 @@ inet_proto: $(LIB) $(CC) $(CFLAGS) -DTEST -o $@ $@.c $(LIB) $(SYSLIBS) mv junk $@.o -depend: $(MAKES) - (sed '1,/^# do not edit/!d' Makefile.in; \ - set -e; for i in [a-z][a-z0-9]*.c; do \ - $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in - @$(EXPORT) make -f Makefile.in Makefile 1>&2 - stream_test: stream_test.c $(LIB) $(CC) $(CFLAGS) -o $@ $@.c $(LIB) $(SYSLIBS) @@ -506,1052 +498,1061 @@ myaddrinfo4_test: myaddrinfo4 myaddrinfo4.ref myaddrinfo4.ref2 diff myaddrinfo4.ref2 myaddrinfo4.tmp rm -f myaddrinfo4.tmp +depend: $(MAKES) + (sed '1,/^# do not edit/!d' Makefile.in; \ + set -e; for i in [a-z][a-z0-9]*.c; do \ + $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + @$(EXPORT) make -f Makefile.in Makefile 1>&2 + # do not edit below this line - it is generated by 'make depend' alldig.o: alldig.c -alldig.o: sys_defs.h alldig.o: stringops.h -alldig.o: vstring.h +alldig.o: sys_defs.h alldig.o: vbuf.h +alldig.o: vstring.h argv.o: argv.c -argv.o: sys_defs.h -argv.o: mymalloc.h -argv.o: msg.h argv.o: argv.h +argv.o: msg.h +argv.o: mymalloc.h +argv.o: sys_defs.h +argv_split.o: argv.h argv_split.o: argv_split.c -argv_split.o: sys_defs.h argv_split.o: mymalloc.h argv_split.o: stringops.h -argv_split.o: vstring.h +argv_split.o: sys_defs.h argv_split.o: vbuf.h -argv_split.o: argv.h +argv_split.o: vstring.h +attr_clnt.o: attr.h attr_clnt.o: attr_clnt.c -attr_clnt.o: sys_defs.h +attr_clnt.o: attr_clnt.h +attr_clnt.o: auto_clnt.h +attr_clnt.o: connect.h +attr_clnt.o: htable.h +attr_clnt.o: iostuff.h attr_clnt.o: msg.h attr_clnt.o: mymalloc.h attr_clnt.o: split_at.h -attr_clnt.o: vstream.h +attr_clnt.o: sys_defs.h attr_clnt.o: vbuf.h -attr_clnt.o: connect.h -attr_clnt.o: iostuff.h -attr_clnt.o: htable.h -attr_clnt.o: attr.h -attr_clnt.o: auto_clnt.h -attr_clnt.o: attr_clnt.h +attr_clnt.o: vstream.h +attr_print0.o: attr.h attr_print0.o: attr_print0.c -attr_print0.o: sys_defs.h +attr_print0.o: base64_code.h +attr_print0.o: htable.h attr_print0.o: msg.h attr_print0.o: mymalloc.h -attr_print0.o: vstream.h +attr_print0.o: sys_defs.h attr_print0.o: vbuf.h -attr_print0.o: htable.h -attr_print0.o: attr.h -attr_print0.o: base64_code.h +attr_print0.o: vstream.h attr_print0.o: vstring.h +attr_print64.o: attr.h attr_print64.o: attr_print64.c -attr_print64.o: sys_defs.h +attr_print64.o: base64_code.h +attr_print64.o: htable.h attr_print64.o: msg.h attr_print64.o: mymalloc.h -attr_print64.o: vstream.h +attr_print64.o: sys_defs.h attr_print64.o: vbuf.h -attr_print64.o: htable.h -attr_print64.o: base64_code.h +attr_print64.o: vstream.h attr_print64.o: vstring.h -attr_print64.o: attr.h +attr_print_plain.o: attr.h attr_print_plain.o: attr_print_plain.c -attr_print_plain.o: sys_defs.h +attr_print_plain.o: base64_code.h +attr_print_plain.o: htable.h attr_print_plain.o: msg.h attr_print_plain.o: mymalloc.h -attr_print_plain.o: vstream.h +attr_print_plain.o: sys_defs.h attr_print_plain.o: vbuf.h -attr_print_plain.o: htable.h -attr_print_plain.o: base64_code.h +attr_print_plain.o: vstream.h attr_print_plain.o: vstring.h -attr_print_plain.o: attr.h +attr_scan0.o: attr.h attr_scan0.o: attr_scan0.c -attr_scan0.o: sys_defs.h +attr_scan0.o: base64_code.h +attr_scan0.o: htable.h attr_scan0.o: msg.h attr_scan0.o: mymalloc.h -attr_scan0.o: vstream.h +attr_scan0.o: sys_defs.h attr_scan0.o: vbuf.h +attr_scan0.o: vstream.h attr_scan0.o: vstring.h attr_scan0.o: vstring_vstream.h -attr_scan0.o: htable.h -attr_scan0.o: base64_code.h -attr_scan0.o: attr.h +attr_scan64.o: attr.h attr_scan64.o: attr_scan64.c -attr_scan64.o: sys_defs.h +attr_scan64.o: base64_code.h +attr_scan64.o: htable.h attr_scan64.o: msg.h attr_scan64.o: mymalloc.h -attr_scan64.o: vstream.h +attr_scan64.o: sys_defs.h attr_scan64.o: vbuf.h +attr_scan64.o: vstream.h attr_scan64.o: vstring.h -attr_scan64.o: htable.h -attr_scan64.o: base64_code.h -attr_scan64.o: attr.h +attr_scan_plain.o: attr.h attr_scan_plain.o: attr_scan_plain.c -attr_scan_plain.o: sys_defs.h +attr_scan_plain.o: base64_code.h +attr_scan_plain.o: htable.h attr_scan_plain.o: msg.h attr_scan_plain.o: mymalloc.h -attr_scan_plain.o: vstream.h +attr_scan_plain.o: sys_defs.h attr_scan_plain.o: vbuf.h +attr_scan_plain.o: vstream.h attr_scan_plain.o: vstring.h -attr_scan_plain.o: htable.h -attr_scan_plain.o: base64_code.h -attr_scan_plain.o: attr.h auto_clnt.o: auto_clnt.c -auto_clnt.o: sys_defs.h +auto_clnt.o: auto_clnt.h +auto_clnt.o: events.h +auto_clnt.o: iostuff.h auto_clnt.o: msg.h auto_clnt.o: mymalloc.h -auto_clnt.o: vstream.h +auto_clnt.o: sys_defs.h auto_clnt.o: vbuf.h -auto_clnt.o: events.h -auto_clnt.o: iostuff.h -auto_clnt.o: auto_clnt.h +auto_clnt.o: vstream.h base64_code.o: base64_code.c -base64_code.o: sys_defs.h +base64_code.o: base64_code.h base64_code.o: msg.h base64_code.o: mymalloc.h -base64_code.o: vstring.h +base64_code.o: sys_defs.h base64_code.o: vbuf.h -base64_code.o: base64_code.h +base64_code.o: vstring.h basename.o: basename.c -basename.o: sys_defs.h basename.o: stringops.h -basename.o: vstring.h +basename.o: sys_defs.h basename.o: vbuf.h +basename.o: vstring.h binhash.o: binhash.c -binhash.o: sys_defs.h -binhash.o: mymalloc.h -binhash.o: msg.h binhash.o: binhash.h +binhash.o: msg.h +binhash.o: mymalloc.h +binhash.o: sys_defs.h chroot_uid.o: chroot_uid.c -chroot_uid.o: sys_defs.h -chroot_uid.o: msg.h chroot_uid.o: chroot_uid.h +chroot_uid.o: msg.h +chroot_uid.o: sys_defs.h cidr_match.o: cidr_match.c -cidr_match.o: sys_defs.h +cidr_match.o: cidr_match.h +cidr_match.o: mask_addr.h cidr_match.o: msg.h -cidr_match.o: vstring.h -cidr_match.o: vbuf.h -cidr_match.o: stringops.h -cidr_match.o: split_at.h cidr_match.o: myaddrinfo.h -cidr_match.o: mask_addr.h -cidr_match.o: cidr_match.h +cidr_match.o: split_at.h +cidr_match.o: stringops.h +cidr_match.o: sys_defs.h +cidr_match.o: vbuf.h +cidr_match.o: vstring.h +clean_env.o: argv.h clean_env.o: clean_env.c -clean_env.o: sys_defs.h +clean_env.o: clean_env.h clean_env.o: msg.h -clean_env.o: argv.h clean_env.o: safe.h -clean_env.o: clean_env.h +clean_env.o: sys_defs.h close_on_exec.o: close_on_exec.c -close_on_exec.o: sys_defs.h -close_on_exec.o: msg.h close_on_exec.o: iostuff.h +close_on_exec.o: msg.h +close_on_exec.o: sys_defs.h concatenate.o: concatenate.c -concatenate.o: sys_defs.h concatenate.o: mymalloc.h concatenate.o: stringops.h -concatenate.o: vstring.h +concatenate.o: sys_defs.h concatenate.o: vbuf.h +concatenate.o: vstring.h ctable.o: ctable.c -ctable.o: sys_defs.h +ctable.o: ctable.h +ctable.o: htable.h ctable.o: msg.h ctable.o: mymalloc.h ctable.o: ring.h -ctable.o: htable.h -ctable.o: ctable.h +ctable.o: sys_defs.h +dict.o: argv.h dict.o: dict.c -dict.o: sys_defs.h -dict.o: msg.h +dict.o: dict.h +dict.o: dict_ht.h dict.o: htable.h +dict.o: iostuff.h +dict.o: mac_expand.h +dict.o: mac_parse.h +dict.o: msg.h dict.o: mymalloc.h -dict.o: vstream.h -dict.o: vbuf.h -dict.o: vstring.h dict.o: readlline.h -dict.o: mac_parse.h dict.o: stringops.h -dict.o: iostuff.h -dict.o: dict.h -dict.o: argv.h -dict.o: dict_ht.h +dict.o: sys_defs.h +dict.o: vbuf.h +dict.o: vstream.h +dict.o: vstring.h +dict_alloc.o: argv.h +dict_alloc.o: dict.h dict_alloc.o: dict_alloc.c -dict_alloc.o: sys_defs.h dict_alloc.o: msg.h dict_alloc.o: mymalloc.h -dict_alloc.o: dict.h -dict_alloc.o: vstream.h +dict_alloc.o: sys_defs.h dict_alloc.o: vbuf.h -dict_alloc.o: argv.h +dict_alloc.o: vstream.h +dict_cdb.o: argv.h +dict_cdb.o: dict.h dict_cdb.o: dict_cdb.c -dict_cdb.o: sys_defs.h +dict_cdb.o: dict_cdb.h +dict_cdb.o: iostuff.h dict_cdb.o: msg.h +dict_cdb.o: myflock.h dict_cdb.o: mymalloc.h -dict_cdb.o: vstring.h -dict_cdb.o: vbuf.h dict_cdb.o: stringops.h -dict_cdb.o: iostuff.h -dict_cdb.o: myflock.h -dict_cdb.o: dict.h +dict_cdb.o: sys_defs.h +dict_cdb.o: vbuf.h dict_cdb.o: vstream.h -dict_cdb.o: argv.h -dict_cdb.o: dict_cdb.h +dict_cdb.o: vstring.h +dict_cidr.o: argv.h +dict_cidr.o: cidr_match.h +dict_cidr.o: dict.h dict_cidr.o: dict_cidr.c -dict_cidr.o: sys_defs.h -dict_cidr.o: mymalloc.h +dict_cidr.o: dict_cidr.h dict_cidr.o: msg.h -dict_cidr.o: vstream.h +dict_cidr.o: myaddrinfo.h +dict_cidr.o: mymalloc.h +dict_cidr.o: readlline.h +dict_cidr.o: stringops.h +dict_cidr.o: sys_defs.h dict_cidr.o: vbuf.h +dict_cidr.o: vstream.h dict_cidr.o: vstring.h -dict_cidr.o: stringops.h -dict_cidr.o: readlline.h -dict_cidr.o: dict.h -dict_cidr.o: argv.h -dict_cidr.o: myaddrinfo.h -dict_cidr.o: cidr_match.h -dict_cidr.o: dict_cidr.h +dict_db.o: argv.h +dict_db.o: dict.h dict_db.o: dict_db.c -dict_db.o: sys_defs.h +dict_db.o: dict_db.h +dict_db.o: iostuff.h dict_db.o: msg.h +dict_db.o: myflock.h dict_db.o: mymalloc.h -dict_db.o: vstring.h -dict_db.o: vbuf.h dict_db.o: stringops.h -dict_db.o: iostuff.h -dict_db.o: myflock.h -dict_db.o: dict.h +dict_db.o: sys_defs.h +dict_db.o: vbuf.h dict_db.o: vstream.h -dict_db.o: argv.h -dict_db.o: dict_db.h +dict_db.o: vstring.h dict_dbm.o: dict_dbm.c dict_dbm.o: sys_defs.h +dict_debug.o: argv.h +dict_debug.o: dict.h dict_debug.o: dict_debug.c -dict_debug.o: sys_defs.h dict_debug.o: msg.h dict_debug.o: mymalloc.h -dict_debug.o: dict.h -dict_debug.o: vstream.h +dict_debug.o: sys_defs.h dict_debug.o: vbuf.h -dict_debug.o: argv.h -dict_env.o: dict_env.c -dict_env.o: sys_defs.h -dict_env.o: mymalloc.h +dict_debug.o: vstream.h +dict_env.o: argv.h +dict_env.o: dict.h +dict_env.o: dict_env.c +dict_env.o: dict_env.h dict_env.o: msg.h +dict_env.o: mymalloc.h dict_env.o: safe.h -dict_env.o: dict.h -dict_env.o: vstream.h +dict_env.o: sys_defs.h dict_env.o: vbuf.h -dict_env.o: argv.h -dict_env.o: dict_env.h +dict_env.o: vstream.h +dict_ht.o: argv.h +dict_ht.o: dict.h dict_ht.o: dict_ht.c -dict_ht.o: sys_defs.h -dict_ht.o: mymalloc.h +dict_ht.o: dict_ht.h dict_ht.o: htable.h -dict_ht.o: dict.h -dict_ht.o: vstream.h +dict_ht.o: mymalloc.h +dict_ht.o: sys_defs.h dict_ht.o: vbuf.h -dict_ht.o: argv.h -dict_ht.o: dict_ht.h +dict_ht.o: vstream.h dict_ni.o: dict_ni.c dict_ni.o: sys_defs.h +dict_nis.o: argv.h +dict_nis.o: dict.h dict_nis.o: dict_nis.c -dict_nis.o: sys_defs.h +dict_nis.o: dict_nis.h dict_nis.o: msg.h dict_nis.o: mymalloc.h -dict_nis.o: vstring.h +dict_nis.o: sys_defs.h dict_nis.o: vbuf.h -dict_nis.o: dict.h dict_nis.o: vstream.h -dict_nis.o: argv.h -dict_nis.o: dict_nis.h +dict_nis.o: vstring.h +dict_nisplus.o: argv.h +dict_nisplus.o: dict.h dict_nisplus.o: dict_nisplus.c -dict_nisplus.o: sys_defs.h +dict_nisplus.o: dict_nisplus.h dict_nisplus.o: msg.h dict_nisplus.o: mymalloc.h -dict_nisplus.o: vstring.h -dict_nisplus.o: vbuf.h dict_nisplus.o: stringops.h -dict_nisplus.o: dict.h +dict_nisplus.o: sys_defs.h +dict_nisplus.o: vbuf.h dict_nisplus.o: vstream.h -dict_nisplus.o: argv.h -dict_nisplus.o: dict_nisplus.h -dict_open.o: dict_open.c -dict_open.o: sys_defs.h +dict_nisplus.o: vstring.h dict_open.o: argv.h -dict_open.o: mymalloc.h -dict_open.o: msg.h dict_open.o: dict.h -dict_open.o: vstream.h -dict_open.o: vbuf.h dict_open.o: dict_cdb.h -dict_open.o: dict_env.h -dict_open.o: dict_unix.h -dict_open.o: dict_tcp.h -dict_open.o: dict_sdbm.h -dict_open.o: dict_dbm.h +dict_open.o: dict_cidr.h dict_open.o: dict_db.h +dict_open.o: dict_dbm.h +dict_open.o: dict_env.h +dict_open.o: dict_ni.h dict_open.o: dict_nis.h dict_open.o: dict_nisplus.h -dict_open.o: dict_ni.h +dict_open.o: dict_open.c dict_open.o: dict_pcre.h dict_open.o: dict_regexp.h +dict_open.o: dict_sdbm.h dict_open.o: dict_static.h -dict_open.o: dict_cidr.h +dict_open.o: dict_tcp.h +dict_open.o: dict_unix.h +dict_open.o: htable.h +dict_open.o: msg.h +dict_open.o: mymalloc.h +dict_open.o: split_at.h dict_open.o: stringops.h +dict_open.o: sys_defs.h +dict_open.o: vbuf.h +dict_open.o: vstream.h dict_open.o: vstring.h -dict_open.o: split_at.h -dict_open.o: htable.h +dict_pcre.o: argv.h +dict_pcre.o: dict.h dict_pcre.o: dict_pcre.c -dict_pcre.o: sys_defs.h -dict_pcre.o: mymalloc.h +dict_pcre.o: dict_pcre.h +dict_pcre.o: mac_parse.h dict_pcre.o: msg.h +dict_pcre.o: mymalloc.h +dict_pcre.o: readlline.h dict_pcre.o: safe.h -dict_pcre.o: vstream.h +dict_pcre.o: stringops.h +dict_pcre.o: sys_defs.h dict_pcre.o: vbuf.h +dict_pcre.o: vstream.h dict_pcre.o: vstring.h -dict_pcre.o: stringops.h -dict_pcre.o: readlline.h -dict_pcre.o: dict.h -dict_pcre.o: argv.h -dict_pcre.o: dict_pcre.h -dict_pcre.o: mac_parse.h +dict_regexp.o: argv.h +dict_regexp.o: dict.h dict_regexp.o: dict_regexp.c -dict_regexp.o: sys_defs.h -dict_regexp.o: mymalloc.h +dict_regexp.o: dict_regexp.h +dict_regexp.o: mac_parse.h dict_regexp.o: msg.h +dict_regexp.o: mymalloc.h +dict_regexp.o: readlline.h dict_regexp.o: safe.h -dict_regexp.o: vstream.h +dict_regexp.o: stringops.h +dict_regexp.o: sys_defs.h dict_regexp.o: vbuf.h +dict_regexp.o: vstream.h dict_regexp.o: vstring.h -dict_regexp.o: stringops.h -dict_regexp.o: readlline.h -dict_regexp.o: dict.h -dict_regexp.o: argv.h -dict_regexp.o: dict_regexp.h -dict_regexp.o: mac_parse.h +dict_sdbm.o: argv.h +dict_sdbm.o: dict.h dict_sdbm.o: dict_sdbm.c -dict_sdbm.o: sys_defs.h -dict_sdbm.o: msg.h -dict_sdbm.o: mymalloc.h +dict_sdbm.o: dict_sdbm.h dict_sdbm.o: htable.h dict_sdbm.o: iostuff.h -dict_sdbm.o: vstring.h -dict_sdbm.o: vbuf.h +dict_sdbm.o: msg.h dict_sdbm.o: myflock.h +dict_sdbm.o: mymalloc.h dict_sdbm.o: stringops.h -dict_sdbm.o: dict.h +dict_sdbm.o: sys_defs.h +dict_sdbm.o: vbuf.h dict_sdbm.o: vstream.h -dict_sdbm.o: argv.h -dict_sdbm.o: dict_sdbm.h +dict_sdbm.o: vstring.h +dict_static.o: argv.h +dict_static.o: dict.h dict_static.o: dict_static.c -dict_static.o: sys_defs.h -dict_static.o: mymalloc.h +dict_static.o: dict_static.h dict_static.o: msg.h -dict_static.o: dict.h -dict_static.o: vstream.h +dict_static.o: mymalloc.h +dict_static.o: sys_defs.h dict_static.o: vbuf.h -dict_static.o: argv.h -dict_static.o: dict_static.h +dict_static.o: vstream.h +dict_tcp.o: argv.h +dict_tcp.o: connect.h +dict_tcp.o: dict.h dict_tcp.o: dict_tcp.c -dict_tcp.o: sys_defs.h +dict_tcp.o: dict_tcp.h +dict_tcp.o: hex_quote.h +dict_tcp.o: iostuff.h dict_tcp.o: msg.h dict_tcp.o: mymalloc.h -dict_tcp.o: vstring.h +dict_tcp.o: stringops.h +dict_tcp.o: sys_defs.h dict_tcp.o: vbuf.h dict_tcp.o: vstream.h +dict_tcp.o: vstring.h dict_tcp.o: vstring_vstream.h -dict_tcp.o: connect.h -dict_tcp.o: iostuff.h -dict_tcp.o: hex_quote.h -dict_tcp.o: dict.h -dict_tcp.o: argv.h -dict_tcp.o: stringops.h -dict_tcp.o: dict_tcp.h +dict_unix.o: argv.h +dict_unix.o: dict.h dict_unix.o: dict_unix.c -dict_unix.o: sys_defs.h +dict_unix.o: dict_unix.h dict_unix.o: msg.h dict_unix.o: mymalloc.h -dict_unix.o: vstring.h +dict_unix.o: sys_defs.h dict_unix.o: vbuf.h -dict_unix.o: dict.h dict_unix.o: vstream.h -dict_unix.o: argv.h -dict_unix.o: dict_unix.h +dict_unix.o: vstring.h dir_forest.o: dir_forest.c -dir_forest.o: sys_defs.h -dir_forest.o: msg.h dir_forest.o: dir_forest.h -dir_forest.o: vstring.h +dir_forest.o: msg.h +dir_forest.o: sys_defs.h dir_forest.o: vbuf.h +dir_forest.o: vstring.h doze.o: doze.c -doze.o: sys_defs.h -doze.o: msg.h doze.o: iostuff.h +doze.o: msg.h +doze.o: sys_defs.h dummy_read.o: dummy_read.c -dummy_read.o: sys_defs.h -dummy_read.o: msg.h dummy_read.o: iostuff.h +dummy_read.o: msg.h +dummy_read.o: sys_defs.h dummy_write.o: dummy_write.c -dummy_write.o: sys_defs.h -dummy_write.o: msg.h dummy_write.o: iostuff.h +dummy_write.o: msg.h +dummy_write.o: sys_defs.h dup2_pass_on_exec.o: dup2_pass_on_exec.c duplex_pipe.o: duplex_pipe.c -duplex_pipe.o: sys_defs.h duplex_pipe.o: iostuff.h duplex_pipe.o: sane_socketpair.h +duplex_pipe.o: sys_defs.h environ.o: environ.c environ.o: sys_defs.h events.o: events.c -events.o: sys_defs.h -events.o: mymalloc.h -events.o: msg.h +events.o: events.h events.o: iostuff.h +events.o: msg.h +events.o: mymalloc.h events.o: ring.h -events.o: events.h -exec_command.o: exec_command.c -exec_command.o: sys_defs.h -exec_command.o: msg.h +events.o: sys_defs.h exec_command.o: argv.h +exec_command.o: exec_command.c exec_command.o: exec_command.h +exec_command.o: msg.h +exec_command.o: sys_defs.h fifo_listen.o: fifo_listen.c -fifo_listen.o: sys_defs.h -fifo_listen.o: msg.h fifo_listen.o: iostuff.h fifo_listen.o: listen.h +fifo_listen.o: msg.h +fifo_listen.o: sys_defs.h fifo_open.o: fifo_open.c fifo_rdonly_bug.o: fifo_rdonly_bug.c fifo_rdonly_bug.o: sys_defs.h fifo_rdwr_bug.o: fifo_rdwr_bug.c fifo_rdwr_bug.o: sys_defs.h fifo_trigger.o: fifo_trigger.c -fifo_trigger.o: sys_defs.h -fifo_trigger.o: msg.h fifo_trigger.o: iostuff.h +fifo_trigger.o: msg.h fifo_trigger.o: safe_open.h -fifo_trigger.o: vstream.h +fifo_trigger.o: sys_defs.h +fifo_trigger.o: trigger.h fifo_trigger.o: vbuf.h +fifo_trigger.o: vstream.h fifo_trigger.o: vstring.h -fifo_trigger.o: trigger.h file_limit.o: file_limit.c -file_limit.o: sys_defs.h -file_limit.o: msg.h file_limit.o: iostuff.h +file_limit.o: msg.h +file_limit.o: sys_defs.h find_inet.o: find_inet.c -find_inet.o: sys_defs.h +find_inet.o: find_inet.h find_inet.o: msg.h find_inet.o: stringops.h -find_inet.o: vstring.h +find_inet.o: sys_defs.h find_inet.o: vbuf.h -find_inet.o: find_inet.h +find_inet.o: vstring.h fsspace.o: fsspace.c -fsspace.o: sys_defs.h -fsspace.o: msg.h fsspace.o: fsspace.h +fsspace.o: msg.h +fsspace.o: sys_defs.h fullname.o: fullname.c +fullname.o: fullname.h +fullname.o: safe.h fullname.o: sys_defs.h -fullname.o: vstring.h fullname.o: vbuf.h -fullname.o: safe.h -fullname.o: fullname.h +fullname.o: vstring.h get_domainname.o: get_domainname.c -get_domainname.o: sys_defs.h -get_domainname.o: mymalloc.h -get_domainname.o: get_hostname.h get_domainname.o: get_domainname.h +get_domainname.o: get_hostname.h +get_domainname.o: mymalloc.h +get_domainname.o: sys_defs.h get_hostname.o: get_hostname.c -get_hostname.o: sys_defs.h -get_hostname.o: mymalloc.h +get_hostname.o: get_hostname.h get_hostname.o: msg.h +get_hostname.o: mymalloc.h +get_hostname.o: sys_defs.h get_hostname.o: valid_hostname.h -get_hostname.o: get_hostname.h hex_code.o: hex_code.c -hex_code.o: sys_defs.h +hex_code.o: hex_code.h hex_code.o: msg.h hex_code.o: mymalloc.h -hex_code.o: vstring.h +hex_code.o: sys_defs.h hex_code.o: vbuf.h -hex_code.o: hex_code.h +hex_code.o: vstring.h hex_quote.o: hex_quote.c -hex_quote.o: sys_defs.h +hex_quote.o: hex_quote.h hex_quote.o: msg.h -hex_quote.o: vstring.h +hex_quote.o: sys_defs.h hex_quote.o: vbuf.h -hex_quote.o: hex_quote.h +hex_quote.o: vstring.h host_port.o: host_port.c -host_port.o: sys_defs.h +host_port.o: host_port.h host_port.o: msg.h host_port.o: split_at.h host_port.o: stringops.h -host_port.o: vstring.h -host_port.o: vbuf.h +host_port.o: sys_defs.h host_port.o: valid_hostname.h -host_port.o: host_port.h +host_port.o: vbuf.h +host_port.o: vstring.h htable.o: htable.c -htable.o: sys_defs.h -htable.o: mymalloc.h -htable.o: msg.h htable.o: htable.h +htable.o: msg.h +htable.o: mymalloc.h +htable.o: sys_defs.h inet_addr_host.o: inet_addr_host.c -inet_addr_host.o: sys_defs.h -inet_addr_host.o: mymalloc.h -inet_addr_host.o: inet_addr_list.h -inet_addr_host.o: myaddrinfo.h inet_addr_host.o: inet_addr_host.h -inet_addr_host.o: sock_addr.h +inet_addr_host.o: inet_addr_list.h inet_addr_host.o: inet_proto.h inet_addr_host.o: msg.h +inet_addr_host.o: myaddrinfo.h +inet_addr_host.o: mymalloc.h +inet_addr_host.o: sock_addr.h +inet_addr_host.o: sys_defs.h inet_addr_list.o: inet_addr_list.c -inet_addr_list.o: sys_defs.h +inet_addr_list.o: inet_addr_list.h inet_addr_list.o: msg.h -inet_addr_list.o: mymalloc.h inet_addr_list.o: myaddrinfo.h +inet_addr_list.o: mymalloc.h inet_addr_list.o: sock_addr.h -inet_addr_list.o: inet_addr_list.h +inet_addr_list.o: sys_defs.h +inet_addr_local.o: hex_code.h +inet_addr_local.o: inet_addr_list.h inet_addr_local.o: inet_addr_local.c -inet_addr_local.o: sys_defs.h +inet_addr_local.o: inet_addr_local.h +inet_addr_local.o: mask_addr.h inet_addr_local.o: msg.h -inet_addr_local.o: mymalloc.h -inet_addr_local.o: vstring.h -inet_addr_local.o: vbuf.h -inet_addr_local.o: inet_addr_list.h inet_addr_local.o: myaddrinfo.h -inet_addr_local.o: inet_addr_local.h +inet_addr_local.o: mymalloc.h inet_addr_local.o: sock_addr.h -inet_addr_local.o: mask_addr.h -inet_addr_local.o: hex_code.h +inet_addr_local.o: sys_defs.h +inet_addr_local.o: vbuf.h +inet_addr_local.o: vstring.h +inet_connect.o: connect.h +inet_connect.o: host_port.h inet_connect.o: inet_connect.c -inet_connect.o: sys_defs.h -inet_connect.o: mymalloc.h -inet_connect.o: msg.h +inet_connect.o: inet_proto.h inet_connect.o: iostuff.h -inet_connect.o: host_port.h -inet_connect.o: sane_connect.h -inet_connect.o: connect.h -inet_connect.o: timed_connect.h +inet_connect.o: msg.h inet_connect.o: myaddrinfo.h +inet_connect.o: mymalloc.h +inet_connect.o: sane_connect.h inet_connect.o: sock_addr.h -inet_connect.o: inet_proto.h -inet_listen.o: inet_listen.c -inet_listen.o: sys_defs.h -inet_listen.o: mymalloc.h -inet_listen.o: msg.h +inet_connect.o: sys_defs.h +inet_connect.o: timed_connect.h inet_listen.o: host_port.h +inet_listen.o: inet_listen.c +inet_listen.o: inet_proto.h inet_listen.o: iostuff.h inet_listen.o: listen.h -inet_listen.o: sane_accept.h +inet_listen.o: msg.h inet_listen.o: myaddrinfo.h +inet_listen.o: mymalloc.h +inet_listen.o: sane_accept.h inet_listen.o: sock_addr.h -inet_listen.o: inet_proto.h +inet_listen.o: sys_defs.h inet_proto.o: inet_proto.c -inet_proto.o: sys_defs.h -inet_proto.o: mymalloc.h +inet_proto.o: inet_proto.h inet_proto.o: msg.h inet_proto.o: myaddrinfo.h +inet_proto.o: mymalloc.h inet_proto.o: name_mask.h -inet_proto.o: inet_proto.h -inet_trigger.o: inet_trigger.c -inet_trigger.o: sys_defs.h -inet_trigger.o: msg.h +inet_proto.o: sys_defs.h inet_trigger.o: connect.h +inet_trigger.o: events.h +inet_trigger.o: inet_trigger.c inet_trigger.o: iostuff.h +inet_trigger.o: msg.h inet_trigger.o: mymalloc.h -inet_trigger.o: events.h +inet_trigger.o: sys_defs.h inet_trigger.o: trigger.h line_wrap.o: line_wrap.c -line_wrap.o: sys_defs.h line_wrap.o: line_wrap.h +line_wrap.o: sys_defs.h lowercase.o: lowercase.c -lowercase.o: sys_defs.h lowercase.o: stringops.h -lowercase.o: vstring.h +lowercase.o: sys_defs.h lowercase.o: vbuf.h +lowercase.o: vstring.h lstat_as.o: lstat_as.c -lstat_as.o: sys_defs.h +lstat_as.o: lstat_as.h lstat_as.o: msg.h lstat_as.o: set_eugid.h -lstat_as.o: lstat_as.h +lstat_as.o: sys_defs.h mac_expand.o: mac_expand.c -mac_expand.o: sys_defs.h +mac_expand.o: mac_expand.h +mac_expand.o: mac_parse.h mac_expand.o: msg.h -mac_expand.o: vstring.h -mac_expand.o: vbuf.h mac_expand.o: mymalloc.h -mac_expand.o: mac_parse.h -mac_expand.o: mac_expand.h +mac_expand.o: sys_defs.h +mac_expand.o: vbuf.h +mac_expand.o: vstring.h mac_parse.o: mac_parse.c -mac_parse.o: sys_defs.h -mac_parse.o: msg.h mac_parse.o: mac_parse.h -mac_parse.o: vstring.h +mac_parse.o: msg.h +mac_parse.o: sys_defs.h mac_parse.o: vbuf.h +mac_parse.o: vstring.h make_dirs.o: make_dirs.c -make_dirs.o: sys_defs.h +make_dirs.o: make_dirs.h make_dirs.o: msg.h make_dirs.o: mymalloc.h make_dirs.o: stringops.h -make_dirs.o: vstring.h +make_dirs.o: sys_defs.h make_dirs.o: vbuf.h -make_dirs.o: make_dirs.h +make_dirs.o: vstring.h mask_addr.o: mask_addr.c -mask_addr.o: sys_defs.h -mask_addr.o: msg.h mask_addr.o: mask_addr.h +mask_addr.o: msg.h +mask_addr.o: sys_defs.h +match_list.o: argv.h +match_list.o: dict.h match_list.o: match_list.c -match_list.o: sys_defs.h +match_list.o: match_list.h +match_list.o: match_ops.h match_list.o: msg.h match_list.o: mymalloc.h -match_list.o: vstring.h +match_list.o: stringops.h +match_list.o: sys_defs.h match_list.o: vbuf.h match_list.o: vstream.h +match_list.o: vstring.h match_list.o: vstring_vstream.h -match_list.o: stringops.h -match_list.o: argv.h -match_list.o: dict.h -match_list.o: match_ops.h -match_list.o: match_list.h +match_ops.o: argv.h +match_ops.o: cidr_match.h +match_ops.o: dict.h match_ops.o: match_ops.c -match_ops.o: sys_defs.h +match_ops.o: match_ops.h match_ops.o: msg.h +match_ops.o: myaddrinfo.h match_ops.o: mymalloc.h match_ops.o: split_at.h -match_ops.o: dict.h -match_ops.o: vstream.h -match_ops.o: vbuf.h -match_ops.o: argv.h -match_ops.o: match_ops.h match_ops.o: stringops.h +match_ops.o: sys_defs.h +match_ops.o: vbuf.h +match_ops.o: vstream.h match_ops.o: vstring.h -match_ops.o: cidr_match.h -match_ops.o: myaddrinfo.h msg.o: msg.c -msg.o: sys_defs.h msg.o: msg.h msg.o: msg_output.h +msg.o: sys_defs.h msg_output.o: msg_output.c -msg_output.o: sys_defs.h +msg_output.o: msg_output.h +msg_output.o: msg_vstream.h msg_output.o: mymalloc.h -msg_output.o: vstring.h +msg_output.o: percentm.h +msg_output.o: stringops.h +msg_output.o: sys_defs.h msg_output.o: vbuf.h msg_output.o: vstream.h -msg_output.o: msg_vstream.h -msg_output.o: stringops.h -msg_output.o: percentm.h -msg_output.o: msg_output.h -msg_syslog.o: msg_syslog.c -msg_syslog.o: sys_defs.h -msg_syslog.o: vstring.h -msg_syslog.o: vbuf.h -msg_syslog.o: stringops.h +msg_output.o: vstring.h msg_syslog.o: msg.h msg_syslog.o: msg_output.h +msg_syslog.o: msg_syslog.c msg_syslog.o: msg_syslog.h msg_syslog.o: safe.h -msg_vstream.o: msg_vstream.c -msg_vstream.o: sys_defs.h -msg_vstream.o: vstream.h -msg_vstream.o: vbuf.h +msg_syslog.o: stringops.h +msg_syslog.o: sys_defs.h +msg_syslog.o: vbuf.h +msg_syslog.o: vstring.h msg_vstream.o: msg.h msg_vstream.o: msg_output.h +msg_vstream.o: msg_vstream.c msg_vstream.o: msg_vstream.h +msg_vstream.o: sys_defs.h +msg_vstream.o: vbuf.h +msg_vstream.o: vstream.h mvect.o: mvect.c -mvect.o: sys_defs.h -mvect.o: mymalloc.h mvect.o: mvect.h +mvect.o: mymalloc.h +mvect.o: sys_defs.h +myaddrinfo.o: inet_proto.h +myaddrinfo.o: msg.h myaddrinfo.o: myaddrinfo.c -myaddrinfo.o: sys_defs.h +myaddrinfo.o: myaddrinfo.h myaddrinfo.o: mymalloc.h -myaddrinfo.o: valid_hostname.h myaddrinfo.o: sock_addr.h myaddrinfo.o: stringops.h -myaddrinfo.o: vstring.h +myaddrinfo.o: sys_defs.h +myaddrinfo.o: valid_hostname.h myaddrinfo.o: vbuf.h -myaddrinfo.o: msg.h -myaddrinfo.o: inet_proto.h -myaddrinfo.o: myaddrinfo.h -myflock.o: myflock.c -myflock.o: sys_defs.h +myaddrinfo.o: vstring.h myflock.o: msg.h +myflock.o: myflock.c myflock.o: myflock.h -mymalloc.o: mymalloc.c -mymalloc.o: sys_defs.h +myflock.o: sys_defs.h mymalloc.o: msg.h +mymalloc.o: mymalloc.c mymalloc.o: mymalloc.h +mymalloc.o: sys_defs.h myrand.o: myrand.c -myrand.o: sys_defs.h myrand.o: myrand.h +myrand.o: sys_defs.h mystrtok.o: mystrtok.c -mystrtok.o: sys_defs.h mystrtok.o: stringops.h -mystrtok.o: vstring.h +mystrtok.o: sys_defs.h mystrtok.o: vbuf.h +mystrtok.o: vstring.h name_code.o: name_code.c -name_code.o: sys_defs.h name_code.o: name_code.h -name_mask.o: name_mask.c -name_mask.o: sys_defs.h +name_code.o: sys_defs.h name_mask.o: msg.h name_mask.o: mymalloc.h +name_mask.o: name_mask.c +name_mask.o: name_mask.h name_mask.o: stringops.h -name_mask.o: vstring.h +name_mask.o: sys_defs.h name_mask.o: vbuf.h -name_mask.o: name_mask.h +name_mask.o: vstring.h +netstring.o: msg.h netstring.o: netstring.c +netstring.o: netstring.h netstring.o: sys_defs.h -netstring.o: msg.h -netstring.o: vstream.h netstring.o: vbuf.h +netstring.o: vstream.h netstring.o: vstring.h -netstring.o: netstring.h neuter.o: neuter.c -neuter.o: sys_defs.h neuter.o: stringops.h -neuter.o: vstring.h +neuter.o: sys_defs.h neuter.o: vbuf.h +neuter.o: vstring.h +non_blocking.o: iostuff.h +non_blocking.o: msg.h non_blocking.o: non_blocking.c non_blocking.o: sys_defs.h -non_blocking.o: msg.h -non_blocking.o: iostuff.h -nvtable.o: nvtable.c -nvtable.o: sys_defs.h -nvtable.o: mymalloc.h nvtable.o: htable.h +nvtable.o: mymalloc.h +nvtable.o: nvtable.c nvtable.o: nvtable.h -open_as.o: open_as.c -open_as.o: sys_defs.h +nvtable.o: sys_defs.h open_as.o: msg.h -open_as.o: set_eugid.h +open_as.o: open_as.c open_as.o: open_as.h -open_limit.o: open_limit.c -open_limit.o: sys_defs.h +open_as.o: set_eugid.h +open_as.o: sys_defs.h open_limit.o: iostuff.h +open_limit.o: open_limit.c +open_limit.o: sys_defs.h +open_lock.o: msg.h +open_lock.o: myflock.h open_lock.o: open_lock.c +open_lock.o: open_lock.h +open_lock.o: safe_open.h open_lock.o: sys_defs.h -open_lock.o: msg.h -open_lock.o: vstream.h open_lock.o: vbuf.h +open_lock.o: vstream.h open_lock.o: vstring.h -open_lock.o: safe_open.h -open_lock.o: myflock.h -open_lock.o: open_lock.h +peekfd.o: iostuff.h peekfd.o: peekfd.c peekfd.o: sys_defs.h -peekfd.o: iostuff.h percentm.o: percentm.c +percentm.o: percentm.h percentm.o: sys_defs.h -percentm.o: vstring.h percentm.o: vbuf.h -percentm.o: percentm.h +percentm.o: vstring.h posix_signals.o: posix_signals.c -posix_signals.o: sys_defs.h posix_signals.o: posix_signals.h +posix_signals.o: sys_defs.h printable.o: printable.c -printable.o: sys_defs.h printable.o: stringops.h -printable.o: vstring.h +printable.o: sys_defs.h printable.o: vbuf.h -rand_sleep.o: rand_sleep.c -rand_sleep.o: sys_defs.h +printable.o: vstring.h +rand_sleep.o: iostuff.h rand_sleep.o: msg.h rand_sleep.o: myrand.h -rand_sleep.o: iostuff.h +rand_sleep.o: rand_sleep.c +rand_sleep.o: sys_defs.h +read_wait.o: iostuff.h +read_wait.o: msg.h read_wait.o: read_wait.c read_wait.o: sys_defs.h -read_wait.o: msg.h -read_wait.o: iostuff.h +readable.o: iostuff.h +readable.o: msg.h readable.o: readable.c readable.o: sys_defs.h -readable.o: msg.h -readable.o: iostuff.h +readlline.o: msg.h readlline.o: readlline.c +readlline.o: readlline.h readlline.o: sys_defs.h -readlline.o: msg.h -readlline.o: vstream.h readlline.o: vbuf.h +readlline.o: vstream.h readlline.o: vstring.h -readlline.o: readlline.h ring.o: ring.c ring.o: ring.h +safe_getenv.o: safe.h safe_getenv.o: safe_getenv.c safe_getenv.o: sys_defs.h -safe_getenv.o: safe.h +safe_open.o: msg.h safe_open.o: safe_open.c +safe_open.o: safe_open.h safe_open.o: sys_defs.h -safe_open.o: msg.h -safe_open.o: vstream.h safe_open.o: vbuf.h +safe_open.o: vstream.h safe_open.o: vstring.h -safe_open.o: safe_open.h -sane_accept.o: sane_accept.c -sane_accept.o: sys_defs.h sane_accept.o: msg.h +sane_accept.o: sane_accept.c sane_accept.o: sane_accept.h -sane_connect.o: sane_connect.c -sane_connect.o: sys_defs.h +sane_accept.o: sys_defs.h sane_connect.o: msg.h +sane_connect.o: sane_connect.c sane_connect.o: sane_connect.h -sane_link.o: sane_link.c -sane_link.o: sys_defs.h +sane_connect.o: sys_defs.h sane_link.o: msg.h sane_link.o: sane_fsops.h -sane_rename.o: sane_rename.c -sane_rename.o: sys_defs.h +sane_link.o: sane_link.c +sane_link.o: sys_defs.h sane_rename.o: msg.h sane_rename.o: sane_fsops.h -sane_socketpair.o: sane_socketpair.c -sane_socketpair.o: sys_defs.h +sane_rename.o: sane_rename.c +sane_rename.o: sys_defs.h sane_socketpair.o: msg.h +sane_socketpair.o: sane_socketpair.c sane_socketpair.o: sane_socketpair.h -sane_time.o: sane_time.c -sane_time.o: sys_defs.h +sane_socketpair.o: sys_defs.h sane_time.o: msg.h +sane_time.o: sane_time.c sane_time.o: sane_time.h -scan_dir.o: scan_dir.c -scan_dir.o: sys_defs.h +sane_time.o: sys_defs.h scan_dir.o: msg.h scan_dir.o: mymalloc.h +scan_dir.o: scan_dir.c +scan_dir.o: scan_dir.h scan_dir.o: stringops.h -scan_dir.o: vstring.h +scan_dir.o: sys_defs.h scan_dir.o: vbuf.h -scan_dir.o: scan_dir.h +scan_dir.o: vstring.h +select_bug.o: msg.h +select_bug.o: msg_vstream.h select_bug.o: select_bug.c select_bug.o: sys_defs.h -select_bug.o: msg.h -select_bug.o: vstream.h select_bug.o: vbuf.h -select_bug.o: msg_vstream.h -set_eugid.o: set_eugid.c -set_eugid.o: sys_defs.h +select_bug.o: vstream.h set_eugid.o: msg.h +set_eugid.o: set_eugid.c set_eugid.o: set_eugid.h -set_ugid.o: set_ugid.c -set_ugid.o: sys_defs.h +set_eugid.o: sys_defs.h set_ugid.o: msg.h +set_ugid.o: set_ugid.c set_ugid.o: set_ugid.h -sigdelay.o: sigdelay.c -sigdelay.o: sys_defs.h +set_ugid.o: sys_defs.h sigdelay.o: msg.h sigdelay.o: posix_signals.h +sigdelay.o: sigdelay.c sigdelay.o: sigdelay.h +sigdelay.o: sys_defs.h skipblanks.o: skipblanks.c -skipblanks.o: sys_defs.h skipblanks.o: stringops.h -skipblanks.o: vstring.h +skipblanks.o: sys_defs.h skipblanks.o: vbuf.h -sock_addr.o: sock_addr.c -sock_addr.o: sys_defs.h +skipblanks.o: vstring.h sock_addr.o: msg.h +sock_addr.o: sock_addr.c sock_addr.o: sock_addr.h -spawn_command.o: spawn_command.c -spawn_command.o: sys_defs.h +sock_addr.o: sys_defs.h +spawn_command.o: argv.h +spawn_command.o: clean_env.h +spawn_command.o: exec_command.h spawn_command.o: msg.h -spawn_command.o: timed_wait.h spawn_command.o: set_ugid.h -spawn_command.o: argv.h +spawn_command.o: spawn_command.c spawn_command.o: spawn_command.h -spawn_command.o: exec_command.h -spawn_command.o: clean_env.h +spawn_command.o: sys_defs.h +spawn_command.o: timed_wait.h split_at.o: split_at.c -split_at.o: sys_defs.h split_at.o: split_at.h -split_nameval.o: split_nameval.c -split_nameval.o: sys_defs.h +split_at.o: sys_defs.h split_nameval.o: msg.h +split_nameval.o: split_nameval.c split_nameval.o: stringops.h -split_nameval.o: vstring.h +split_nameval.o: sys_defs.h split_nameval.o: vbuf.h -stat_as.o: stat_as.c -stat_as.o: sys_defs.h +split_nameval.o: vstring.h stat_as.o: msg.h stat_as.o: set_eugid.h +stat_as.o: stat_as.c stat_as.o: stat_as.h +stat_as.o: sys_defs.h strcasecmp.o: strcasecmp.c strcasecmp.o: sys_defs.h -stream_connect.o: stream_connect.c -stream_connect.o: sys_defs.h -stream_connect.o: msg.h stream_connect.o: connect.h stream_connect.o: iostuff.h +stream_connect.o: msg.h +stream_connect.o: stream_connect.c +stream_connect.o: sys_defs.h +stream_listen.o: iostuff.h +stream_listen.o: listen.h +stream_listen.o: msg.h stream_listen.o: stream_listen.c stream_listen.o: sys_defs.h -stream_listen.o: msg.h -stream_listen.o: listen.h -stream_listen.o: iostuff.h +stream_recv_fd.o: iostuff.h +stream_recv_fd.o: msg.h stream_recv_fd.o: stream_recv_fd.c stream_recv_fd.o: sys_defs.h -stream_recv_fd.o: msg.h -stream_recv_fd.o: iostuff.h +stream_send_fd.o: iostuff.h +stream_send_fd.o: msg.h stream_send_fd.o: stream_send_fd.c stream_send_fd.o: sys_defs.h -stream_send_fd.o: msg.h -stream_send_fd.o: iostuff.h -stream_test.o: stream_test.c -stream_test.o: sys_defs.h -stream_test.o: stream_test.c +stream_test.o: connect.h stream_test.o: iostuff.h +stream_test.o: listen.h stream_test.o: msg.h stream_test.o: msg_vstream.h -stream_test.o: vstream.h +stream_test.o: stream_test.c +stream_test.o: sys_defs.h stream_test.o: vbuf.h -stream_test.o: listen.h -stream_test.o: connect.h -stream_trigger.o: stream_trigger.c -stream_trigger.o: sys_defs.h -stream_trigger.o: msg.h +stream_test.o: vstream.h stream_trigger.o: connect.h +stream_trigger.o: events.h stream_trigger.o: iostuff.h +stream_trigger.o: msg.h stream_trigger.o: mymalloc.h -stream_trigger.o: events.h +stream_trigger.o: stream_trigger.c +stream_trigger.o: sys_defs.h stream_trigger.o: trigger.h +sys_compat.o: iostuff.h sys_compat.o: sys_compat.c sys_compat.o: sys_defs.h -sys_compat.o: iostuff.h -timed_connect.o: timed_connect.c -timed_connect.o: sys_defs.h -timed_connect.o: msg.h timed_connect.o: iostuff.h +timed_connect.o: msg.h timed_connect.o: sane_connect.h +timed_connect.o: sys_defs.h +timed_connect.o: timed_connect.c timed_connect.o: timed_connect.h -timed_read.o: timed_read.c -timed_read.o: sys_defs.h -timed_read.o: msg.h timed_read.o: iostuff.h -timed_wait.o: timed_wait.c -timed_wait.o: sys_defs.h +timed_read.o: msg.h +timed_read.o: sys_defs.h +timed_read.o: timed_read.c timed_wait.o: msg.h timed_wait.o: posix_signals.h +timed_wait.o: sys_defs.h +timed_wait.o: timed_wait.c timed_wait.o: timed_wait.h -timed_write.o: timed_write.c -timed_write.o: sys_defs.h -timed_write.o: msg.h timed_write.o: iostuff.h -translit.o: translit.c -translit.o: sys_defs.h +timed_write.o: msg.h +timed_write.o: sys_defs.h +timed_write.o: timed_write.c translit.o: stringops.h -translit.o: vstring.h +translit.o: sys_defs.h +translit.o: translit.c translit.o: vbuf.h -trimblanks.o: trimblanks.c -trimblanks.o: sys_defs.h +translit.o: vstring.h trimblanks.o: stringops.h -trimblanks.o: vstring.h +trimblanks.o: sys_defs.h +trimblanks.o: trimblanks.c trimblanks.o: vbuf.h -unescape.o: unescape.c +trimblanks.o: vstring.h +unescape.o: stringops.h unescape.o: sys_defs.h -unescape.o: vstring.h +unescape.o: unescape.c unescape.o: vbuf.h -unescape.o: stringops.h -unix_connect.o: unix_connect.c -unix_connect.o: sys_defs.h -unix_connect.o: msg.h +unescape.o: vstring.h +unix_connect.o: connect.h unix_connect.o: iostuff.h +unix_connect.o: msg.h unix_connect.o: sane_connect.h -unix_connect.o: connect.h +unix_connect.o: sys_defs.h unix_connect.o: timed_connect.h -unix_listen.o: unix_listen.c -unix_listen.o: sys_defs.h -unix_listen.o: msg.h +unix_connect.o: unix_connect.c unix_listen.o: iostuff.h unix_listen.o: listen.h +unix_listen.o: msg.h unix_listen.o: sane_accept.h -unix_recv_fd.o: unix_recv_fd.c -unix_recv_fd.o: sys_defs.h -unix_recv_fd.o: msg.h +unix_listen.o: sys_defs.h +unix_listen.o: unix_listen.c unix_recv_fd.o: iostuff.h -unix_send_fd.o: unix_send_fd.c -unix_send_fd.o: sys_defs.h -unix_send_fd.o: msg.h +unix_recv_fd.o: msg.h +unix_recv_fd.o: sys_defs.h +unix_recv_fd.o: unix_recv_fd.c unix_send_fd.o: iostuff.h -unix_trigger.o: unix_trigger.c -unix_trigger.o: sys_defs.h -unix_trigger.o: msg.h +unix_send_fd.o: msg.h +unix_send_fd.o: sys_defs.h +unix_send_fd.o: unix_send_fd.c unix_trigger.o: connect.h +unix_trigger.o: events.h unix_trigger.o: iostuff.h +unix_trigger.o: msg.h unix_trigger.o: mymalloc.h -unix_trigger.o: events.h +unix_trigger.o: sys_defs.h unix_trigger.o: trigger.h -unsafe.o: unsafe.c -unsafe.o: sys_defs.h +unix_trigger.o: unix_trigger.c unsafe.o: safe.h -upass_listen.o: upass_listen.c -upass_listen.o: sys_defs.h +unsafe.o: sys_defs.h +unsafe.o: unsafe.c +upass_listen.o: iostuff.h +upass_listen.o: listen.h upass_listen.o: msg.h upass_listen.o: sane_accept.h -upass_listen.o: listen.h -upass_listen.o: iostuff.h -uppercase.o: uppercase.c -uppercase.o: sys_defs.h +upass_listen.o: sys_defs.h +upass_listen.o: upass_listen.c uppercase.o: stringops.h -uppercase.o: vstring.h +uppercase.o: sys_defs.h +uppercase.o: uppercase.c uppercase.o: vbuf.h -username.o: username.c +uppercase.o: vstring.h username.o: sys_defs.h +username.o: username.c username.o: username.h -valid_hostname.o: valid_hostname.c -valid_hostname.o: sys_defs.h valid_hostname.o: msg.h valid_hostname.o: mymalloc.h valid_hostname.o: stringops.h -valid_hostname.o: vstring.h -valid_hostname.o: vbuf.h +valid_hostname.o: sys_defs.h +valid_hostname.o: valid_hostname.c valid_hostname.o: valid_hostname.h -vbuf.o: vbuf.c +valid_hostname.o: vbuf.h +valid_hostname.o: vstring.h vbuf.o: sys_defs.h +vbuf.o: vbuf.c vbuf.o: vbuf.h -vbuf_print.o: vbuf_print.c -vbuf_print.o: sys_defs.h vbuf_print.o: msg.h +vbuf_print.o: sys_defs.h vbuf_print.o: vbuf.h -vbuf_print.o: vstring.h +vbuf_print.o: vbuf_print.c vbuf_print.o: vbuf_print.h -vstream.o: vstream.c -vstream.o: sys_defs.h -vstream.o: mymalloc.h +vbuf_print.o: vstring.h +vstream.o: iostuff.h vstream.o: msg.h -vstream.o: vbuf_print.h +vstream.o: mymalloc.h +vstream.o: sys_defs.h vstream.o: vbuf.h -vstream.o: iostuff.h -vstream.o: vstring.h +vstream.o: vbuf_print.h +vstream.o: vstream.c vstream.o: vstream.h -vstream_popen.o: vstream_popen.c -vstream_popen.o: sys_defs.h -vstream_popen.o: msg.h -vstream_popen.o: exec_command.h -vstream_popen.o: vstream.h -vstream_popen.o: vbuf.h +vstream.o: vstring.h vstream_popen.o: argv.h -vstream_popen.o: set_ugid.h vstream_popen.o: clean_env.h +vstream_popen.o: exec_command.h vstream_popen.o: iostuff.h -vstring.o: vstring.c -vstring.o: sys_defs.h -vstring.o: mymalloc.h +vstream_popen.o: msg.h +vstream_popen.o: set_ugid.h +vstream_popen.o: sys_defs.h +vstream_popen.o: vbuf.h +vstream_popen.o: vstream.h +vstream_popen.o: vstream_popen.c vstring.o: msg.h -vstring.o: vbuf_print.h +vstring.o: mymalloc.h +vstring.o: sys_defs.h vstring.o: vbuf.h +vstring.o: vbuf_print.h +vstring.o: vstring.c vstring.o: vstring.h -vstring_vstream.o: vstring_vstream.c -vstring_vstream.o: sys_defs.h vstring_vstream.o: msg.h -vstring_vstream.o: vstring.h +vstring_vstream.o: sys_defs.h vstring_vstream.o: vbuf.h vstring_vstream.o: vstream.h +vstring_vstream.o: vstring.h +vstring_vstream.o: vstring_vstream.c vstring_vstream.o: vstring_vstream.h -watchdog.o: watchdog.c -watchdog.o: sys_defs.h -watchdog.o: posix_signals.h watchdog.o: msg.h watchdog.o: mymalloc.h +watchdog.o: posix_signals.h +watchdog.o: sys_defs.h +watchdog.o: watchdog.c watchdog.o: watchdog.h -writable.o: writable.c -writable.o: sys_defs.h -writable.o: msg.h writable.o: iostuff.h -write_buf.o: write_buf.c -write_buf.o: sys_defs.h -write_buf.o: msg.h +writable.o: msg.h +writable.o: sys_defs.h +writable.o: writable.c write_buf.o: iostuff.h -write_wait.o: write_wait.c -write_wait.o: sys_defs.h -write_wait.o: msg.h +write_buf.o: msg.h +write_buf.o: sys_defs.h +write_buf.o: write_buf.c write_wait.o: iostuff.h +write_wait.o: msg.h +write_wait.o: sys_defs.h +write_wait.o: write_wait.c diff --git a/postfix/src/util/dict_cidr.ref b/postfix/src/util/dict_cidr.ref index 42d166e1a..0597441df 100644 --- a/postfix/src/util/dict_cidr.ref +++ b/postfix/src/util/dict_cidr.ref @@ -8,14 +8,25 @@ ./dict_open: warning: cidr map dict_cidr.map, line 16: missing ']' character after "[1234": skipping this rule ./dict_open: warning: cidr map dict_cidr.map, line 17: garbage after "[1234]": skipping this rule ./dict_open: warning: cidr map dict_cidr.map, line 18: bad net/mask pattern: "172.16.1.3/3x": skipping this rule +> get 172.16.0.0 172.16.0.0=554 match bad netblock 172.16.0.0/21 +> get 172.16.0.1 172.16.0.1=554 match bad netblock 172.16.0.0/21 +> get 172.16.7.255 172.16.7.255=554 match bad netblock 172.16.0.0/21 +> get 172.16.8.1 172.16.8.1=554 match bad netblock 172.16.8.0/21 +> get 172.16.17.1 172.16.17.1=554 match bad netblock 172.16.0.0/16 +> get 172.17.1.1 172.17.1.1=554 match bad naked address +> get 172.17.1.2 172.17.1.2=match 0.0.0.0/0 +> get 2001:240:5c7:0:2d0:b7ff:fe88:2ca7 2001:240:5c7:0:2d0:b7ff:fe88:2ca7=match 2001:240:5c7:0:2d0:b7ff:fe88:2ca7 +> get 2001:240:5c7:0:2d0:b7ff:febe:ca9f 2001:240:5c7:0:2d0:b7ff:febe:ca9f=match netblock 2001:240:5c7::/64 +> get 1.1.1.1 1.1.1.1=match 0.0.0.0/0 +> get 1:1:1:1:1:1:1:1 1:1:1:1:1:1:1:1=match ::/0 diff --git a/postfix/src/util/dict_open.c b/postfix/src/util/dict_open.c index 079c51ee3..c89911f54 100644 --- a/postfix/src/util/dict_open.c +++ b/postfix/src/util/dict_open.c @@ -266,7 +266,7 @@ DICT *dict_open(const char *dict_spec, int open_flags, int dict_flags) DICT *dict; if ((dict_name = split_at(saved_dict_spec, ':')) == 0) - msg_fatal("open dictionary: need \"type:name\" form instead of: \"%s\"", + msg_fatal("open dictionary: expecting \"type:name\" form instead of \"%s\"", dict_spec); dict = dict_open3(saved_dict_spec, dict_name, open_flags, dict_flags); @@ -284,6 +284,9 @@ DICT *dict_open3(const char *dict_type, const char *dict_name, DICT_OPEN_INFO *dp; DICT *dict; + if (*dict_type == 0 || *dict_name == 0) + msg_fatal("open dictionary: expecting \"type:name\" form instead of \"%s:%s\"", + dict_type, dict_name); if (dict_open_hash == 0) dict_open_init(); if ((dp = (DICT_OPEN_INFO *) htable_find(dict_open_hash, dict_type)) == 0) diff --git a/postfix/src/util/dict_pcre.c b/postfix/src/util/dict_pcre.c index 4745281e0..6a554e0da 100644 --- a/postfix/src/util/dict_pcre.c +++ b/postfix/src/util/dict_pcre.c @@ -200,7 +200,7 @@ static int dict_pcre_expand(int type, VSTRING *buf, char *ptr) static void dict_pcre_exec_error(const char *mapname, int lineno, int errval) { switch (errval) { - case 0: + case 0: msg_warn("pcre map %s, line %d: too many (...)", mapname, lineno); return; @@ -212,6 +212,26 @@ static void dict_pcre_exec_error(const char *mapname, int lineno, int errval) case PCRE_ERROR_UNKNOWN_NODE: msg_fatal("pcre map %s, line %d: corrupt compiled regexp", mapname, lineno); +#ifdef PCRE_ERROR_NOMEMORY + case PCRE_ERROR_NOMEMORY: + msg_fatal("pcre map %s, line %d: out of memory", + mapname, lineno); +#endif +#ifdef PCRE_ERROR_MATCHLIMIT + case PCRE_ERROR_MATCHLIMIT: + msg_fatal("pcre map %s, line %d: matched text exceeds buffer limit", + mapname, lineno); +#endif +#ifdef PCRE_ERROR_BADUTF8 + case PCRE_ERROR_BADUTF8: + msg_fatal("pcre map %s, line %d: bad UTF-8 sequence in search string", + mapname, lineno); +#endif +#ifdef PCRE_ERROR_BADUTF8_OFFSET + case PCRE_ERROR_BADUTF8_OFFSET: + msg_fatal("pcre map %s, line %d: bad UTF-8 start offset in search string", + mapname, lineno); +#endif default: msg_fatal("pcre map %s, line %d: unknown re_exec error: %d", mapname, lineno, errval); diff --git a/postfix/src/util/dict_pcre.ref b/postfix/src/util/dict_pcre.ref index 78f45e76d..8b2b89448 100644 --- a/postfix/src/util/dict_pcre.ref +++ b/postfix/src/util/dict_pcre.ref @@ -4,17 +4,31 @@ ./dict_open: warning: dict_pcre.map, line 9: no replacement text: using empty string ./dict_open: warning: pcre map dict_pcre.map, line 17: $number found in negative match replacement text: skipping this rule ./dict_open: warning: pcre map dict_pcre.map, line 22: no regexp: skipping this rule +> get true true: not found +> get true1 true1=1 +> get true2 true2: not found +> get truefalse2 truefalse2=2 +> get 3 3: not found +> get true3 true3=3 +> get c c= +> get d d: not found +> get 1234 1234=(1)(2)(3)(4) +> get 123 123=(1)(2)(3) +> get bar/find bar/find: not found +> get bar/whynot bar/whynot=Don't have a liquor license +> get bar/elbereth bar/elbereth=(elbereth) +> get say/elbereth say/elbereth: not found diff --git a/postfix/src/util/dict_test.ref b/postfix/src/util/dict_test.ref index 35d7c1f1b..1cda83600 100644 --- a/postfix/src/util/dict_test.ref +++ b/postfix/src/util/dict_test.ref @@ -1,10 +1,20 @@ +> del bar bar: deleted +> get bar bar: not found +> get nonexist nonexist: not found +> del nonexist nonexist: not found +> get foo foo=fooval +> del foo foo: deleted +> put baz bazval baz=bazval +> get baz baz=bazval +> del baz baz: deleted +> get baz baz: not found diff --git a/postfix/src/util/host_port.ref b/postfix/src/util/host_port.ref index e1057c622..28c518f63 100644 --- a/postfix/src/util/host_port.ref +++ b/postfix/src/util/host_port.ref @@ -19,4 +19,4 @@ unknown: warning: valid hostname or network address required in [hh.] >> hh. unknown: warning: valid hostname or network address required in hh. >> 999 -host 999 port default-service +unknown: warning: valid hostname or network address required in 999 diff --git a/postfix/src/util/myaddrinfo.ref2 b/postfix/src/util/myaddrinfo.ref2 index da2ff91ec..f2305dceb 100644 --- a/postfix/src/util/myaddrinfo.ref2 +++ b/postfix/src/util/myaddrinfo.ref2 @@ -1,5 +1,5 @@ ./myaddrinfo: === hostname null.porcupine.org === -./myaddrinfo: hostname_to_sockaddr(null.porcupine.org): No address associated with hostname +./myaddrinfo: hostname_to_sockaddr(null.porcupine.org): hostname nor servname provided, or not known ./myaddrinfo: === host address 10.0.0.0 === ./myaddrinfo: 10.0.0.0 -> family=2 sock=1 proto=6 10.0.0.0 ./myaddrinfo: sockaddr_to_hostname: hostname nor servname provided, or not known diff --git a/postfix/src/util/unescape.ref b/postfix/src/util/unescape.ref index 49cc49ff6..86b3aaa8f 100644 --- a/postfix/src/util/unescape.ref +++ b/postfix/src/util/unescape.ref @@ -1,7 +1,7 @@ -0000000 007 \b c d e \f g h i j k l m \n o p - 007 010 143 144 145 014 147 150 151 152 153 154 155 012 157 160 -0000020 q \r s \t u 013 w x y z 001 002 003 004 005 006 - 161 015 163 011 165 013 167 170 171 172 001 002 003 004 005 006 -0000040 007 8 9 S 4 234 5 345 6 . 7 - 007 070 071 123 064 234 065 345 066 056 067 +0000000 \a \b c d e \f g h i j k l m \n o p + 007 010 143 144 145 014 147 150 151 152 153 154 155 012 157 160 +0000020 q \r s \t u \v w x y z 001 002 003 004 005 006 + 161 015 163 011 165 013 167 170 171 172 001 002 003 004 005 006 +0000040 \a 8 9 S 4 234 5 345 6 . 7 + 007 070 071 123 064 234 065 345 066 056 067 0000053 diff --git a/postfix/src/verify/Makefile.in b/postfix/src/verify/Makefile.in index 39215f543..73ee73f4a 100644 --- a/postfix/src/verify/Makefile.in +++ b/postfix/src/verify/Makefile.in @@ -47,32 +47,33 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -verify.o: verify.c -verify.o: ../../include/sys_defs.h -verify.o: ../../include/msg.h -verify.o: ../../include/mymalloc.h -verify.o: ../../include/htable.h -verify.o: ../../include/dict_ht.h -verify.o: ../../include/dict.h -verify.o: ../../include/vstream.h -verify.o: ../../include/vbuf.h verify.o: ../../include/argv.h -verify.o: ../../include/split_at.h -verify.o: ../../include/stringops.h -verify.o: ../../include/vstring.h +verify.o: ../../include/attr.h +verify.o: ../../include/cleanup_user.h +verify.o: ../../include/deliver_request.h +verify.o: ../../include/dict.h +verify.o: ../../include/dict_ht.h +verify.o: ../../include/htable.h +verify.o: ../../include/iostuff.h verify.o: ../../include/mail_conf.h verify.o: ../../include/mail_params.h verify.o: ../../include/mail_proto.h -verify.o: ../../include/iostuff.h -verify.o: ../../include/attr.h +verify.o: ../../include/mail_server.h +verify.o: ../../include/msg.h +verify.o: ../../include/mymalloc.h verify.o: ../../include/post_mail.h -verify.o: ../../include/cleanup_user.h -verify.o: ../../include/verify_clnt.h -verify.o: ../../include/deliver_request.h verify.o: ../../include/recipient_list.h -verify.o: ../../include/mail_server.h +verify.o: ../../include/split_at.h +verify.o: ../../include/stringops.h +verify.o: ../../include/sys_defs.h +verify.o: ../../include/vbuf.h +verify.o: ../../include/verify_clnt.h +verify.o: ../../include/vstream.h +verify.o: ../../include/vstring.h +verify.o: verify.c diff --git a/postfix/src/virtual/Makefile.in b/postfix/src/virtual/Makefile.in index d0e7bca7d..883e827dc 100644 --- a/postfix/src/virtual/Makefile.in +++ b/postfix/src/virtual/Makefile.in @@ -48,121 +48,124 @@ depend: $(MAKES) (sed '1,/^# do not edit/!d' Makefile.in; \ set -e; for i in [a-z][a-z0-9]*.c; do \ $(CC) -E $(DEFS) $(INCL) $$i | grep -v '[<>]' | sed -n -e '/^# *1 *"\([^"]*\)".*/{' \ - -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' -e 'p' -e '}'; \ - done) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in - @$(EXPORT) make -f Makefile.in Makefile + -e 's//'`echo $$i|sed 's/c$$/o/'`': \1/' \ + -e 's/o: \.\//o: /' -e p -e '}' ; \ + done | sort -u) | grep -v '[.][o][:][ ][/]' >$$$$ && mv $$$$ Makefile.in + @$(EXPORT) make -f Makefile.in Makefile 1>&2 # do not edit below this line - it is generated by 'make depend' -deliver_attr.o: deliver_attr.c -deliver_attr.o: ../../include/sys_defs.h -deliver_attr.o: ../../include/msg.h -deliver_attr.o: ../../include/vstream.h -deliver_attr.o: ../../include/vbuf.h -deliver_attr.o: virtual.h -deliver_attr.o: ../../include/vstring.h +deliver_attr.o: ../../include/argv.h deliver_attr.o: ../../include/deliver_request.h -deliver_attr.o: ../../include/recipient_list.h -deliver_attr.o: ../../include/maps.h deliver_attr.o: ../../include/dict.h -deliver_attr.o: ../../include/argv.h +deliver_attr.o: ../../include/maps.h deliver_attr.o: ../../include/mbox_conf.h -mailbox.o: mailbox.c -mailbox.o: ../../include/sys_defs.h -mailbox.o: ../../include/msg.h -mailbox.o: ../../include/vstring.h -mailbox.o: ../../include/vbuf.h -mailbox.o: ../../include/vstream.h -mailbox.o: ../../include/mymalloc.h -mailbox.o: ../../include/stringops.h -mailbox.o: ../../include/set_eugid.h -mailbox.o: ../../include/mail_copy.h -mailbox.o: ../../include/mbox_open.h -mailbox.o: ../../include/safe_open.h -mailbox.o: ../../include/defer.h +deliver_attr.o: ../../include/msg.h +deliver_attr.o: ../../include/recipient_list.h +deliver_attr.o: ../../include/sys_defs.h +deliver_attr.o: ../../include/vbuf.h +deliver_attr.o: ../../include/vstream.h +deliver_attr.o: ../../include/vstring.h +deliver_attr.o: deliver_attr.c +deliver_attr.o: virtual.h +mailbox.o: ../../include/argv.h mailbox.o: ../../include/bounce.h +mailbox.o: ../../include/defer.h mailbox.o: ../../include/deliver_request.h -mailbox.o: ../../include/recipient_list.h -mailbox.o: ../../include/sent.h -mailbox.o: ../../include/mail_params.h +mailbox.o: ../../include/dict.h +mailbox.o: ../../include/dsn_util.h mailbox.o: ../../include/mail_addr_find.h +mailbox.o: ../../include/mail_copy.h +mailbox.o: ../../include/mail_params.h mailbox.o: ../../include/maps.h -mailbox.o: ../../include/dict.h -mailbox.o: ../../include/argv.h -mailbox.o: virtual.h mailbox.o: ../../include/mbox_conf.h -maildir.o: maildir.c -maildir.o: ../../include/sys_defs.h +mailbox.o: ../../include/mbox_open.h +mailbox.o: ../../include/msg.h +mailbox.o: ../../include/mymalloc.h +mailbox.o: ../../include/recipient_list.h +mailbox.o: ../../include/safe_open.h +mailbox.o: ../../include/sent.h +mailbox.o: ../../include/set_eugid.h +mailbox.o: ../../include/stringops.h +mailbox.o: ../../include/sys_defs.h +mailbox.o: ../../include/vbuf.h +mailbox.o: ../../include/vstream.h +mailbox.o: ../../include/vstring.h +mailbox.o: mailbox.c +mailbox.o: virtual.h +maildir.o: ../../include/argv.h +maildir.o: ../../include/bounce.h +maildir.o: ../../include/defer.h +maildir.o: ../../include/deliver_request.h +maildir.o: ../../include/dict.h +maildir.o: ../../include/dsn_util.h +maildir.o: ../../include/get_hostname.h +maildir.o: ../../include/mail_copy.h +maildir.o: ../../include/mail_params.h +maildir.o: ../../include/make_dirs.h +maildir.o: ../../include/maps.h +maildir.o: ../../include/mbox_conf.h maildir.o: ../../include/msg.h maildir.o: ../../include/mymalloc.h +maildir.o: ../../include/recipient_list.h +maildir.o: ../../include/sane_fsops.h +maildir.o: ../../include/sent.h +maildir.o: ../../include/set_eugid.h maildir.o: ../../include/stringops.h -maildir.o: ../../include/vstring.h +maildir.o: ../../include/sys_defs.h maildir.o: ../../include/vbuf.h maildir.o: ../../include/vstream.h -maildir.o: ../../include/make_dirs.h -maildir.o: ../../include/set_eugid.h -maildir.o: ../../include/get_hostname.h -maildir.o: ../../include/sane_fsops.h -maildir.o: ../../include/mail_copy.h -maildir.o: ../../include/bounce.h -maildir.o: ../../include/deliver_request.h -maildir.o: ../../include/recipient_list.h -maildir.o: ../../include/defer.h -maildir.o: ../../include/sent.h -maildir.o: ../../include/mail_params.h +maildir.o: ../../include/vstring.h +maildir.o: maildir.c maildir.o: virtual.h -maildir.o: ../../include/maps.h -maildir.o: ../../include/dict.h -maildir.o: ../../include/argv.h -maildir.o: ../../include/mbox_conf.h -recipient.o: recipient.c -recipient.o: ../../include/sys_defs.h +recipient.o: ../../include/argv.h +recipient.o: ../../include/bounce.h +recipient.o: ../../include/deliver_request.h +recipient.o: ../../include/dict.h +recipient.o: ../../include/maps.h +recipient.o: ../../include/mbox_conf.h recipient.o: ../../include/msg.h recipient.o: ../../include/mymalloc.h +recipient.o: ../../include/recipient_list.h recipient.o: ../../include/stringops.h -recipient.o: ../../include/vstring.h +recipient.o: ../../include/sys_defs.h recipient.o: ../../include/vbuf.h -recipient.o: ../../include/bounce.h -recipient.o: ../../include/deliver_request.h recipient.o: ../../include/vstream.h -recipient.o: ../../include/recipient_list.h +recipient.o: ../../include/vstring.h +recipient.o: recipient.c recipient.o: virtual.h -recipient.o: ../../include/maps.h -recipient.o: ../../include/dict.h -recipient.o: ../../include/argv.h -recipient.o: ../../include/mbox_conf.h -unknown.o: unknown.c -unknown.o: ../../include/sys_defs.h -unknown.o: ../../include/msg.h +unknown.o: ../../include/argv.h unknown.o: ../../include/bounce.h unknown.o: ../../include/deliver_request.h -unknown.o: ../../include/vstring.h +unknown.o: ../../include/dict.h +unknown.o: ../../include/maps.h +unknown.o: ../../include/mbox_conf.h +unknown.o: ../../include/msg.h +unknown.o: ../../include/recipient_list.h +unknown.o: ../../include/sys_defs.h unknown.o: ../../include/vbuf.h unknown.o: ../../include/vstream.h -unknown.o: ../../include/recipient_list.h +unknown.o: ../../include/vstring.h +unknown.o: unknown.c unknown.o: virtual.h -unknown.o: ../../include/maps.h -unknown.o: ../../include/dict.h -unknown.o: ../../include/argv.h -unknown.o: ../../include/mbox_conf.h -virtual.o: virtual.c -virtual.o: ../../include/sys_defs.h -virtual.o: ../../include/msg.h -virtual.o: ../../include/vstring.h -virtual.o: ../../include/vbuf.h -virtual.o: ../../include/vstream.h -virtual.o: ../../include/iostuff.h -virtual.o: ../../include/set_eugid.h -virtual.o: ../../include/dict.h virtual.o: ../../include/argv.h -virtual.o: ../../include/mail_queue.h -virtual.o: ../../include/recipient_list.h -virtual.o: ../../include/deliver_request.h virtual.o: ../../include/deliver_completed.h -virtual.o: ../../include/mail_params.h -virtual.o: ../../include/mail_conf.h -virtual.o: ../../include/mail_addr_find.h -virtual.o: ../../include/maps.h +virtual.o: ../../include/deliver_request.h +virtual.o: ../../include/dict.h virtual.o: ../../include/flush_clnt.h +virtual.o: ../../include/iostuff.h +virtual.o: ../../include/mail_addr_find.h +virtual.o: ../../include/mail_conf.h +virtual.o: ../../include/mail_params.h +virtual.o: ../../include/mail_queue.h virtual.o: ../../include/mail_server.h -virtual.o: virtual.h +virtual.o: ../../include/maps.h virtual.o: ../../include/mbox_conf.h +virtual.o: ../../include/msg.h +virtual.o: ../../include/recipient_list.h +virtual.o: ../../include/set_eugid.h +virtual.o: ../../include/sys_defs.h +virtual.o: ../../include/vbuf.h +virtual.o: ../../include/vstream.h +virtual.o: ../../include/vstring.h +virtual.o: virtual.c +virtual.o: virtual.h diff --git a/postfix/src/virtual/mailbox.c b/postfix/src/virtual/mailbox.c index afb61978b..664b59466 100644 --- a/postfix/src/virtual/mailbox.c +++ b/postfix/src/virtual/mailbox.c @@ -62,10 +62,6 @@ #include #include -#ifndef EDQUOT -#define EDQUOT EFBIG -#endif - /* Application-specific. */ #include "virtual.h" @@ -78,7 +74,7 @@ static int deliver_mailbox_file(LOCAL_STATE state, USER_ATTR usr_attr) { char *myname = "deliver_mailbox_file"; - VSTRING *why; + DSN_VSTRING *why; MBOX *mp; int mail_copy_status; int deliver_status; @@ -97,7 +93,8 @@ static int deliver_mailbox_file(LOCAL_STATE state, USER_ATTR usr_attr) * Don't deliver trace-only requests. */ if (DEL_REQ_TRACE_ONLY(state.request->flags)) - return (sent(BOUNCE_FLAGS(state.request), SENT_ATTR(state.msg_attr), + return (sent(BOUNCE_FLAGS(state.request), + SENT_ATTR(state.msg_attr, "2.0.0"), "delivers to mailbox")); /* @@ -108,7 +105,7 @@ static int deliver_mailbox_file(LOCAL_STATE state, USER_ATTR usr_attr) msg_fatal("seek message file %s: %m", VSTREAM_PATH(state.msg_attr.fp)); state.msg_attr.delivered = state.msg_attr.recipient; mail_copy_status = MAIL_COPY_STAT_WRITE; - why = vstring_alloc(100); + why = dsn_vstring_alloc(100); /* * Lock the mailbox and open/create the mailbox file. @@ -124,8 +121,9 @@ static int deliver_mailbox_file(LOCAL_STATE state, USER_ATTR usr_attr) if (mp != 0) { if (S_ISREG(st.st_mode) == 0) { vstream_fclose(mp->fp); - vstring_sprintf(why, "destination is not a regular file"); - errno = 0; + dsn_vstring_update(why, "5.2.0", + "destination %s is not a regular file", + usr_attr.mailbox); } else { end = vstream_fseek(mp->fp, (off_t) 0, SEEK_END); mail_copy_status = mail_copy(COPY_ATTR(state.msg_attr), mp->fp, @@ -141,16 +139,16 @@ static int deliver_mailbox_file(LOCAL_STATE state, USER_ATTR usr_attr) if (mail_copy_status & MAIL_COPY_STAT_CORRUPT) { deliver_status = DEL_STAT_DEFER; } else if (mail_copy_status != 0) { - deliver_status = (errno == EDQUOT || errno == EFBIG ? - bounce_append : defer_append) - (BOUNCE_FLAGS(state.request), BOUNCE_ATTR(state.msg_attr), - "mailbox %s: %s", usr_attr.mailbox, vstring_str(why)); + deliver_status = (why->dsn[0] == '4' ? defer_append : bounce_append) + (BOUNCE_FLAGS(state.request), + BOUNCE_ATTR(state.msg_attr, why->dsn), + "mailbox %s: %s", usr_attr.mailbox, vstring_str(why->vstring)); } else { deliver_status = sent(BOUNCE_FLAGS(state.request), - SENT_ATTR(state.msg_attr), + SENT_ATTR(state.msg_attr, "2.0.0"), "delivered to mailbox"); } - vstring_free(why); + dsn_vstring_free(why); return (deliver_status); } @@ -191,7 +189,7 @@ int deliver_mailbox(LOCAL_STATE state, USER_ATTR usr_attr, int *statusp) return (NO); *statusp = defer_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "4.3.0"), "%s: lookup %s: %m", virtual_mailbox_maps->title, state.msg_attr.user); return (YES); @@ -208,14 +206,14 @@ int deliver_mailbox(LOCAL_STATE state, USER_ATTR usr_attr, int *statusp) IGNORE_EXTENSION); if (uid_res == 0) { *statusp = defer_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "4.3.5"), "recipient %s: uid not found in %s", state.msg_attr.user, virtual_uid_maps->title); RETURN(YES); } if ((n = atol(uid_res)) < var_virt_minimum_uid) { *statusp = defer_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "4.3.5"), "recipient %s: bad uid %s in %s", state.msg_attr.user, uid_res, virtual_uid_maps->title); RETURN(YES); @@ -229,14 +227,14 @@ int deliver_mailbox(LOCAL_STATE state, USER_ATTR usr_attr, int *statusp) IGNORE_EXTENSION); if (gid_res == 0) { *statusp = defer_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "4.3.5"), "recipient %s: gid not found in %s", state.msg_attr.user, virtual_gid_maps->title); RETURN(YES); } if ((n = atol(gid_res)) <= 0) { *statusp = defer_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "4.3.5"), "recipient %s: bad gid %s in %s", state.msg_attr.user, gid_res, virtual_gid_maps->title); RETURN(YES); diff --git a/postfix/src/virtual/maildir.c b/postfix/src/virtual/maildir.c index b7f46bddd..00d2e0a46 100644 --- a/postfix/src/virtual/maildir.c +++ b/postfix/src/virtual/maildir.c @@ -41,10 +41,6 @@ #include #include -#ifndef EDQUOT -#define EDQUOT EFBIG -#endif - /* Utility library. */ #include @@ -79,7 +75,7 @@ int deliver_maildir(LOCAL_STATE state, USER_ATTR usr_attr) char *curdir; char *tmpfile; char *newfile; - VSTRING *why; + DSN_VSTRING *why; VSTRING *buf; VSTREAM *dst; int mail_copy_status; @@ -101,7 +97,8 @@ int deliver_maildir(LOCAL_STATE state, USER_ATTR usr_attr) * Don't deliver trace-only requests. */ if (DEL_REQ_TRACE_ONLY(state.request->flags)) - return (sent(BOUNCE_FLAGS(state.request), SENT_ATTR(state.msg_attr), + return (sent(BOUNCE_FLAGS(state.request), + SENT_ATTR(state.msg_attr, "2.0.0"), "delivers to maildir")); /* @@ -113,7 +110,7 @@ int deliver_maildir(LOCAL_STATE state, USER_ATTR usr_attr) state.msg_attr.delivered = state.msg_attr.recipient; mail_copy_status = MAIL_COPY_STAT_WRITE; buf = vstring_alloc(100); - why = vstring_alloc(100); + why = dsn_vstring_alloc(100); copy_flags = MAIL_COPY_TOFILE | MAIL_COPY_RETURN_PATH | MAIL_COPY_DELIVERED | MAIL_COPY_ORIG_RCPT; @@ -185,9 +182,9 @@ int deliver_maildir(LOCAL_STATE state, USER_ATTR usr_attr) && (errno != ENOENT || make_dirs(tmpdir, 0700) < 0 || (dst = vstream_fopen(tmpfile, O_WRONLY | O_CREAT | O_EXCL, 0600)) == 0)) { - vstring_sprintf(why, "create %s: %m", tmpfile); + dsn_vstring_update(why, "5.2.0", "create maildir file %s: %m", tmpfile); } else if (fstat(vstream_fileno(dst), &st) < 0) { - vstring_sprintf(why, "create %s: %m", tmpfile); + dsn_vstring_update(why, "5.2.0", "create maildir file %s: %m", tmpfile); } else { vstring_sprintf(buf, "%lu.V%lxI%lxM%lu.%s", (unsigned long) starttime.tv_sec, @@ -202,7 +199,8 @@ int deliver_maildir(LOCAL_STATE state, USER_ATTR usr_attr) && (errno != ENOENT || (make_dirs(curdir, 0700), make_dirs(newdir, 0700)) < 0 || sane_link(tmpfile, newfile) < 0)) { - vstring_sprintf(why, "link to %s: %m", newfile); + dsn_vstring_update(why, "5.2.0", + "create maildir file %s: %m", newfile); mail_copy_status = MAIL_COPY_STAT_WRITE; } } @@ -219,22 +217,23 @@ int deliver_maildir(LOCAL_STATE state, USER_ATTR usr_attr) if (mail_copy_status & MAIL_COPY_STAT_CORRUPT) { deliver_status = DEL_STAT_DEFER; } else if (mail_copy_status != 0) { - deliver_status = (errno == EDQUOT || errno == EFBIG ? - bounce_append : defer_append) - (BOUNCE_FLAGS(state.request), BOUNCE_ATTR(state.msg_attr), - "maildir delivery failed: %s", vstring_str(why)); + deliver_status = (why->dsn[0] == '4' ? defer_append : bounce_append) + (BOUNCE_FLAGS(state.request), + BOUNCE_ATTR(state.msg_attr, why->dsn), + "maildir delivery failed: %s", vstring_str(why->vstring)); if (errno == EACCES) { msg_warn("maildir access problem for UID/GID=%lu/%lu: %s", - (long) usr_attr.uid, (long) usr_attr.gid, vstring_str(why)); + (long) usr_attr.uid, (long) usr_attr.gid, + vstring_str(why->vstring)); msg_warn("perhaps you need to create the maildirs in advance"); } } else { deliver_status = sent(BOUNCE_FLAGS(state.request), - SENT_ATTR(state.msg_attr), + SENT_ATTR(state.msg_attr, "2.0.0"), "delivered to maildir"); } vstring_free(buf); - vstring_free(why); + dsn_vstring_free(why); myfree(newdir); myfree(tmpdir); myfree(curdir); diff --git a/postfix/src/virtual/unknown.c b/postfix/src/virtual/unknown.c index b372c507b..24b5fce6a 100644 --- a/postfix/src/virtual/unknown.c +++ b/postfix/src/virtual/unknown.c @@ -59,6 +59,6 @@ int deliver_unknown(LOCAL_STATE state) MSG_LOG_STATE(myname, state); return (bounce_append(BOUNCE_FLAGS(state.request), - BOUNCE_ATTR(state.msg_attr), + BOUNCE_ATTR(state.msg_attr, "5.1.1"), "unknown user: \"%s\"", state.msg_attr.user)); } diff --git a/postfix/src/virtual/virtual.h b/postfix/src/virtual/virtual.h index 83c9e14fd..eb1cbeda0 100644 --- a/postfix/src/virtual/virtual.h +++ b/postfix/src/virtual/virtual.h @@ -96,14 +96,14 @@ typedef struct LOCAL_STATE { */ #define BOUNCE_FLAGS(request) DEL_REQ_TRACE_FLAGS((request)->flags) -#define BOUNCE_ATTR(attr) attr.queue_id, attr.orig_rcpt, attr.recipient, \ - attr.rcpt_offset, attr.relay, \ - attr.arrival_time -#define SENT_ATTR(attr) attr.queue_id, attr.orig_rcpt, attr.recipient, \ - attr.rcpt_offset, attr.relay, \ - attr.arrival_time -#define COPY_ATTR(attr) attr.sender, attr.orig_rcpt, attr.delivered, \ - attr.fp +#define BOUNCE_ATTR(attr, detail) \ + attr.queue_id, attr.orig_rcpt, attr.recipient, \ + attr.rcpt_offset, attr.relay, detail, attr.arrival_time +#define SENT_ATTR(attr, detail) \ + attr.queue_id, attr.orig_rcpt, attr.recipient, \ + attr.rcpt_offset, attr.relay, detail, attr.arrival_time +#define COPY_ATTR(attr) \ + attr.sender, attr.orig_rcpt, attr.delivered, attr.fp #define MSG_LOG_STATE(m, p) \ msg_info("%s[%d]: recip %s deliver %s", m, \