]> git.ipfire.org Git - thirdparty/postfix.git/commitdiff
postfix-1.1.11-20021026
authorWietse Venema <wietse@porcupine.org>
Sat, 26 Oct 2002 05:00:00 +0000 (00:00 -0500)
committerViktor Dukhovni <viktor@dukhovni.org>
Tue, 5 Feb 2013 06:28:21 +0000 (06:28 +0000)
23 files changed:
postfix/HISTORY
postfix/RELEASE_NOTES
postfix/src/cleanup/cleanup_envelope.c
postfix/src/cleanup/cleanup_extracted.c
postfix/src/cleanup/cleanup_message.c
postfix/src/cleanup/cleanup_out_recipient.c
postfix/src/global/bounce.c
postfix/src/global/defer.c
postfix/src/global/mail_copy.c
postfix/src/global/mail_copy.h
postfix/src/global/mail_proto.h
postfix/src/global/mail_version.h
postfix/src/global/sent.c
postfix/src/local/forward.c
postfix/src/nqmgr/qmgr_message.c
postfix/src/qmgr/qmgr_message.c
postfix/src/qmqpd/qmqpd.c
postfix/src/smtpd/smtpd.c
postfix/src/smtpd/smtpd_acl.ref
postfix/src/smtpd/smtpd_check.c
postfix/src/smtpd/smtpd_check.ref
postfix/src/smtpd/smtpd_check.ref2
postfix/src/smtpd/smtpd_exp.ref

index ff08a78fb8944992fc52cbe3a26bd6d44df2ff33..f70477f9fe9a0c7a2e383d85015de37baa632cac 100644 (file)
@@ -7083,6 +7083,20 @@ Apologies for any names omitted.
        Feature: X-Original-To: message headers with the raw original
        envelope recipient.
 
+       Logging: status=sent/deferred/bounced/ logging now includes
+       the original recipient address if it differs from the final
+       address.
+
+20020126
+
+       Logging: SMTP UCE reject/warn/hold/discard logging now
+       includes the protocol name and, if available, the hostname
+       given in the SMTP HELO or EHLO command.
+
+       Logging: header/body_checks reject/warn/hold/discard logging
+       now includes the protocol name and, if available, the
+       hostname given in the SMTP HELO or EHLO command.
+
 Open problems:
 
        Low: smtpd should log queue ID with reject/warn/hold/discard
index 5899fdc9ce27e259aa63f2bfd09a328b770b7d47..1972e4cdcd7e2f1de47a91f8e7e245d91df89c98 100644 (file)
@@ -12,6 +12,33 @@ snapshot release).  Patches change the patchlevel and the release
 date. Snapshots change only the release date, unless they include
 the same bugfixes as a patch release.
 
+Incompatible changes with Postfix snapshot 1.1.11-20021026
+==========================================================
+
+Logging formats have changed. This may affect logfile processing
+software.
+
+- The Postfix SMTP UCE reject etc. logging now includes the queue
+ID, the mail protocol (SMTP or ESMTP), and the hostname that was
+received with the HELO or EHLO command, if available.
+
+- The Postfix header/body_checks logging now includes the the mail
+protocol (SMTP, ESMTP, QMQP) and the hostname that was received
+with the SMTP HELO or EHLO command, if available.
+
+The Postfix status=sent/bounced/deferred logging now shows the
+original recipient address (as received before any address rewriting
+or aliasing).  The original recipient address is logged only when
+it differs from the final recipient address.
+
+Major changes with Postfix snapshot 1.1.11-20021026
+===================================================
+
+The Postfix status=sent/bounced/deferred logging now shows the
+original recipient address (as received before any address rewriting
+or aliasing).  The original recipient address is logged only when
+it differs from the final recipient address.
+
 Major changes with Postfix snapshot 1.1.11-20021024
 ===================================================
 
index 64b56e6ffcd77cc86e06da859e9539fec1f76c13..932aacb8eb7edfa865d9b35779d0e352bab64a3b 100644 (file)
@@ -143,6 +143,14 @@ static void cleanup_envelope_process(CLEANUP_STATE *state, int type, char *buf,
     if (msg_verbose)
        msg_info("envelope %c %.*s", type, len, buf);
 
+    if (type != REC_TYPE_RCPT) {
+       if (state->orig_rcpt != 0) {
+           msg_warn("%s: out-of-order original recipient record <%.200s>",
+                    state->queue_id, state->orig_rcpt);
+           myfree(state->orig_rcpt);
+           state->orig_rcpt = 0;
+       }
+    }
     if (type == REC_TYPE_TIME) {
        state->time = atol(buf);
        cleanup_out(state, type, buf, len);
@@ -230,15 +238,9 @@ static void cleanup_envelope_process(CLEANUP_STATE *state, int type, char *buf,
            return;
        }
        nvtable_update(state->attr, attr_name, attr_value);
+    } else if (type == REC_TYPE_ORCP) {
+       state->orig_rcpt = mystrdup(buf);
     } else {
-       if (state->orig_rcpt != 0) {
-           msg_warn("%s: out-of-order original recipient <%.200s>",
-                    state->queue_id, buf);
-           myfree(state->orig_rcpt);
-           state->orig_rcpt = 0;
-       }
-       if (type == REC_TYPE_ORCP)
-           state->orig_rcpt = mystrdup(buf);
        cleanup_out(state, type, buf, len);
     }
 }
index f964380f7de90a43336de950f419024b21a7bb41..df19c49c1937af4a84aacc808390742c9c8feb75 100644 (file)
@@ -127,6 +127,17 @@ static void cleanup_extracted_process(CLEANUP_STATE *state, int type, char *buf,
     ARGV   *rcpt;
     char  **cpp;
 
+    /*
+     * Weird condition for consistency with cleanup_envelope.c
+     */
+    if (type != REC_TYPE_RCPT) {
+       if (state->orig_rcpt != 0) {
+           msg_warn("%s: out-of-order original recipient record <%.200s>",
+                    state->queue_id, buf);
+           myfree(state->orig_rcpt);
+           state->orig_rcpt = 0;
+       }
+    }
     if (type == REC_TYPE_RCPT) {
        clean_addr = vstring_alloc(100);
        if (state->orig_rcpt == 0)
@@ -148,15 +159,8 @@ static void cleanup_extracted_process(CLEANUP_STATE *state, int type, char *buf,
        myfree(state->orig_rcpt);
        state->orig_rcpt = 0;
        return;
-    } else {
-       if (state->orig_rcpt != 0) {
-           msg_warn("%s: out-of-order original recipient <%.200s>",
-                    state->queue_id, buf);
-           myfree(state->orig_rcpt);
-           state->orig_rcpt = 0;
-       }
-       if (type == REC_TYPE_ORCP)
-           state->orig_rcpt = mystrdup(buf);
+    } else if (type == REC_TYPE_ORCP) {
+       state->orig_rcpt = mystrdup(buf);
     }
     if (type != REC_TYPE_END) {
        cleanup_out(state, type, buf, len);
index a683b5e57c0859a622fb9cef6c2e33a2ee0d281a..34ceea2c3228fdc413343101e6274f9811f19dd0 100644 (file)
@@ -260,6 +260,31 @@ static void cleanup_rewrite_recip(CLEANUP_STATE *state, HEADER_OPTS *hdr_opts,
        cleanup_fold_header(state, header_buf);
 }
 
+/* cleanup_act_log - log action with context */
+
+static void cleanup_act_log(CLEANUP_STATE *state,
+                                   const char *action, const char *class,
+                                   const char *content, const char *text)
+{
+    const char *attr;
+
+    if ((attr = nvtable_find(state->attr, MAIL_ATTR_ORIGIN)) == 0)
+       attr="unknown";
+    vstring_sprintf(state->temp1, "%s: %s: %s %.200s from %s;",
+                   state->queue_id, action, class, content, attr);
+    if (state->sender)
+       vstring_sprintf_append(state->temp1, " from=<%s>", state->sender);
+    if (state->recip)
+       vstring_sprintf_append(state->temp1, " to=<%s>", state->recip);
+    if ((attr = nvtable_find(state->attr, MAIL_ATTR_PROTO_NAME)) != 0)
+       vstring_sprintf_append(state->temp1, " proto=%s", attr);
+    if ((attr = nvtable_find(state->attr, MAIL_ATTR_HELO_NAME)) != 0)
+       vstring_sprintf_append(state->temp1, " helo=<%s>", attr);
+    if (text && *text)
+       vstring_sprintf_append(state->temp1, ": %s", text);
+    msg_info("%s", vstring_str(state->temp1));
+}
+
 /* cleanup_act - act upon a header/body match */
 
 static int cleanup_act(CLEANUP_STATE *state, char *context, const char *buf,
@@ -267,7 +292,6 @@ 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;
-    const char *origin;
 
     while (*optional_text && ISSPACE(*optional_text))
        optional_text++;
@@ -275,6 +299,7 @@ static int cleanup_act(CLEANUP_STATE *state, char *context, const char *buf,
 #define STREQUAL(x,y,l) (strncasecmp((x), (y), (l)) == 0 && (y)[l] == 0)
 #define CLEANUP_ACT_KEEP 1
 #define CLEANUP_ACT_DROP 0
+#define STR(x)         vstring_str(x)
 
     if (STREQUAL(value, "REJECT", command_len)) {
        if (state->reason == 0)
@@ -282,20 +307,11 @@ static int cleanup_act(CLEANUP_STATE *state, char *context, const char *buf,
                                     cleanup_strerror(CLEANUP_STAT_CONT));
        state->errs |= CLEANUP_STAT_CONT;
        state->flags &= ~CLEANUP_FLAG_FILTER;
-       if ((origin = nvtable_find(state->attr, MAIL_ATTR_ORIGIN)) == 0)
-           origin = MAIL_ATTR_ORG_NONE;
-       msg_info("%s: reject: %s %.200s from %s; from=<%s> to=<%s>: %s",
-                state->queue_id, context, buf, origin, state->sender,
-                state->recip ? state->recip : "unknown",
-                state->reason);
+       cleanup_act_log(state, "reject", context, buf, state->reason);
        return (CLEANUP_ACT_KEEP);
     }
     if (STREQUAL(value, "WARN", command_len)) {
-       msg_info("%s: warning: %s %.200s; from=<%s> to=<%s>%s%s",
-                state->queue_id, context, buf, state->sender,
-                state->recip ? state->recip : "unknown",
-                *optional_text ? ": " : "",
-                *optional_text ? optional_text : "");
+       cleanup_act_log(state, "warning", context, buf, optional_text);
        return (CLEANUP_ACT_KEEP);
     }
     if (STREQUAL(value, "FILTER", command_len)) {
@@ -304,26 +320,19 @@ static int cleanup_act(CLEANUP_STATE *state, char *context, const char *buf,
        } else {
            if (state->filter)
                myfree(state->filter);
+           /* XXX should log something? */
            state->filter = mystrdup(optional_text);
        }
        return (CLEANUP_ACT_KEEP);
     }
     if (STREQUAL(value, "DISCARD", command_len)) {
-       msg_info("%s: discard: %s %.200s; from=<%s> to=<%s>%s%s",
-                state->queue_id, context, buf, state->sender,
-                state->recip ? state->recip : "unknown",
-                *optional_text ? ": " : "",
-                *optional_text ? optional_text : "");
+       cleanup_act_log(state, "discard", context, buf, optional_text);
        state->flags |= CLEANUP_FLAG_DISCARD;
        state->flags &= ~CLEANUP_FLAG_FILTER;
        return (CLEANUP_ACT_KEEP);
     }
     if (STREQUAL(value, "HOLD", command_len)) {
-       msg_info("%s: hold: %s %.200s; from=<%s> to=<%s>%s%s",
-                state->queue_id, context, buf, state->sender,
-                state->recip ? state->recip : "unknown",
-                *optional_text ? ": " : "",
-                *optional_text ? optional_text : "");
+       cleanup_act_log(state, "hold", context, buf, optional_text);
        state->flags |= CLEANUP_FLAG_HOLD;
        return (CLEANUP_ACT_KEEP);
     }
index a45bba88b460525c08120a4e0ed1d180cf6e08f2..4491532df9ec853c482f2a318bea865573c00c17 100644 (file)
@@ -68,22 +68,27 @@ void    cleanup_out_recipient(CLEANUP_STATE *state, const char *orcpt,
     ARGV   *argv;
     char  **cpp;
 
+    /*
+     * Apply the duplicate recipient filter before virtual expansion, so that
+     * we can distinguish between different addresses that map onto the same
+     * mailbox. The recipient will use our original recipient message header
+     * to figure things out.
+     */
+    if (been_here_fixed(state->dups, recip) != 0)
+       return;
+
     if (cleanup_virtual_maps == 0) {
-       if (been_here_fixed(state->dups, orcpt) == 0) {
-           if (strcasecmp(orcpt, recip) != 0)
-               cleanup_out_string(state, REC_TYPE_ORCP, orcpt);
-           cleanup_out_string(state, REC_TYPE_RCPT, recip);
-           state->rcpt_count++;
-       }
+       if (strcasecmp(orcpt, recip) != 0)
+           cleanup_out_string(state, REC_TYPE_ORCP, orcpt);
+       cleanup_out_string(state, REC_TYPE_RCPT, recip);
+       state->rcpt_count++;
     } else {
        argv = cleanup_map1n_internal(state, recip, cleanup_virtual_maps,
                                  cleanup_ext_prop_mask & EXT_PROP_VIRTUAL);
-       if (been_here_fixed(state->dups, orcpt) == 0) {
-           for (cpp = argv->argv; *cpp; cpp++) {
-               cleanup_out_string(state, REC_TYPE_ORCP, orcpt);
-               cleanup_out_string(state, REC_TYPE_RCPT, *cpp);
-               state->rcpt_count++;
-           }
+       for (cpp = argv->argv; *cpp; cpp++) {
+           cleanup_out_string(state, REC_TYPE_ORCP, orcpt);
+           cleanup_out_string(state, REC_TYPE_RCPT, *cpp);
+           state->rcpt_count++;
        }
        argv_free(argv);
     }
index 13d5fc20fc57df57ed92f4225a750c7ae0721a12..11e68d280721a20973fdcfe1a8248980042f2f6c 100644 (file)
 /* .IP entry
 /*     Message arrival time.
 /* .IP orig_rcpt
-/*     The original envelope recipient address.
+/*     The original envelope recipient address. If unavailable,
+/*     specify a null string or null pointer.
 /* .IP recipient
 /*     Recipient address that the message could not be delivered to.
 /*     This information is used for syslogging only.
 #include <stdlib.h>                    /* 44BSD stdarg.h uses abort() */
 #include <time.h>
 #include <stdarg.h>
+#include <string.h>
+
+#ifdef STRCASECMP_IN_STRINGS_H
+#include <strings.h>
+#endif
 
 /* Utility library. */
 
@@ -189,6 +195,8 @@ int     vbounce_append(int flags, const char *id, const char *orig_rcpt,
     why = vstring_alloc(100);
     delay = time((time_t *) 0) - entry;
     vstring_vsprintf(why, fmt, ap);
+    if (orig_rcpt == 0)
+       orig_rcpt = "";
     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,
@@ -198,11 +206,18 @@ int     vbounce_append(int flags, const char *id, const char *orig_rcpt,
                            ATTR_TYPE_STR, MAIL_ATTR_RECIP, recipient,
                            ATTR_TYPE_STR, MAIL_ATTR_WHY, vstring_str(why),
                            ATTR_TYPE_END) == 0) {
-       msg_info("%s: orig_to=<%s>, to=<%s>, relay=%s, delay=%d, status=%s (%s%s)",
-                id, orig_rcpt, recipient, relay, delay,
-                var_soft_bounce ? "deferred" : "bounced",
-                var_soft_bounce ? "SOFT BOUNCE - " : "",
-                vstring_str(why));
+       if (*orig_rcpt && strcasecmp(recipient, orig_rcpt) != 0)
+           msg_info("%s: to=<%s>, orig_to=<%s>, relay=%s, delay=%d, status=%s (%s%s)",
+                    id, recipient, orig_rcpt, relay, delay,
+                    var_soft_bounce ? "deferred" : "bounced",
+                    var_soft_bounce ? "SOFT BOUNCE - " : "",
+                    vstring_str(why));
+       else
+           msg_info("%s: to=<%s>, relay=%s, delay=%d, status=%s (%s%s)",
+                    id, recipient, relay, delay,
+                    var_soft_bounce ? "deferred" : "bounced",
+                    var_soft_bounce ? "SOFT BOUNCE - " : "",
+                    vstring_str(why));
        status = (var_soft_bounce ? -1 : 0);
     } else if ((flags & BOUNCE_FLAG_CLEAN) == 0) {
        status = defer_append(flags, id, orig_rcpt, recipient, "bounce", entry,
@@ -284,6 +299,8 @@ int     vbounce_one(int flags, const char *queue, const char *id,
     why = vstring_alloc(100);
     delay = time((time_t *) 0) - entry;
     vstring_vsprintf(why, fmt, ap);
+    if (orig_rcpt == 0)
+       orig_rcpt = "";
     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,
@@ -295,8 +312,12 @@ int     vbounce_one(int flags, const char *queue, const char *id,
                            ATTR_TYPE_STR, MAIL_ATTR_RECIP, recipient,
                            ATTR_TYPE_STR, MAIL_ATTR_WHY, vstring_str(why),
                            ATTR_TYPE_END) == 0) {
-       msg_info("%s: to=<%s>, relay=%s, delay=%d, status=bounced (%s)",
-                id, recipient, relay, delay, vstring_str(why));
+       if (*orig_rcpt && strcasecmp(recipient, orig_rcpt) != 0)
+           msg_info("%s: to=<%s>, orig_to=<%s>, relay=%s, delay=%d, status=bounced (%s)",
+                 id, recipient, orig_rcpt, relay, delay, vstring_str(why));
+       else
+           msg_info("%s: to=<%s>, relay=%s, delay=%d, status=bounced (%s)",
+                    id, recipient, relay, delay, vstring_str(why));
        status = 0;
     } else if ((flags & BOUNCE_FLAG_CLEAN) == 0) {
        status = defer_append(flags, id, orig_rcpt, recipient, "bounce", entry,
index beb8b04a5be7d3a76e387e5c0a151163427c4e84..324d9fc131220c2901b17146a9d997494156ec82 100644 (file)
@@ -73,7 +73,8 @@
 /* .IP id
 /*     The queue id of the original message file.
 /* .IP orig_rcpt
-/*     The original envelope recipient address.
+/*     The original envelope recipient address. If unavailable,
+/*     specify a null string or null pointer.
 /* .IP recipient
 /*     A recipient address that is being deferred. The domain part
 /*     of the address is marked dead (for a limited amount of time).
 #include <stdarg.h>
 #include <string.h>
 
+#ifdef STRCASECMP_IN_STRINGS_H
+#include <strings.h>
+#endif
+
 /* Utility library. */
 
 #include <msg.h>
@@ -158,17 +163,23 @@ int     vdefer_append(int flags, const char *id, const char *orig_rcpt,
     const char *rcpt_domain;
 
     vstring_vsprintf(why, fmt, ap);
+    if (orig_rcpt == 0)
+       orig_rcpt = "";
     if (mail_command_client(MAIL_CLASS_PRIVATE, var_defer_service,
-                           ATTR_TYPE_NUM, MAIL_ATTR_NREQ, BOUNCE_CMD_APPEND,
-                           ATTR_TYPE_NUM, MAIL_ATTR_FLAGS, flags,
-                           ATTR_TYPE_STR, MAIL_ATTR_QUEUEID, id,
-                           ATTR_TYPE_STR, MAIL_ATTR_ORCPT, orig_rcpt,
-                           ATTR_TYPE_STR, MAIL_ATTR_RECIP, recipient,
-                           ATTR_TYPE_STR, MAIL_ATTR_WHY, vstring_str(why),
-                           ATTR_TYPE_END) != 0)
-       msg_warn("%s: defer service failure", id);
-    msg_info("%s: orig_to=<%s>, to=<%s>, relay=%s, delay=%d, status=deferred (%s)",
-            id, orig_rcpt, recipient, relay, delay, vstring_str(why));
+                          ATTR_TYPE_NUM, MAIL_ATTR_NREQ, BOUNCE_CMD_APPEND,
+                               ATTR_TYPE_NUM, MAIL_ATTR_FLAGS, flags,
+                               ATTR_TYPE_STR, MAIL_ATTR_QUEUEID, id,
+                               ATTR_TYPE_STR, MAIL_ATTR_ORCPT, orig_rcpt,
+                               ATTR_TYPE_STR, MAIL_ATTR_RECIP, recipient,
+                            ATTR_TYPE_STR, MAIL_ATTR_WHY, vstring_str(why),
+                               ATTR_TYPE_END) != 0)
+           msg_warn("%s: defer service failure", id);
+    if (*orig_rcpt && strcasecmp(recipient, orig_rcpt) != 0)
+       msg_info("%s: to=<%s>, orig_to=<%s>, relay=%s, delay=%d, status=deferred (%s)",
+                id, recipient, orig_rcpt, relay, delay, vstring_str(why));
+    else
+       msg_info("%s: to=<%s>, relay=%s, delay=%d, status=deferred (%s)",
+                id, recipient, relay, delay, vstring_str(why));
     vstring_free(why);
 
     /*
index 596bd8c4bd64dd82ff4a5d2c206e3609934fd375..dc51da9eacbc3f84e92aa8ced0bc46cf8ff49a75 100644 (file)
@@ -6,9 +6,9 @@
 /* SYNOPSIS
 /*     #include <mail_copy.h>
 /*
-/*     int     mail_copy(sender, envrcpt, delivered, src, dst, flags, eol, why)
+/*     int     mail_copy(sender, orig_to, delivered, src, dst, flags, eol, why)
 /*     const char *sender;
-/*     const char *envrcpt;
+/*     const char *orig_to;
 /*     const char *delivered;
 /*     VSTREAM *src;
 /*     VSTREAM *dst;
@@ -166,15 +166,13 @@ int     mail_copy(const char *sender,
        if (orig_rcpt == 0)
            msg_panic("%s: null orig_rcpt", myname);
        quote_822_local(buf, orig_rcpt);
-       vstream_fprintf(dst, "X-Original-To: %s%s",
-                       lowercase(vstring_str(buf)), eol);
+       vstream_fprintf(dst, "X-Original-To: %s%s", vstring_str(buf), eol);
     }
     if (flags & MAIL_COPY_DELIVERED) {
        if (delivered == 0)
            msg_panic("%s: null delivered", myname);
        quote_822_local(buf, delivered);
-       vstream_fprintf(dst, "Delivered-To: %s%s",
-                       lowercase(vstring_str(buf)), eol);
+       vstream_fprintf(dst, "Delivered-To: %s%s", vstring_str(buf), eol);
     }
 
     /*
index e7d650ff8537828e3bf312ca1404aa2d30b05e27..bd7f1d58f2c35f3fed37dd4a0665ebf7d3411d25 100644 (file)
@@ -31,7 +31,7 @@ extern int mail_copy(const char *, const char *, const char *,
 #define MAIL_COPY_RETURN_PATH  (1<<4)  /* prepend Return-Path: */
 #define MAIL_COPY_DOT          (1<<5)  /* escape dots - needed for bsmtp */
 #define MAIL_COPY_BLANK                (1<<6)  /* append blank line */
-#define MAIL_COPY_ORIG_RCPT    (1<<7)  /* prepend Delivered-To: */
+#define MAIL_COPY_ORIG_RCPT    (1<<7)  /* prepend X-Original-To: */
 #define MAIL_COPY_MBOX         (MAIL_COPY_FROM | MAIL_COPY_QUOTE | \
                                    MAIL_COPY_TOFILE | MAIL_COPY_DELIVERED | \
                                    MAIL_COPY_RETURN_PATH | MAIL_COPY_BLANK | \
index 4168d7eadec0f0fd9597296890f75fd373f1ec6d..0cd707aa38172b3eda26a1f2272e126d0ba448b4 100644 (file)
@@ -127,6 +127,7 @@ extern char *mail_pathname(const char *, const char *);
 #define MAIL_ATTR_CLIENT_NAME  "client_name"   /* client hostname */
 #define MAIL_ATTR_CLIENT_ADDR  "client_address"        /* client address */
 #define MAIL_ATTR_HELO_NAME    "helo_name"     /* SMTP helo name */
+#define MAIL_ATTR_PROTO_NAME   "protocol_name" /* SMTP/ESMTP/QMQP/... */
 #define MAIL_ATTR_ORIGIN       "message_origin"        /* hostname[address] */
 #define MAIL_ATTR_ORG_NONE     "unknown"       /* origin unknown */
 #define MAIL_ATTR_ORG_LOCAL    "local" /* local submission */
index e4b133be5b1c0c5cbc8a82a8eddf7a8b06e95ba6..9969d2ad45e5854072d8bdc40b03bacf1a965c63 100644 (file)
@@ -20,7 +20,7 @@
   * Patches change the patchlevel and the release date. Snapshots change the
   * release date only, unless they include the same bugfix as a patch release.
   */
-#define MAIL_RELEASE_DATE      "20021025"
+#define MAIL_RELEASE_DATE      "20021026"
 
 #define VAR_MAIL_VERSION       "mail_version"
 #define DEF_MAIL_VERSION       "1.1.11-" MAIL_RELEASE_DATE
index 25e60059d6802a4cfb416fbfb47ea1ad2f972167..37c1f207883be48735d5a3c0a278d70573c53fed 100644 (file)
@@ -31,7 +31,8 @@
 /* .IP queue_id
 /*     The message queue id.
 /* .IP orig_rcpt
-/*     The original envelope recipient address
+/*     The original envelope recipient address. If unavailable,
+/*     specify a null string or a null pointer.
 /* .IP recipient
 /*     The recipient address.
 /* .IP relay
 #include <stdio.h>
 #include <stdlib.h>                    /* 44BSD stdarg.h uses abort() */
 #include <stdarg.h>
+#include <string.h>
+
+#ifdef STRCASECMP_IN_STRINGS_H
+#include <strings.h>
+#endif
 
 /* Utility library. */
 
@@ -99,9 +105,14 @@ int     vsent(const char *queue_id, const char *orig_rcpt,
     int     delay = time((time_t *) 0) - entry;
 
     vstring_vsprintf(text, fmt, ap);
-    msg_info("%s: orig_to=<%s>, to=<%s>, relay=%s, delay=%d, status=sent%s%s%s",
-            queue_id, orig_rcpt, recipient, relay, delay,
-            *TEXT ? " (" : "", TEXT, *TEXT ? ")" : "");
+    if (orig_rcpt && *orig_rcpt && strcasecmp(recipient, orig_rcpt) != 0)
+       msg_info("%s: to=<%s>, orig_to=<%s>, relay=%s, delay=%d, status=sent%s%s%s",
+                queue_id, recipient, orig_rcpt, relay, delay,
+                *TEXT ? " (" : "", TEXT, *TEXT ? ")" : "");
+    else
+       msg_info("%s: to=<%s>, relay=%s, delay=%d, status=sent%s%s%s",
+                queue_id, recipient, relay, delay,
+                *TEXT ? " (" : "", TEXT, *TEXT ? ")" : "");
     vstring_free(text);
     return (0);
 }
index a15cc5592849b224785adfdd8454b6bea8722065..77ebc9282c7d87aa4d8020bc200210b7dac91f40 100644 (file)
@@ -187,6 +187,7 @@ int     forward_append(DELIVER_ATTR attr)
     /*
      * Append the recipient to the message envelope.
      */
+    rec_fputs(info->cleanup, REC_TYPE_ORCP, attr.orig_rcpt);
     rec_fputs(info->cleanup, REC_TYPE_RCPT, attr.recipient);
 
     return (vstream_ferror(info->cleanup));
index f1f5fdbf205ab99221204f9a11c3c5b40de55cd4..fae69c51c3feda5bf5ce693c87f776c6236f8f93 100644 (file)
@@ -403,6 +403,10 @@ static int qmgr_message_read(QMGR_MESSAGE *message)
                message->rcpt_unread--;
                qmgr_rcpt_list_add(&message->rcpt_list, curr_offset,
                                   orig_rcpt, start);
+               if (orig_rcpt) {
+                   myfree(orig_rcpt);
+                   orig_rcpt = 0;
+               }
                if (message->rcpt_list.len >= recipient_limit) {
                    if ((message->rcpt_offset = vstream_ftell(message->fp)) < 0)
                        msg_fatal("vstream_ftell %s: %m",
@@ -458,7 +462,7 @@ static int qmgr_message_read(QMGR_MESSAGE *message)
            }
        }
        if (orig_rcpt != 0) {
-           msg_warn("%s: out-of-order original recipient <%.200s>",
+           msg_warn("%s: out-of-order original recipient record <%.200s>",
                     message->queue_id, start);
            myfree(orig_rcpt);
            orig_rcpt = 0;
index fd92d7d5234638f99985515408602861d3e68efe..91f70482f3f81edd66838cc8957425fcd0454ab4 100644 (file)
@@ -342,7 +342,7 @@ static int qmgr_message_read(QMGR_MESSAGE *message)
            }
        }
        if (orig_rcpt != 0) {
-           msg_warn("%s: out-of-order original recipient <%.200s>",
+           msg_warn("%s: out-of-order original recipient record <%.200s>",
                     message->queue_id, start);
            myfree(orig_rcpt);
            orig_rcpt = 0;
index c11e4f6b6fa17e336a5120c2980a1cfa66b12e7e..60f42c08ab982860d81e0a6ac4b1bdbb2a96f28c 100644 (file)
@@ -191,7 +191,8 @@ static void qmqpd_open_file(QMQPD_STATE *state)
                  MAIL_CLASS_PUBLIC, var_cleanup_service);
     state->cleanup = state->dest->stream;
     state->queue_id = mystrdup(state->dest->id);
-    msg_info("%s: client=%s", state->queue_id, state->namaddr);
+    msg_info("%s: client=%s proto=%s", state->queue_id,
+            state->namaddr, state->protocol);
 
     /*
      * Record the time of arrival. Optionally, enable content filtering (not
@@ -266,6 +267,8 @@ static void qmqpd_write_attributes(QMQPD_STATE *state)
                MAIL_ATTR_CLIENT_ADDR, state->addr);
     rec_fprintf(state->cleanup, REC_TYPE_ATTR, "%s=%s",
                MAIL_ATTR_ORIGIN, state->namaddr);
+    rec_fprintf(state->cleanup, REC_TYPE_ATTR, "%s=%s",
+               MAIL_ATTR_PROTO_NAME, state->protocol);
 }
 
 /* qmqpd_copy_recipients - copy message recipients */
index 7e9a1152c17c21d773fec0d2bd76278033742b4b..ebdbd93e1c4b72f98a50e3c1d38df07abaa455d1 100644 (file)
@@ -818,6 +818,8 @@ static int mail_cmd(SMTPD_STATE *state, int argc, SMTPD_TOKEN *argv)
        if (state->helo_name != 0)
            rec_fprintf(state->cleanup, REC_TYPE_ATTR, "%s=%s",
                        MAIL_ATTR_HELO_NAME, state->helo_name);
+       rec_fprintf(state->cleanup, REC_TYPE_ATTR, "%s=%s",
+                   MAIL_ATTR_PROTO_NAME, state->protocol);
     }
     if (verp_delims)
        rec_fputs(state->cleanup, REC_TYPE_VERP, verp_delims);
index 08ca5591642609e1db635f30ad0f3deaf68ed431..0613b949b0201a1d05ed435a17b3cc9e863ac2a6 100644 (file)
@@ -16,7 +16,7 @@ OK
 OK
 >>> # Expect: REJECT
 >>> helo foo.dunno.com
-./smtpd_check: reject: HELO from localhost[127.0.0.1]: 554 <foo.dunno.com>: Helo command rejected: Access denied
+./smtpd_check: <queue id>: reject: HELO from localhost[127.0.0.1]: 554 <foo.dunno.com>: Helo command rejected: Access denied; proto=SMTP helo=<foo.dunno.com>
 554 <foo.dunno.com>: Helo command rejected: Access denied
 >>> # Expect: OK
 >>> helo bar.dunno.com
@@ -31,7 +31,7 @@ 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 <foo.dunno.com[131.155.210.17]>: Client host rejected: Access denied
+./smtpd_check: <queue id>: reject: CONNECT from foo.dunno.com[131.155.210.17]: 554 <foo.dunno.com[131.155.210.17]>: Client host rejected: Access denied; proto=SMTP helo=<foo.duuno.com>
 554 <foo.dunno.com[131.155.210.17]>: Client host rejected: Access denied
 >>> # Expect: OK
 >>> client bar.dunno.com 131.155.210.17
@@ -47,18 +47,18 @@ 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 <bar.duno.com[131.155.210.19]>: Client host rejected: Access denied
+./smtpd_check: <queue id>: reject: CONNECT from bar.duno.com[131.155.210.19]: 554 <bar.duno.com[131.155.210.19]>: Client host rejected: Access denied; proto=SMTP helo=<foo.duuno.com>
 554 <bar.duno.com[131.155.210.19]>: 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 <bar.duno.com[44.33.22.11]>: Client host rejected: Access denied
+./smtpd_check: <queue id>: reject: CONNECT from bar.duno.com[44.33.22.11]: 554 <bar.duno.com[44.33.22.11]>: Client host rejected: Access denied; proto=SMTP helo=<foo.duuno.com>
 554 <bar.duno.com[44.33.22.11]>: 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 <bar.duno.com[44.33.44.33]>: Client host rejected: Access denied
+./smtpd_check: <queue id>: reject: CONNECT from bar.duno.com[44.33.44.33]: 554 <bar.duno.com[44.33.44.33]>: Client host rejected: Access denied; proto=SMTP helo=<foo.duuno.com>
 554 <bar.duno.com[44.33.44.33]>: Client host rejected: Access denied
 >>> #
 >>> # Test check_mail_access()
@@ -67,7 +67,7 @@ OK
 OK
 >>> # Expect: REJECT
 >>> mail reject@dunno.domain
-./smtpd_check: reject: MAIL from bar.duno.com[44.33.44.33]: 554 <reject@dunno.domain>: Sender address rejected: Access denied; from=<reject@dunno.domain>
+./smtpd_check: <queue id>: reject: MAIL from bar.duno.com[44.33.44.33]: 554 <reject@dunno.domain>: Sender address rejected: Access denied; from=<reject@dunno.domain> proto=SMTP helo=<foo.duuno.com>
 554 <reject@dunno.domain>: Sender address rejected: Access denied
 >>> # Expect: OK
 >>> mail ok@dunno.domain
@@ -83,25 +83,25 @@ OK
 >>> #
 >>> # Expect: REJECT  
 >>> mail reject@reject.domain
-./smtpd_check: reject: MAIL from bar.duno.com[44.33.44.33]: 554 <reject@reject.domain>: Sender address rejected: Access denied; from=<reject@reject.domain>
+./smtpd_check: <queue id>: reject: MAIL from bar.duno.com[44.33.44.33]: 554 <reject@reject.domain>: Sender address rejected: Access denied; from=<reject@reject.domain> proto=SMTP helo=<foo.duuno.com>
 554 <reject@reject.domain>: 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 <anyone@reject.domain>: Sender address rejected: Access denied; from=<anyone@reject.domain>
+./smtpd_check: <queue id>: reject: MAIL from bar.duno.com[44.33.44.33]: 554 <anyone@reject.domain>: Sender address rejected: Access denied; from=<anyone@reject.domain> proto=SMTP helo=<foo.duuno.com>
 554 <anyone@reject.domain>: 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 <good-sender@reject.domain>: Sender address rejected: Access denied; from=<good-sender@reject.domain>
+./smtpd_check: <queue id>: reject: MAIL from bar.duno.com[44.33.44.33]: 554 <good-sender@reject.domain>: Sender address rejected: Access denied; from=<good-sender@reject.domain> proto=SMTP helo=<foo.duuno.com>
 554 <good-sender@reject.domain>: 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 <reject@ok.domain>: Sender address rejected: Access denied; from=<reject@ok.domain>
+./smtpd_check: <queue id>: reject: MAIL from bar.duno.com[44.33.44.33]: 554 <reject@ok.domain>: Sender address rejected: Access denied; from=<reject@ok.domain> proto=SMTP helo=<foo.duuno.com>
 554 <reject@ok.domain>: Sender address rejected: Access denied
 >>> # Expect: OK
 >>> mail ok@ok.domain
@@ -119,13 +119,13 @@ OK
 OK
 >>> # Expect: REJECT
 >>> rcpt reject@dunno.domain
-./smtpd_check: reject: RCPT from bar.duno.com[44.33.44.33]: 554 <reject@dunno.domain>: Recipient address rejected: Access denied; from=<bad-sender@ok.domain> to=<reject@dunno.domain>
+./smtpd_check: <queue id>: reject: RCPT from bar.duno.com[44.33.44.33]: 554 <reject@dunno.domain>: Recipient address rejected: Access denied; from=<bad-sender@ok.domain> to=<reject@dunno.domain> proto=SMTP helo=<foo.duuno.com>
 554 <reject@dunno.domain>: 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 <reject+ext@dunno.domain>: Recipient address rejected: Access denied; from=<bad-sender@ok.domain> to=<reject+ext@dunno.domain>
+./smtpd_check: <queue id>: reject: RCPT from bar.duno.com[44.33.44.33]: 554 <reject+ext@dunno.domain>: Recipient address rejected: Access denied; from=<bad-sender@ok.domain> to=<reject+ext@dunno.domain> proto=SMTP helo=<foo.duuno.com>
 554 <reject+ext@dunno.domain>: Recipient address rejected: Access denied
 >>> recipient_delimiter |
 OK
@@ -150,25 +150,25 @@ OK
 >>> #
 >>> # Expect: REJECT  
 >>> rcpt reject@reject.domain
-./smtpd_check: reject: RCPT from bar.duno.com[44.33.44.33]: 554 <reject@reject.domain>: Recipient address rejected: Access denied; from=<bad-sender@ok.domain> to=<reject@reject.domain>
+./smtpd_check: <queue id>: reject: RCPT from bar.duno.com[44.33.44.33]: 554 <reject@reject.domain>: Recipient address rejected: Access denied; from=<bad-sender@ok.domain> to=<reject@reject.domain> proto=SMTP helo=<foo.duuno.com>
 554 <reject@reject.domain>: 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 <anyone@reject.domain>: Recipient address rejected: Access denied; from=<bad-sender@ok.domain> to=<anyone@reject.domain>
+./smtpd_check: <queue id>: reject: RCPT from bar.duno.com[44.33.44.33]: 554 <anyone@reject.domain>: Recipient address rejected: Access denied; from=<bad-sender@ok.domain> to=<anyone@reject.domain> proto=SMTP helo=<foo.duuno.com>
 554 <anyone@reject.domain>: 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 <good-sender@reject.domain>: Recipient address rejected: Access denied; from=<bad-sender@ok.domain> to=<good-sender@reject.domain>
+./smtpd_check: <queue id>: reject: RCPT from bar.duno.com[44.33.44.33]: 554 <good-sender@reject.domain>: Recipient address rejected: Access denied; from=<bad-sender@ok.domain> to=<good-sender@reject.domain> proto=SMTP helo=<foo.duuno.com>
 554 <good-sender@reject.domain>: 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 <reject@ok.domain>: Recipient address rejected: Access denied; from=<bad-sender@ok.domain> to=<reject@ok.domain>
+./smtpd_check: <queue id>: reject: RCPT from bar.duno.com[44.33.44.33]: 554 <reject@ok.domain>: Recipient address rejected: Access denied; from=<bad-sender@ok.domain> to=<reject@ok.domain> proto=SMTP helo=<foo.duuno.com>
 554 <reject@ok.domain>: Recipient address rejected: Access denied
 >>> # Expect: OK
 >>> rcpt ok@ok.domain
@@ -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=<>
+./smtpd_check: <queue id>: reject: MAIL from bar.duno.com[44.33.44.33]: 550 <>: Sender address rejected: Go away postmaster; from=<> proto=SMTP helo=<foo.duuno.com>
 550 <>: Sender address rejected: Go away postmaster
index a3fb09752c471d0d2f2b24f5717b65b31cc4692d..3b41403fc21944fdc1af3bf82c0f5fa8354d7c49 100644 (file)
@@ -720,27 +720,21 @@ void    smtpd_check_init(void)
 static void log_whatsup(SMTPD_STATE *state, const char *whatsup,
                                const char *text)
 {
+    VSTRING *buf = vstring_alloc(100);
 
-    /*
-     * XXX should include queue ID but that will break all existing logfile
-     * parsers.
-     */
-    if (state->recipient && state->sender) {
-       msg_info("%s: %s from %s: %s; from=<%s> to=<%s>",
-                whatsup, state->where, state->namaddr, text,
-                state->sender, state->recipient);
-    } else if (state->recipient) {
-       msg_info("%s: %s from %s: %s; to=<%s>",
-                whatsup, state->where, state->namaddr, text,
-                state->recipient);
-    } else if (state->sender) {
-       msg_info("%s: %s from %s: %s; from=<%s>",
-                whatsup, state->where, state->namaddr, text,
-                state->sender);
-    } else {
-       msg_info("%s: %s from %s: %s",
-                whatsup, state->where, state->namaddr, text);
-    }
+    vstring_sprintf(buf, "%s: %s: %s from %s: %s;",
+                   state->queue_id, whatsup, state->where,
+                   state->namaddr, text);
+    if (state->sender)
+       vstring_sprintf_append(buf, " from=<%s>", state->sender);
+    if (state->recipient)
+       vstring_sprintf_append(buf, " to=<%s>", state->recipient);
+    if (state->protocol)
+       vstring_sprintf_append(buf, " proto=%s", state->protocol);
+    if (state->helo_name)
+       vstring_sprintf_append(buf, " helo=<%s>", state->helo_name);
+    msg_info("%s", STR(buf));
+    vstring_free(buf);
 }
 
 /* smtpd_check_reject - do the boring things that must be done */
index f6c0f1d84ec65a4c16d0aaaf4fbc8b7c4a179b22..d3ebec823eb2da26f931a83c90bb93da933784ac 100644 (file)
@@ -17,22 +17,22 @@ 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]
+./smtpd_check: <queue id>: 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]
 >>> 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 <random.bad.domain[123.123.123.123]>: Client host rejected: match bad.domain
+./smtpd_check: <queue id>: reject: CONNECT from random.bad.domain[123.123.123.123]: 554 <random.bad.domain[123.123.123.123]>: Client host rejected: match bad.domain; proto=SMTP
 554 <random.bad.domain[123.123.123.123]>: 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 <bad.domain[123.123.123.123]>: Client host rejected: match bad.domain
+./smtpd_check: <queue id>: reject: CONNECT from bad.domain[123.123.123.123]: 554 <bad.domain[123.123.123.123]>: Client host rejected: match bad.domain; proto=SMTP
 554 <bad.domain[123.123.123.123]>: 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 <aa.win.tue.nl[131.155.210.18]>: Client host rejected: match 131.155.210
+./smtpd_check: <queue id>: reject: CONNECT from aa.win.tue.nl[131.155.210.18]: 554 <aa.win.tue.nl[131.155.210.18]>: Client host rejected: match 131.155.210; proto=SMTP
 554 <aa.win.tue.nl[131.155.210.18]>: Client host rejected: match 131.155.210
 >>> client_restrictions permit_mynetworks
 OK
@@ -44,29 +44,29 @@ 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]
+./smtpd_check: <queue id>: reject: HELO from unknown[131.155.210.17]: 450 Client host rejected: cannot find your hostname, [131.155.210.17]; proto=SMTP helo=<foo.>
 450 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 <foo.>: Helo command rejected: Host not found
+./smtpd_check: <queue id>: reject: HELO from foo[123.123.123.123]: 450 <foo.>: Helo command rejected: Host not found; proto=SMTP helo=<foo.>
 450 <foo.>: Helo command rejected: Host not found
 >>> helo foo
-./smtpd_check: reject: HELO from foo[123.123.123.123]: 450 <foo>: Helo command rejected: Host not found
+./smtpd_check: <queue id>: reject: HELO from foo[123.123.123.123]: 450 <foo>: Helo command rejected: Host not found; proto=SMTP helo=<foo>
 450 <foo>: Helo command rejected: Host not found
 >>> helo spike.porcupine.org
 OK
 >>> 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 <random.bad.domain>: Helo command rejected: match bad.domain
+./smtpd_check: <queue id>: reject: HELO from foo[123.123.123.123]: 554 <random.bad.domain>: Helo command rejected: match bad.domain; proto=SMTP helo=<random.bad.domain>
 554 <random.bad.domain>: 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
+./smtpd_check: <queue id>: 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
 >>> helo_restrictions permit_naked_ip_address,reject_invalid_hostname,reject_unknown_hostname
 OK
@@ -81,7 +81,7 @@ 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=<foo@watson.ibm.com>
+./smtpd_check: <queue id>: reject: MAIL from unknown[131.155.210.17]: 450 Client host rejected: cannot find your hostname, [131.155.210.17]; from=<foo@watson.ibm.com> proto=SMTP helo=<123.123.123.123>
 450 Client host rejected: cannot find your hostname, [131.155.210.17]
 >>> client unknown 168.100.189.13
 OK
@@ -96,29 +96,29 @@ OK
 >>> mail foo@watson.ibm.com
 OK
 >>> mail foo@bad.domain
-./smtpd_check: reject: MAIL from foo[123.123.123.123]: 450 <foo@bad.domain>: Sender address rejected: Domain not found; from=<foo@bad.domain>
+./smtpd_check: <queue id>: reject: MAIL from foo[123.123.123.123]: 450 <foo@bad.domain>: Sender address rejected: Domain not found; from=<foo@bad.domain> proto=SMTP helo=<123.123.123.123>
 450 <foo@bad.domain>: 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 <bad-sender@any.domain>: Sender address rejected: match bad-sender@; from=<bad-sender@any.domain>
+./smtpd_check: <queue id>: reject: MAIL from foo[123.123.123.123]: 554 <bad-sender@any.domain>: Sender address rejected: match bad-sender@; from=<bad-sender@any.domain> proto=SMTP helo=<123.123.123.123>
 554 <bad-sender@any.domain>: 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 <reject@this.address>: Sender address rejected: match reject@this.address; from=<reject@this.address>
+./smtpd_check: <queue id>: reject: MAIL from foo[123.123.123.123]: 554 <reject@this.address>: Sender address rejected: match reject@this.address; from=<reject@this.address> proto=SMTP helo=<123.123.123.123>
 554 <reject@this.address>: Sender address rejected: match reject@this.address
 >>> mail Reject@this.address
-./smtpd_check: reject: MAIL from foo[123.123.123.123]: 554 <Reject@this.address>: Sender address rejected: match reject@this.address; from=<Reject@this.address>
+./smtpd_check: <queue id>: reject: MAIL from foo[123.123.123.123]: 554 <Reject@this.address>: Sender address rejected: match reject@this.address; from=<Reject@this.address> proto=SMTP helo=<123.123.123.123>
 554 <Reject@this.address>: Sender address rejected: match reject@this.address
 >>> mail foo@bad.domain
-./smtpd_check: reject: MAIL from foo[123.123.123.123]: 554 <foo@bad.domain>: Sender address rejected: match bad.domain; from=<foo@bad.domain>
+./smtpd_check: <queue id>: reject: MAIL from foo[123.123.123.123]: 554 <foo@bad.domain>: Sender address rejected: match bad.domain; from=<foo@bad.domain> proto=SMTP helo=<123.123.123.123>
 554 <foo@bad.domain>: Sender address rejected: match bad.domain
 >>> mail foo@Bad.domain
-./smtpd_check: reject: MAIL from foo[123.123.123.123]: 554 <foo@Bad.domain>: Sender address rejected: match bad.domain; from=<foo@Bad.domain>
+./smtpd_check: <queue id>: reject: MAIL from foo[123.123.123.123]: 554 <foo@Bad.domain>: Sender address rejected: match bad.domain; from=<foo@Bad.domain> proto=SMTP helo=<123.123.123.123>
 554 <foo@Bad.domain>: Sender address rejected: match bad.domain
 >>> mail foo@random.bad.domain
-./smtpd_check: reject: MAIL from foo[123.123.123.123]: 554 <foo@random.bad.domain>: Sender address rejected: match bad.domain; from=<foo@random.bad.domain>
+./smtpd_check: <queue id>: reject: MAIL from foo[123.123.123.123]: 554 <foo@random.bad.domain>: Sender address rejected: match bad.domain; from=<foo@random.bad.domain> proto=SMTP helo=<123.123.123.123>
 554 <foo@random.bad.domain>: Sender address rejected: match bad.domain
 >>> mail foo@friend.bad.domain
 OK
@@ -130,7 +130,7 @@ 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=<foo@friend.bad.domain> to=<foo@watson.ibm.com>
+./smtpd_check: <queue id>: reject: RCPT from unknown[131.155.210.17]: 450 Client host rejected: cannot find your hostname, [131.155.210.17]; from=<foo@friend.bad.domain> to=<foo@watson.ibm.com> proto=SMTP helo=<123.123.123.123>
 450 Client host rejected: cannot find your hostname, [131.155.210.17]
 >>> client unknown 168.100.189.13
 OK
@@ -139,7 +139,7 @@ OK
 >>> client foo 123.123.123.123
 OK
 >>> rcpt foo@watson.ibm.com
-./smtpd_check: reject: RCPT from foo[123.123.123.123]: 554 <foo@watson.ibm.com>: Recipient address rejected: Relay access denied; from=<foo@friend.bad.domain> to=<foo@watson.ibm.com>
+./smtpd_check: <queue id>: reject: RCPT from foo[123.123.123.123]: 554 <foo@watson.ibm.com>: Recipient address rejected: Relay access denied; from=<foo@friend.bad.domain> to=<foo@watson.ibm.com> proto=SMTP helo=<123.123.123.123>
 554 <foo@watson.ibm.com>: Recipient address rejected: Relay access denied
 >>> rcpt foo@porcupine.org
 OK
@@ -154,25 +154,25 @@ OK
 >>> client foo 123.123.123.123
 OK
 >>> rcpt foo@watson.ibm.com
-./smtpd_check: reject: RCPT from foo[123.123.123.123]: 554 <foo@watson.ibm.com>: Recipient address rejected: Relay access denied; from=<foo@friend.bad.domain> to=<foo@watson.ibm.com>
+./smtpd_check: <queue id>: reject: RCPT from foo[123.123.123.123]: 554 <foo@watson.ibm.com>: Recipient address rejected: Relay access denied; from=<foo@friend.bad.domain> to=<foo@watson.ibm.com> proto=SMTP helo=<123.123.123.123>
 554 <foo@watson.ibm.com>: 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 <bad-sender@any.domain>: Sender address rejected: match bad-sender@; from=<bad-sender@any.domain>
+./smtpd_check: <queue id>: reject: MAIL from foo[123.123.123.123]: 554 <bad-sender@any.domain>: Sender address rejected: match bad-sender@; from=<bad-sender@any.domain> proto=SMTP helo=<123.123.123.123>
 554 <bad-sender@any.domain>: 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 <reject@this.address>: Sender address rejected: match reject@this.address; from=<reject@this.address>
+./smtpd_check: <queue id>: reject: MAIL from foo[123.123.123.123]: 554 <reject@this.address>: Sender address rejected: match reject@this.address; from=<reject@this.address> proto=SMTP helo=<123.123.123.123>
 554 <reject@this.address>: Sender address rejected: match reject@this.address
 >>> mail foo@bad.domain
-./smtpd_check: reject: MAIL from foo[123.123.123.123]: 554 <foo@bad.domain>: Sender address rejected: match bad.domain; from=<foo@bad.domain>
+./smtpd_check: <queue id>: reject: MAIL from foo[123.123.123.123]: 554 <foo@bad.domain>: Sender address rejected: match bad.domain; from=<foo@bad.domain> proto=SMTP helo=<123.123.123.123>
 554 <foo@bad.domain>: Sender address rejected: match bad.domain
 >>> mail foo@random.bad.domain
-./smtpd_check: reject: MAIL from foo[123.123.123.123]: 554 <foo@random.bad.domain>: Sender address rejected: match bad.domain; from=<foo@random.bad.domain>
+./smtpd_check: <queue id>: reject: MAIL from foo[123.123.123.123]: 554 <foo@random.bad.domain>: Sender address rejected: match bad.domain; from=<foo@random.bad.domain> proto=SMTP helo=<123.123.123.123>
 554 <foo@random.bad.domain>: Sender address rejected: match bad.domain
 >>> mail foo@friend.bad.domain
 OK
@@ -184,7 +184,7 @@ OK
 >>> client spike.porcupine.org 168.100.189.2
 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 blackholes.mail-abuse.org; Blackholed - see <URL:http://mail-abuse.org/cgi-bin/lookup?127.0.0.2>; from=<foo@friend.bad.domain>
+./smtpd_check: <queue id>: reject: CONNECT from foo[127.0.0.2]: 554 Service unavailable; Client host [127.0.0.2] blocked using blackholes.mail-abuse.org; Blackholed - see <URL:http://mail-abuse.org/cgi-bin/lookup?127.0.0.2>; from=<foo@friend.bad.domain> proto=SMTP helo=<123.123.123.123>
 554 Service unavailable; Client host [127.0.0.2] blocked using blackholes.mail-abuse.org; Blackholed - see <URL:http://mail-abuse.org/cgi-bin/lookup?127.0.0.2>
 >>> #
 >>> # Hybrids
@@ -194,7 +194,7 @@ OK
 >>> client foo 131.155.210.17
 OK
 >>> rcpt foo@watson.ibm.com
-./smtpd_check: reject: RCPT from foo[131.155.210.17]: 554 <foo@watson.ibm.com>: Recipient address rejected: Relay access denied; from=<foo@friend.bad.domain> to=<foo@watson.ibm.com>
+./smtpd_check: <queue id>: reject: RCPT from foo[131.155.210.17]: 554 <foo@watson.ibm.com>: Recipient address rejected: Relay access denied; from=<foo@friend.bad.domain> to=<foo@watson.ibm.com> proto=SMTP helo=<123.123.123.123>
 554 <foo@watson.ibm.com>: Recipient address rejected: Relay access denied
 >>> recipient_restrictions check_client_access,hash:./smtpd_check_access,check_relay_domains
 OK
@@ -207,10 +207,10 @@ 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 <bad.domain>: Helo command rejected: match bad.domain; from=<foo@friend.bad.domain>
+./smtpd_check: <queue id>: reject: HELO from foo[131.155.210.17]: 554 <bad.domain>: Helo command rejected: match bad.domain; from=<foo@friend.bad.domain> proto=SMTP helo=<bad.domain>
 554 <bad.domain>: Helo command rejected: match bad.domain
 >>> rcpt foo@porcupine.org
-./smtpd_check: reject: RCPT from foo[131.155.210.17]: 554 <bad.domain>: Helo command rejected: match bad.domain; from=<foo@friend.bad.domain> to=<foo@porcupine.org>
+./smtpd_check: <queue id>: reject: RCPT from foo[131.155.210.17]: 554 <bad.domain>: Helo command rejected: match bad.domain; from=<foo@friend.bad.domain> to=<foo@porcupine.org> proto=SMTP helo=<bad.domain>
 554 <bad.domain>: Helo command rejected: match bad.domain
 >>> helo 131.155.210.17
 OK
@@ -219,10 +219,10 @@ 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 <foo@bad.domain>: Sender address rejected: match bad.domain; from=<foo@bad.domain>
+./smtpd_check: <queue id>: reject: MAIL from foo[131.155.210.17]: 554 <foo@bad.domain>: Sender address rejected: match bad.domain; from=<foo@bad.domain> proto=SMTP helo=<131.155.210.17>
 554 <foo@bad.domain>: Sender address rejected: match bad.domain
 >>> rcpt foo@porcupine.org
-./smtpd_check: reject: RCPT from foo[131.155.210.17]: 554 <foo@bad.domain>: Sender address rejected: match bad.domain; from=<foo@bad.domain> to=<foo@porcupine.org>
+./smtpd_check: <queue id>: reject: RCPT from foo[131.155.210.17]: 554 <foo@bad.domain>: Sender address rejected: match bad.domain; from=<foo@bad.domain> to=<foo@porcupine.org> proto=SMTP helo=<131.155.210.17>
 554 <foo@bad.domain>: Sender address rejected: match bad.domain
 >>> mail foo@friend.bad.domain
 OK
@@ -253,14 +253,14 @@ OK
 >>> mail foo@good.domain
 OK
 >>> rcpt foo@porcupine.org
-./smtpd_check: reject: RCPT from foo[131.155.210.17]: 554 <bad.domain>: Helo command rejected: match bad.domain; from=<foo@good.domain> to=<foo@porcupine.org>
+./smtpd_check: <queue id>: reject: RCPT from foo[131.155.210.17]: 554 <bad.domain>: Helo command rejected: match bad.domain; from=<foo@good.domain> to=<foo@porcupine.org> proto=SMTP helo=<bad.domain>
 554 <bad.domain>: 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 <foo@bad.domain>: Sender address rejected: match bad.domain; from=<foo@bad.domain> to=<foo@porcupine.org>
+./smtpd_check: <queue id>: reject: RCPT from foo[131.155.210.17]: 554 <foo@bad.domain>: Sender address rejected: match bad.domain; from=<foo@bad.domain> to=<foo@porcupine.org> proto=SMTP helo=<good.domain>
 554 <foo@bad.domain>: Sender address rejected: match bad.domain
 >>> #
 >>> # FQDN restrictions
@@ -276,27 +276,27 @@ OK
 >>> helo foo.bar
 OK
 >>> helo foo
-./smtpd_check: reject: HELO from foo[131.155.210.17]: 504 <foo>: Helo command rejected: need fully-qualified hostname; from=<foo@bad.domain>
+./smtpd_check: <queue id>: reject: HELO from foo[131.155.210.17]: 504 <foo>: Helo command rejected: need fully-qualified hostname; from=<foo@bad.domain> proto=SMTP helo=<foo>
 504 <foo>: 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 <foo@foo>: Sender address rejected: need fully-qualified address; from=<foo@foo>
+./smtpd_check: <queue id>: reject: MAIL from foo[131.155.210.17]: 504 <foo@foo>: Sender address rejected: need fully-qualified address; from=<foo@foo> proto=SMTP helo=<foo>
 504 <foo@foo>: Sender address rejected: need fully-qualified address
 >>> mail foo
-./smtpd_check: reject: MAIL from foo[131.155.210.17]: 504 <foo>: Sender address rejected: need fully-qualified address; from=<foo>
+./smtpd_check: <queue id>: reject: MAIL from foo[131.155.210.17]: 504 <foo>: Sender address rejected: need fully-qualified address; from=<foo> proto=SMTP helo=<foo>
 504 <foo>: 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 <foo@foo>: Recipient address rejected: need fully-qualified address; from=<foo> to=<foo@foo>
+./smtpd_check: <queue id>: reject: RCPT from foo[131.155.210.17]: 504 <foo@foo>: Recipient address rejected: need fully-qualified address; from=<foo> to=<foo@foo> proto=SMTP helo=<foo>
 504 <foo@foo>: Recipient address rejected: need fully-qualified address
 >>> rcpt foo
-./smtpd_check: reject: RCPT from foo[131.155.210.17]: 504 <foo>: Recipient address rejected: need fully-qualified address; from=<foo> to=<foo>
+./smtpd_check: <queue id>: reject: RCPT from foo[131.155.210.17]: 504 <foo>: Recipient address rejected: need fully-qualified address; from=<foo> to=<foo> proto=SMTP helo=<foo>
 504 <foo>: Recipient address rejected: need fully-qualified address
 >>> #
 >>> # Numerical HELO checks
@@ -308,70 +308,70 @@ 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=<foo>
+./smtpd_check: <queue id>: reject: HELO from foo[131.155.210.17]: 501 <[321.255.255.255]>: Helo command rejected: invalid ip address; from=<foo> proto=SMTP helo=<[321.255.255.255]>
 501 <[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=<foo>
+./smtpd_check: <queue id>: reject: HELO from foo[131.155.210.17]: 501 <[0.255.255.255]>: Helo command rejected: invalid ip address; from=<foo> proto=SMTP helo=<[0.255.255.255]>
 501 <[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=<foo>
+./smtpd_check: <queue id>: reject: HELO from foo[131.155.210.17]: 501 <[1.2.3.321]>: Helo command rejected: invalid ip address; from=<foo> proto=SMTP helo=<[1.2.3.321]>
 501 <[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=<foo>
+./smtpd_check: <queue id>: reject: HELO from foo[131.155.210.17]: 501 <[1.2.3]>: Helo command rejected: invalid ip address; from=<foo> proto=SMTP helo=<[1.2.3]>
 501 <[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=<foo>
+./smtpd_check: <queue id>: reject: HELO from foo[131.155.210.17]: 501 <[1.2.3.4.5]>: Helo command rejected: invalid ip address; from=<foo> proto=SMTP helo=<[1.2.3.4.5]>
 501 <[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=<foo>
+./smtpd_check: <queue id>: reject: HELO from foo[131.155.210.17]: 501 <[1..2.3.4]>: Helo command rejected: invalid ip address; from=<foo> proto=SMTP helo=<[1..2.3.4]>
 501 <[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=<foo>
+./smtpd_check: <queue id>: reject: HELO from foo[131.155.210.17]: 501 <[.1.2.3.4]>: Helo command rejected: invalid ip address; from=<foo> proto=SMTP helo=<[.1.2.3.4]>
 501 <[.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=<foo>
+./smtpd_check: <queue id>: reject: HELO from foo[131.155.210.17]: 501 <[1.2.3.4.5.]>: Helo command rejected: invalid ip address; from=<foo> proto=SMTP helo=<[1.2.3.4.5.]>
 501 <[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=<foo>
+./smtpd_check: <queue id>: reject: HELO from foo[131.155.210.17]: 501 <321.255.255.255>: Helo command rejected: invalid ip address; from=<foo> proto=SMTP helo=<321.255.255.255>
 501 <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=<foo>
+./smtpd_check: <queue id>: reject: HELO from foo[131.155.210.17]: 501 <0.255.255.255>: Helo command rejected: invalid ip address; from=<foo> proto=SMTP helo=<0.255.255.255>
 501 <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=<foo>
+./smtpd_check: <queue id>: reject: HELO from foo[131.155.210.17]: 501 <1.2.3.321>: Helo command rejected: invalid ip address; from=<foo> proto=SMTP helo=<1.2.3.321>
 501 <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=<foo>
+./smtpd_check: <queue id>: reject: HELO from foo[131.155.210.17]: 501 <1.2.3>: Helo command rejected: invalid ip address; from=<foo> proto=SMTP helo=<1.2.3>
 501 <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=<foo>
+./smtpd_check: <queue id>: reject: HELO from foo[131.155.210.17]: 501 <1.2.3.4.5>: Helo command rejected: invalid ip address; from=<foo> proto=SMTP helo=<1.2.3.4.5>
 501 <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=<foo>
+./smtpd_check: <queue id>: reject: HELO from foo[131.155.210.17]: 501 <1..2.3.4>: Helo command rejected: invalid ip address; from=<foo> proto=SMTP helo=<1..2.3.4>
 501 <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=<foo>
+./smtpd_check: <queue id>: reject: HELO from foo[131.155.210.17]: 501 <.1.2.3.4>: Helo command rejected: invalid ip address; from=<foo> proto=SMTP helo=<.1.2.3.4>
 501 <.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=<foo>
+./smtpd_check: <queue id>: reject: HELO from foo[131.155.210.17]: 501 <1.2.3.4.5.>: Helo command rejected: invalid ip address; from=<foo> proto=SMTP helo=<1.2.3.4.5.>
 501 <1.2.3.4.5.>: Helo command rejected: invalid ip address
 >>> #
 >>> # The defer restriction
@@ -381,5 +381,5 @@ OK
 >>> helo_restrictions defer
 OK
 >>> helo foobar
-./smtpd_check: reject: HELO from foo[131.155.210.17]: 444 <foobar>: Helo command rejected: Try again later; from=<foo>
+./smtpd_check: <queue id>: reject: HELO from foo[131.155.210.17]: 444 <foobar>: Helo command rejected: Try again later; from=<foo> proto=SMTP helo=<foobar>
 444 <foobar>: Helo command rejected: Try again later
index 6007991d6538f1df4e017fe9f02a7a1862f5dbc0..64cffa686a3e43c6ddf3031dc577cf4014f51caa 100644 (file)
@@ -17,22 +17,22 @@ 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]
+./smtpd_check: <queue id>: 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]
 >>> 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 <random.bad.domain[123.123.123.123]>: Client host rejected: match bad.domain
+./smtpd_check: <queue id>: reject: CONNECT from random.bad.domain[123.123.123.123]: 554 <random.bad.domain[123.123.123.123]>: Client host rejected: match bad.domain; proto=SMTP
 554 <random.bad.domain[123.123.123.123]>: 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 <bad.domain[123.123.123.123]>: Client host rejected: match bad.domain
+./smtpd_check: <queue id>: reject: CONNECT from bad.domain[123.123.123.123]: 554 <bad.domain[123.123.123.123]>: Client host rejected: match bad.domain; proto=SMTP
 554 <bad.domain[123.123.123.123]>: 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 <aa.win.tue.nl[131.155.210.18]>: Client host rejected: match 131.155.210
+./smtpd_check: <queue id>: reject: CONNECT from aa.win.tue.nl[131.155.210.18]: 554 <aa.win.tue.nl[131.155.210.18]>: Client host rejected: match 131.155.210; proto=SMTP
 554 <aa.win.tue.nl[131.155.210.18]>: Client host rejected: match 131.155.210
 >>> client_restrictions permit_mynetworks
 OK
@@ -44,22 +44,22 @@ 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]
+./smtpd_check: <queue id>: reject: HELO from unknown[131.155.210.17]: 450 Client host rejected: cannot find your hostname, [131.155.210.17]; proto=SMTP helo=<foo.>
 450 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 <foo.>: Helo command rejected: Host not found
+./smtpd_check: <queue id>: reject: HELO from foo[123.123.123.123]: 450 <foo.>: Helo command rejected: Host not found; proto=SMTP helo=<foo.>
 450 <foo.>: Helo command rejected: Host not found
 >>> helo foo
-./smtpd_check: reject: HELO from foo[123.123.123.123]: 450 <foo>: Helo command rejected: Host not found
+./smtpd_check: <queue id>: reject: HELO from foo[123.123.123.123]: 450 <foo>: Helo command rejected: Host not found; proto=SMTP helo=<foo>
 450 <foo>: Helo command rejected: Host not found
 >>> helo spike.porcupine.org
 OK
 >>> 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 <random.bad.domain>: Helo command rejected: match bad.domain
+./smtpd_check: <queue id>: reject: HELO from foo[123.123.123.123]: 554 <random.bad.domain>: Helo command rejected: match bad.domain; proto=SMTP helo=<random.bad.domain>
 554 <random.bad.domain>: Helo command rejected: match bad.domain
 >>> helo friend.bad.domain
 OK
@@ -71,7 +71,7 @@ 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=<foo@watson.ibm.com>
+./smtpd_check: <queue id>: reject: MAIL from unknown[131.155.210.17]: 450 Client host rejected: cannot find your hostname, [131.155.210.17]; from=<foo@watson.ibm.com> proto=SMTP helo=<friend.bad.domain>
 450 Client host rejected: cannot find your hostname, [131.155.210.17]
 >>> client unknown 168.100.189.13
 OK
@@ -86,29 +86,29 @@ OK
 >>> mail foo@watson.ibm.com
 OK
 >>> mail foo@bad.domain
-./smtpd_check: reject: MAIL from foo[123.123.123.123]: 450 <foo@bad.domain>: Sender address rejected: Domain not found; from=<foo@bad.domain>
+./smtpd_check: <queue id>: reject: MAIL from foo[123.123.123.123]: 450 <foo@bad.domain>: Sender address rejected: Domain not found; from=<foo@bad.domain> proto=SMTP helo=<friend.bad.domain>
 450 <foo@bad.domain>: 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 <bad-sender@any.domain>: Sender address rejected: match bad-sender@; from=<bad-sender@any.domain>
+./smtpd_check: <queue id>: reject: MAIL from foo[123.123.123.123]: 554 <bad-sender@any.domain>: Sender address rejected: match bad-sender@; from=<bad-sender@any.domain> proto=SMTP helo=<friend.bad.domain>
 554 <bad-sender@any.domain>: 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 <reject@this.address>: Sender address rejected: match reject@this.address; from=<reject@this.address>
+./smtpd_check: <queue id>: reject: MAIL from foo[123.123.123.123]: 554 <reject@this.address>: Sender address rejected: match reject@this.address; from=<reject@this.address> proto=SMTP helo=<friend.bad.domain>
 554 <reject@this.address>: Sender address rejected: match reject@this.address
 >>> mail Reject@this.address
-./smtpd_check: reject: MAIL from foo[123.123.123.123]: 554 <Reject@this.address>: Sender address rejected: match reject@this.address; from=<Reject@this.address>
+./smtpd_check: <queue id>: reject: MAIL from foo[123.123.123.123]: 554 <Reject@this.address>: Sender address rejected: match reject@this.address; from=<Reject@this.address> proto=SMTP helo=<friend.bad.domain>
 554 <Reject@this.address>: Sender address rejected: match reject@this.address
 >>> mail foo@bad.domain
-./smtpd_check: reject: MAIL from foo[123.123.123.123]: 554 <foo@bad.domain>: Sender address rejected: match bad.domain; from=<foo@bad.domain>
+./smtpd_check: <queue id>: reject: MAIL from foo[123.123.123.123]: 554 <foo@bad.domain>: Sender address rejected: match bad.domain; from=<foo@bad.domain> proto=SMTP helo=<friend.bad.domain>
 554 <foo@bad.domain>: Sender address rejected: match bad.domain
 >>> mail foo@Bad.domain
-./smtpd_check: reject: MAIL from foo[123.123.123.123]: 554 <foo@Bad.domain>: Sender address rejected: match bad.domain; from=<foo@Bad.domain>
+./smtpd_check: <queue id>: reject: MAIL from foo[123.123.123.123]: 554 <foo@Bad.domain>: Sender address rejected: match bad.domain; from=<foo@Bad.domain> proto=SMTP helo=<friend.bad.domain>
 554 <foo@Bad.domain>: Sender address rejected: match bad.domain
 >>> mail foo@random.bad.domain
-./smtpd_check: reject: MAIL from foo[123.123.123.123]: 554 <foo@random.bad.domain>: Sender address rejected: match bad.domain; from=<foo@random.bad.domain>
+./smtpd_check: <queue id>: reject: MAIL from foo[123.123.123.123]: 554 <foo@random.bad.domain>: Sender address rejected: match bad.domain; from=<foo@random.bad.domain> proto=SMTP helo=<friend.bad.domain>
 554 <foo@random.bad.domain>: Sender address rejected: match bad.domain
 >>> mail foo@friend.bad.domain
 OK
@@ -120,7 +120,7 @@ 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=<foo@friend.bad.domain> to=<foo@watson.ibm.com>
+./smtpd_check: <queue id>: reject: RCPT from unknown[131.155.210.17]: 450 Client host rejected: cannot find your hostname, [131.155.210.17]; from=<foo@friend.bad.domain> to=<foo@watson.ibm.com> proto=SMTP helo=<friend.bad.domain>
 450 Client host rejected: cannot find your hostname, [131.155.210.17]
 >>> client unknown 168.100.189.13
 OK
@@ -129,7 +129,7 @@ OK
 >>> client foo 123.123.123.123
 OK
 >>> rcpt foo@watson.ibm.com
-./smtpd_check: reject: RCPT from foo[123.123.123.123]: 554 <foo@watson.ibm.com>: Recipient address rejected: Relay access denied; from=<foo@friend.bad.domain> to=<foo@watson.ibm.com>
+./smtpd_check: <queue id>: reject: RCPT from foo[123.123.123.123]: 554 <foo@watson.ibm.com>: Recipient address rejected: Relay access denied; from=<foo@friend.bad.domain> to=<foo@watson.ibm.com> proto=SMTP helo=<friend.bad.domain>
 554 <foo@watson.ibm.com>: Recipient address rejected: Relay access denied
 >>> rcpt foo@porcupine.org
 OK
@@ -144,25 +144,25 @@ OK
 >>> client foo 123.123.123.123
 OK
 >>> rcpt foo@watson.ibm.com
-./smtpd_check: reject: RCPT from foo[123.123.123.123]: 554 <foo@watson.ibm.com>: Recipient address rejected: Relay access denied; from=<foo@friend.bad.domain> to=<foo@watson.ibm.com>
+./smtpd_check: <queue id>: reject: RCPT from foo[123.123.123.123]: 554 <foo@watson.ibm.com>: Recipient address rejected: Relay access denied; from=<foo@friend.bad.domain> to=<foo@watson.ibm.com> proto=SMTP helo=<friend.bad.domain>
 554 <foo@watson.ibm.com>: 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 <bad-sender@any.domain>: Sender address rejected: match bad-sender@; from=<bad-sender@any.domain>
+./smtpd_check: <queue id>: reject: MAIL from foo[123.123.123.123]: 554 <bad-sender@any.domain>: Sender address rejected: match bad-sender@; from=<bad-sender@any.domain> proto=SMTP helo=<friend.bad.domain>
 554 <bad-sender@any.domain>: 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 <reject@this.address>: Sender address rejected: match reject@this.address; from=<reject@this.address>
+./smtpd_check: <queue id>: reject: MAIL from foo[123.123.123.123]: 554 <reject@this.address>: Sender address rejected: match reject@this.address; from=<reject@this.address> proto=SMTP helo=<friend.bad.domain>
 554 <reject@this.address>: Sender address rejected: match reject@this.address
 >>> mail foo@bad.domain
-./smtpd_check: reject: MAIL from foo[123.123.123.123]: 554 <foo@bad.domain>: Sender address rejected: match bad.domain; from=<foo@bad.domain>
+./smtpd_check: <queue id>: reject: MAIL from foo[123.123.123.123]: 554 <foo@bad.domain>: Sender address rejected: match bad.domain; from=<foo@bad.domain> proto=SMTP helo=<friend.bad.domain>
 554 <foo@bad.domain>: Sender address rejected: match bad.domain
 >>> mail foo@random.bad.domain
-./smtpd_check: reject: MAIL from foo[123.123.123.123]: 554 <foo@random.bad.domain>: Sender address rejected: match bad.domain; from=<foo@random.bad.domain>
+./smtpd_check: <queue id>: reject: MAIL from foo[123.123.123.123]: 554 <foo@random.bad.domain>: Sender address rejected: match bad.domain; from=<foo@random.bad.domain> proto=SMTP helo=<friend.bad.domain>
 554 <foo@random.bad.domain>: Sender address rejected: match bad.domain
 >>> mail foo@friend.bad.domain
 OK
@@ -174,7 +174,7 @@ OK
 >>> client spike.porcupine.org 168.100.189.2
 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 blackholes.mail-abuse.org; Blackholed - see <URL:http://mail-abuse.org/cgi-bin/lookup?127.0.0.2>; from=<foo@friend.bad.domain>
+./smtpd_check: <queue id>: reject: CONNECT from foo[127.0.0.2]: 554 Service unavailable; Client host [127.0.0.2] blocked using blackholes.mail-abuse.org; Blackholed - see <URL:http://mail-abuse.org/cgi-bin/lookup?127.0.0.2>; from=<foo@friend.bad.domain> proto=SMTP helo=<friend.bad.domain>
 554 Service unavailable; Client host [127.0.0.2] blocked using blackholes.mail-abuse.org; Blackholed - see <URL:http://mail-abuse.org/cgi-bin/lookup?127.0.0.2>
 >>> #
 >>> # unknown sender/recipient domain
@@ -188,12 +188,12 @@ OK
 >>> rcpt wietse@porcupine.org
 OK
 >>> rcpt wietse@no.recipient.domain
-./smtpd_check: reject: RCPT from foo[127.0.0.2]: 554 <wietse@no.recipient.domain>: Recipient address rejected: Domain not found; from=<wietse@porcupine.org> to=<wietse@no.recipient.domain>
+./smtpd_check: <queue id>: reject: RCPT from foo[127.0.0.2]: 554 <wietse@no.recipient.domain>: Recipient address rejected: Domain not found; from=<wietse@porcupine.org> to=<wietse@no.recipient.domain> proto=SMTP helo=<friend.bad.domain>
 554 <wietse@no.recipient.domain>: 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 <wietse@no.sender.domain>: Sender address rejected: Domain not found; from=<wietse@no.sender.domain> to=<wietse@porcupine.org>
+./smtpd_check: <queue id>: reject: RCPT from foo[127.0.0.2]: 554 <wietse@no.sender.domain>: Sender address rejected: Domain not found; from=<wietse@no.sender.domain> to=<wietse@porcupine.org> proto=SMTP helo=<friend.bad.domain>
 554 <wietse@no.sender.domain>: Sender address rejected: Domain not found
 >>> #
 >>> # {permit_auth,reject_unauth}_destination
@@ -205,14 +205,14 @@ OK
 >>> recipient_restrictions permit_auth_destination,reject
 OK
 >>> rcpt user@foo.org
-./smtpd_check: reject: RCPT from foo[127.0.0.2]: 554 <user@foo.org>: Recipient address rejected: Access denied; from=<user@some.where> to=<user@foo.org>
+./smtpd_check: <queue id>: reject: RCPT from foo[127.0.0.2]: 554 <user@foo.org>: Recipient address rejected: Access denied; from=<user@some.where> to=<user@foo.org> proto=SMTP helo=<friend.bad.domain>
 554 <user@foo.org>: 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 <user@foo.org>: Relay access denied; from=<user@some.where> to=<user@foo.org>
+./smtpd_check: <queue id>: reject: RCPT from foo[127.0.0.2]: 554 <user@foo.org>: Relay access denied; from=<user@some.where> to=<user@foo.org> proto=SMTP helo=<friend.bad.domain>
 554 <user@foo.org>: Relay access denied
 >>> rcpt user@foo.com
 OK
@@ -226,8 +226,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=<user@some.where>
+./smtpd_check: <queue id>: reject: CONNECT from unknown[1.1.1.1]: 450 Client host rejected: cannot find your hostname, [1.1.1.1]; from=<user@some.where> proto=SMTP helo=<friend.bad.domain>
 450 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=<user@some.where>
+./smtpd_check: <queue id>: reject: CONNECT from unknown[1.1.1.1]: 550 Client host rejected: cannot find your hostname, [1.1.1.1]; from=<user@some.where> proto=SMTP helo=<friend.bad.domain>
 550 Client host rejected: cannot find your hostname, [1.1.1.1]
index 882dc218182a117913c1fdbab58da7b94e65b9d6..8ed2c20d3d372a0160493b021832775256a2346b 100644 (file)
@@ -29,7 +29,7 @@ OK
 >>> client foo 127.0.0.2
 OK
 >>> rcpt rname@rdomain
-./smtpd_check: reject: RCPT from foo[127.0.0.2]: 554 client=foo[127.0.0.2] client_address=127.0.0.2 client_name=foo 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=blackholes.mail-abuse.org rbl_txt=Blackholed - see <URL:http://mail-abuse.org/cgi-bin/lookup?127.0.0.2> rbl_what=127.0.0.2 rbl_class=Client host; from=<sname@sdomain> to=<rname@rdomain>
+./smtpd_check: <queue id>: reject: RCPT from foo[127.0.0.2]: 554 client=foo[127.0.0.2] client_address=127.0.0.2 client_name=foo 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=blackholes.mail-abuse.org rbl_txt=Blackholed - see <URL:http://mail-abuse.org/cgi-bin/lookup?127.0.0.2> rbl_what=127.0.0.2 rbl_class=Client host; from=<sname@sdomain> to=<rname@rdomain> proto=SMTP helo=<foobar>
 554 client=foo[127.0.0.2] client_address=127.0.0.2 client_name=foo 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=blackholes.mail-abuse.org rbl_txt=Blackholed - see <URL:http://mail-abuse.org/cgi-bin/lookup?127.0.0.2> rbl_what=127.0.0.2 rbl_class=Client host
 >>> #
 >>> recipient_restrictions reject_rbl_client,blackholes.mail-abuse.org
@@ -41,7 +41,7 @@ OK
 >>> client foo 127.0.0.2
 OK
 >>> rcpt rname@rdomain
-./smtpd_check: reject: RCPT from foo[127.0.0.2]: 554 client=foo[127.0.0.2] client_address=127.0.0.2 client_name=foo 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=blackholes.mail-abuse.org rbl_txt=Blackholed - see <URL:http://mail-abuse.org/cgi-bin/lookup?127.0.0.2> rbl_what=127.0.0.2 rbl_class=Client host; from=<sname@sdomain> to=<rname@rdomain>
+./smtpd_check: <queue id>: reject: RCPT from foo[127.0.0.2]: 554 client=foo[127.0.0.2] client_address=127.0.0.2 client_name=foo 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=blackholes.mail-abuse.org rbl_txt=Blackholed - see <URL:http://mail-abuse.org/cgi-bin/lookup?127.0.0.2> rbl_what=127.0.0.2 rbl_class=Client host; from=<sname@sdomain> to=<rname@rdomain> proto=SMTP helo=<foobar>
 554 client=foo[127.0.0.2] client_address=127.0.0.2 client_name=foo 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=blackholes.mail-abuse.org rbl_txt=Blackholed - see <URL:http://mail-abuse.org/cgi-bin/lookup?127.0.0.2> rbl_what=127.0.0.2 rbl_class=Client host
 >>> #
 >>> # RHSBL sender domain name
@@ -53,7 +53,7 @@ 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=<sname@example.tld> to=<rname@rdomain>
+./smtpd_check: <queue id>: 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=<sname@example.tld> to=<rname@rdomain> proto=SMTP helo=<foobar>
 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
 >>> mail sname@sdomain
 OK
@@ -69,7 +69,7 @@ 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=<sname@sdomain> to=<rname@rdomain>
+./smtpd_check: <queue id>: 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=<sname@sdomain> to=<rname@rdomain> proto=SMTP helo=<foobar>
 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
 >>> #
 >>> # RHSBL recipient domain name
@@ -83,5 +83,5 @@ 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=<sname@sdomain> to=<rname@example.tld>
+./smtpd_check: <queue id>: 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=<sname@sdomain> to=<rname@example.tld> proto=SMTP helo=<foobar>
 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