that it produced before (for example, the error text that appears
in the first section of a bounce report).
-The Postfix LMTP/SMTP clients also report locally generated SMTP-style
-Diagnostic-Code: text (such as "420 conversation timed out") while
-taking care NOT to present these as if they are replies from the
-remote MTA (Sendmail appears to violate RFC 3464 here).
+Other error reports are not in the form of SMTP-style replies.
-That was the easy part. The remainder of Postfix is still somewhat
-inconsistent in the way that it creates the formal Diagnostic-Type:
-and Diagnostic-Code: information.
+- The Postfix LMTP/SMTP client generates Diagnostic-Type: X-Postfix
+for locally generated errors (host not found, connection timed out
+etc.). It generates Diagnostic-Type: SMTP only for replies from
+an SMTP server.
-- The queue manager attempts to produce standard SMTP Diagnostic-Type:
-and Diagnostic-Code: information for errors that it detects. It
-also receives error information from delivery agents and reports
-that information unmodified when it decides to "temporarily suspend"
-a delivery channel.
+- The queue manager generates Diagnostic-Type: X-Postfix for errors
+that it detects. It also receives error information from delivery
+agents and reports that information unmodified when it decides to
+"temporarily suspend" a delivery channel.
- The "pipe to command" code in local(8) and pipe(8) produces
Diagnostic-Type: X-UNIX, and Diagnostic-Code: text that is taken
-from /usr/include/sysexits.h or from the command output. This could
-be morphed into SMTP-style information, by mapping a sysexits error
-code to an SMTP error code, and combining that SMTP code with the
-sysexits.h text or command output. The advantage of this would be
-more useful Diagnostic-Code: information.
+from /usr/include/sysexits.h or from the command output.
- The code that delivers to mailbox produces Diagnostic-Type:
-X-Postfix and Diagnostic-Code: text that is the same good old Postfix
-error message that we are already familiar with. Typically these
-are errno-style reports about locking a file or appending a file.
-This information could be morphed into SMTP-style information, by
-mapping an errno error code into an SMTP error code, and combining
-that SMTP code with the Postfix-style text that we already have
-(such as text that says unable to lock mailbox, or mailbox file
-size limit exceeded).
-
-I'm not (yet) religious about banning X-UNIX and X-Postfix from the
-formal part of a delivery status report, but all these non-standard
-diagnostic codes aren't really very useful.
+X-Postfix and Diagnostic-Code: text that is the same good old
+Postfix error message that we are already familiar with. Typically
+these are errno-style reports about locking a file or appending a
+file.
errors while processing milter message modification requests.
Files: cleanup/cleanup_milter.c, milter/milter8.c.
+20060703
+
+ Debugging: the Postfix milter client gives more context
+ when it experiences trouble while talking to an uncooperative
+ Milter application. File: milter/milter8.c.
+
+ Compatibility: with OpenBSD 2.7 and later, the alias file
+ is now in /etc/mail/aliases.
+
Wish list:
In the SMTPD policy client (encode or strip) non-printable
/etc/postfix/master.cf:
maildrop unix - n n - - pipe
- flags=DRhu user=vmail argv=/path/to/maildrop -d ${recipient}
+ flags=ODRhu user=vmail argv=/path/to/maildrop -d ${recipient}
+
+The pipe(8) manual page gives a detailed description of the above command line
+arguments, and more.
If you want to support user+extension@domain style addresses, use the following
instead:
/etc/postfix/master.cf:
maildrop unix - n n - - pipe
- flags=DRhu user=vmail argv=/path/to/maildrop
+ flags=ODRhu user=vmail argv=/path/to/maildrop
-d ${user}@${nexthop} ${extension} ${recipient} ${user} ${nexthop}
The mail is delivered to ${user}@${nexthop} (match key for maildrop userdb
<blockquote>
<pre>
- 1 /etc/postfix/main.cf:
+ 1 /etc/postfix/<a href="postconf.5.html">main.cf</a>:
2 maildrop_destination_recipient_limit = 1
3 <a href="postconf.5.html#virtual_mailbox_domains">virtual_mailbox_domains</a> = some.domain someother.domain
4 <a href="postconf.5.html#virtual_transport">virtual_transport</a> = maildrop
<li> <p> Line 3 informs Postfix that some.domain and someother.domain
are so-called <a href="ADDRESS_CLASS_README.html#virtual_mailbox_class">virtual mailbox domains</a>.
-Instead of listing the names in main.cf you can also
+Instead of listing the names in <a href="postconf.5.html">main.cf</a> you can also
list them in a file; see the <a href="postconf.5.html#virtual_mailbox_domains">virtual_mailbox_domains</a> documentation for
details. </p>
<blockquote>
<pre>
-/etc/postfix/master.cf:
+/etc/postfix/<a href="master.5.html">master.cf</a>:
maildrop unix - n n - - pipe
- flags=DRhu user=vmail argv=/path/to/maildrop -d ${recipient}
+ flags=ODRhu user=vmail argv=/path/to/maildrop -d ${recipient}
</pre>
</blockquote>
+<p> The <a href="pipe.8.html">pipe(8)</a> manual page gives a detailed description of the
+above command line arguments, and more. </p>
+
<p> If you want to support user+extension@domain style addresses,
use the following instead: </p>
<blockquote>
<pre>
-/etc/postfix/master.cf:
+/etc/postfix/<a href="master.5.html">master.cf</a>:
maildrop unix - n n - - pipe
- flags=DRhu user=vmail argv=/path/to/maildrop
+ flags=ODRhu user=vmail argv=/path/to/maildrop
-d ${user}@${nexthop} ${extension} ${recipient} ${user} ${nexthop}
</pre>
</blockquote>
<p> The mail is delivered to ${user}@${nexthop} (match key for
maildrop userdb lookup). The ${extension} and the other address
components are available to maildrop rules as $1, $2, $3, ... and
-can be omitted from master.cf or ignored by maildrop when not
+can be omitted from <a href="master.5.html">master.cf</a> or ignored by maildrop when not
needed. </p>
<h2><a name="indirect">Indirect delivery via the local delivery agent</a></h2>
<blockquote>
<pre>
-/etc/postfix/main.cf:
+/etc/postfix/<a href="postconf.5.html">main.cf</a>:
<a href="postconf.5.html#mailbox_command">mailbox_command</a> = /path/to/maildrop -d ${USER}
</pre>
</blockquote>
<blockquote>
<pre>
-/etc/postfix/main.cf:
+/etc/postfix/<a href="postconf.5.html">main.cf</a>:
<a href="postconf.5.html#mailbox_command_maps">mailbox_command_maps</a> = hash:/etc/postfix/mailbox_commands
/etc/postfix/mailbox_commands:
export SYSTYPE AR ARFL RANLIB SYSLIBS CC OPT DEBUG AWK OPTS
# Snapshot only.
-CCARGS="$CCARGS -DSNAPSHOT"
+#CCARGS="$CCARGS -DSNAPSHOT"
# Non-production: needs thorough testing, or major changes are still
# needed before the code stabilizes.
<pre>
/etc/postfix/master.cf:
maildrop unix - n n - - pipe
- flags=DRhu user=vmail argv=/path/to/maildrop -d ${recipient}
+ flags=ODRhu user=vmail argv=/path/to/maildrop -d ${recipient}
</pre>
</blockquote>
+<p> The pipe(8) manual page gives a detailed description of the
+above command line arguments, and more. </p>
+
<p> If you want to support user+extension@domain style addresses,
use the following instead: </p>
<pre>
/etc/postfix/master.cf:
maildrop unix - n n - - pipe
- flags=DRhu user=vmail argv=/path/to/maildrop
+ flags=ODRhu user=vmail argv=/path/to/maildrop
-d ${user}@${nexthop} ${extension} ${recipient} ${user} ${nexthop}
</pre>
</blockquote>
#define DEF_LMTP_SASL_TLS_OPTS "$" VAR_LMTP_SASL_OPTS
extern char *var_smtp_sasl_tls_opts;
-#ifdef SNAPSHOT /* XXX: Not yet */
#define VAR_SMTP_SASL_TLSV_OPTS "smtp_sasl_tls_verified_security_options"
#define DEF_SMTP_SASL_TLSV_OPTS "$" VAR_SMTP_SASL_TLS_OPTS
#define VAR_LMTP_SASL_TLSV_OPTS "lmtp_sasl_tls_verified_security_options"
#define DEF_LMTP_SASL_TLSV_OPTS "$" VAR_LMTP_SASL_TLS_OPTS
extern char *var_smtp_sasl_tlsv_opts;
-#endif
-
/*
* LMTP server. The soft error limit determines how many errors an LMTP
* client may make before we start to slow down; the hard error limit
* Patches change both the patchlevel and the release date. Snapshots have no
* patchlevel; they change the release date only.
*/
-#define MAIL_RELEASE_DATE "20060702"
-#define MAIL_VERSION_NUMBER "2.3-RC3"
+#define MAIL_RELEASE_DATE "20060703"
+#define MAIL_VERSION_NUMBER "2.3-RC4"
#define VAR_MAIL_VERSION "mail_version"
#define DEF_MAIL_VERSION MAIL_VERSION_NUMBER
milter->state = MILTER8_STAT_CLOSED;
}
-/* milter8_read_cmd - receive command code now, receive data later */
+/* milter8_read_resp - receive command code now, receive data later */
-static int milter8_read_cmd(MILTER8 *milter, unsigned char *command,
+static int milter8_read_resp(MILTER8 *milter, int event, unsigned char *command,
ssize_t *data_len)
{
UINT32_TYPE len;
ssize_t pkt_len;
+ const char *smfic_name;
int cmd;
/*
*/
if ((vstream_fread(milter->fp, (char *) &len, UINT32_SIZE))
!= UINT32_SIZE) {
- msg_warn("milter %s: can't read packet header: %m", milter->m.name);
+ smfic_name = str_name_code(smfic_table, event);
+ msg_warn("milter %s: can't read %s reply packet header: %m",
+ milter->m.name, smfic_name != 0 ?
+ smfic_name : "(unknown MTA event)");
return (milter8_comm_error(milter));
} else if ((pkt_len = ntohl(len)) < 1) {
msg_warn("milter %s: bad packet length: %ld",
#define IN_CONNECT_EVENT(e) ((e) == SMFIC_CONNECT || (e) == SMFIC_HELO)
for (;;) {
- if (milter8_read_cmd(milter, &cmd, &data_size) != 0)
+ if (milter8_read_resp(milter, event, &cmd, &data_size) != 0)
return (milter->def_reply);
if (msg_verbose)
msg_info("reply: %s data %ld bytes",
/*
* Receive the filter's response and verify that we are compatible.
*/
- else if (milter8_read_cmd(milter, &cmd, &data_len) != 0) {
+ else if (milter8_read_resp(milter, SMFIC_OPTNEG, &cmd, &data_len) != 0) {
msg_warn("milter %s: read error in initial handshake", milter->m.name);
- /* milter8_read_cmd() called milter8_comm_error() */
+ /* milter8_read_resp() called milter8_comm_error() */
} else if (cmd != SMFIC_OPTNEG) {
msg_warn("milter %s: unexpected reply \"%c\" in initial handshake",
milter->m.name, cmd);
#if (defined(__NetBSD_Version__) && __NetBSD_Version__ >= 104250000)
#define ALIAS_DB_MAP "hash:/etc/mail/aliases" /* sendmail 8.10 */
#endif
+#if (defined(OpenBSD) && OpenBSD >= 200006)
+#define ALIAS_DB_MAP "hash:/etc/mail/aliases" /* OpenBSD 2.7 */
+#endif
#ifndef ALIAS_DB_MAP
#define ALIAS_DB_MAP "hash:/etc/aliases"
#endif