]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-2.5-20071006
authorWietse Venema <wietse@porcupine.org>
Sat, 6 Oct 2007 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <viktor@dukhovni.org>
Tue, 5 Feb 2013 06:33:22 +0000 (06:33 +0000)
20 files changed:
postfix/HISTORY
postfix/WISHLIST
postfix/html/postconf.5.html
postfix/html/qmqpd.8.html
postfix/html/smtpd.8.html
postfix/man/man5/postconf.5
postfix/man/man8/qmqpd.8
postfix/man/man8/smtpd.8
postfix/mantools/postlink
postfix/proto/postconf.proto
postfix/src/cleanup/cleanup_milter.c
postfix/src/global/mail_params.h
postfix/src/global/mail_version.h
postfix/src/qmqpd/qmqpd.c
postfix/src/qmqpd/qmqpd_peer.c
postfix/src/smtpd/smtpd.c
postfix/src/smtpd/smtpd_chat.c
postfix/src/smtpd/smtpd_milter.c
postfix/src/smtpd/smtpd_peer.c
postfix/src/smtpd/smtpd_sasl_glue.c

index 1fd2f8758b7a83d8d8210e4242f1194da3b482e4..76ef2cb7fb42497c8d66e7a612dc21481da3db0a 100644 (file)
@@ -13756,3 +13756,18 @@ Apologies for any names omitted.
 
        Feature: per-command delays in smtp-sink. File:
        smtpstone/smtp-sink.c.  Victor Duchovni.
+
+20071006
+
+       Cleanup: updated a bunch of hard-coded host[addr] logging
+       statements. Files: smtpd/smtpd.c, smtpd/smtpd_chat.c,
+       smtpd/smtpd_sasl_glue.c.
+
+       Cleanup: client port logging is now configurable (off by
+       default). Parameters: smtpd_client_port_logging and
+       qmqpd_client_port_logging. Files: smtpd/smtpd_peer.c,
+       qmqpd/qmqpd_peer.c.
+
+       Cleanup: send client port information "0" instead of "unknown"
+       to Milter applications. Files: smtpd/smtpd.c, smtpd/smtpd_milter.c,
+       cleanup/cleanup_milter.c.
index ceb73dee81ffb76c4778eaa3338412d8b40481d1..30c45f92dcdce8d4901333767afe7bee57db00de 100644 (file)
@@ -1,5 +1,8 @@
 Wish list:
 
+       Make event_drain() a proper event loop; update the zero mask,
+       and don't ignore a non-empty timer queue.
+
        Combine smtpd_peer.c and qmqpd_peer.c into a single function
        that produces a client context object, and provide attribute
        print/scan routines that pass these client context objects
index 8886ee9e883ce1f611a1a021737e4ef4c63935f7..77e571316d901746927a52282fb16a470c781103 100644 (file)
@@ -5999,6 +5999,18 @@ Example:
 </pre>
 
 
+</DD>
+
+<DT><b><a name="qmqpd_client_port_logging">qmqpd_client_port_logging</a>
+(default: no)</b></DT><DD>
+
+<p> Enable logging of the remote QMQP client port in addition to
+the hostname and IP address. The logging format is "host[address]:port".
+</p>
+
+<p> This feature is available in Postfix 2.5 and later. </p>
+
+
 </DD>
 
 <DT><b><a name="qmqpd_error_delay">qmqpd_error_delay</a>
@@ -9207,6 +9219,18 @@ Example:
 </pre>
 
 
+</DD>
+
+<DT><b><a name="smtpd_client_port_logging">smtpd_client_port_logging</a>
+(default: no)</b></DT><DD>
+
+<p> Enable logging of the remote SMTP client port in addition to
+the hostname and IP address. The logging format is "host[address]:port".
+</p>
+
+<p> This feature is available in Postfix 2.5 and later. </p>
+
+
 </DD>
 
 <DT><b><a name="smtpd_client_recipient_rate_limit">smtpd_client_recipient_rate_limit</a>
index 9583cc1a0ed2ce414dc832e0c8cb2a36981536a0..9b877bd67dd0963b8a9c18f20429f9e63ef54e32 100644 (file)
@@ -134,21 +134,25 @@ QMQPD(8)                                                              QMQPD(8)
               What clients are allowed to  connect  to  the  QMQP
               server port.
 
+       <b>qmqpd_client_port_logging (no)</b>
+              Enable  logging  of  the remote QMQP client port in
+              addition to the hostname and IP address.
+
        <b><a href="postconf.5.html#queue_directory">queue_directory</a> (see 'postconf -d' output)</b>
-              The  location of the Postfix top-level queue direc-
+              The location of the Postfix top-level queue  direc-
               tory.
 
        <b><a href="postconf.5.html#syslog_facility">syslog_facility</a> (mail)</b>
               The syslog facility of Postfix logging.
 
        <b><a href="postconf.5.html#syslog_name">syslog_name</a> (postfix)</b>
-              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".
 
        <b><a href="postconf.5.html#verp_delimiter_filter">verp_delimiter_filter</a> (-=+)</b>
-              The characters Postfix accepts  as  VERP  delimiter
-              characters  on the Postfix <a href="sendmail.1.html"><b>sendmail</b>(1)</a> command line
+              The  characters  Postfix  accepts as VERP delimiter
+              characters on the Postfix <a href="sendmail.1.html"><b>sendmail</b>(1)</a> command  line
               and in SMTP commands.
 
 <b>SEE ALSO</b>
@@ -161,7 +165,7 @@ QMQPD(8)                                                              QMQPD(8)
        <a href="QMQP_README.html">QMQP_README</a>, Postfix ezmlm-idx howto.
 
 <b>LICENSE</b>
-       The  Secure  Mailer  license must be distributed with this
+       The Secure Mailer license must be  distributed  with  this
        software.
 
 <b>HISTORY</b>
index ca03ac772f28331d5d293d4a1a31cb76303ce911..1c80ad9547879679905d0aaaa0ad554c7beaf88b 100644 (file)
@@ -1123,6 +1123,12 @@ SMTPD(8)                                                              SMTPD(8)
               server  to immediately terminate the session with a
               221 code.
 
+       Available in Postfix version 2.5 and later:
+
+       <b><a href="postconf.5.html#smtpd_client_port_logging">smtpd_client_port_logging</a> (no)</b>
+              Enable logging of the remote SMTP  client  port  in
+              addition to the hostname and IP address.
+
 <b>SEE ALSO</b>
        <a href="anvil.8.html">anvil(8)</a>, connection/rate limiting
        <a href="cleanup.8.html">cleanup(8)</a>, message canonicalization
@@ -1150,7 +1156,7 @@ SMTPD(8)                                                              SMTPD(8)
        <a href="XFORWARD_README.html">XFORWARD_README</a>, Postfix XFORWARD extension
 
 <b>LICENSE</b>
-       The  Secure  Mailer  license must be distributed with this
+       The Secure Mailer license must be  distributed  with  this
        software.
 
 <b>AUTHOR(S)</b>
index d4275b69571181ae99f2667bfb3e3a13be1a3987..2c41ca371383009f125973e0b488e736d5d4e886 100644 (file)
@@ -3287,6 +3287,11 @@ qmqpd_authorized_clients = !192.168.0.1, 192.168.0.0/24
 .fi
 .ad
 .ft R
+.SH qmqpd_client_port_logging (default: no)
+Enable logging of the remote QMQP client port in addition to
+the hostname and IP address. The logging format is "host[address]:port".
+.PP
+This feature is available in Postfix 2.5 and later.
 .SH qmqpd_error_delay (default: 1s)
 How long the QMQP server will pause before sending a negative reply
 to the client. The purpose is to slow down confused or malicious
@@ -5433,6 +5438,11 @@ smtpd_client_new_tls_session_rate_limit = 100
 .fi
 .ad
 .ft R
+.SH smtpd_client_port_logging (default: no)
+Enable logging of the remote SMTP client port in addition to
+the hostname and IP address. The logging format is "host[address]:port".
+.PP
+This feature is available in Postfix 2.5 and later.
 .SH smtpd_client_recipient_rate_limit (default: 0)
 The maximal number of recipient addresses that any client is allowed
 to send to this service per time unit, regardless of whether or not
index 6ca72e751d8a81de0055df11007cb746e821fd7d..b9e0a231c48e5742b5a50267aad93667f1a36ee4 100644 (file)
@@ -130,6 +130,9 @@ The process ID of a Postfix command or daemon process.
 The process name of a Postfix command or daemon process.
 .IP "\fBqmqpd_authorized_clients (empty)\fR"
 What clients are allowed to connect to the QMQP server port.
+.IP "\fBqmqpd_client_port_logging (no)\fR"
+Enable logging of the remote QMQP client port in addition to
+the hostname and IP address.
 .IP "\fBqueue_directory (see 'postconf -d' output)\fR"
 The location of the Postfix top-level queue directory.
 .IP "\fBsyslog_facility (mail)\fR"
index fb7e606f1a07241082f1159df5045680cf7b0c60..595354b06fed3381f50cd1708adf0be1b0a34427 100644 (file)
@@ -883,6 +883,11 @@ Available in Postfix version 2.2 and later:
 .IP "\fBsmtpd_forbidden_commands (CONNECT, GET, POST)\fR"
 List of commands that causes the Postfix SMTP server to immediately
 terminate the session with a 221 code.
+.PP
+Available in Postfix version 2.5 and later:
+.IP "\fBsmtpd_client_port_logging (no)\fR"
+Enable logging of the remote SMTP client port in addition to
+the hostname and IP address.
 .SH "SEE ALSO"
 .na
 .nf
index ae6d162e6f6c0e06de07392a8694dc6723ce6bda..34421491a72511b1c06277a7b6b8e49a2d927b7b 100755 (executable)
@@ -447,6 +447,7 @@ while (<>) {
     s;\bsmtpd_client_event_limit_exceptions\b;<a href="postconf.5.html#smtpd_client_event_limit_exceptions">$&</a>;g;
     s;\bsmtpd_client_connection_rate_limit\b;<a href="postconf.5.html#smtpd_client_connection_rate_limit">$&</a>;g;
     s;\bsmtpd_client_message_rate_limit\b;<a href="postconf.5.html#smtpd_client_message_rate_limit">$&</a>;g;
+    s;\bsmtpd_client_port_logging\b;<a href="postconf.5.html#smtpd_client_port_logging">$&</a>;g;
     s;\bsmtpd_client_recipient_rate_limit\b;<a href="postconf.5.html#smtpd_client_recipient_rate_limit">$&</a>;g;
     s;\bsmtpd_client_new_tls_session_rate_limit\b;<a href="postconf.5.html#smtpd_client_new_tls_session_rate_limit">$&</a>;g;
     s;\bsmtpd_client_restrictions\b;<a href="postconf.5.html#smtpd_client_restrictions">$&</a>;g;
index 7f4b36f7e35f08247d526c2dd88fadf19cc4dda0..bc5ed79b404d90fbe9a0b59ab8f05135f46a8522 100644 (file)
@@ -10617,3 +10617,19 @@ to the SASL authcid, but this causes inter-operability problems
 with some SMTP servers. </p>
 
 <p> This feature is available in Postfix 2.4.4 and later. </p>
+
+%PARAM smtpd_client_port_logging no
+
+<p> Enable logging of the remote SMTP client port in addition to
+the hostname and IP address. The logging format is "host[address]:port".
+</p>
+
+<p> This feature is available in Postfix 2.5 and later. </p>
+
+%PARAM qmqpd_client_port_logging no
+
+<p> Enable logging of the remote QMQP client port in addition to
+the hostname and IP address. The logging format is "host[address]:port".
+</p>
+
+<p> This feature is available in Postfix 2.5 and later. </p>
index cb30af472790b3cdbeae761200705b9ccac185df..e4e575c72833205e9920312b4c28d75e0ef98b37 100644 (file)
@@ -1270,6 +1270,10 @@ static const char *cleanup_milter_eval(const char *name, void *ptr)
     /*
      * Connect macros.
      */
+#ifndef CLIENT_ATTR_UNKNOWN
+#define CLIENT_ATTR_UNKNOWN "unknown"
+#endif
+
     if (strcmp(name, S8_MAC__) == 0) {
        vstring_sprintf(state->temp1, "%s [%s]",
                        state->reverse_name, state->client_addr);
@@ -1284,7 +1288,9 @@ static const char *cleanup_milter_eval(const char *name, void *ptr)
     if (strcmp(name, S8_MAC_CLIENT_NAME) == 0)
        return (state->client_name);
     if (strcmp(name, S8_MAC_CLIENT_PORT) == 0)
-       return (state->client_port);
+       return (state->client_port
+               && strcmp(state->client_port, CLIENT_ATTR_UNKNOWN) ?
+               state->client_port : "0");
     if (strcmp(name, S8_MAC_CLIENT_PTR) == 0)
        return (state->reverse_name);
 
index ad77418410b7d75686ef5f119f45ab7a26829155..bbae895c76a9b5a864814ca8851c306cba80f6d6 100644 (file)
@@ -2791,6 +2791,17 @@ extern char *var_milt_v;
 #define DEF_INT_FILT_CLASSES           ""
 extern char *var_int_filt_classes;
 
+ /*
+  * This could break logfile processors, so it's off by default.
+  */
+#define VAR_SMTPD_CLIENT_PORT_LOG              "smtpd_client_port_logging"
+#define DEF_SMTPD_CLIENT_PORT_LOG              0
+extern bool var_smtpd_client_port_log;
+
+#define VAR_QMQPD_CLIENT_PORT_LOG              "qmqpd_client_port_logging"
+#define DEF_QMQPD_CLIENT_PORT_LOG              0
+extern bool var_qmqpd_client_port_log;
+
 /* LICENSE
 /* .ad
 /* .fi
index eeb6dca2922f88e5205d2e287a290049e70db970..ec6dc43814328ce27f8e6534486b38b24b37d11e 100644 (file)
@@ -20,7 +20,7 @@
   * Patches change both the patchlevel and the release date. Snapshots have no
   * patchlevel; they change the release date only.
   */
-#define MAIL_RELEASE_DATE      "20071004"
+#define MAIL_RELEASE_DATE      "20071006"
 #define MAIL_VERSION_NUMBER    "2.5"
 
 #ifdef SNAPSHOT
index b88d5a45938ec2de0aa82f9e74cb7f8192936846..c73a7d59eb8c912ecb04b4fe3ca8df3baf70da9e 100644 (file)
 /*     The process name of a Postfix command or daemon process.
 /* .IP "\fBqmqpd_authorized_clients (empty)\fR"
 /*     What clients are allowed to connect to the QMQP server port.
+/* .IP "\fBqmqpd_client_port_logging (no)\fR"
+/*     Enable logging of the remote QMQP client port in addition to
+/*     the hostname and IP address.
 /* .IP "\fBqueue_directory (see 'postconf -d' output)\fR"
 /*     The location of the Postfix top-level queue directory.
 /* .IP "\fBsyslog_facility (mail)\fR"
@@ -200,6 +203,7 @@ int     var_qmqpd_err_sleep;
 char   *var_filter_xport;
 char   *var_qmqpd_clients;
 char   *var_input_transp;
+bool    var_qmqpd_client_port_log;
 
  /*
   * Silly little macros.
@@ -782,6 +786,10 @@ int     main(int argc, char **argv)
        VAR_INPUT_TRANSP, DEF_INPUT_TRANSP, &var_input_transp, 0, 0,
        0,
     };
+    static CONFIG_BOOL_TABLE bool_table[] = {
+       VAR_QMQPD_CLIENT_PORT_LOG, DEF_QMQPD_CLIENT_PORT_LOG, &var_qmqpd_client_port_log,
+       0,
+    };
 
     /*
      * Fingerprint executables and core dumps.
index f0c6cc66e2ec03d6ce36f66f415a786d7f729109..f026c9e8624cfb68b905869cdee13281b52c161c 100644 (file)
@@ -276,8 +276,9 @@ void    qmqpd_peer_init(QMQPD_STATE *state)
      * Do the name[addr]:port formatting for pretty reports.
      */
     state->namaddr =
-       concatenate(state->name, "[", state->addr,
-                   "]:", state->port, (char *) 0);
+       concatenate(state->name, "[", state->addr, "]",
+                   var_qmqpd_client_port_log ? ":" : (char *) 0,
+                   state->port, (char *) 0);
 }
 
 /* qmqpd_peer_reset - destroy peer information */
index 91230cc063aedf2fb85075bc122d3d7d01ac802c..58a1f3b1741c362b37b5f27eb8545a1f67b4ee3e 100644 (file)
 /* .IP "\fBsmtpd_forbidden_commands (CONNECT, GET, POST)\fR"
 /*     List of commands that causes the Postfix SMTP server to immediately
 /*     terminate the session with a 221 code.
+/* .PP
+/*     Available in Postfix version 2.5 and later:
+/* .IP "\fBsmtpd_client_port_logging (no)\fR"
+/*     Enable logging of the remote SMTP client port in addition to
+/*     the hostname and IP address.
 /* SEE ALSO
 /*     anvil(8), connection/rate limiting
 /*     cleanup(8), message canonicalization
@@ -1124,6 +1129,7 @@ char   *var_milt_rcpt_macros;
 char   *var_milt_data_macros;
 char   *var_milt_eod_macros;
 char   *var_milt_unk_macros;
+bool    var_smtpd_client_port_log;
 
  /*
   * Silly little macros.
@@ -1228,8 +1234,8 @@ static int sasl_client_exception(SMTPD_STATE *state)
                              state->name, state->addr);
 
     if (msg_verbose)
-       msg_info("sasl_exceptions: %s[%s], match=%d",
-                state->name, state->addr, match);
+       msg_info("sasl_exceptions: %s, match=%d",
+                state->namaddr, match);
 
     return (match);
 }
@@ -3933,8 +3939,8 @@ static void smtpd_proto(SMTPD_STATE *state)
     switch (status) {
 
     default:
-       msg_panic("smtpd_proto: unknown error reading from %s[%s]",
-                 state->name, state->addr);
+       msg_panic("smtpd_proto: unknown error reading from %s",
+                 state->namaddr);
        break;
 
     case SMTP_ERR_TIME:
@@ -4055,7 +4061,9 @@ static void smtpd_proto(SMTPD_STATE *state)
                milter_macro_callback(smtpd_milters, smtpd_milter_eval,
                                      (void *) state);
                if ((err = milter_conn_event(smtpd_milters, state->name,
-                                            state->addr, state->port,
+                                            state->addr,
+                                 strcmp(state->port, CLIENT_PORT_UNKNOWN) ?
+                                            state->port : "0",
                                             state->addr_family)) != 0)
                    err = check_milter_reply(state, err);
            }
@@ -4191,13 +4199,13 @@ static void smtpd_proto(SMTPD_STATE *state)
      */
     if (state->reason && state->where) {
        if (strcmp(state->where, SMTPD_CMD_DATA) == 0) {
-           msg_info("%s after %s (%lu bytes) from %s[%s]",
+           msg_info("%s after %s (%lu bytes) from %s",
                     state->reason, state->where, (long) state->act_size,
-                    state->name, state->addr);
+                    state->namaddr);
        } else if (strcmp(state->where, SMTPD_AFTER_DOT)
                   || strcmp(state->reason, REASON_LOST_CONNECTION)) {
-           msg_info("%s after %s from %s[%s]",
-                    state->reason, state->where, state->name, state->addr);
+           msg_info("%s after %s from %s",
+                    state->reason, state->where, state->namaddr);
        }
     }
 
@@ -4640,6 +4648,7 @@ int     main(int argc, char **argv)
 #endif
        VAR_SMTPD_PEERNAME_LOOKUP, DEF_SMTPD_PEERNAME_LOOKUP, &var_smtpd_peername_lookup,
        VAR_SMTPD_DELAY_OPEN, DEF_SMTPD_DELAY_OPEN, &var_smtpd_delay_open,
+       VAR_SMTPD_CLIENT_PORT_LOG, DEF_SMTPD_CLIENT_PORT_LOG, &var_smtpd_client_port_log,
        0,
     };
     static CONFIG_STR_TABLE str_table[] = {
index d37efd99c18eee3890cd0372e77c30285b5a67a8..861192863efc32d7d6b63e3a3da19f6544467847 100644 (file)
@@ -127,12 +127,12 @@ void    smtpd_chat_query(SMTPD_STATE *state)
     last_char = smtp_get(state->buffer, state->client, var_line_limit);
     smtp_chat_append(state, "In:  ");
     if (last_char != '\n')
-       msg_warn("%s[%s]: request longer than %d: %.30s...",
-                state->name, state->addr, var_line_limit,
+       msg_warn("%s: request longer than %d: %.30s...",
+                state->namaddr, var_line_limit,
                 printable(STR(state->buffer), '?'));
 
     if (msg_verbose)
-       msg_info("< %s[%s]: %s", state->name, state->addr, STR(state->buffer));
+       msg_info("< %s: %s", state->namaddr, STR(state->buffer));
 }
 
 /* smtpd_chat_reply - format, send and record an SMTP response */
@@ -154,7 +154,7 @@ void    smtpd_chat_reply(SMTPD_STATE *state, const char *format,...)
     smtp_chat_append(state, "Out: ");
 
     if (msg_verbose)
-       msg_info("> %s[%s]: %s", state->name, state->addr, STR(state->buffer));
+       msg_info("> %s: %s", state->namaddr, STR(state->buffer));
 
     /*
      * Slow down clients that make errors. Sleep-on-anything slows down
@@ -236,8 +236,8 @@ void    smtpd_chat_notify(SMTPD_STATE *state)
     post_mail_fprintf(notice, "From: %s (Mail Delivery System)",
                      mail_addr_mail_daemon());
     post_mail_fprintf(notice, "To: %s (Postmaster)", var_error_rcpt);
-    post_mail_fprintf(notice, "Subject: %s SMTP server: errors from %s[%s]",
-                     var_mail_name, state->name, state->addr);
+    post_mail_fprintf(notice, "Subject: %s SMTP server: errors from %s",
+                     var_mail_name, state->namaddr);
     post_mail_fputs(notice, "");
     post_mail_fputs(notice, "Transcript of session follows.");
     post_mail_fputs(notice, "");
index 7e3546e4d7fda91b16843123ecc6544d86a6bfef..356debed5d7211414257ff7a1d943c804671e403 100644 (file)
@@ -93,7 +93,7 @@ const char *smtpd_milter_eval(const char *name, void *ptr)
     if (strcmp(name, S8_MAC_CLIENT_ADDR) == 0)
        return (state->rfc_addr);
     if (strcmp(name, S8_MAC_CLIENT_PORT) == 0)
-       return (state->port);
+       return (strcmp(state->port, CLIENT_PORT_UNKNOWN) ? state->port : "0");
     if (strcmp(name, S8_MAC_CLIENT_CONN) == 0) {
        if (state->expand_buf == 0)
            state->expand_buf = vstring_alloc(10);
index dc5ea0d9f8bed964673d527ab20e06e45fcd74ff..8abfcb0c94fffed74169f5b4c06a60a0fe7c241b 100644 (file)
@@ -374,8 +374,9 @@ void    smtpd_peer_init(SMTPD_STATE *state)
      * Do the name[addr]:port formatting for pretty reports.
      */
     state->namaddr =
-       concatenate(state->name, "[", state->addr,
-                   "]:", state->port, (char *) 0);
+       concatenate(state->name, "[", state->addr, "]",
+                   var_smtpd_client_port_log ? ":" : (char *) 0,
+                   state->port, (char *) 0);
 }
 
 /* smtpd_peer_reset - destroy peer information */
index fb87a83bf33bbfe20a7a64eb4cca0e40e4a7ad1b..87f58053b214656dd40bbf809dab63b5f0417250 100644 (file)
@@ -248,15 +248,15 @@ int     smtpd_sasl_authenticate(SMTPD_STATE *state,
         */
        smtpd_chat_query(state);
        if (strcmp(STR(state->buffer), "*") == 0) {
-           msg_warn("%s[%s]: SASL %s authentication aborted",
-                    state->name, state->addr, sasl_method);
+           msg_warn("%s: SASL %s authentication aborted",
+                    state->namaddr, sasl_method);
            smtpd_chat_reply(state, "501 5.7.0 Authentication aborted");
            return (-1);
        }
     }
     if (status != XSASL_AUTH_DONE) {
-       msg_warn("%s[%s]: SASL %s authentication failed: %s",
-                state->name, state->addr, sasl_method,
+       msg_warn("%s: SASL %s authentication failed: %s",
+                state->namaddr, sasl_method,
                 STR(state->sasl_reply));
        /* RFC 4954 Section 6. */
        smtpd_chat_reply(state, "535 5.7.8 Error: authentication failed: %s",