Pipeline QUIT after data
authorJeremy Harris <jgh146exb@wizmail.org>
Sun, 14 Mar 2021 20:39:03 +0000 (20:39 +0000)
committerJeremy Harris <jgh146exb@wizmail.org>
Tue, 16 Mar 2021 16:43:49 +0000 (16:43 +0000)
55 files changed:
src/src/daemon.c
src/src/deliver.c
src/src/functions.h
src/src/macros.h
src/src/receive.c
src/src/smtp_in.c
src/src/smtp_out.c
src/src/spool_in.c
src/src/tls-gnu.c
src/src/tls-openssl.c
src/src/transport.c
src/src/transports/smtp.c
src/src/transports/smtp.h
test/confs/0623 [new file with mode: 0644]
test/confs/0900
test/confs/0911 [new file with mode: 0644]
test/log/0623 [new file with mode: 0644]
test/log/0900
test/log/0904
test/log/0905
test/log/0911 [new file with mode: 0644]
test/log/1114
test/log/1157
test/log/1165
test/log/4521
test/log/4522
test/log/5590
test/log/5591
test/rejectlog/0900
test/runtest
test/scripts/0000-Basic/0623 [new file with mode: 0644]
test/scripts/0000-Basic/0904
test/scripts/0000-Basic/0911 [new file with mode: 0644]
test/scripts/1100-Basic-TLS/1157
test/stderr/0143
test/stderr/0217
test/stderr/0218
test/stderr/0276
test/stderr/0388
test/stderr/0450
test/stderr/0467
test/stderr/0476
test/stderr/0623 [new file with mode: 0644]
test/stderr/0911 [new file with mode: 0644]
test/stderr/1150
test/stderr/1157
test/stderr/1160
test/stderr/2035
test/stderr/2135
test/stderr/3404
test/stderr/4052
test/stderr/4520
test/stdout/0623 [new file with mode: 0644]
test/stdout/0904
test/stdout/0911 [new file with mode: 0644]

index 50c202c56f9f278c98b884ee987c1cf027ef663a..52e6dcab17462c1784bd814156f7dee9233be922 100644 (file)
@@ -554,7 +554,7 @@ if (pid == 0)
         }
       if (message_id[0] == 0) continue;   /* No message was accepted */
       }
-    else
+    else                               /* bad smtp_setup_msg() */
       {
       if (smtp_out)
        {
@@ -674,15 +674,15 @@ if (pid == 0)
       {
       pid_t dpid;
 
-      /* Before forking, ensure that the C output buffer is flushed. Otherwise
-      anything that it in it will get duplicated, leading to duplicate copies
-      of the pending output. */
-
-      mac_smtp_fflush();
+      /* We used to flush smtp_out before forking so that buffered data was not
+      duplicated, but now we want to pipeline the responses for data and quit.
+      Instead, hard-close the fd underlying smtp_out right after fork to discard
+      the data buffer. */
 
       if ((dpid = exim_fork(US"daemon-accept-delivery")) == 0)
         {
         (void)fclose(smtp_in);
+       (void)close(fileno(smtp_out));
         (void)fclose(smtp_out);
 
         /* Don't ever molest the parent's SSL connection, but do clean up
index 833970c5aec121e4491ea0d2bf91477942372bac..29e2b719df1b076acc3ae9120fb309bf9b737457 100644 (file)
@@ -8549,52 +8549,6 @@ f.tcp_fastopen_ok = TRUE;
 }
 
 
-uschar *
-deliver_get_sender_address (uschar * id)
-{
-int rc;
-uschar * new_sender_address,
-       * save_sender_address;
-BOOL save_qr = f.queue_running;
-uschar * spoolname;
-
-/* make spool_open_datafile non-noisy on fail */
-
-f.queue_running = TRUE;
-
-/* Side effect: message_subdir is set for the (possibly split) spool directory */
-
-deliver_datafile = spool_open_datafile(id);
-f.queue_running = save_qr;
-if (deliver_datafile < 0)
-  return NULL;
-
-/* Save and restore the global sender_address.  I'm not sure if we should
-not save/restore all the other global variables too, because
-spool_read_header() may change all of them. But OTOH, when this
-deliver_get_sender_address() gets called, the current message is done
-already and nobody needs the globals anymore. (HS12, 2015-08-21) */
-
-spoolname = string_sprintf("%s-H", id);
-save_sender_address = sender_address;
-
-rc = spool_read_header(spoolname, TRUE, TRUE);
-
-new_sender_address = sender_address;
-sender_address = save_sender_address;
-
-if (rc != spool_read_OK)
-  return NULL;
-
-assert(new_sender_address);
-
-(void)close(deliver_datafile);
-deliver_datafile = -1;
-
-return new_sender_address;
-}
-
-
 
 void
 delivery_re_exec(int exec_type)
index 38309e7ddf5b97f320a74e12a1b3d281607a004b..5ffb23d1e0cced19d0b503a754c1913eadc747e1 100644 (file)
@@ -75,6 +75,7 @@ extern BOOL    tls_openssl_options_parse(uschar *, long *);
 # endif
 extern int     tls_read(void *, uschar *, size_t);
 extern int     tls_server_start(uschar **);
+extern void    tls_shutdown_wr(void *);
 extern BOOL    tls_smtp_buffered(void);
 extern int     tls_ungetc(int);
 #if defined(EXIM_HAVE_INOTIFY) || defined(EXIM_HAVE_KEVENT)
@@ -204,7 +205,6 @@ extern void    deliver_set_expansions(address_item *);
 extern int     deliver_split_address(address_item *);
 extern void    deliver_succeeded(address_item *);
 
-extern uschar *deliver_get_sender_address (uschar *id);
 extern void    delivery_re_exec(int);
 
 extern void    die_tainted(const uschar *, const uschar *, int);
@@ -514,6 +514,7 @@ extern BOOL    spool_move_message(uschar *, uschar *, uschar *, uschar *);
 extern int     spool_open_datafile(uschar *);
 extern int     spool_open_temp(uschar *);
 extern int     spool_read_header(uschar *, BOOL, BOOL);
+extern uschar *spool_sender_from_msgid(const uschar *);
 extern int     spool_write_header(uschar *, int, uschar **);
 extern int     stdin_getc(unsigned);
 extern int     stdin_feof(void);
index 68470a9f104e0587c6270740579c0a7db8d7f8f9..0b647569b1148a3d7470e82790c8974fe804fe0a 100644 (file)
@@ -866,18 +866,19 @@ enum {
 
 /* Options for transport_write_message */
 
-#define topt_add_return_path    0x001
-#define topt_add_delivery_date  0x002
-#define topt_add_envelope_to    0x004
-#define topt_use_crlf           0x008  /* Terminate lines with CRLF */
-#define topt_end_dot            0x010  /* Send terminating dot line */
-#define topt_no_headers         0x020  /* Omit headers */
-#define topt_no_body            0x040  /* Omit body */
-#define topt_escape_headers     0x080  /* Apply escape check to headers */
-#define topt_use_bdat          0x100  /* prepend chunks with RFC3030 BDAT header */
-#define topt_output_string     0x200  /* create string rather than write to fd */
-#define topt_continuation      0x400  /* do not reset buffer */
-#define topt_not_socket                0x800  /* cannot do socket-only syscalls */
+#define topt_add_return_path    0x0001
+#define topt_add_delivery_date  0x0002
+#define topt_add_envelope_to    0x0004
+#define topt_escape_headers     0x0008 /* Apply escape check to headers */
+#define topt_use_crlf           0x0010 /* Terminate lines with CRLF */
+#define topt_no_headers         0x0020 /* Omit headers */
+#define topt_no_body            0x0040 /* Omit body */
+#define topt_end_dot            0x0080 /* Send terminating dot line */
+#define topt_no_flush          0x0100  /* more data expected after message (eg QUIT) */
+#define topt_use_bdat          0x0200  /* prepend chunks with RFC3030 BDAT header */
+#define topt_output_string     0x0400  /* create string rather than write to fd */
+#define topt_continuation      0x0800  /* do not reset buffer */
+#define topt_not_socket                0x1000  /* cannot do socket-only syscalls */
 
 /* Options for smtp_write_command */
 
index 00c431fc8934e688e93560e550f8c20468322a7d..3e950ffc6e86280a8487848a18a4cd4eb939b0cb 100644 (file)
@@ -4177,12 +4177,10 @@ response, but the chance of this happening should be small. */
 if (smtp_input && sender_host_address && !f.sender_host_notsocket &&
     !receive_smtp_buffered())
   {
-  struct timeval tv;
+  struct timeval tv = {.tv_sec = 0, .tv_usec = 0};
   fd_set select_check;
   FD_ZERO(&select_check);
   FD_SET(fileno(smtp_in), &select_check);
-  tv.tv_sec = 0;
-  tv.tv_usec = 0;
 
   if (select(fileno(smtp_in) + 1, &select_check, NULL, NULL, &tv) != 0)
     {
@@ -4375,12 +4373,17 @@ if (smtp_input)
 
       else if (chunking_state > CHUNKING_OFFERED)
        {
-        smtp_printf("250- %u byte chunk, total %d\r\n250 OK id=%s\r\n", FALSE,
+       /* If there is more input waiting, no need to flush (probably the client
+       pipelined QUIT after data).  We check only the in-process buffer, not
+       the socket. */
+
+        smtp_printf("250- %u byte chunk, total %d\r\n250 OK id=%s\r\n",
+           receive_smtp_buffered(),
            chunking_datasize, message_size+message_linecount, message_id);
        chunking_state = CHUNKING_OFFERED;
        }
       else
-        smtp_printf("250 OK id=%s\r\n", FALSE, message_id);
+        smtp_printf("250 OK id=%s\r\n", receive_smtp_buffered(), message_id);
 
       if (host_checking)
         fprintf(stdout,
index 14dd11498c74673848d29b631018d6654ffb0d52..03085c9e4b2f7faf6fec37a2fbf341084dbb8125 100644 (file)
@@ -347,7 +347,7 @@ wouldblock_reading(void)
 {
 int fd, rc;
 fd_set fds;
-struct timeval tzero;
+struct timeval tzero = {.tv_sec = 0, .tv_usec = 0};
 
 #ifndef DISABLE_TLS
 if (tls_in.active.sock >= 0)
@@ -360,8 +360,6 @@ if (smtp_inptr < smtp_inend)
 fd = fileno(smtp_in);
 FD_ZERO(&fds);
 FD_SET(fd, &fds);
-tzero.tv_sec = 0;
-tzero.tv_usec = 0;
 rc = select(fd + 1, (SELECT_ARG2_TYPE *)&fds, NULL, NULL, &tzero);
 
 if (rc <= 0) return TRUE;     /* Not ready to read */
@@ -587,6 +585,8 @@ smtp_get_cache(void)
 {
 #ifndef DISABLE_DKIM
 int n = smtp_inend - smtp_inptr;
+if (chunking_state == CHUNKING_LAST && chunking_data_left < n)
+  n = chunking_data_left;
 if (n > 0)
   dkim_exim_verify_feed(smtp_inptr, n);
 #endif
@@ -3844,11 +3844,24 @@ else
   smtp_printf("221 %s closing connection\r\n", FALSE, smtp_active_hostname);
 
 #ifndef DISABLE_TLS
-tls_close(NULL, TLS_SHUTDOWN_NOWAIT);
+tls_close(NULL, TLS_SHUTDOWN_WAIT);
 #endif
 
 log_write(L_smtp_connection, LOG_MAIN, "%s closed by QUIT",
   smtp_get_connection_info());
+
+/* Pause, hoping client will FIN first so that they get the TIME_WAIT.
+The socket should become readble (though with no data) */
+
+  {
+  int fd = fileno(smtp_in);
+  fd_set fds;
+  struct timeval t_limit = {.tv_sec = 0, .tv_usec = 200*1000};
+
+  FD_ZERO(&fds);
+  FD_SET(fd, &fds);
+  (void) select(fd + 1, (SELECT_ARG2_TYPE *)&fds, NULL, NULL, &t_limit);
+  }
 }
 
 
index 2b03c03f3e76eacd23bcddd3651b5ae50cb81526..2a4497488bc1468c483a16cf8f3b712e94d71203 100644 (file)
@@ -659,8 +659,9 @@ if (format)
     while (*p) *p++ = '*';
     }
 
-  HDEBUG(D_transport|D_acl|D_v)
-    debug_printf_indent("  SMTP%c> %s\n", ">+|"[mode], big_buffer);
+  HDEBUG(D_transport|D_acl|D_v) debug_printf_indent("  SMTP%c> %s\n",
+    mode == SCMD_BUFFER ? '|' : mode == SCMD_MORE ? '+' : '>',
+    big_buffer);
   }
 
 if (mode != SCMD_BUFFER)
index 022ac02bc8e16da84c188b1a855f0fb79b8db4a6..9794e93d1309d8ecd940fb6a6d15a1c070c6c453 100644 (file)
@@ -993,6 +993,47 @@ errno = ERRNO_SPOOLFORMAT;
 return inheader? spool_read_hdrerror : spool_read_enverror;
 }
 
+
+#ifndef COMPILE_UTILITY
+/* Read out just the (envelope) sender string from the spool -H file.
+Remove the <> wrap and return it in allocated store.  Return NULL on error.
+
+We assume that message_subdir is already set.
+*/
+
+uschar *
+spool_sender_from_msgid(const uschar * id)
+{
+uschar * name = string_sprintf("%s-H", id);
+FILE * fp;
+int n;
+uschar * yield = NULL;
+
+if (!(fp = Ufopen(spool_fname(US"input", message_subdir, name, US""), "rb")))
+  return NULL;
+
+DEBUG(D_deliver) debug_printf_indent("reading spool file %s\n", name);
+
+/* Skip the line with the copy of the filename, then the line with login/uid/gid.
+Read the next line, which should be the envelope sender.
+Do basic validation on that. */
+
+if (  Ufgets(big_buffer, big_buffer_size, fp) != NULL
+   && Ufgets(big_buffer, big_buffer_size, fp) != NULL
+   && Ufgets(big_buffer, big_buffer_size, fp) != NULL
+   && (n = Ustrlen(big_buffer)) >= 3
+   && big_buffer[0] == '<' && big_buffer[n-2] == '>'
+   )
+  {
+  yield = store_get(n-2, TRUE);        /* tainted */
+  Ustrncpy(yield, big_buffer+1, n-3);
+  yield[n-3] = 0;
+  }
+fclose(fp);
+return yield;
+}
+#endif  /* COMPILE_UTILITY */
+
 /* vi: aw ai sw=2
 */
 /* End of spool_in.c */
index 46547d7327cf03595d73495e24727b6599c684b3..89e3ef2f69214aa61942e4c56af9d56a08d27ef7 100644 (file)
@@ -3489,6 +3489,25 @@ return TRUE;
 
 
 
+/*
+Arguments:
+  ct_ctx       client TLS context pointer, or NULL for the one global server context
+*/
+
+void
+tls_shutdown_wr(void * ct_ctx)
+{
+exim_gnutls_state_st * state = ct_ctx ? ct_ctx : &state_server;
+tls_support * tlsp = state->tlsp;
+
+if (!tlsp || tlsp->active.sock < 0) return;  /* TLS was not active */
+
+tls_write(ct_ctx, NULL, 0, FALSE);     /* flush write buffer */
+
+HDEBUG(D_transport|D_tls|D_acl|D_v) debug_printf_indent("  SMTP(TLS shutdown)>>\n");
+gnutls_bye(state->session, GNUTLS_SHUT_WR);
+}
+
 /*************************************************
 *         Close down a TLS session               *
 *************************************************/
@@ -3499,29 +3518,30 @@ would tamper with the TLS session in the parent process).
 
 Arguments:
   ct_ctx       client context pointer, or NULL for the one global server context
-  shutdown     1 if TLS close-alert is to be sent,
-               2 if also response to be waited for
+  do_shutdown  0 no data-flush or TLS close-alert
+               1 if TLS close-alert is to be sent,
+               2 if also response to be waited for (2s timeout)
 
 Returns:     nothing
 */
 
 void
-tls_close(void * ct_ctx, int shutdown)
+tls_close(void * ct_ctx, int do_shutdown)
 {
 exim_gnutls_state_st * state = ct_ctx ? ct_ctx : &state_server;
 tls_support * tlsp = state->tlsp;
 
 if (!tlsp || tlsp->active.sock < 0) return;  /* TLS was not active */
 
-tls_write(ct_ctx, NULL, 0, FALSE);     /* flush write buffer */
-
-if (shutdown)
+if (do_shutdown)
   {
   DEBUG(D_tls) debug_printf("tls_close(): shutting down TLS%s\n",
-    shutdown > 1 ? " (with response-wait)" : "");
+    do_shutdown > 1 ? " (with response-wait)" : "");
+
+  tls_write(ct_ctx, NULL, 0, FALSE);   /* flush write buffer */
 
   ALARM(2);
-  gnutls_bye(state->session, shutdown > 1 ? GNUTLS_SHUT_RDWR : GNUTLS_SHUT_WR);
+  gnutls_bye(state->session, do_shutdown > 1 ? GNUTLS_SHUT_RDWR : GNUTLS_SHUT_WR);
   ALARM_CLR(0);
   }
 
@@ -3669,7 +3689,7 @@ return buf;
 
 
 void
-tls_get_cache()
+tls_get_cache(void)
 {
 #ifndef DISABLE_DKIM
 exim_gnutls_state_st * state = &state_server;
@@ -3688,8 +3708,6 @@ return state_server.xfer_buffer_lwm < state_server.xfer_buffer_hwm
 }
 
 
-
-
 /*************************************************
 *          Read bytes from TLS channel           *
 *************************************************/
index 0d653a445bc44bce46f44b79e0255a69ba2ad08a..13b0c232f0e9ac263343882c9e4a8a21c79c2ccd 100644 (file)
@@ -3941,7 +3941,7 @@ return buf;
 
 
 void
-tls_get_cache()
+tls_get_cache(void)
 {
 #ifndef DISABLE_DKIM
 int n = ssl_xfer_buffer_hwm - ssl_xfer_buffer_lwm;
@@ -3955,7 +3955,7 @@ BOOL
 tls_could_read(void)
 {
 return ssl_xfer_buffer_lwm < ssl_xfer_buffer_hwm
-      || SSL_pending(state_server.lib_state.lib_ssl) > 0;
+    || SSL_pending(state_server.lib_state.lib_ssl) > 0;
 }
 
 
@@ -4120,6 +4120,32 @@ return olen;
 
 
 
+/*
+Arguments:
+  ct_ctx       client TLS context pointer, or NULL for the one global server context
+*/
+
+void
+tls_shutdown_wr(void * ct_ctx)
+{
+exim_openssl_client_tls_ctx * o_ctx = ct_ctx;
+SSL ** sslp = o_ctx ? &o_ctx->ssl : (SSL **) &state_server.lib_state.lib_ssl;
+int * fdp = o_ctx ? &tls_out.active.sock : &tls_in.active.sock;
+int rc;
+
+if (*fdp < 0) return;  /* TLS was not active */
+
+tls_write(ct_ctx, NULL, 0, FALSE);     /* flush write buffer */
+
+HDEBUG(D_transport|D_tls|D_acl|D_v) debug_printf_indent("  SMTP(TLS shutdown)>>\n");
+rc = SSL_shutdown(*sslp);
+if (rc < 0) DEBUG(D_tls)
+  {
+  ERR_error_string_n(ERR_get_error(), ssl_errstring, sizeof(ssl_errstring));
+  debug_printf("SSL_shutdown: %s\n", ssl_errstring);
+  }
+}
+
 /*************************************************
 *         Close down a TLS session               *
 *************************************************/
@@ -4130,7 +4156,8 @@ would tamper with the SSL session in the parent process).
 
 Arguments:
   ct_ctx       client TLS context pointer, or NULL for the one global server context
-  shutdown     1 if TLS close-alert is to be sent,
+  do_shutdown  0 no data-flush or TLS close-alert
+               1 if TLS close-alert is to be sent,
                2 if also response to be waited for
 
 Returns:     nothing
@@ -4139,24 +4166,24 @@ Used by both server-side and client-side TLS.
 */
 
 void
-tls_close(void * ct_ctx, int shutdown)
+tls_close(void * ct_ctx, int do_shutdown)
 {
 exim_openssl_client_tls_ctx * o_ctx = ct_ctx;
-SSL **sslp = o_ctx ? &o_ctx->ssl : (SSL **) &state_server.lib_state.lib_ssl;
-int *fdp = o_ctx ? &tls_out.active.sock : &tls_in.active.sock;
+SSL ** sslp = o_ctx ? &o_ctx->ssl : (SSL **) &state_server.lib_state.lib_ssl;
+int * fdp = o_ctx ? &tls_out.active.sock : &tls_in.active.sock;
 
 if (*fdp < 0) return;  /* TLS was not active */
 
-tls_write(ct_ctx, NULL, 0, FALSE);     /* flush write buffer */
-
-if (shutdown)
+if (do_shutdown)
   {
   int rc;
   DEBUG(D_tls) debug_printf("tls_close(): shutting down TLS%s\n",
-    shutdown > 1 ? " (with response-wait)" : "");
+    do_shutdown > 1 ? " (with response-wait)" : "");
+
+  tls_write(ct_ctx, NULL, 0, FALSE);   /* flush write buffer */
 
   if (  (rc = SSL_shutdown(*sslp)) == 0        /* send "close notify" alert */
-     && shutdown > 1)
+     && do_shutdown > 1)
     {
     ALARM(2);
     rc = SSL_shutdown(*sslp);          /* wait for response */
index c2062e6331138be04a0bd97b5603e0280db4a742..31edb96929f06c714bfb8143188d136101d5add5 100644 (file)
@@ -886,7 +886,7 @@ transport_write_timeout non-zero.
 
 Arguments:
   tctx
-    (fd, msg)          Either and fd, to write the message to,
+    (fd, msg)          Either an fd, to write the message to,
                        or a string: if null write message to allocated space
                        otherwire take content as headers.
     addr                (chain of) addresses (for extra headers), or NULL;
@@ -905,6 +905,7 @@ Arguments:
       add_delivery_date     if TRUE, add a "delivery-date" header
       use_crlf              if TRUE, turn NL into CR LF
       end_dot               if TRUE, send a terminating "." line at the end
+      no_flush             if TRUE, do not flush at end
       no_headers            if TRUE, omit the headers
       no_body               if TRUE, omit the body
     check_string          a string to check for at the start of lines, or NULL
@@ -1161,8 +1162,9 @@ if (tctx->options & topt_end_dot && !write_chunk(tctx, US".\n", 2))
 
 /* Write out any remaining data in the buffer before returning. */
 
-return (len = chunk_ptr - deliver_out_buffer) <= 0 ||
-  transport_write_block(tctx, deliver_out_buffer, len, FALSE);
+return (len = chunk_ptr - deliver_out_buffer) <= 0
+  || transport_write_block(tctx, deliver_out_buffer, len,
+                           !!(tctx->options & topt_no_flush));
 }
 
 
@@ -1260,7 +1262,7 @@ if ((write_pid = exim_fork(US"tpt-filter-writer")) == 0)
 
   tctx->u.fd = fd_write;
   tctx->check_string = tctx->escape_string = NULL;
-  tctx->options &= ~(topt_use_crlf | topt_end_dot | topt_use_bdat);
+  tctx->options &= ~(topt_use_crlf | topt_end_dot | topt_use_bdat | topt_no_flush);
 
   rc = internal_transport_write_message(tctx, size_limit);
 
@@ -1599,7 +1601,8 @@ for (host_item * host = hostlist; host; host = host->next)
   /* Update the database */
 
   dbfn_write(dbm_file, host->name, host_record, sizeof(dbdata_wait) + host_length);
-  DEBUG(D_transport) debug_printf("added to list for %s\n", host->name);
+  DEBUG(D_transport) debug_printf("added %.*s to queue for %s\n",
+                                 MESSAGE_ID_LENGTH, message_id, host->name);
   }
 
 /* All now done */
index 95fa6daa981118cf3786c963ad296e379f90eb89..13f617cbb916b8db87df30ff9756bf2dc89a2027 100644 (file)
@@ -1637,8 +1637,9 @@ uschar * message_local_identity,
 current_local_identity =
   smtp_local_identity(s_compare->current_sender_address, s_compare->tblock);
 
-if (!(new_sender_address = deliver_get_sender_address(message_id)))
-    return FALSE;
+if (!(new_sender_address = spool_sender_from_msgid(message_id)))
+  return FALSE;
+
 
 message_local_identity =
   smtp_local_identity(new_sender_address, s_compare->tblock);
@@ -2516,6 +2517,7 @@ if (  smtp_peer_options & OPTION_TLS
       sx->send_quit = FALSE;
       goto TLS_FAILED;
       }
+    sx->send_tlsclose = TRUE;
 
     /* TLS session is set up.  Check the inblock fill level.  If there is
     content then as we have not yet done a tls read it must have arrived before
@@ -2949,7 +2951,11 @@ if (sx->send_quit)
 #ifndef DISABLE_TLS
 if (sx->cctx.tls_ctx)
   {
-  tls_close(sx->cctx.tls_ctx, TLS_SHUTDOWN_NOWAIT);
+  if (sx->send_tlsclose)
+    {
+    tls_close(sx->cctx.tls_ctx, TLS_SHUTDOWN_NOWAIT);
+    sx->send_tlsclose = FALSE;
+    }
   sx->cctx.tls_ctx = NULL;
   }
 #endif
@@ -3328,6 +3334,7 @@ smtp_proxy_tls(void * ct_ctx, uschar * buf, size_t bsize, int * pfd,
 fd_set rfds, efds;
 int max_fd = MAX(pfd[0], tls_out.active.sock) + 1;
 int rc, i;
+BOOL send_tls_shutdown = TRUE;
 
 close(pfd[1]);
 if ((rc = exim_fork(US"tls-proxy")))
@@ -3372,8 +3379,8 @@ for (int fd_bits = 3; fd_bits; )
 
   /* handle inbound data */
   if (FD_ISSET(tls_out.active.sock, &rfds))
-    if ((rc = tls_read(ct_ctx, buf, bsize)) <= 0)
-      {
+    if ((rc = tls_read(ct_ctx, buf, bsize)) <= 0)      /* Expect -1 for EOF; */
+    {                              /* that reaps the TLS Close Notify record */
       fd_bits &= ~1;
       FD_CLR(tls_out.active.sock, &rfds);
       shutdown(pfd[0], SHUT_WR);
@@ -3384,16 +3391,21 @@ for (int fd_bits = 3; fd_bits; )
       for (int nbytes = 0; rc - nbytes > 0; nbytes += i)
        if ((i = write(pfd[0], buf + nbytes, rc - nbytes)) < 0) goto done;
       }
-  else if (fd_bits & 1)
-    FD_SET(tls_out.active.sock, &rfds);
 
-  /* handle outbound data */
+  /* Handle outbound data.  We cannot combine payload and the TLS-close
+  due to the limitations of the (pipe) channel feeding us. */
   if (FD_ISSET(pfd[0], &rfds))
     if ((rc = read(pfd[0], buf, bsize)) <= 0)
       {
-      fd_bits = 0;
-      tls_close(ct_ctx, TLS_SHUTDOWN_NOWAIT);
-      ct_ctx = NULL;
+      fd_bits &= ~2;
+      FD_CLR(pfd[0], &rfds);
+
+# ifdef EXIM_TCP_CORK  /* Use _CORK to get TLS Close Notify in FIN segment */
+      (void) setsockopt(tls_out.active.sock, IPPROTO_TCP, EXIM_TCP_CORK, US &on, sizeof(on));
+# endif
+      tls_shutdown_wr(ct_ctx);
+      send_tls_shutdown = FALSE;
+      shutdown(tls_out.active.sock, SHUT_WR);
       }
     else
       {
@@ -3401,11 +3413,14 @@ for (int fd_bits = 3; fd_bits; )
        if ((i = tls_write(ct_ctx, buf + nbytes, rc - nbytes, FALSE)) < 0)
          goto done;
       }
-  else if (fd_bits & 2)
-    FD_SET(pfd[0], &rfds);
+
+  if (fd_bits & 1) FD_SET(tls_out.active.sock, &rfds);
+  if (fd_bits & 2) FD_SET(pfd[0], &rfds);
   }
 
 done:
+  if (send_tls_shutdown) tls_close(ct_ctx, TLS_SHUTDOWN_NOWAIT);
+  ct_ctx = NULL;
   testharness_pause_ms(100);   /* let logging complete */
   exim_exit(EXIT_SUCCESS);
 }
@@ -3478,6 +3493,7 @@ smtp_context * sx = store_get(sizeof(*sx), TRUE); /* tainted, for the data buffe
 #ifdef SUPPORT_DANE
 BOOL dane_held;
 #endif
+BOOL tcw_done = FALSE, tcw = FALSE;
 
 *message_defer = FALSE;
 
@@ -3767,6 +3783,44 @@ else
   report_time_since(&t0, US"dkim_exim_sign_init (delta)");
 # endif
   }
+#endif
+
+  /* See if we can pipeline QUIT.  Reasons not to are
+  - pipelining not active
+  - not ok to send quit
+  - errors in amtp transation responses
+  - more addrs to send for this message or this host
+  - more messages for this host
+  If we can, we want the message-write to not flush (the tail end of) its data out.  */
+
+  if (  sx->pipelining_used
+     && (sx->ok && sx->completed_addr || sx->peer_offered & OPTION_CHUNKING)
+     && sx->send_quit
+     && !(sx->first_addr || f.continue_more)
+     )
+    {
+    smtp_compare_t t_compare =
+      {.tblock = tblock, .current_sender_address = sender_address};
+
+    tcw_done = TRUE;
+    tcw =
+#ifndef DISABLE_TLS
+          (  tls_out.active.sock < 0  &&  !continue_proxy_cipher
+           || verify_check_given_host(CUSS &ob->hosts_nopass_tls, host) != OK
+          )
+        &&
+#endif
+           transport_check_waiting(tblock->name, host->name,
+             tblock->connection_max_messages, new_message_id,
+            (oicf)smtp_are_same_identities, (void*)&t_compare);
+    if (!tcw)
+      {
+      HDEBUG(D_transport) debug_printf("will pipeline QUIT\n");
+      tctx.options |= topt_no_flush;
+      }
+    }
+
+#ifndef DISABLE_DKIM
   sx->ok = dkim_transport_write_message(&tctx, &ob->dkim, CUSS &message);
 #else
   sx->ok = transport_write_message(&tctx, 0);
@@ -3795,6 +3849,47 @@ else
 
   smtp_command = US"end of data";
 
+  /* If we can pipeline a QUIT with the data them send it now.  If a new message
+  for this host appeared in the queue while data was being sent, we will not see
+  it and it will have to wait for a queue run.  If there was one but another
+  thread took it, we might attempt to send it - but locking of spoolfiles will
+  detect that. Use _MORE to get QUIT in FIN segment. */
+
+  if (tcw_done && !tcw)
+    {
+    /*XXX jgh 2021/03/10 google et. al screwup.  G, at least, sends TCP FIN in response to TLS
+    close-notify.  Under TLS 1.3, violating RFC.
+    However, TLS 1.2 does not have half-close semantics. */
+
+    if (  sx->cctx.tls_ctx
+#if 0 && !defined(DISABLE_TLS)
+       && Ustrcmp(tls_out.ver, "TLS1.3") != 0
+#endif
+       )
+      {                                /* Send QUIT now and not later */
+      (void)smtp_write_command(sx, SCMD_FLUSH, "QUIT\r\n");
+      sx->send_quit = FALSE;
+      }
+    else
+      {                                /* add QUIT to the output buffer */
+      (void)smtp_write_command(sx, SCMD_MORE, "QUIT\r\n");
+      sx->send_quit = FALSE;   /* avoid sending it later */
+
+#ifndef DISABLE_TLS
+      if (sx->cctx.tls_ctx)    /* need to send TLS Cloe Notify */
+       {
+# ifdef EXIM_TCP_CORK          /* Use _CORK to get Close Notify in FIN segment */
+       (void) setsockopt(sx->cctx.sock, IPPROTO_TCP, EXIM_TCP_CORK, US &on, sizeof(on));
+# endif
+       tls_shutdown_wr(sx->cctx.tls_ctx);
+       sx->send_tlsclose = FALSE;      /* avoid later repeat */
+       }
+#endif
+      HDEBUG(D_transport|D_acl|D_v) debug_printf_indent("  SMTP(shutdown)>>\n");
+      shutdown(sx->cctx.sock, SHUT_WR);        /* flush output buffer, with TCP FIN */
+      }
+    }
+
   if (sx->peer_offered & OPTION_CHUNKING && sx->cmd_count > 1)
     {
     /* Reap any outstanding MAIL & RCPT commands, but not a DATA-go-ahead */
@@ -4069,7 +4164,8 @@ if (!sx->ok)
     {
     save_errno = errno;
     message = NULL;
-    sx->send_quit = check_response(host, &save_errno, addrlist->more_errno,
+    /* Clear send_quit flag if needed.  Do not set. */
+    sx->send_quit &= check_response(host, &save_errno, addrlist->more_errno,
       sx->buffer, &code, &message, &pass_message);
     goto FAILED;
     }
@@ -4230,13 +4326,12 @@ DEBUG(D_transport)
 
 if (sx->completed_addr && sx->ok && sx->send_quit)
   {
-  smtp_compare_t t_compare;
-
-  t_compare.tblock = tblock;
-  t_compare.current_sender_address = sender_address;
+  smtp_compare_t t_compare =
+    {.tblock = tblock, .current_sender_address = sender_address};
 
   if (  sx->first_addr                 /* more addrs for this message */
-     || f.continue_more                        /* more addrs for coninued-host */
+     || f.continue_more                        /* more addrs for continued-host */
+     || tcw_done && tcw                        /* more messages for host */
      || (
 #ifndef DISABLE_TLS
           (  tls_out.active.sock < 0  &&  !continue_proxy_cipher
@@ -4281,7 +4376,6 @@ if (sx->completed_addr && sx->ok && sx->send_quit)
 #endif
       int socket_fd = sx->cctx.sock;
 
-
       if (sx->first_addr)              /* More addresses still to be sent */
         {                              /*   for this message              */
         continue_sequence++;           /* Causes * in logging */
@@ -4306,6 +4400,7 @@ if (sx->completed_addr && sx->ok && sx->send_quit)
          the socket on. */
 
          tls_close(sx->cctx.tls_ctx, TLS_SHUTDOWN_WAIT);
+         sx->send_tlsclose = FALSE;
          sx->cctx.tls_ctx = NULL;
          tls_out.active.sock = -1;
          smtp_peer_options = smtp_peer_options_wrap;
@@ -4399,20 +4494,21 @@ been passed to another process. */
 
 SEND_QUIT:
 if (sx->send_quit)
-                       /* Use _MORE to get QUIT in FIN segment */
+  {                    /* Use _MORE to get QUIT in FIN segment */
   (void)smtp_write_command(sx, SCMD_MORE, "QUIT\r\n");
-
-END_OFF:
-
 #ifndef DISABLE_TLS
-# ifdef EXIM_TCP_CORK
-if (sx->cctx.tls_ctx)  /* Use _CORK to get TLS Close Notify in FIN segment */
-  (void) setsockopt(sx->cctx.sock, IPPROTO_TCP, EXIM_TCP_CORK, US &on, sizeof(on));
+  if (sx->cctx.tls_ctx)
+    {
+# ifdef EXIM_TCP_CORK  /* Use _CORK to get TLS Close Notify in FIN segment */
+    (void) setsockopt(sx->cctx.sock, IPPROTO_TCP, EXIM_TCP_CORK, US &on, sizeof(on));
 # endif
-
-tls_close(sx->cctx.tls_ctx, TLS_SHUTDOWN_NOWAIT);
-sx->cctx.tls_ctx = NULL;
+    tls_shutdown_wr(sx->cctx.tls_ctx);
+    sx->send_tlsclose = FALSE;
+    }
 #endif
+  }
+
+END_OFF:
 
 /* Close the socket, and return the appropriate value, first setting
 works because the NULL setting is passed back to the calling process, and
@@ -4424,26 +4520,58 @@ writing RSET might have failed, or there may be other addresses whose hosts are
 specified in the transports, and therefore not visible at top level, in which
 case continue_more won't get set. */
 
-HDEBUG(D_transport|D_acl|D_v) debug_printf_indent("  SMTP(close)>>\n");
 if (sx->send_quit)
   {
   /* This flushes data queued in the socket, being the QUIT and any TLS Close,
   sending them along with the client FIN flag.  Us (we hope) sending FIN first
   means we (client) take the TIME_WAIT state, so the server (which likely has a
-  higher connection rate) does no have to. */
+  higher connection rate) does not have to. */
 
+  HDEBUG(D_transport|D_acl|D_v) debug_printf_indent("  SMTP(shutdown)>>\n");
   shutdown(sx->cctx.sock, SHUT_WR);
+  }
 
+if (sx->send_quit || tcw_done && !tcw)
+  {
   /* Wait for (we hope) ack of our QUIT, and a server FIN.  Discard any data
   received, then discard the socket.  Any packet received after then, or receive
   data still in the socket, will get a RST - hence the pause/drain. */
 
+  /* Reap the response to QUIT, timing out after one second */
+  (void) smtp_read_response(sx, sx->buffer, sizeof(sx->buffer), '2', 1);
+#ifndef DISABLE_TLS
+  if (sx->cctx.tls_ctx)
+    {
+    int n;
+
+    /* Reap the TLS Close Notify from the server, timing out after one second */
+    sigalrm_seen = FALSE;
+    ALARM(1);
+    do
+      n = tls_read(sx->cctx.tls_ctx, sx->inbuffer, sizeof(sx->inbuffer));
+    while (!sigalrm_seen && n > 0);
+    ALARM_CLR(0);
+
+# ifdef EXIM_TCP_CORK
+    (void) setsockopt(sx->cctx.sock, IPPROTO_TCP, EXIM_TCP_CORK, US &on, sizeof(on));
+# endif
+    tls_close(sx->cctx.tls_ctx, TLS_SHUTDOWN_WAIT);
+    sx->cctx.tls_ctx = NULL;
+    }
+#endif
   millisleep(20);
-  testharness_pause_ms(200);
   if (fcntl(sx->cctx.sock, F_SETFL, O_NONBLOCK) == 0)
-    for (int i = 16; read(sx->cctx.sock, sx->inbuffer, sizeof(sx->inbuffer)) > 0 && i > 0;)
-      i--;                             /* drain socket */
+    for (int i = 16, n;                                                /* drain socket */
+        (n = read(sx->cctx.sock, sx->inbuffer, sizeof(sx->inbuffer))) > 0 && i > 0;
+        i--) HDEBUG(D_transport|D_acl|D_v)
+      {
+      int m = MIN(n, 64);
+      debug_printf_indent("  SMTP(drain %d bytes)<< %.*s\n", n, m, sx->inbuffer);
+      for (m = 0; m < n; m++)
+       debug_printf("0x%02x\n", sx->inbuffer[m]);
+      }
   }
+HDEBUG(D_transport|D_acl|D_v) debug_printf_indent("  SMTP(close)>>\n");
 (void)close(sx->cctx.sock);
 
 #ifndef DISABLE_EVENT
index d55dc5961c6f121e78f29f8bbbad49a7b6028b6a..1ea2a4d007ab9ad2b2fe12067a04f60e636ec038 100644 (file)
@@ -174,6 +174,7 @@ typedef struct {
   BOOL completed_addr:1;
   BOOL send_rset:1;
   BOOL send_quit:1;
+  BOOL send_tlsclose:1;
 
   int          max_rcpt;
   int          cmd_count;
diff --git a/test/confs/0623 b/test/confs/0623
new file mode 100644 (file)
index 0000000..3805c51
--- /dev/null
@@ -0,0 +1,43 @@
+# Exim test configuration 0623
+
+SERVER=
+
+.include DIR/aux-var/std_conf_prefix
+
+primary_hostname = myhost.test.ex
+log_selector = +pipelining +received_recipients +smtp_connection
+
+
+# ----- Main settings -----
+
+acl_smtp_rcpt = accept
+
+# ----- Routers -----
+
+begin routers
+
+client:
+  driver =     accept
+  transport =  send_to_server
+  errors_to =  ""
+
+
+# ----- Transports -----
+
+begin transports
+
+send_to_server:
+  driver = smtp
+  allow_localhost
+  hosts = 127.0.0.1
+  port = PORT_D
+
+# ----- Retry -----
+
+
+begin retry
+
+* * F,5d,10s
+
+
+# End
index ffce9e8863b3f25517d60c1e687cc2c238661538..2409f395ec4b19b2e6708c0e99065fe8edfb45f0 100644 (file)
@@ -6,6 +6,7 @@ ALLOW=
 
 exim_path = EXIM_PATH
 keep_environment =
+add_environment = SSLKEYLOGFILE=DIR/spool/sslkeys
 host_lookup_order = bydns
 spool_directory = DIR/spool
 log_file_path = DIR/spool/log/SERVER%slog
@@ -37,9 +38,9 @@ queue_only
 smtp_receive_timeout = 2s
 
 .ifdef _HAVE_DKIM
-log_selector = +received_recipients +dkim_verbose
+log_selector = +received_recipients +millisec +dkim_verbose
 .else
-log_selector = +received_recipients
+log_selector = +received_recipients +millisec
 .endif
 
 .ifdef _OPT_MAIN_TLS_CERTIFICATE
diff --git a/test/confs/0911 b/test/confs/0911
new file mode 100644 (file)
index 0000000..4c9444c
--- /dev/null
@@ -0,0 +1,43 @@
+# Exim test configuration 0623
+
+SERVER=
+
+.include DIR/aux-var/std_conf_prefix
+
+primary_hostname = myhost.test.ex
+log_selector = +pipelining +received_recipients +smtp_connection +millisec
+
+
+# ----- Main settings -----
+
+acl_smtp_rcpt = accept
+
+# ----- Routers -----
+
+begin routers
+
+client:
+  driver =     accept
+  transport =  send_to_server
+  errors_to =  ""
+
+
+# ----- Transports -----
+
+begin transports
+
+send_to_server:
+  driver = smtp
+  allow_localhost
+  hosts = 127.0.0.1
+  port = PORT_D
+
+# ----- Retry -----
+
+
+begin retry
+
+* * F,5d,10s
+
+
+# End
diff --git a/test/log/0623 b/test/log/0623
new file mode 100644 (file)
index 0000000..8c54aee
--- /dev/null
@@ -0,0 +1,20 @@
+1999-03-02 09:44:33 10HmaX-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for good@test.ex
+1999-03-02 09:44:33 10HmaX-0005vi-00 => good@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L C="250 OK message data"
+1999-03-02 09:44:33 10HmaX-0005vi-00 Completed
+1999-03-02 09:44:33 10HmaY-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for nopipe@test.ex
+1999-03-02 09:44:33 10HmaY-0005vi-00 => nopipe@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] C="250 OK message data"
+1999-03-02 09:44:33 10HmaY-0005vi-00 Completed
+1999-03-02 09:44:33 10HmaZ-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for tempreject@test.ex
+1999-03-02 09:44:33 10HmaZ-0005vi-00 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 451 Service not available
+1999-03-02 09:44:33 10HmaZ-0005vi-00 == tempreject@test.ex R=client T=send_to_server defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 451 Service not available
+1999-03-02 09:44:33 10HmaZ-0005vi-00 removed by CALLER
+1999-03-02 09:44:33 10HmaZ-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbA-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for permreject@test.ex
+1999-03-02 09:44:33 10HmbA-0005vi-00 ** permreject@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 550 content rejected
+1999-03-02 09:44:33 10HmbA-0005vi-00 permreject@test.ex: error ignored
+1999-03-02 09:44:33 10HmbA-0005vi-00 Completed
+1999-03-02 09:44:33 10HmbB-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for permreject@test.ex
+1999-03-02 09:44:33 10HmbB-0005vi-00 H=127.0.0.1 [127.0.0.1]: Remote host closed connection in response to end of data
+1999-03-02 09:44:33 10HmbB-0005vi-00 == permreject@test.ex R=client T=send_to_server defer (-18) H=127.0.0.1 [127.0.0.1]: Remote host closed connection in response to end of data
+1999-03-02 09:44:33 10HmbB-0005vi-00 removed by CALLER
+1999-03-02 09:44:33 10HmbB-0005vi-00 Completed
index 305aa94e0a7c07698ed46ef4bc89624181c8e207..a6e10636786ea45308dfca70d77356ffca3eff3d 100644 (file)
@@ -1,12 +1,12 @@
 
 ******** SERVER ********
-1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_D
-1999-03-02 09:44:33 10HmaX-0005vi-00 <= someone@some.domain H=(tester) [127.0.0.1] P=esmtp K S=sss for CALLER@test.ex
-1999-03-02 09:44:33 10HmaY-0005vi-00 <= someone@some.domain H=(tester) [127.0.0.1] P=esmtp K S=sss for CALLER@test.ex
-1999-03-02 09:44:33 10HmaZ-0005vi-00 <= someone@some.domain H=(tester) [127.0.0.1] P=esmtp K S=sss for CALLER@test.ex
-1999-03-02 09:44:33 10HmbA-0005vi-00 SMTP data timeout (message abandoned) on connection from (tester) [127.0.0.1] F=<someone@some.domain>
-1999-03-02 09:44:33 SMTP connection from (tester) [127.0.0.1] lost while reading message data
-1999-03-02 09:44:33 SMTP connection from (tester) [127.0.0.1] lost while reading message data
-1999-03-02 09:44:33 10HmbB-0005vi-00 <= someone@some.domain H=(tester) [127.0.0.1] P=esmtp K S=sss for CALLER@test.ex
-1999-03-02 09:44:33 H=(tester) [127.0.0.1] F=<someone@some.domain> rejected RCPT <dummy@reject.ex>: relay not permitted
-1999-03-02 09:44:33 rejected from <someone@some.domain> H=(tester) [127.0.0.1]: Non-CRLF-terminated header, under CHUNKING: message abandoned
+2017-07-30 18:51:05.712 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_D
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 <= someone@some.domain H=(tester) [127.0.0.1] P=esmtp K S=sss for CALLER@test.ex
+2017-07-30 18:51:05.712 10HmaY-0005vi-00 <= someone@some.domain H=(tester) [127.0.0.1] P=esmtp K S=sss for CALLER@test.ex
+2017-07-30 18:51:05.712 10HmaZ-0005vi-00 <= someone@some.domain H=(tester) [127.0.0.1] P=esmtp K S=sss for CALLER@test.ex
+2017-07-30 18:51:05.712 10HmbA-0005vi-00 SMTP data timeout (message abandoned) on connection from (tester) [127.0.0.1] F=<someone@some.domain>
+2017-07-30 18:51:05.712 SMTP connection from (tester) [127.0.0.1] lost while reading message data
+2017-07-30 18:51:05.712 SMTP connection from (tester) [127.0.0.1] lost while reading message data
+2017-07-30 18:51:05.712 10HmbB-0005vi-00 <= someone@some.domain H=(tester) [127.0.0.1] P=esmtp K S=sss for CALLER@test.ex
+2017-07-30 18:51:05.712 H=(tester) [127.0.0.1] F=<someone@some.domain> rejected RCPT <dummy@reject.ex>: relay not permitted
+2017-07-30 18:51:05.712 rejected from <someone@some.domain> H=(tester) [127.0.0.1]: Non-CRLF-terminated header, under CHUNKING: message abandoned
index 0ca87207577a8410cd46b52ad3abc16233fe1a04..55f85d39d4246e04433607a5cec9caed5ed837c8 100644 (file)
@@ -1,47 +1,44 @@
-1999-03-02 09:44:33 10HmaX-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for a@test.ex
-1999-03-02 09:44:33 10HmaX-0005vi-00 => a@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK"
-1999-03-02 09:44:33 10HmaX-0005vi-00 Completed
-1999-03-02 09:44:33 10HmaY-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for b@test.ex
-1999-03-02 09:44:33 10HmaY-0005vi-00 H=127.0.0.1 [127.0.0.1]: SMTP timeout after end of data (ddd bytes written): Connection timed out
-1999-03-02 09:44:33 10HmaY-0005vi-00 == b@test.ex R=to_server T=remote_smtp defer (dd): Connection timed out H=127.0.0.1 [127.0.0.1]: SMTP timeout after end of data (ddd bytes written)
-1999-03-02 09:44:33 10HmaZ-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for c@test.ex
-1999-03-02 09:44:33 10HmaZ-0005vi-00 => c@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK"
-1999-03-02 09:44:33 10HmaZ-0005vi-00 Completed
-1999-03-02 09:44:33 10HmbA-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for d@test.ex
-1999-03-02 09:44:33 10HmbA-0005vi-00 ** d@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 500 oops
-1999-03-02 09:44:33 10HmbA-0005vi-00 d@test.ex: error ignored
-1999-03-02 09:44:33 10HmbA-0005vi-00 Completed
-1999-03-02 09:44:33 10HmbB-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for e@test.ex
-1999-03-02 09:44:33 10HmbB-0005vi-00 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 400 not right now
-1999-03-02 09:44:33 10HmbB-0005vi-00 == e@test.ex R=to_server T=remote_smtp defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 400 not right now
-1999-03-02 09:44:33 10HmbC-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for ebad@test.ex
-1999-03-02 09:44:33 10HmbC-0005vi-00 ** ebad@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<ebad@test.ex>: 550 sorry, no
-1999-03-02 09:44:33 10HmbC-0005vi-00 ebad@test.ex: error ignored
-1999-03-02 09:44:33 10HmbC-0005vi-00 Completed
-1999-03-02 09:44:33 10HmbD-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for p@test.ex
-1999-03-02 09:44:33 10HmbD-0005vi-00 => p@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat"
-1999-03-02 09:44:33 10HmbD-0005vi-00 Completed
-1999-03-02 09:44:33 10HmbE-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for q@test.ex
-1999-03-02 09:44:33 10HmbE-0005vi-00 H=127.0.0.1 [127.0.0.1]: SMTP timeout after pipelined end of data (ddd bytes written): Connection timed out
-1999-03-02 09:44:33 10HmbE-0005vi-00 == q@test.ex R=to_server T=remote_smtp defer (dd): Connection timed out H=127.0.0.1 [127.0.0.1]: SMTP timeout after pipelined end of data (ddd bytes written)
-1999-03-02 09:44:33 10HmbF-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for r@test.ex
-1999-03-02 09:44:33 10HmbF-0005vi-00 => r@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat"
-1999-03-02 09:44:33 10HmbF-0005vi-00 Completed
-1999-03-02 09:44:33 10HmbG-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for s@test.ex
-1999-03-02 09:44:33 10HmbG-0005vi-00 ** s@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 550 unacceptable mail-from
-1999-03-02 09:44:33 10HmbG-0005vi-00 s@test.ex: error ignored
-1999-03-02 09:44:33 10HmbG-0005vi-00 Completed
-1999-03-02 09:44:33 10HmbH-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for s1@test.ex
-1999-03-02 09:44:33 10HmbH-0005vi-00 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 450 greylisted mail-from
-1999-03-02 09:44:33 10HmbH-0005vi-00 == s1@test.ex R=to_server T=remote_smtp defer (-45) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 450 greylisted mail-from
-1999-03-02 09:44:33 10HmbI-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for t@test.ex
-1999-03-02 09:44:33 10HmbI-0005vi-00 ** t@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<t@test.ex>: 550 no such recipient
-1999-03-02 09:44:33 10HmbI-0005vi-00 t@test.ex: error ignored
-1999-03-02 09:44:33 10HmbI-0005vi-00 Completed
-1999-03-02 09:44:33 10HmbJ-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for u@test.ex
-1999-03-02 09:44:33 10HmbJ-0005vi-00 ** u@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 500 oops bdat
-1999-03-02 09:44:33 10HmbJ-0005vi-00 u@test.ex: error ignored
-1999-03-02 09:44:33 10HmbJ-0005vi-00 Completed
-1999-03-02 09:44:33 10HmbK-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for v@test.ex
-1999-03-02 09:44:33 10HmbK-0005vi-00 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 400 not right now bdat
-1999-03-02 09:44:33 10HmbK-0005vi-00 == v@test.ex R=to_server T=remote_smtp defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 400 not right now bdat
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for a@test.ex
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 => a@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK"
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 Completed
+2017-07-30 18:51:05.712 10HmaY-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for b@test.ex
+2017-07-30 18:51:05.712 10HmaY-0005vi-00 H=127.0.0.1 [127.0.0.1]: SMTP timeout after end of data (ddd bytes written): Connection timed out
+2017-07-30 18:51:05.712 10HmaY-0005vi-00 == b@test.ex R=to_server T=remote_smtp defer (dd): Connection timed out H=127.0.0.1 [127.0.0.1]: SMTP timeout after end of data (ddd bytes written)
+2017-07-30 18:51:05.712 10HmaZ-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for c@test.ex
+2017-07-30 18:51:05.712 10HmaZ-0005vi-00 => c@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK"
+2017-07-30 18:51:05.712 10HmaZ-0005vi-00 Completed
+2017-07-30 18:51:05.712 10HmbA-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for d@test.ex
+2017-07-30 18:51:05.712 10HmbA-0005vi-00 ** d@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 500 oops
+2017-07-30 18:51:05.712 10HmbA-0005vi-00 d@test.ex: error ignored
+2017-07-30 18:51:05.712 10HmbA-0005vi-00 Completed
+2017-07-30 18:51:05.712 10HmbB-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for e@test.ex
+2017-07-30 18:51:05.712 10HmbB-0005vi-00 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 400 not right now
+2017-07-30 18:51:05.712 10HmbB-0005vi-00 == e@test.ex R=to_server T=remote_smtp defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 400 not right now
+2017-07-30 18:51:05.712 10HmbC-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for ebad@test.ex
+2017-07-30 18:51:05.712 10HmbC-0005vi-00 ** ebad@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<ebad@test.ex>: 550 sorry, no
+2017-07-30 18:51:05.712 10HmbC-0005vi-00 ebad@test.ex: error ignored
+2017-07-30 18:51:05.712 10HmbC-0005vi-00 Completed
+2017-07-30 18:51:05.712 10HmbD-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for p@test.ex
+2017-07-30 18:51:05.712 10HmbD-0005vi-00 => p@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat"
+2017-07-30 18:51:05.712 10HmbD-0005vi-00 Completed
+2017-07-30 18:51:05.712 10HmbE-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for r@test.ex
+2017-07-30 18:51:05.712 10HmbE-0005vi-00 => r@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat"
+2017-07-30 18:51:05.712 10HmbE-0005vi-00 Completed
+2017-07-30 18:51:05.712 10HmbF-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for s@test.ex
+2017-07-30 18:51:05.712 10HmbF-0005vi-00 ** s@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 550 unacceptable mail-from
+2017-07-30 18:51:05.712 10HmbF-0005vi-00 s@test.ex: error ignored
+2017-07-30 18:51:05.712 10HmbF-0005vi-00 Completed
+2017-07-30 18:51:05.712 10HmbG-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for s1@test.ex
+2017-07-30 18:51:05.712 10HmbG-0005vi-00 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 450 greylisted mail-from
+2017-07-30 18:51:05.712 10HmbG-0005vi-00 == s1@test.ex R=to_server T=remote_smtp defer (-45) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 450 greylisted mail-from
+2017-07-30 18:51:05.712 10HmbH-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for t@test.ex
+2017-07-30 18:51:05.712 10HmbH-0005vi-00 ** t@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<t@test.ex>: 550 no such recipient
+2017-07-30 18:51:05.712 10HmbH-0005vi-00 t@test.ex: error ignored
+2017-07-30 18:51:05.712 10HmbH-0005vi-00 Completed
+2017-07-30 18:51:05.712 10HmbI-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for u@test.ex
+2017-07-30 18:51:05.712 10HmbI-0005vi-00 ** u@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 500 oops bdat
+2017-07-30 18:51:05.712 10HmbI-0005vi-00 u@test.ex: error ignored
+2017-07-30 18:51:05.712 10HmbI-0005vi-00 Completed
+2017-07-30 18:51:05.712 10HmbJ-0005vi-00 <= sender@source.dom U=root P=local-bsmtp S=sss for v@test.ex
+2017-07-30 18:51:05.712 10HmbJ-0005vi-00 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 400 not right now bdat
+2017-07-30 18:51:05.712 10HmbJ-0005vi-00 == v@test.ex R=to_server T=remote_smtp defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 400 not right now bdat
index 626b00b1c0313c05ce9e5afbcdfe1f1b9f3cf0dd..245c71a6bd0a93a0d6e6fe6a95845893f4128adb 100644 (file)
@@ -1,37 +1,37 @@
-1999-03-02 09:44:33 10HmaX-0005vi-00 <= sender@dom U=root P=local-bsmtp S=sss for a@test.ex
-1999-03-02 09:44:33 10HmaX-0005vi-00 => a@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat"
-1999-03-02 09:44:33 10HmaX-0005vi-00 Completed
-1999-03-02 09:44:33 10HmaY-0005vi-00 <= sender@dom U=root P=local-bsmtp S=sss for d@test.ex
-1999-03-02 09:44:33 10HmaY-0005vi-00 ** d@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after sending data block: 500 oops bdat-nonlast
-1999-03-02 09:44:33 10HmaY-0005vi-00 d@test.ex: error ignored
-1999-03-02 09:44:33 10HmaY-0005vi-00 Completed
-1999-03-02 09:44:33 10HmaZ-0005vi-00 <= sender@dom U=root P=local-bsmtp S=sss for p@test.ex
-1999-03-02 09:44:33 10HmaZ-0005vi-00 => p@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat"
-1999-03-02 09:44:33 10HmaZ-0005vi-00 Completed
-1999-03-02 09:44:33 10HmbA-0005vi-00 <= sender@dom U=root P=local-bsmtp S=sss for s@test.ex
-1999-03-02 09:44:33 10HmbA-0005vi-00 ** s@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined sending data block: 550 unacceptable mail-from
-1999-03-02 09:44:33 10HmbA-0005vi-00 s@test.ex: error ignored
-1999-03-02 09:44:33 10HmbA-0005vi-00 Completed
-1999-03-02 09:44:33 10HmbB-0005vi-00 <= sender@dom U=root P=local-bsmtp S=sss for t@test.ex
-1999-03-02 09:44:33 10HmbB-0005vi-00 ** t@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<t@test.ex>: 550 no such recipient
-1999-03-02 09:44:33 10HmbB-0005vi-00 t@test.ex: error ignored
-1999-03-02 09:44:33 10HmbB-0005vi-00 Completed
-1999-03-02 09:44:33 10HmbC-0005vi-00 <= sender@dom U=root P=local-bsmtp S=sss for t1@test.ex t2@test.ex
-1999-03-02 09:44:33 10HmbC-0005vi-00 ** t1@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<t1@test.ex>: 550 no such recipient
-1999-03-02 09:44:33 10HmbC-0005vi-00 => t2@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat"
-1999-03-02 09:44:33 10HmbC-0005vi-00 t1@test.ex: error ignored
-1999-03-02 09:44:33 10HmbC-0005vi-00 Completed
-1999-03-02 09:44:33 10HmbD-0005vi-00 <= sender@dom U=root P=local-bsmtp S=sss for u@test.ex
-1999-03-02 09:44:33 10HmbD-0005vi-00 ** u@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined sending data block: 500 oops nonlast bdat
-1999-03-02 09:44:33 10HmbD-0005vi-00 u@test.ex: error ignored
-1999-03-02 09:44:33 10HmbD-0005vi-00 Completed
-1999-03-02 09:44:33 10HmbE-0005vi-00 <= sender@dom U=root P=local-bsmtp S=sss for v@test.ex
-1999-03-02 09:44:33 10HmbE-0005vi-00 ** v@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 500 oops bdat
-1999-03-02 09:44:33 10HmbE-0005vi-00 v@test.ex: error ignored
-1999-03-02 09:44:33 10HmbE-0005vi-00 Completed
-1999-03-02 09:44:33 10HmbF-0005vi-00 <= sender@dom U=root P=local-bsmtp S=sss for u@test.ex
-1999-03-02 09:44:33 10HmbF-0005vi-00 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined sending data block: 400 oops nonlast bdat
-1999-03-02 09:44:33 10HmbF-0005vi-00 == u@test.ex R=to_server T=remote_smtp defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined sending data block: 400 oops nonlast bdat
-1999-03-02 09:44:33 10HmbG-0005vi-00 <= sender@dom U=root P=local-bsmtp S=sss for p@test.ex
-1999-03-02 09:44:33 10HmbG-0005vi-00 => p@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat"
-1999-03-02 09:44:33 10HmbG-0005vi-00 Completed
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 <= sender@dom U=root P=local-bsmtp S=sss for a@test.ex
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 => a@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat"
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 Completed
+2017-07-30 18:51:05.712 10HmaY-0005vi-00 <= sender@dom U=root P=local-bsmtp S=sss for d@test.ex
+2017-07-30 18:51:05.712 10HmaY-0005vi-00 ** d@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after sending data block: 500 oops bdat-nonlast
+2017-07-30 18:51:05.712 10HmaY-0005vi-00 d@test.ex: error ignored
+2017-07-30 18:51:05.712 10HmaY-0005vi-00 Completed
+2017-07-30 18:51:05.712 10HmaZ-0005vi-00 <= sender@dom U=root P=local-bsmtp S=sss for p@test.ex
+2017-07-30 18:51:05.712 10HmaZ-0005vi-00 => p@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat"
+2017-07-30 18:51:05.712 10HmaZ-0005vi-00 Completed
+2017-07-30 18:51:05.712 10HmbA-0005vi-00 <= sender@dom U=root P=local-bsmtp S=sss for s@test.ex
+2017-07-30 18:51:05.712 10HmbA-0005vi-00 ** s@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined sending data block: 550 unacceptable mail-from
+2017-07-30 18:51:05.712 10HmbA-0005vi-00 s@test.ex: error ignored
+2017-07-30 18:51:05.712 10HmbA-0005vi-00 Completed
+2017-07-30 18:51:05.712 10HmbB-0005vi-00 <= sender@dom U=root P=local-bsmtp S=sss for t@test.ex
+2017-07-30 18:51:05.712 10HmbB-0005vi-00 ** t@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<t@test.ex>: 550 no such recipient
+2017-07-30 18:51:05.712 10HmbB-0005vi-00 t@test.ex: error ignored
+2017-07-30 18:51:05.712 10HmbB-0005vi-00 Completed
+2017-07-30 18:51:05.712 10HmbC-0005vi-00 <= sender@dom U=root P=local-bsmtp S=sss for t1@test.ex t2@test.ex
+2017-07-30 18:51:05.712 10HmbC-0005vi-00 ** t1@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after RCPT TO:<t1@test.ex>: 550 no such recipient
+2017-07-30 18:51:05.712 10HmbC-0005vi-00 => t2@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat"
+2017-07-30 18:51:05.712 10HmbC-0005vi-00 t1@test.ex: error ignored
+2017-07-30 18:51:05.712 10HmbC-0005vi-00 Completed
+2017-07-30 18:51:05.712 10HmbD-0005vi-00 <= sender@dom U=root P=local-bsmtp S=sss for u@test.ex
+2017-07-30 18:51:05.712 10HmbD-0005vi-00 ** u@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined sending data block: 500 oops nonlast bdat
+2017-07-30 18:51:05.712 10HmbD-0005vi-00 u@test.ex: error ignored
+2017-07-30 18:51:05.712 10HmbD-0005vi-00 Completed
+2017-07-30 18:51:05.712 10HmbE-0005vi-00 <= sender@dom U=root P=local-bsmtp S=sss for v@test.ex
+2017-07-30 18:51:05.712 10HmbE-0005vi-00 ** v@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 500 oops bdat
+2017-07-30 18:51:05.712 10HmbE-0005vi-00 v@test.ex: error ignored
+2017-07-30 18:51:05.712 10HmbE-0005vi-00 Completed
+2017-07-30 18:51:05.712 10HmbF-0005vi-00 <= sender@dom U=root P=local-bsmtp S=sss for u@test.ex
+2017-07-30 18:51:05.712 10HmbF-0005vi-00 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined sending data block: 400 oops nonlast bdat
+2017-07-30 18:51:05.712 10HmbF-0005vi-00 == u@test.ex R=to_server T=remote_smtp defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined sending data block: 400 oops nonlast bdat
+2017-07-30 18:51:05.712 10HmbG-0005vi-00 <= sender@dom U=root P=local-bsmtp S=sss for p@test.ex
+2017-07-30 18:51:05.712 10HmbG-0005vi-00 => p@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] K C="250 OK bdat"
+2017-07-30 18:51:05.712 10HmbG-0005vi-00 Completed
diff --git a/test/log/0911 b/test/log/0911
new file mode 100644 (file)
index 0000000..e4bb5a0
--- /dev/null
@@ -0,0 +1,30 @@
+2017-07-30 18:51:05.712 SMTP connection from root
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 <= fred@myhost.test.ex U=root P=local-smtp S=sss for good@test.ex
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 => good@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L K C="250 OK chunked message data"
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 Completed
+2017-07-30 18:51:05.712 SMTP connection from root closed by QUIT
+2017-07-30 18:51:05.712 SMTP connection from root
+2017-07-30 18:51:05.712 10HmaY-0005vi-00 <= fred@myhost.test.ex U=root P=local-smtp S=sss for nopipe@test.ex
+2017-07-30 18:51:05.712 10HmaY-0005vi-00 => nopipe@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] K C="250 OK chunked message data"
+2017-07-30 18:51:05.712 10HmaY-0005vi-00 Completed
+2017-07-30 18:51:05.712 SMTP connection from root closed by QUIT
+2017-07-30 18:51:05.712 SMTP connection from root
+2017-07-30 18:51:05.712 10HmaZ-0005vi-00 <= fred@myhost.test.ex U=root P=local-smtp S=sss for tempreject@test.ex
+2017-07-30 18:51:05.712 10HmaZ-0005vi-00 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 451 Service not available
+2017-07-30 18:51:05.712 10HmaZ-0005vi-00 == tempreject@test.ex R=client T=send_to_server defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 451 Service not available
+2017-07-30 18:51:05.712 SMTP connection from root closed by QUIT
+2017-07-30 18:51:05.712 10HmaZ-0005vi-00 removed by CALLER
+2017-07-30 18:51:05.712 10HmaZ-0005vi-00 Completed
+2017-07-30 18:51:05.712 SMTP connection from root
+2017-07-30 18:51:05.712 10HmbA-0005vi-00 <= fred@myhost.test.ex U=root P=local-smtp S=sss for permreject@test.ex
+2017-07-30 18:51:05.712 10HmbA-0005vi-00 ** permreject@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 550 content rejected
+2017-07-30 18:51:05.712 10HmbA-0005vi-00 permreject@test.ex: error ignored
+2017-07-30 18:51:05.712 10HmbA-0005vi-00 Completed
+2017-07-30 18:51:05.712 SMTP connection from root closed by QUIT
+2017-07-30 18:51:05.712 SMTP connection from root
+2017-07-30 18:51:05.712 10HmbB-0005vi-00 <= fred@myhost.test.ex U=root P=local-smtp S=sss for dataloss@test.ex
+2017-07-30 18:51:05.712 10HmbB-0005vi-00 H=127.0.0.1 [127.0.0.1]: Remote host closed connection in response to pipelined end of data
+2017-07-30 18:51:05.712 10HmbB-0005vi-00 == dataloss@test.ex R=client T=send_to_server defer (-18) H=127.0.0.1 [127.0.0.1]: Remote host closed connection in response to pipelined end of data
+2017-07-30 18:51:05.712 SMTP connection from root closed by QUIT
+2017-07-30 18:51:05.712 10HmbB-0005vi-00 removed by CALLER
+2017-07-30 18:51:05.712 10HmbB-0005vi-00 Completed
index f3e5e78ab83f555b695fc9b9c74c8c99875cb4fe..649e2e9cf07dd337928c97202a95c7b5e112efcc 100644 (file)
@@ -1,5 +1,5 @@
 
 ******** SERVER ********
-1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_D
-1999-03-02 09:44:33 10HmaX-0005vi-00 <= someone@some.domain H=(rhu.barb) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no K S=sss for CALLER@test.ex
-1999-03-02 09:44:33 10HmaY-0005vi-00 <= someone@some.domain H=(rhu.barb) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no K S=sss for CALLER@test.ex
+2017-07-30 18:51:05.712 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_D
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 <= someone@some.domain H=(rhu.barb) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no K S=sss for CALLER@test.ex
+2017-07-30 18:51:05.712 10HmaY-0005vi-00 <= someone@some.domain H=(rhu.barb) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no K S=sss for CALLER@test.ex
index 7c8e6e80f5accd80205050914e1e64480e4b15f5..065ea8961acc715806fa7feb5ac8f494ce0d3fc8 100644 (file)
 1999-03-02 09:44:33 10HmbE-0005vi-00 => userb@test.ex R=cl_override T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbI-0005vi-00"
 1999-03-02 09:44:33 10HmbE-0005vi-00 Completed
 1999-03-02 09:44:33 End queue run: pid=pppp -qqf
-1999-03-02 09:44:33 10HmbJ-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for userx@test.ex
-1999-03-02 09:44:33 10HmbK-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for usery@test.ex
-1999-03-02 09:44:33 10HmbL-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for userz@test.ex
+1999-03-02 09:44:33 10HmbJ-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for user_p@test.ex
+1999-03-02 09:44:33 10HmbK-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for user_q@test.ex
+1999-03-02 09:44:33 10HmbL-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local S=sss for user_r@test.ex
 1999-03-02 09:44:33 Start queue run: pid=pppp -qqf
-1999-03-02 09:44:33 10HmbJ-0005vi-00 => userx@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbM-0005vi-00"
+1999-03-02 09:44:33 10HmbJ-0005vi-00 => user_p@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbM-0005vi-00"
 1999-03-02 09:44:33 10HmbJ-0005vi-00 Completed
-1999-03-02 09:44:33 10HmbL-0005vi-00 => userz@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbN-0005vi-00"
+1999-03-02 09:44:33 10HmbL-0005vi-00 => user_r@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbN-0005vi-00"
 1999-03-02 09:44:33 10HmbL-0005vi-00 Completed
-1999-03-02 09:44:33 10HmbK-0005vi-00 => usery@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbO-0005vi-00"
+1999-03-02 09:44:33 10HmbK-0005vi-00 => user_q@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbO-0005vi-00"
 1999-03-02 09:44:33 10HmbK-0005vi-00 Completed
 1999-03-02 09:44:33 End queue run: pid=pppp -qqf
 
@@ -63,7 +63,7 @@
 1999-03-02 09:44:33 End queue run: pid=pppp -qf
 1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_D
 1999-03-02 09:44:33 SMTP connection from [127.0.0.1]:1113 (TCP/IP connection count = 1)
-1999-03-02 09:44:33 10HmbM-0005vi-00 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1113 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbJ-0005vi-00@myhost.test.ex for userx@test.ex
-1999-03-02 09:44:33 10HmbN-0005vi-00 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1113 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbL-0005vi-00@myhost.test.ex for userz@test.ex
-1999-03-02 09:44:33 10HmbO-0005vi-00 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1113 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbK-0005vi-00@myhost.test.ex for usery@test.ex
+1999-03-02 09:44:33 10HmbM-0005vi-00 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1113 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbJ-0005vi-00@myhost.test.ex for user_p@test.ex
+1999-03-02 09:44:33 10HmbN-0005vi-00 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1113 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbL-0005vi-00@myhost.test.ex for user_r@test.ex
+1999-03-02 09:44:33 10HmbO-0005vi-00 <= CALLER@myhost.test.ex H=localhost (myhost.test.ex) [127.0.0.1]:1113 P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no S=sss id=E10HmbK-0005vi-00@myhost.test.ex for user_q@test.ex
 1999-03-02 09:44:33 SMTP connection from localhost (myhost.test.ex) [127.0.0.1]:1113 closed by QUIT
index e35fd544f67c9555563af2c6d168207f583e0e1a..54193cd0687ea3d24bf128257ec86309d410d768 100644 (file)
@@ -1,7 +1,7 @@
-1999-03-02 09:44:33 10HmaX-0005vi-00 <= this-user@testhost.test.ex U=this-user P=local S=sss for other-user@test.ex
-1999-03-02 09:44:33 10HmaX-0005vi-00 => other-user@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes K C="250- 3nn byte chunk, total 3nn\\n250 OK id=10HmaY-0005vi-00"
-1999-03-02 09:44:33 10HmaX-0005vi-00 Completed
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 <= this-user@testhost.test.ex U=this-user P=local S=sss for other-user@test.ex
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 => other-user@test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes K C="250- 3nn byte chunk, total 3nn\\n250 OK id=10HmaY-0005vi-00"
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 Completed
 
 ******** SERVER ********
-1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_S
-1999-03-02 09:44:33 10HmaY-0005vi-00 <= <> H=localhost (testhost.test.ex) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no K S=sss id=E10HmaX-0005vi-00@testhost.test.ex for other-user@test.ex
+2017-07-30 18:51:05.712 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_S
+2017-07-30 18:51:05.712 10HmaY-0005vi-00 <= <> H=localhost (testhost.test.ex) [127.0.0.1] P=esmtps X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no K S=sss id=E10HmaX-0005vi-00@testhost.test.ex for other-user@test.ex
index 61c5bdbd13d2532719da32bdc1cf639abb48cbe1..88490685035ebab9481cc5484ad7629b4e689bf5 100644 (file)
@@ -1,13 +1,13 @@
-1999-03-02 09:44:33 10HmaX-0005vi-00 <= sender@testhost.test.ex U=sender P=local S=sss for a@test.ex
-1999-03-02 09:44:33 10HmaX-0005vi-00 => a@test.ex R=to_server T=remote_smtp_dkim H=127.0.0.1 [127.0.0.1] K C="250- 6nn byte chunk, total 6nn\\n250 OK id=10HmaY-0005vi-00"
-1999-03-02 09:44:33 10HmaX-0005vi-00 Completed
-1999-03-02 09:44:33 10HmaZ-0005vi-00 <= sender@testhost.test.ex U=sender P=local S=sss for b@test.ex
-1999-03-02 09:44:33 10HmaZ-0005vi-00 => b@test.ex R=to_server T=remote_smtp_dkim H=127.0.0.1 [127.0.0.1] K C="250- 8nn byte chunk, total 8nn\\n250 OK id=10HmbA-0005vi-00"
-1999-03-02 09:44:33 10HmaZ-0005vi-00 Completed
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 <= sender@testhost.test.ex U=sender P=local S=sss for a@test.ex
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 => a@test.ex R=to_server T=remote_smtp_dkim H=127.0.0.1 [127.0.0.1] K C="250- 6nn byte chunk, total 6nn\\n250 OK id=10HmaY-0005vi-00"
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 Completed
+2017-07-30 18:51:05.712 10HmaZ-0005vi-00 <= sender@testhost.test.ex U=sender P=local S=sss for b@test.ex
+2017-07-30 18:51:05.712 10HmaZ-0005vi-00 => b@test.ex R=to_server T=remote_smtp_dkim H=127.0.0.1 [127.0.0.1] K C="250- 8nn byte chunk, total 8nn\\n250 OK id=10HmbA-0005vi-00"
+2017-07-30 18:51:05.712 10HmaZ-0005vi-00 Completed
 
 ******** SERVER ********
-1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_S
-1999-03-02 09:44:33 10HmaY-0005vi-00 DKIM: d=test.ex s=sel c=relaxed/relaxed a=rsa-sha256 b=1024 [verification succeeded]
-1999-03-02 09:44:33 10HmaY-0005vi-00 <= <> H=localhost (testhost.test.ex) [127.0.0.1] P=esmtp K S=sss DKIM=test.ex id=E10HmaX-0005vi-00@testhost.test.ex for a@test.ex
-1999-03-02 09:44:33 10HmbA-0005vi-00 DKIM: d=test.ex s=sel c=relaxed/relaxed a=rsa-sha256 b=1024 [verification succeeded]
-1999-03-02 09:44:33 10HmbA-0005vi-00 <= <> H=localhost (testhost.test.ex) [127.0.0.1] P=esmtp K S=sss DKIM=test.ex id=E10HmaZ-0005vi-00@testhost.test.ex for b@test.ex
+2017-07-30 18:51:05.712 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_S
+2017-07-30 18:51:05.712 10HmaY-0005vi-00 DKIM: d=test.ex s=sel c=relaxed/relaxed a=rsa-sha256 b=1024 [verification succeeded]
+2017-07-30 18:51:05.712 10HmaY-0005vi-00 <= <> H=localhost (testhost.test.ex) [127.0.0.1] P=esmtp K S=sss DKIM=test.ex id=E10HmaX-0005vi-00@testhost.test.ex for a@test.ex
+2017-07-30 18:51:05.712 10HmbA-0005vi-00 DKIM: d=test.ex s=sel c=relaxed/relaxed a=rsa-sha256 b=1024 [verification succeeded]
+2017-07-30 18:51:05.712 10HmbA-0005vi-00 <= <> H=localhost (testhost.test.ex) [127.0.0.1] P=esmtp K S=sss DKIM=test.ex id=E10HmaZ-0005vi-00@testhost.test.ex for b@test.ex
index 25a87494111281bb3e5dbeb45fc7cc42c3a05b21..7abd59e3e00eed1b7c7eb14f51b310ca3a6eeb7e 100644 (file)
@@ -1,7 +1,7 @@
 
 ******** SERVER ********
-1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_S
-1999-03-02 09:44:33 10HmaX-0005vi-00 DKIM: d=test.ex s=sel c=simple/simple a=rsa-sha256 b=1024 [verification succeeded]
-1999-03-02 09:44:33 10HmaX-0005vi-00 <= CALLER@bloggs.com H=(xxx) [127.0.0.1] P=esmtp K S=sss DKIM=test.ex id=qwerty1234@disco-zombie.net for a@test.ex
-1999-03-02 09:44:33 10HmaY-0005vi-00 DKIM: d=test.ex s=sel c=simple/simple a=rsa-sha256 b=1024 [verification succeeded]
-1999-03-02 09:44:33 10HmaY-0005vi-00 <= CALLER@bloggs.com H=(xxx) [127.0.0.1] P=esmtp K S=sss DKIM=test.ex id=qwerty1234@disco-zombie.net for a@test.ex
+2017-07-30 18:51:05.712 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_S
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 DKIM: d=test.ex s=sel c=simple/simple a=rsa-sha256 b=1024 [verification succeeded]
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 <= CALLER@bloggs.com H=(xxx) [127.0.0.1] P=esmtp K S=sss DKIM=test.ex id=qwerty1234@disco-zombie.net for a@test.ex
+2017-07-30 18:51:05.712 10HmaY-0005vi-00 DKIM: d=test.ex s=sel c=simple/simple a=rsa-sha256 b=1024 [verification succeeded]
+2017-07-30 18:51:05.712 10HmaY-0005vi-00 <= CALLER@bloggs.com H=(xxx) [127.0.0.1] P=esmtp K S=sss DKIM=test.ex id=qwerty1234@disco-zombie.net for a@test.ex
index f872b82ce70726e891613e5c3f6ea3caf613d33d..def35fb66b1502096b01e9a9b373dce63a21eb69 100644 (file)
@@ -1,7 +1,7 @@
 
 ******** SERVER ********
-1999-03-02 09:44:33 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_D
-1999-03-02 09:44:33 10HmaX-0005vi-00 PRDR R=<bad1@test.ex> refusal
-1999-03-02 09:44:33 10HmaX-0005vi-00 PRDR R=<good@test.ex> acceptance
-1999-03-02 09:44:33 10HmaX-0005vi-00 PRDR R=<bad2@test.ex> refusal
-1999-03-02 09:44:33 10HmaX-0005vi-00 <= someone@some.domain H=(tester) [127.0.0.1] P=esmtp PRDR K S=sss for bad1@test.ex good@test.ex bad2@test.ex
+2017-07-30 18:51:05.712 exim x.yz daemon started: pid=pppp, no queue runs, listening for SMTP on port PORT_D
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 PRDR R=<bad1@test.ex> refusal
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 PRDR R=<good@test.ex> acceptance
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 PRDR R=<bad2@test.ex> refusal
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 <= someone@some.domain H=(tester) [127.0.0.1] P=esmtp PRDR K S=sss for bad1@test.ex good@test.ex bad2@test.ex
index f5dd6534bac9fd8b876aac8c5caf065acd63c997..6585a5e3e12a20e29d011f0e64dfa0a1daac3ead 100644 (file)
@@ -1,4 +1,4 @@
-1999-03-02 09:44:33 10HmaX-0005vi-00 <= sender@dom U=root P=local-bsmtp S=sss for usery@testhost.test.ex userz@testhost.test.ex
-1999-03-02 09:44:33 10HmaX-0005vi-00 => usery@testhost.test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] PRDR K C="250 first rcpt was good\\n250 OK, overall"
-1999-03-02 09:44:33 10HmaX-0005vi-00 -> userz@testhost.test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] PRDR K C="250 second rcpt was good\\n250 OK, overall"
-1999-03-02 09:44:33 10HmaX-0005vi-00 Completed
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 <= sender@dom U=root P=local-bsmtp S=sss for usery@testhost.test.ex userz@testhost.test.ex
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 => usery@testhost.test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] PRDR K C="250 first rcpt was good\\n250 OK, overall"
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 -> userz@testhost.test.ex R=to_server T=remote_smtp H=127.0.0.1 [127.0.0.1] PRDR K C="250 second rcpt was good\\n250 OK, overall"
+2017-07-30 18:51:05.712 10HmaX-0005vi-00 Completed
index e5eb296d59006c0996a285a05214851c5c3220e1..5e1c0372cf72e31b236a98a00fd9f1121d986463 100644 (file)
@@ -1,7 +1,7 @@
 
 ******** SERVER ********
-1999-03-02 09:44:33 H=(tester) [127.0.0.1] F=<someone@some.domain> rejected RCPT <dummy@reject.ex>: relay not permitted
-1999-03-02 09:44:33 rejected from <someone@some.domain> H=(tester) [127.0.0.1]: Non-CRLF-terminated header, under CHUNKING: message abandoned
+2017-07-30 18:51:05.712 H=(tester) [127.0.0.1] F=<someone@some.domain> rejected RCPT <dummy@reject.ex>: relay not permitted
+2017-07-30 18:51:05.712 rejected from <someone@some.domain> H=(tester) [127.0.0.1]: Non-CRLF-terminated header, under CHUNKING: message abandoned
 Envelope-from: <someone@some.domain>
 Envelope-to: <CALLER@test.ex>
   To: Susan@random.com
index ed01ba7c0b2957413ba6725d4edaf35c682f801e..229581005d91d7bcbbad0e0aba079d366786ff65 100755 (executable)
@@ -1152,6 +1152,8 @@ RESET_AFTER_EXTRA_LINE_READ:
     # drop pdkim debugging header
     next if /^DKIM( <<<<<<<<<<<<<<<<<<<<<<<<<<<<<+|: no signatures)$/;
 
+    # Some platforms have TIOCOUTome do not
+    next if /\d+ bytes remain in socket output buffer$/;
     # Various other IPv6 lines must be omitted too
 
     next if /using host_fake_gethostbyname for \S+ \(IPv6\)/;
diff --git a/test/scripts/0000-Basic/0623 b/test/scripts/0000-Basic/0623
new file mode 100644 (file)
index 0000000..315bc49
--- /dev/null
@@ -0,0 +1,114 @@
+# PIPELINING of QUIT
+need_ipv4
+#
+# Baseline: no error.  Check the QUIT arrived befre we ack message-data
+server PORT_D
+220 Server ready
+EHLO
+250-hi there
+250-PIPELINING
+250 OK
+MAIL FROM
+250 OK mail
+RCPT TO
+250 OK rcpt
+DATA
+300 go ahead
+.
+QUIT
+250 OK message data
+221 Closing connection
+****
+exim -odi good@test.ex
+****
+#
+# QUIT-pipeliining should not be done when PIPELINING not advertised
+server PORT_D
+220 Server ready
+EHLO
+250-hi there
+250 OK
+MAIL FROM
+250 OK mail
+RCPT TO
+250 OK rcpt
+DATA
+300 go ahead
+.
+250 OK message data
+*sleep 1
+<<
+QUIT
+221 Closing connection
+****
+exim -odi nopipe@test.ex
+****
+#
+# Temp-error response to message-data
+# Check specifically for a close, and no repeated command
+# Also check Exim's list of commands sent
+server PORT_D
+220 Server ready
+EHLO
+250-hi there
+250-PIPELINING
+250 OK
+MAIL FROM
+250 OK mail
+RCPT TO
+250 OK rcpt
+DATA
+300 go ahead
+.
+QUIT
+451 Service not available
+221 Closing connection
+*eof
+****
+exim -d-all+transport -odi tempreject@test.ex
+****
+exim -Mrm $msg1
+****
+#
+# Perm-error response to message-data
+server PORT_D
+220 Server ready
+EHLO
+250-hi there
+250-PIPELINING
+250 OK
+MAIL FROM
+250 OK mail
+RCPT TO
+250 OK rcpt
+DATA
+300 go ahead
+.
+QUIT
+550 content rejected
+221 Closing connection
+*eof
+****
+exim -d-all+transport -odi permreject@test.ex
+****
+#
+# Channel-close response to message-data
+server PORT_D
+220 Server ready
+EHLO
+250-hi there
+250-PIPELINING
+250 OK
+MAIL FROM
+250 OK mail
+RCPT TO
+250 OK rcpt
+DATA
+300 go ahead
+.
+>*eof
+****
+exim -d-all+transport -odi permreject@test.ex
+****
+exim -Mrm $msg1
+****
index fa72256c0a436560de0a996ac1f56ad035227029..9f09a84ef8e7144263e80de54a2ae47d8294d53e 100644 (file)
@@ -206,29 +206,34 @@ QUIT
 ****
 #
 # Error case: server wrongly expected more data, client gets timeout for data-ack
-server PORT_S
-220 Greetings
-EHLO
-250-Hello there
-250-PIPELINING
-250 CHUNKING
-MAIL FROM
-RCPT TO
-BDAT 329 LAST
-*data 330
-250 good mail cmd
-****
-sudo exim -odf -bS
-EHLO test
-MAIL FROM:<sender@source.dom>
-RCPT TO:<q@test.ex>
-DATA
-Subject: foo
-
-data
-.
-QUIT
-****
+# XXX This is a problem with data/quit pipelining.  The succeeding SMTP command cannot
+# be distinguished from the data, by the errroneous server.
+# Of course, we could avoid such pipelining on the client side, when BDAT is used.
+# But - is this any worse than a server failing to spot the data-dot under DATA?
+# I think not; both are culpable, and there is only so much the client can do.
+#server PORT_S
+#220 Greetings
+#EHLO
+#250-Hello there
+#250-PIPELINING
+#250 CHUNKING
+#MAIL FROM
+#RCPT TO
+#BDAT 329 LAST
+#*data 330
+#250 good mail cmd
+#****
+#sudo exim -odf -bS
+#EHLO test
+#MAIL FROM:<sender@source.dom>
+#RCPT TO:<q@test.ex>
+#DATA
+#Subject: foo
+#
+#data
+#.
+#QUIT
+#****
 #
 # Error case: server wrongly expected less data
 # client get the data-ack, sends quit - but server
diff --git a/test/scripts/0000-Basic/0911 b/test/scripts/0000-Basic/0911
new file mode 100644 (file)
index 0000000..c697989
--- /dev/null
@@ -0,0 +1,142 @@
+# CHUNKING and PIPELINING of QUIT
+need_ipv4
+#
+# Chunking Baseline: no error.  Check the QUIT arrived befre we ack message-data
+server PORT_D
+220 Server ready
+EHLO
+250-hi there
+250-PIPELINING
+250-CHUNKING
+250 OK
+MAIL FROM
+RCPT TO
+BDAT 313 LAST
+250 OK mail
+250 OK rcpt
+*data 313
+QUIT
+250 OK chunked message data
+221 Closing connection
+****
+sudo exim -d-all+transport -odi -bs
+helo tester
+mail from:<fred@myhost.test.ex>
+rcpt to:<good@test.ex>
+data
+.
+quit
+****
+#
+# QUIT-pipeliining should not be done when PIPELINING not advertised
+server PORT_D
+220 Server ready
+EHLO
+250-hi there
+250-CHUNKING
+250 OK
+MAIL FROM
+250 OK mail
+RCPT TO
+250 OK rcpt
+BDAT 315 LAST
+*data 315
+250 OK chunked message data
+QUIT
+221 Closing connection
+****
+sudo exim -d-all+transport -odi -bs
+helo tester
+mail from:<fred@myhost.test.ex>
+rcpt to:<nopipe@test.ex>
+data
+.
+quit
+****
+#
+# Temp-error response to message-data
+# Check specifically for a close, and no repeated command
+# Also check Exim's list of commands sent
+server PORT_D
+220 Server ready
+EHLO
+250-hi there
+250-PIPELINING
+250-CHUNKING
+250 OK
+MAIL FROM
+250 OK mail
+RCPT TO
+250 OK rcpt
+BDAT 319 LAST
+*data 319
+QUIT
+451 Service not available
+221 Closing connection
+*eof
+****
+sudo exim -d-all+transport -odi -bs
+helo tester
+mail from:<fred@myhost.test.ex>
+rcpt to:<tempreject@test.ex>
+data
+.
+quit
+****
+exim -Mrm $msg1
+****
+#
+# Perm-error response to message-data
+server PORT_D
+220 Server ready
+EHLO
+250-hi there
+250-PIPELINING
+250-CHUNKING
+250 OK
+MAIL FROM
+250 OK mail
+RCPT TO
+250 OK rcpt
+BDAT 319 LAST
+*data 319
+QUIT
+550 content rejected
+221 Closing connection
+*eof
+****
+sudo exim -d-all+transport -odi -bs
+helo tester
+mail from:<fred@myhost.test.ex>
+rcpt to:<permreject@test.ex>
+data
+.
+quit
+****
+#
+# Channel-close response to message-data
+server PORT_D
+220 Server ready
+EHLO
+250-hi there
+250-PIPELINING
+250-CHUNKING
+250 OK
+MAIL FROM
+250 OK mail
+RCPT TO
+250 OK rcpt
+BDAT 317 LAST
+*data 317
+>*eof
+****
+sudo exim -d-all+transport -odi -bs
+helo tester
+mail from:<fred@myhost.test.ex>
+rcpt to:<dataloss@test.ex>
+data
+.
+quit
+****
+exim -Mrm $msg1
+****
index afbc9a6b790c06ecd25c48f2a12d8473a9d4cb3f..1a271e2a22426b49b6a1bd9d3794f4a909deedc0 100644 (file)
@@ -38,13 +38,13 @@ exim -DSERVER=server -DNOTDAEMON -qf
 # no tls proxy (default for test was permitting proxy)
 exim -DSERVER=server -bd -oX PORT_D
 ****
-exim userx@test.ex
+exim user_p@test.ex
 Test message 1
 ****
-exim usery@test.ex
+exim user_q@test.ex
 Test message 2
 ****
-exim userz@test.ex
+exim user_r@test.ex
 Test message 3
 ****
 exim -d-all+acl '-DPEX=*' -qqf
index 943af0453d8abdfd855933ca4503591b94a2ebd2..02e23a8ac91598d9cd631160356cf7bfb5e3368f 100644 (file)
@@ -51,6 +51,8 @@ transport_check_waiting entered
 transport_check_waiting: FALSE
   SMTP+> QUIT
 cmd buf flush ddd bytes (more expected)
+  SMTP(shutdown)>>
+  SMTP<< 250 OK
   SMTP(close)>>
 Leaving my_smtp transport
 LOG: MAIN
index 827baa5ed710eb82a1204bda886db934e277fbef..a1efa5cdd5880a2fa5bffb3f24d51a2106a64935 100644 (file)
@@ -415,6 +415,8 @@ Connecting to 127.0.0.1 [127.0.0.1]:1224 ...  connected
 LOG: MAIN
   H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined DATA: 403 Sorry temp data error
   SMTP+> QUIT
+  SMTP(shutdown)>>
+  SMTP<< 250 OK
   SMTP(close)>>
 LOG: MAIN
   == yes@test.ex R=client T=send_to_server defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined DATA: 403 Sorry temp data error
@@ -850,6 +852,8 @@ Connecting to 127.0.0.1 [127.0.0.1]:1224 ...  connected
   SMTP>> writing message and terminating "."
   SMTP<< 250 OK
   SMTP+> QUIT
+  SMTP(shutdown)>>
+  SMTP(closed)<<
   SMTP(close)>>
 LOG: MAIN
   => w@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] C="250 OK"
index 2ff9c985fcedaffab1541d42645318263cfbeae2..c07bd2a467bc9f0992f6e873b6ecea06c202e725 100644 (file)
@@ -54,8 +54,10 @@ T: send_to_server  (ACL)
   SMTP<< 250 OK
   SMTP<< 351 Send more
   SMTP>> writing message and terminating "."
-  SMTP<< 250 OK
   SMTP+> QUIT
+  SMTP(shutdown)>>
+  SMTP<< 250 OK
+  SMTP<< 250 OK
   SMTP(close)>>
 LOG: MAIN
   => b@test.ex F=<CALLER@test.ex> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* L C="250 OK"
@@ -99,6 +101,8 @@ Connecting to 127.0.0.1 [127.0.0.1]:1224 ...  connected
   SMTP<< 503 Unexpected RCPT
   SMTP<< 503 Unexpected DATA
   SMTP+> QUIT
+  SMTP(shutdown)>>
+  SMTP<< 250 OK
   SMTP(close)>>
 LOG: MAIN
   ** a@test.ex F=<CALLER@test.ex> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined MAIL FROM:<CALLER@test.ex>: 550 NO
@@ -191,8 +195,10 @@ T: send_to_server  (ACL)
   SMTP<< 250 OK
   SMTP<< 351 OK
   SMTP>> writing message and terminating "."
-  SMTP<< 250 OK
   SMTP+> QUIT
+  SMTP(shutdown)>>
+  SMTP<< 250 OK
+  SMTP<< 250 OK
   SMTP(close)>>
 LOG: MAIN
   => c@test.ex F=<CALLER@test.ex> R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* L C="250 OK"
index 5894d75d0b631713028ac33942ef2ecbc3eb2ee8..3519ecf166f02fde7ccddb978c06e811a0d0df3f 100644 (file)
@@ -14,6 +14,8 @@ Connecting to 127.0.0.1 [127.0.0.1]:1224 ...  connected
   SMTP<< 250 OK
   SMTP<< 500 NO
   SMTP+> QUIT
+  SMTP(shutdown)>>
+  SMTP<< 200 OK
   SMTP(close)>>
 LOG: MAIN
   ** userx@test.ex R=r1 T=t1 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined DATA: 500 NO
@@ -48,6 +50,8 @@ Connecting to 127.0.0.1 [127.0.0.1]:1224 ...  connected
   SMTP>> DATA
   SMTP<< 500 NO
   SMTP+> QUIT
+  SMTP(shutdown)>>
+  SMTP<< 200 OK
   SMTP(close)>>
 LOG: MAIN
   ** usery@test.ex R=r1 T=t1 H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after DATA: 500 NO
index 453635893f851fa1bde6e0ee21c47014d9394926..939aba184e3cea20019317667ae757ce5096856a 100644 (file)
@@ -100,12 +100,13 @@ LOG: MAIN
 added retry item for R:x@y: errno=-44 more_errno=dd,A flags=0
   SMTP+> QUIT
 cmd buf flush ddd bytes (more expected)
+  SMTP(shutdown)>>
+  SMTP<< 250 OK
   SMTP(close)>>
 set_process_info: pppp delivering 10HmaX-0005vi-00: just tried 127.0.0.1 [127.0.0.1]:PORT_S for x@y: result OK
 address match test: subject=*@127.0.0.1 pattern=*
 127.0.0.1 in "*"? yes (matched "*")
 *@127.0.0.1 in "*"? yes (matched "*")
-set_process_info: pppp delivering 10HmaX-0005vi-00: waiting for a remote delivery subprocess to finish
 checking status of V4NET.0.0.0
  locking TESTSUITE/spool/db/retry.lockfile
  locked  TESTSUITE/spool/db/retry.lockfile
@@ -120,6 +121,7 @@ LOG: MAIN
   H=V4NET.0.0.0 [V4NET.0.0.0] Network Error
 set_process_info: pppp delivering 10HmaX-0005vi-00: just tried V4NET.0.0.0 [V4NET.0.0.0]:PORT_S for x@y: result DEFER
 added retry item for T:V4NET.0.0.0:V4NET.0.0.0:1224: errno=dd more_errno=dd,A flags=2
+set_process_info: pppp delivering 10HmaX-0005vi-00: waiting for a remote delivery subprocess to finish
 set_process_info: pppp delivering 10HmaX-0005vi-00 (just run smtp for x@y in subprocess)
 search_tidyup called
 reading retry information for T:V4NET.0.0.0:V4NET.0.0.0:1224 from subprocess
index 9552e3830b3697558f0a6ef0f089c625ac4a81c6..b665681b0faaf3892b400e4f702c82f6f39de78e 100644 (file)
@@ -24,7 +24,7 @@ LOG: MAIN
 added retry item for T:127.0.0.1:127.0.0.1:1225: errno=dd more_errno=dd,A flags=2
 all IP addresses skipped or deferred at least one address
 updating wait-t1 database
-added to list for 127.0.0.1
+added 10HmaX-0005vi-00 to queue for 127.0.0.1
 Leaving t1 transport
 LOG: MAIN
   == userx@test.ex R=r1 T=t1 defer (dd): Connection refused
index 5cc2f0a58891a4f249c7c9b5904040002ad7c7f3..54d1e8bc1f98b15a7a72b596ff0018eae6be0e8f 100644 (file)
@@ -30,6 +30,8 @@ Connecting to localhost.test.ex [127.0.0.1]:1224 ...  connected
   SMTP>> writing message and terminating "."
   SMTP<< 250 OK
   SMTP+> QUIT
+  SMTP(shutdown)>>
+  SMTP<< 250 OK
   SMTP(close)>>
 LOG: MAIN
   => x@srv27.test.ex R=r1 T=t1 H=localhost.test.ex [127.0.0.1]:1224 C="250 OK"
index 152bfd8506b34c1b1852b12685db4e6e5ec71547..98baf51207fb185ba607731ac3a2f5bc259f72d6 100644 (file)
@@ -91,7 +91,7 @@ set_process_info: pppp delivering 10HmaZ-0005vi-00: just tried 127.0.0.1 [127.0.
 added retry item for T:127.0.0.1:127.0.0.1:1224: errno=dd more_errno=dd,A flags=2
 all IP addresses skipped or deferred at least one address
 updating wait-t1 database
-added to list for 127.0.0.1
+added 10HmaZ-0005vi-00 to queue for 127.0.0.1
 Leaving t1 transport
 set_process_info: pppp delivering 10HmaZ-0005vi-00 (just run t1 for CALLER@the.local.host.name in subprocess)
 set_process_info: pppp delivering 10HmaZ-0005vi-00: waiting for a remote delivery subprocess to finish
@@ -120,7 +120,7 @@ no message retry record
 127.0.0.1 [127.0.0.1]:1111 retry-status = unusable
 all IP addresses skipped or deferred at least one address
 updating wait-t1 database
-added to list for 127.0.0.1
+added 10HmaY-0005vi-00 to queue for 127.0.0.1
 Leaving t1 transport
 set_process_info: pppp delivering 10HmaY-0005vi-00 (just run t1 for usery@test.ex in subprocess)
 set_process_info: pppp running queue: waiting for 10HmaY-0005vi-00 (pppp)
diff --git a/test/stderr/0623 b/test/stderr/0623
new file mode 100644 (file)
index 0000000..8abd7b0
--- /dev/null
@@ -0,0 +1,190 @@
+Exim version x.yz ....
+configuration file is TESTSUITE/test-config
+admin user
+LOG: MAIN
+  <= CALLER@myhost.test.ex U=CALLER P=local S=sss
+Exim version x.yz ....
+configuration file is TESTSUITE/test-config
+trusted user
+admin user
+dropping to exim gid; retaining priv uid
+>>>>>>>>>>>>>>>> Remote deliveries >>>>>>>>>>>>>>>>
+--------> tempreject@test.ex <--------
+send_to_server transport entered
+  tempreject@test.ex
+using the transport's hosts: 127.0.0.1
+getting address for 127.0.0.1
+checking status of 127.0.0.1
+127.0.0.1 [127.0.0.1]:1111 retry-status = usable
+delivering 10HmaZ-0005vi-00 to 127.0.0.1 [127.0.0.1] (tempreject@test.ex)
+Connecting to 127.0.0.1 [127.0.0.1]:1225 ...  connected
+  SMTP<< 220 Server ready
+  SMTP>> EHLO myhost.test.ex
+cmd buf flush ddd bytes
+  SMTP<< 250-hi there
+         250-PIPELINING
+         250 OK
+using PIPELINING
+not using DSN
+  SMTP|> MAIL FROM:<>
+  SMTP|> RCPT TO:<tempreject@test.ex>
+  SMTP>> DATA
+cmd buf flush ddd bytes
+sync_responses expect mail
+  SMTP<< 250 OK mail
+sync_responses expect rcpt for tempreject@test.ex
+  SMTP<< 250 OK rcpt
+sync_responses expect data
+  SMTP<< 300 go ahead
+  SMTP>> writing message and terminating "."
+transport_check_waiting entered
+  sequence=1 local_max=500 global_max=-1
+ no messages waiting for 127.0.0.1
+transport_check_waiting: FALSE
+will pipeline QUIT
+cannot use sendfile for body: spoolfile not wireformat
+writing data block fd=dddd size=sss timeout=300 (more expected)
+  SMTP+> QUIT
+cmd buf flush ddd bytes (more expected)
+  SMTP(shutdown)>>
+  SMTP<< 451 Service not available
+LOG: MAIN
+  H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 451 Service not available
+ok=0 send_quit=0 send_rset=1 continue_more=0 yield=0 first_address is NULL
+  SMTP<< 221 Closing connection
+  SMTP(close)>>
+added retry item for T:127.0.0.1:127.0.0.1:1225:10HmaZ-0005vi-00: errno=-46 more_errno=dd,A flags=6
+all IP addresses skipped or deferred at least one address
+Leaving send_to_server transport
+LOG: MAIN
+  == tempreject@test.ex R=client T=send_to_server defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 451 Service not available
+>>>>>>>>>>>>>>>> Exim pid=pppp (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
+>>>>>>>>>>>>>>>> Exim pid=pppp (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
+Exim version x.yz ....
+configuration file is TESTSUITE/test-config
+admin user
+LOG: MAIN
+  <= CALLER@myhost.test.ex U=CALLER P=local S=sss
+Exim version x.yz ....
+configuration file is TESTSUITE/test-config
+trusted user
+admin user
+dropping to exim gid; retaining priv uid
+>>>>>>>>>>>>>>>> Remote deliveries >>>>>>>>>>>>>>>>
+--------> permreject@test.ex <--------
+send_to_server transport entered
+  permreject@test.ex
+using the transport's hosts: 127.0.0.1
+getting address for 127.0.0.1
+checking status of 127.0.0.1
+no host retry record
+no message retry record
+127.0.0.1 [127.0.0.1]:1111 retry-status = usable
+delivering 10HmbA-0005vi-00 to 127.0.0.1 [127.0.0.1] (permreject@test.ex)
+Connecting to 127.0.0.1 [127.0.0.1]:1225 ...  connected
+  SMTP<< 220 Server ready
+  SMTP>> EHLO myhost.test.ex
+cmd buf flush ddd bytes
+  SMTP<< 250-hi there
+         250-PIPELINING
+         250 OK
+using PIPELINING
+not using DSN
+  SMTP|> MAIL FROM:<>
+  SMTP|> RCPT TO:<permreject@test.ex>
+  SMTP>> DATA
+cmd buf flush ddd bytes
+sync_responses expect mail
+  SMTP<< 250 OK mail
+sync_responses expect rcpt for permreject@test.ex
+  SMTP<< 250 OK rcpt
+sync_responses expect data
+  SMTP<< 300 go ahead
+  SMTP>> writing message and terminating "."
+transport_check_waiting entered
+  sequence=1 local_max=500 global_max=-1
+ no messages waiting for 127.0.0.1
+transport_check_waiting: FALSE
+will pipeline QUIT
+cannot use sendfile for body: spoolfile not wireformat
+writing data block fd=dddd size=sss timeout=300 (more expected)
+  SMTP+> QUIT
+cmd buf flush ddd bytes (more expected)
+  SMTP(shutdown)>>
+  SMTP<< 550 content rejected
+ok=0 send_quit=0 send_rset=1 continue_more=0 yield=0 first_address is NULL
+  SMTP<< 221 Closing connection
+  SMTP(close)>>
+Leaving send_to_server transport
+LOG: MAIN
+  ** permreject@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after end of data: 550 content rejected
+LOG: MAIN
+  permreject@test.ex: error ignored
+LOG: MAIN
+  Completed
+>>>>>>>>>>>>>>>> Exim pid=pppp (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
+>>>>>>>>>>>>>>>> Exim pid=pppp (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
+Exim version x.yz ....
+configuration file is TESTSUITE/test-config
+admin user
+LOG: MAIN
+  <= CALLER@myhost.test.ex U=CALLER P=local S=sss
+Exim version x.yz ....
+configuration file is TESTSUITE/test-config
+trusted user
+admin user
+dropping to exim gid; retaining priv uid
+>>>>>>>>>>>>>>>> Remote deliveries >>>>>>>>>>>>>>>>
+--------> permreject@test.ex <--------
+send_to_server transport entered
+  permreject@test.ex
+using the transport's hosts: 127.0.0.1
+getting address for 127.0.0.1
+checking status of 127.0.0.1
+no host retry record
+no message retry record
+127.0.0.1 [127.0.0.1]:1111 retry-status = usable
+delivering 10HmbB-0005vi-00 to 127.0.0.1 [127.0.0.1] (permreject@test.ex)
+Connecting to 127.0.0.1 [127.0.0.1]:1225 ...  connected
+  SMTP<< 220 Server ready
+  SMTP>> EHLO myhost.test.ex
+cmd buf flush ddd bytes
+  SMTP<< 250-hi there
+         250-PIPELINING
+         250 OK
+using PIPELINING
+not using DSN
+  SMTP|> MAIL FROM:<>
+  SMTP|> RCPT TO:<permreject@test.ex>
+  SMTP>> DATA
+cmd buf flush ddd bytes
+sync_responses expect mail
+  SMTP<< 250 OK mail
+sync_responses expect rcpt for permreject@test.ex
+  SMTP<< 250 OK rcpt
+sync_responses expect data
+  SMTP<< 300 go ahead
+  SMTP>> writing message and terminating "."
+transport_check_waiting entered
+  sequence=1 local_max=500 global_max=-1
+ no messages waiting for 127.0.0.1
+transport_check_waiting: FALSE
+will pipeline QUIT
+cannot use sendfile for body: spoolfile not wireformat
+writing data block fd=dddd size=sss timeout=300 (more expected)
+  SMTP+> QUIT
+cmd buf flush ddd bytes (more expected)
+  SMTP(shutdown)>>
+  SMTP(closed)<<
+LOG: MAIN
+  H=127.0.0.1 [127.0.0.1]: Remote host closed connection in response to end of data
+ok=0 send_quit=0 send_rset=1 continue_more=0 yield=0 first_address is NULL
+  SMTP(closed)<<
+  SMTP(close)>>
+added retry item for T:127.0.0.1:127.0.0.1:1225:10HmbB-0005vi-00: errno=-18 more_errno=dd,A flags=6
+all IP addresses skipped or deferred at least one address
+Leaving send_to_server transport
+LOG: MAIN
+  == permreject@test.ex R=client T=send_to_server defer (-18) H=127.0.0.1 [127.0.0.1]: Remote host closed connection in response to end of data
+>>>>>>>>>>>>>>>> Exim pid=pppp (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
+>>>>>>>>>>>>>>>> Exim pid=pppp (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
diff --git a/test/stderr/0911 b/test/stderr/0911
new file mode 100644 (file)
index 0000000..6a6645d
--- /dev/null
@@ -0,0 +1,335 @@
+Exim version x.yz ....
+configuration file is TESTSUITE/test-config
+trusted user
+admin user
+LOG: smtp_connection MAIN
+  SMTP connection from root
+created log directory TESTSUITE/spool/log
+LOG: MAIN
+  <= fred@myhost.test.ex U=root P=local-smtp S=sss
+Exim version x.yz ....
+configuration file is TESTSUITE/test-config
+trusted user
+admin user
+dropping to exim gid; retaining priv uid
+>>>>>>>>>>>>>>>> Remote deliveries >>>>>>>>>>>>>>>>
+--------> good@test.ex <--------
+send_to_server transport entered
+  good@test.ex
+using the transport's hosts: 127.0.0.1
+getting address for 127.0.0.1
+checking status of 127.0.0.1
+127.0.0.1 [127.0.0.1]:1111 retry-status = usable
+delivering 10HmaX-0005vi-00 to 127.0.0.1 [127.0.0.1] (good@test.ex)
+Connecting to 127.0.0.1 [127.0.0.1]:1225 ...  connected
+  SMTP<< 220 Server ready
+  SMTP>> EHLO myhost.test.ex
+cmd buf flush ddd bytes
+  SMTP<< 250-hi there
+         250-PIPELINING
+         250-CHUNKING
+         250 OK
+using PIPELINING
+CHUNKING usable
+not using DSN
+  SMTP|> MAIL FROM:<>
+  SMTP|> RCPT TO:<good@test.ex>
+         will write message using CHUNKING
+transport_check_waiting entered
+  sequence=1 local_max=500 global_max=-1
+ no messages waiting for 127.0.0.1
+transport_check_waiting: FALSE
+will pipeline QUIT
+  SMTP+> BDAT 313 LAST
+cmd buf flush ddd bytes (more expected)
+cannot use sendfile for body: spoolfile not wireformat
+writing data block fd=dddd size=sss timeout=300 (more expected)
+  SMTP+> QUIT
+cmd buf flush ddd bytes (more expected)
+  SMTP(shutdown)>>
+sync_responses expect mail
+  SMTP<< 250 OK mail
+sync_responses expect rcpt for good@test.ex
+  SMTP<< 250 OK rcpt
+  SMTP<< 250 OK chunked message data
+ok=1 send_quit=0 send_rset=0 continue_more=0 yield=0 first_address is NULL
+  SMTP<< 221 Closing connection
+  SMTP(close)>>
+Leaving send_to_server transport
+LOG: MAIN
+  => good@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] L K C="250 OK chunked message data"
+LOG: MAIN
+  Completed
+>>>>>>>>>>>>>>>> Exim pid=pppp (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
+LOG: smtp_connection MAIN
+  SMTP connection from root closed by QUIT
+>>>>>>>>>>>>>>>> Exim pid=pppp (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
+Exim version x.yz ....
+configuration file is TESTSUITE/test-config
+trusted user
+admin user
+LOG: smtp_connection MAIN
+  SMTP connection from root
+LOG: MAIN
+  <= fred@myhost.test.ex U=root P=local-smtp S=sss
+Exim version x.yz ....
+configuration file is TESTSUITE/test-config
+trusted user
+admin user
+dropping to exim gid; retaining priv uid
+>>>>>>>>>>>>>>>> Remote deliveries >>>>>>>>>>>>>>>>
+--------> nopipe@test.ex <--------
+send_to_server transport entered
+  nopipe@test.ex
+using the transport's hosts: 127.0.0.1
+getting address for 127.0.0.1
+checking status of 127.0.0.1
+127.0.0.1 [127.0.0.1]:1111 retry-status = usable
+delivering 10HmaY-0005vi-00 to 127.0.0.1 [127.0.0.1] (nopipe@test.ex)
+Connecting to 127.0.0.1 [127.0.0.1]:1225 ...  connected
+  SMTP<< 220 Server ready
+  SMTP>> EHLO myhost.test.ex
+cmd buf flush ddd bytes
+  SMTP<< 250-hi there
+         250-CHUNKING
+         250 OK
+not using PIPELINING
+CHUNKING usable
+not using DSN
+  SMTP>> MAIL FROM:<>
+cmd buf flush ddd bytes
+  SMTP<< 250 OK mail
+  SMTP>> RCPT TO:<nopipe@test.ex>
+cmd buf flush ddd bytes
+sync_responses expect rcpt for nopipe@test.ex
+  SMTP<< 250 OK rcpt
+         will write message using CHUNKING
+  SMTP+> BDAT 315 LAST
+cmd buf flush ddd bytes (more expected)
+cannot use sendfile for body: spoolfile not wireformat
+writing data block fd=dddd size=sss timeout=300
+  SMTP<< 250 OK chunked message data
+ok=1 send_quit=1 send_rset=0 continue_more=0 yield=0 first_address is NULL
+transport_check_waiting entered
+  sequence=1 local_max=500 global_max=-1
+ no messages waiting for 127.0.0.1
+transport_check_waiting: FALSE
+  SMTP+> QUIT
+cmd buf flush ddd bytes (more expected)
+  SMTP(shutdown)>>
+  SMTP<< 221 Closing connection
+  SMTP(close)>>
+Leaving send_to_server transport
+LOG: MAIN
+  => nopipe@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] K C="250 OK chunked message data"
+LOG: MAIN
+  Completed
+>>>>>>>>>>>>>>>> Exim pid=pppp (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
+LOG: smtp_connection MAIN
+  SMTP connection from root closed by QUIT
+>>>>>>>>>>>>>>>> Exim pid=pppp (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
+Exim version x.yz ....
+configuration file is TESTSUITE/test-config
+trusted user
+admin user
+LOG: smtp_connection MAIN
+  SMTP connection from root
+LOG: MAIN
+  <= fred@myhost.test.ex U=root P=local-smtp S=sss
+Exim version x.yz ....
+configuration file is TESTSUITE/test-config
+trusted user
+admin user
+dropping to exim gid; retaining priv uid
+>>>>>>>>>>>>>>>> Remote deliveries >>>>>>>>>>>>>>>>
+--------> tempreject@test.ex <--------
+send_to_server transport entered
+  tempreject@test.ex
+using the transport's hosts: 127.0.0.1
+getting address for 127.0.0.1
+checking status of 127.0.0.1
+127.0.0.1 [127.0.0.1]:1111 retry-status = usable
+delivering 10HmaZ-0005vi-00 to 127.0.0.1 [127.0.0.1] (tempreject@test.ex)
+Connecting to 127.0.0.1 [127.0.0.1]:1225 ...  connected
+  SMTP<< 220 Server ready
+  SMTP>> EHLO myhost.test.ex
+cmd buf flush ddd bytes
+  SMTP<< 250-hi there
+         250-PIPELINING
+         250-CHUNKING
+         250 OK
+using PIPELINING
+CHUNKING usable
+not using DSN
+  SMTP|> MAIL FROM:<>
+  SMTP|> RCPT TO:<tempreject@test.ex>
+         will write message using CHUNKING
+transport_check_waiting entered
+  sequence=1 local_max=500 global_max=-1
+ no messages waiting for 127.0.0.1
+transport_check_waiting: FALSE
+will pipeline QUIT
+  SMTP+> BDAT 319 LAST
+cmd buf flush ddd bytes (more expected)
+cannot use sendfile for body: spoolfile not wireformat
+writing data block fd=dddd size=sss timeout=300 (more expected)
+  SMTP+> QUIT
+cmd buf flush ddd bytes (more expected)
+  SMTP(shutdown)>>
+sync_responses expect mail
+  SMTP<< 250 OK mail
+sync_responses expect rcpt for tempreject@test.ex
+  SMTP<< 250 OK rcpt
+  SMTP<< 451 Service not available
+LOG: MAIN
+  H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 451 Service not available
+ok=0 send_quit=0 send_rset=1 continue_more=0 yield=0 first_address is NULL
+  SMTP<< 221 Closing connection
+  SMTP(close)>>
+added retry item for T:127.0.0.1:127.0.0.1:1225:10HmaZ-0005vi-00: errno=-46 more_errno=dd,A flags=6
+all IP addresses skipped or deferred at least one address
+Leaving send_to_server transport
+LOG: MAIN
+  == tempreject@test.ex R=client T=send_to_server defer (-46) H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 451 Service not available
+>>>>>>>>>>>>>>>> Exim pid=pppp (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
+LOG: smtp_connection MAIN
+  SMTP connection from root closed by QUIT
+>>>>>>>>>>>>>>>> Exim pid=pppp (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
+Exim version x.yz ....
+configuration file is TESTSUITE/test-config
+trusted user
+admin user
+LOG: smtp_connection MAIN
+  SMTP connection from root
+LOG: MAIN
+  <= fred@myhost.test.ex U=root P=local-smtp S=sss
+Exim version x.yz ....
+configuration file is TESTSUITE/test-config
+trusted user
+admin user
+dropping to exim gid; retaining priv uid
+>>>>>>>>>>>>>>>> Remote deliveries >>>>>>>>>>>>>>>>
+--------> permreject@test.ex <--------
+send_to_server transport entered
+  permreject@test.ex
+using the transport's hosts: 127.0.0.1
+getting address for 127.0.0.1
+checking status of 127.0.0.1
+no host retry record
+no message retry record
+127.0.0.1 [127.0.0.1]:1111 retry-status = usable
+delivering 10HmbA-0005vi-00 to 127.0.0.1 [127.0.0.1] (permreject@test.ex)
+Connecting to 127.0.0.1 [127.0.0.1]:1225 ...  connected
+  SMTP<< 220 Server ready
+  SMTP>> EHLO myhost.test.ex
+cmd buf flush ddd bytes
+  SMTP<< 250-hi there
+         250-PIPELINING
+         250-CHUNKING
+         250 OK
+using PIPELINING
+CHUNKING usable
+not using DSN
+  SMTP|> MAIL FROM:<>
+  SMTP|> RCPT TO:<permreject@test.ex>
+         will write message using CHUNKING
+transport_check_waiting entered
+  sequence=1 local_max=500 global_max=-1
+ no messages waiting for 127.0.0.1
+transport_check_waiting: FALSE
+will pipeline QUIT
+  SMTP+> BDAT 319 LAST
+cmd buf flush ddd bytes (more expected)
+cannot use sendfile for body: spoolfile not wireformat
+writing data block fd=dddd size=sss timeout=300 (more expected)
+  SMTP+> QUIT
+cmd buf flush ddd bytes (more expected)
+  SMTP(shutdown)>>
+sync_responses expect mail
+  SMTP<< 250 OK mail
+sync_responses expect rcpt for permreject@test.ex
+  SMTP<< 250 OK rcpt
+  SMTP<< 550 content rejected
+ok=0 send_quit=0 send_rset=1 continue_more=0 yield=0 first_address is NULL
+  SMTP<< 221 Closing connection
+  SMTP(close)>>
+Leaving send_to_server transport
+LOG: MAIN
+  ** permreject@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]: SMTP error from remote mail server after pipelined end of data: 550 content rejected
+LOG: MAIN
+  permreject@test.ex: error ignored
+LOG: MAIN
+  Completed
+>>>>>>>>>>>>>>>> Exim pid=pppp (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
+LOG: smtp_connection MAIN
+  SMTP connection from root closed by QUIT
+>>>>>>>>>>>>>>>> Exim pid=pppp (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
+Exim version x.yz ....
+configuration file is TESTSUITE/test-config
+trusted user
+admin user
+LOG: smtp_connection MAIN
+  SMTP connection from root
+LOG: MAIN
+  <= fred@myhost.test.ex U=root P=local-smtp S=sss
+Exim version x.yz ....
+configuration file is TESTSUITE/test-config
+trusted user
+admin user
+dropping to exim gid; retaining priv uid
+>>>>>>>>>>>>>>>> Remote deliveries >>>>>>>>>>>>>>>>
+--------> dataloss@test.ex <--------
+send_to_server transport entered
+  dataloss@test.ex
+using the transport's hosts: 127.0.0.1
+getting address for 127.0.0.1
+checking status of 127.0.0.1
+no host retry record
+no message retry record
+127.0.0.1 [127.0.0.1]:1111 retry-status = usable
+delivering 10HmbB-0005vi-00 to 127.0.0.1 [127.0.0.1] (dataloss@test.ex)
+Connecting to 127.0.0.1 [127.0.0.1]:1225 ...  connected
+  SMTP<< 220 Server ready
+  SMTP>> EHLO myhost.test.ex
+cmd buf flush ddd bytes
+  SMTP<< 250-hi there
+         250-PIPELINING
+         250-CHUNKING
+         250 OK
+using PIPELINING
+CHUNKING usable
+not using DSN
+  SMTP|> MAIL FROM:<>
+  SMTP|> RCPT TO:<dataloss@test.ex>
+         will write message using CHUNKING
+transport_check_waiting entered
+  sequence=1 local_max=500 global_max=-1
+ no messages waiting for 127.0.0.1
+transport_check_waiting: FALSE
+will pipeline QUIT
+  SMTP+> BDAT 317 LAST
+cmd buf flush ddd bytes (more expected)
+cannot use sendfile for body: spoolfile not wireformat
+writing data block fd=dddd size=sss timeout=300 (more expected)
+  SMTP+> QUIT
+cmd buf flush ddd bytes (more expected)
+  SMTP(shutdown)>>
+sync_responses expect mail
+  SMTP<< 250 OK mail
+sync_responses expect rcpt for dataloss@test.ex
+  SMTP<< 250 OK rcpt
+  SMTP(closed)<<
+LOG: MAIN
+  H=127.0.0.1 [127.0.0.1]: Remote host closed connection in response to pipelined end of data
+ok=0 send_quit=0 send_rset=1 continue_more=0 yield=0 first_address is NULL
+  SMTP(closed)<<
+  SMTP(close)>>
+added retry item for T:127.0.0.1:127.0.0.1:1225:10HmbB-0005vi-00: errno=-18 more_errno=dd,A flags=6
+all IP addresses skipped or deferred at least one address
+Leaving send_to_server transport
+LOG: MAIN
+  == dataloss@test.ex R=client T=send_to_server defer (-18) H=127.0.0.1 [127.0.0.1]: Remote host closed connection in response to pipelined end of data
+>>>>>>>>>>>>>>>> Exim pid=pppp (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
+LOG: smtp_connection MAIN
+  SMTP connection from root closed by QUIT
+>>>>>>>>>>>>>>>> Exim pid=pppp (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
index 03ee03d70189457835b36fd8c8963951bf035039..9ba4234e7338fbf3113635b856413c83973072cc 100644 (file)
@@ -25,8 +25,9 @@ Connecting to 127.0.0.1 [127.0.0.1]:1225 ...  connected
   SMTP<< 250 Accepted
   SMTP<< 354 Enter message, ending with "." on a line by itself
   SMTP>> writing message and terminating "."
+  SMTP>> QUIT
   SMTP<< 250 OK id=10HmaZ-0005vi-00
-  SMTP+> QUIT
+  SMTP<< 221 myhost.test.ex closing connection
   SMTP(close)>>
 LOG: MAIN
   => CALLER@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmaZ-0005vi-00"
@@ -59,8 +60,9 @@ Connecting to 127.0.0.1 [127.0.0.1]:1225 ...  connected
   SMTP<< 250 Accepted
   SMTP<< 354 Enter message, ending with "." on a line by itself
   SMTP>> writing message and terminating "."
+  SMTP>> QUIT
   SMTP<< 250 OK id=10HmbA-0005vi-00
-  SMTP+> QUIT
+  SMTP<< 221 myhost.test.ex closing connection
   SMTP(close)>>
 LOG: MAIN
   => CALLER@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbA-0005vi-00"
@@ -90,8 +92,9 @@ Connecting to ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4]:1225 ...  connected
   SMTP<< 250 Accepted
   SMTP<< 354 Enter message, ending with "." on a line by itself
   SMTP>> writing message and terminating "."
+  SMTP>> QUIT
   SMTP<< 250 OK id=10HmbB-0005vi-00
-  SMTP+> QUIT
+  SMTP<< 221 myhost.test.ex closing connection
   SMTP(close)>>
 LOG: MAIN
   => abcd@test.ex R=client T=send_to_server2 H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbB-0005vi-00"
index 321544e57dfe5f7359c433b73a699c9d447d8586..d5274fb8e74f89d76cb7f5d26c20d5641855b191 100644 (file)
@@ -71,16 +71,19 @@ cmd buf flush ddd bytes
   SMTP<< 250 OK
   SMTP<< 250 Accepted
   SMTP<< 354 Enter message, ending with "." on a line by itself
-  SMTP<< 250 OK id=10HmbC-0005vi-00
   SMTP+> QUIT
 cmd buf flush ddd bytes (more expected)
+  SMTP(shutdown)>>
+  SMTP(TLS shutdown)>>
+  SMTP<< 250 OK id=10HmbC-0005vi-00
+  SMTP<< 221 myhost.test.ex closing connection
   SMTP(close)>>
->>>>>>>>>>>>>>>> Exim pid=pppp (tls-proxy) terminating with rc=0 >>>>>>>>>>>>>>>>
 LOG: MAIN
   => usery@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbC-0005vi-00"
 LOG: MAIN
   Completed
 >>>>>>>>>>>>>>>> Exim pid=pppp (continued-transport) terminating with rc=0 >>>>>>>>>>>>>>>>
+>>>>>>>>>>>>>>>> Exim pid=pppp (tls-proxy) terminating with rc=0 >>>>>>>>>>>>>>>>
 LOG: queue_run MAIN
   End queue run: pid=pppp -qqf
 >>>>>>>>>>>>>>>> Exim pid=pppp (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
@@ -157,16 +160,19 @@ cmd buf flush ddd bytes
   SMTP<< 250 OK
   SMTP<< 250 Accepted
   SMTP<< 354 Enter message, ending with "." on a line by itself
-  SMTP<< 250 OK id=10HmbI-0005vi-00
   SMTP+> QUIT
 cmd buf flush ddd bytes (more expected)
+  SMTP(shutdown)>>
+  SMTP(TLS shutdown)>>
+  SMTP<< 250 OK id=10HmbI-0005vi-00
+  SMTP<< 221 myhost.test.ex closing connection
   SMTP(close)>>
->>>>>>>>>>>>>>>> Exim pid=pppp (tls-proxy) terminating with rc=0 >>>>>>>>>>>>>>>>
 LOG: MAIN
   => userb@test.ex R=cl_override T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmbI-0005vi-00"
 LOG: MAIN
   Completed
 >>>>>>>>>>>>>>>> Exim pid=pppp (continued-transport) terminating with rc=0 >>>>>>>>>>>>>>>>
+>>>>>>>>>>>>>>>> Exim pid=pppp (tls-proxy) terminating with rc=0 >>>>>>>>>>>>>>>>
 LOG: queue_run MAIN
   End queue run: pid=pppp -qqf
 >>>>>>>>>>>>>>>> Exim pid=pppp (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
@@ -200,7 +206,7 @@ cmd buf flush ddd bytes
          250-PIPELINING
          250 HELP
   SMTP|> MAIL FROM:<CALLER@myhost.test.ex> SIZE=ssss
-  SMTP|> RCPT TO:<userx@test.ex>
+  SMTP|> RCPT TO:<user_p@test.ex>
   SMTP>> DATA
 cmd buf flush ddd bytes
   SMTP<< 250 OK
@@ -217,7 +223,7 @@ cmd buf flush ddd bytes
          250 HELP
   SMTP(close)>>
 LOG: MAIN
-  => userx@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbM-0005vi-00"
+  => user_p@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbM-0005vi-00"
 LOG: MAIN
   Completed
 >>>>>>>>>>>>>>>> Exim pid=pppp (qrun-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
@@ -237,7 +243,7 @@ cmd buf flush ddd bytes
          250-PIPELINING
          250 HELP
   SMTP|> MAIL FROM:<CALLER@myhost.test.ex> SIZE=ssss
-  SMTP|> RCPT TO:<userz@test.ex>
+  SMTP|> RCPT TO:<user_r@test.ex>
   SMTP>> DATA
 cmd buf flush ddd bytes
   SMTP<< 250 OK
@@ -254,7 +260,7 @@ cmd buf flush ddd bytes
          250 HELP
   SMTP(close)>>
 LOG: MAIN
-  => userz@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbN-0005vi-00"
+  => user_r@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbN-0005vi-00"
 LOG: MAIN
   Completed
 >>>>>>>>>>>>>>>> Exim pid=pppp (continued-transport) terminating with rc=0 >>>>>>>>>>>>>>>>
@@ -274,18 +280,19 @@ cmd buf flush ddd bytes
          250-PIPELINING
          250 HELP
   SMTP|> MAIL FROM:<CALLER@myhost.test.ex> SIZE=ssss
-  SMTP|> RCPT TO:<usery@test.ex>
+  SMTP|> RCPT TO:<user_q@test.ex>
   SMTP>> DATA
 cmd buf flush ddd bytes
   SMTP<< 250 OK
   SMTP<< 250 Accepted
   SMTP<< 354 Enter message, ending with "." on a line by itself
+  SMTP>> QUIT
+cmd buf flush ddd bytes
   SMTP<< 250 OK id=10HmbO-0005vi-00
-  SMTP+> QUIT
-cmd buf flush ddd bytes (more expected)
+  SMTP<< 221 myhost.test.ex closing connection
   SMTP(close)>>
 LOG: MAIN
-  => usery@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbO-0005vi-00"
+  => user_q@test.ex R=client T=send_to_server H=127.0.0.1 [127.0.0.1]* X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbO-0005vi-00"
 LOG: MAIN
   Completed
 >>>>>>>>>>>>>>>> Exim pid=pppp (continued-transport) terminating with rc=0 >>>>>>>>>>>>>>>>
index a302240474d6cdb81f750699af907f6a4d2960b8..cdbad361451a2fb4416e6a99e76198f5a240d11c 100644 (file)
@@ -16,8 +16,9 @@ Connecting to 127.0.0.1 [127.0.0.1]:1225 ...  connected
   SMTP<< 250 Accepted
   SMTP<< 354 Enter message, ending with "." on a line by itself
   SMTP>> writing message and terminating "."
+  SMTP>> QUIT
   SMTP<< 250 OK id=10HmaZ-0005vi-00
-  SMTP+> QUIT
+  SMTP<< 221 myhost.test.ex closing connection
   SMTP(close)>>
 LOG: MAIN
   => CALLER@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmaZ-0005vi-00"
@@ -41,8 +42,9 @@ Connecting to 127.0.0.1 [127.0.0.1]:1225 ...  connected
   SMTP<< 250 Accepted
   SMTP<< 354 Enter message, ending with "." on a line by itself
   SMTP>> writing message and terminating "."
+  SMTP>> QUIT
   SMTP<< 250 OK id=10HmbA-0005vi-00
-  SMTP+> QUIT
+  SMTP<< 221 myhost.test.ex closing connection
   SMTP(close)>>
 LOG: MAIN
   => CALLER@test.ex R=client T=send_to_server1 H=127.0.0.1 [127.0.0.1] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbA-0005vi-00"
@@ -63,8 +65,9 @@ Connecting to ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4]:1225 ...  connected
   SMTP<< 250 Accepted
   SMTP<< 354 Enter message, ending with "." on a line by itself
   SMTP>> writing message and terminating "."
+  SMTP>> QUIT
   SMTP<< 250 OK id=10HmbB-0005vi-00
-  SMTP+> QUIT
+  SMTP<< 221 myhost.test.ex closing connection
   SMTP(close)>>
 LOG: MAIN
   => abcd@test.ex R=client T=send_to_server2 H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=yes C="250 OK id=10HmbB-0005vi-00"
index 95c3b784827fffc8901e67f437c9cefd6d2145c3..c15645ce0de22351c2f84f64560699d41a659bc6 100644 (file)
@@ -64,13 +64,16 @@ writing data block fd=dddd size=sss timeout=300
 ok=1 send_quit=1 send_rset=0 continue_more=0 yield=0 first_address is NULL
   SMTP+> QUIT
 cmd buf flush ddd bytes (more expected)
+  SMTP(shutdown)>>
+  SMTP(TLS shutdown)>>
+  SMTP<< 221 myhost.test.ex closing connection
   SMTP(close)>>
->>>>>>>>>>>>>>>> Exim pid=pppp (tls-proxy) terminating with rc=0 >>>>>>>>>>>>>>>>
 Leaving t1 transport
 LOG: MAIN
   => userb@test.ex R=client T=t1 H=127.0.0.1 [127.0.0.1]:1225 X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmaY-0005vi-00"
 LOG: MAIN
   Completed
 >>>>>>>>>>>>>>>> Exim pid=pppp (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
+>>>>>>>>>>>>>>>> Exim pid=pppp (tls-proxy) terminating with rc=0 >>>>>>>>>>>>>>>>
 
 ******** SERVER ********
index 95c3b784827fffc8901e67f437c9cefd6d2145c3..c15645ce0de22351c2f84f64560699d41a659bc6 100644 (file)
@@ -64,13 +64,16 @@ writing data block fd=dddd size=sss timeout=300
 ok=1 send_quit=1 send_rset=0 continue_more=0 yield=0 first_address is NULL
   SMTP+> QUIT
 cmd buf flush ddd bytes (more expected)
+  SMTP(shutdown)>>
+  SMTP(TLS shutdown)>>
+  SMTP<< 221 myhost.test.ex closing connection
   SMTP(close)>>
->>>>>>>>>>>>>>>> Exim pid=pppp (tls-proxy) terminating with rc=0 >>>>>>>>>>>>>>>>
 Leaving t1 transport
 LOG: MAIN
   => userb@test.ex R=client T=t1 H=127.0.0.1 [127.0.0.1]:1225 X=TLS1.x:ke-RSA-AES256-SHAnnn:xxx CV=no C="250 OK id=10HmaY-0005vi-00"
 LOG: MAIN
   Completed
 >>>>>>>>>>>>>>>> Exim pid=pppp (local-accept-delivery) terminating with rc=0 >>>>>>>>>>>>>>>>
+>>>>>>>>>>>>>>>> Exim pid=pppp (tls-proxy) terminating with rc=0 >>>>>>>>>>>>>>>>
 
 ******** SERVER ********
index c1171586fbcaada282b7cb9d2ac2b967459c679a..ea3f7e0a9bd89565f9ec53015fa7da22badf48ff 100644 (file)
@@ -18,6 +18,8 @@ Connecting to 127.0.0.1 [127.0.0.1]:1224 ...  connected
   SMTP>> writing message and terminating "."
   SMTP<< 250 OK
   SMTP+> QUIT
+  SMTP(shutdown)>>
+  SMTP<< 250 OK
   SMTP(close)>>
 LOG: MAIN
   => userx@domain.com R=all T=smtp H=127.0.0.1 [127.0.0.1] A=plain C="250 OK"
@@ -43,6 +45,8 @@ Connecting to 127.0.0.1 [127.0.0.1]:1224 ...  connected
   SMTP>> writing message and terminating "."
   SMTP<< 250 OK
   SMTP+> QUIT
+  SMTP(shutdown)>>
+  SMTP<< 250 OK
   SMTP(close)>>
 LOG: MAIN
   => userx@domain.com R=all T=smtp H=127.0.0.1 [127.0.0.1] A=plain C="250 OK"
@@ -72,6 +76,8 @@ Connecting to 127.0.0.1 [127.0.0.1]:1224 ...  connected
   SMTP>> writing message and terminating "."
   SMTP<< 250 OK
   SMTP+> QUIT
+  SMTP(shutdown)>>
+  SMTP<< 250 OK
   SMTP(close)>>
 LOG: MAIN
   => userx@domain.com R=all T=smtp H=127.0.0.1 [127.0.0.1] A=login C="250 OK"
index c824cb477661d5b305551e8874d2b03d8cdfd4c6..4c0c1b1ca99b12fa1b52e69778c1c73784f7e4e6 100644 (file)
@@ -48,16 +48,19 @@ sync_responses expect rcpt for extchange@test.ex
 sync_responses expect data
   SMTP<< 354 data go-ahead
   SMTP>> writing message and terminating "."
-cannot use sendfile for body: spoolfile not wireformat
-writing data block fd=dddd size=sss timeout=300
-  SMTP<< 250 message accepted
-ok=1 send_quit=1 send_rset=0 continue_more=0 yield=0 first_address is NULL
 transport_check_waiting entered
   sequence=1 local_max=500 global_max=-1
  no messages waiting for 127.0.0.1
 transport_check_waiting: FALSE
+will pipeline QUIT
+cannot use sendfile for body: spoolfile not wireformat
+writing data block fd=dddd size=sss timeout=300 (more expected)
   SMTP+> QUIT
 cmd buf flush ddd bytes (more expected)
+  SMTP(shutdown)>>
+  SMTP<< 250 message accepted
+ok=1 send_quit=0 send_rset=0 continue_more=0 yield=0 first_address is NULL
+  SMTP<< 220 bye
   SMTP(close)>>
 Leaving smtp transport
 LOG: MAIN
index ad927fcbd2ffd6fd707f8e2f12f1fdc29bd56baa..cfdbe6e299db15d913c8ab31720e2b340256eba4 100644 (file)
@@ -47,9 +47,11 @@ DKIM-Signature:{SP}v=1;{SP}a=rsa-sha256;{SP}q=dns/txt;{SP}c=relaxed/relaxed;{SP}
 DKIM >> Signed DKIM-Signature header, canonicalized (relaxed) >>>>>>>
 dkim-signature:v=1;{SP}a=rsa-sha256;{SP}q=dns/txt;{SP}c=relaxed/relaxed;{SP}d=test.ex;{SP}s=sel_bad;{SP}h=From;{SP}bh=/Ab0giHZitYQbDhFszoqQRUkgqueaX9zatJttIU/plc=;{SP}b=;
 DKIM [test.ex] Header sha256 computed: 241e16230df5723d899cfae9474c6b376a2ab1f81d1094e358f50ffd0e0067b3
-  SMTP<< 250 OK id=10HmbL-0005vi-00
   SMTP+> QUIT
 cmd buf flush ddd bytes (more expected)
+  SMTP(shutdown)>>
+  SMTP<< 250 OK id=10HmbL-0005vi-00
+  SMTP<< 221 myhost.test.ex closing connection
   SMTP(close)>>
 LOG: MAIN
   => d@test.ex R=client T=send_to_server H=ip4.ip4.ip4.ip4 [ip4.ip4.ip4.ip4] C="250 OK id=10HmbL-0005vi-00"
diff --git a/test/stdout/0623 b/test/stdout/0623
new file mode 100644 (file)
index 0000000..1c571c9
--- /dev/null
@@ -0,0 +1,133 @@
+Message 10HmaZ-0005vi-00 has been removed
+Message 10HmbB-0005vi-00 has been removed
+
+******** SERVER ********
+Listening on port 1225 ... 
+Connection request from [127.0.0.1]
+220 Server ready
+EHLO myhost.test.ex
+250-hi there
+250-PIPELINING
+250 OK
+MAIL FROM:<>
+250 OK mail
+RCPT TO:<good@test.ex>
+250 OK rcpt
+DATA
+300 go ahead
+Received: from CALLER by myhost.test.ex with local (Exim x.yz)
+       (envelope-from <CALLER@myhost.test.ex>)
+       id 10HmaX-0005vi-00
+       for good@test.ex; Tue, 2 Mar 1999 09:44:33 +0000
+Message-Id: <E10HmaX-0005vi-00@myhost.test.ex>
+From: CALLER_NAME <CALLER@myhost.test.ex>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+.
+QUIT
+250 OK message data
+221 Closing connection
+End of script
+Listening on port 1225 ... 
+Connection request from [127.0.0.1]
+220 Server ready
+EHLO myhost.test.ex
+250-hi there
+250 OK
+MAIL FROM:<>
+250 OK mail
+RCPT TO:<nopipe@test.ex>
+250 OK rcpt
+DATA
+300 go ahead
+Received: from CALLER by myhost.test.ex with local (Exim x.yz)
+       (envelope-from <CALLER@myhost.test.ex>)
+       id 10HmaY-0005vi-00
+       for nopipe@test.ex; Tue, 2 Mar 1999 09:44:33 +0000
+Message-Id: <E10HmaY-0005vi-00@myhost.test.ex>
+From: CALLER_NAME <CALLER@myhost.test.ex>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+.
+250 OK message data
+*sleep 1
+<<QUIT
+Unexpected EOF read from client
+Listening on port 1225 ... 
+Connection request from [127.0.0.1]
+220 Server ready
+EHLO myhost.test.ex
+250-hi there
+250-PIPELINING
+250 OK
+MAIL FROM:<>
+250 OK mail
+RCPT TO:<tempreject@test.ex>
+250 OK rcpt
+DATA
+300 go ahead
+Received: from CALLER by myhost.test.ex with local (Exim x.yz)
+       (envelope-from <CALLER@myhost.test.ex>)
+       id 10HmaZ-0005vi-00
+       for tempreject@test.ex; Tue, 2 Mar 1999 09:44:33 +0000
+Message-Id: <E10HmaZ-0005vi-00@myhost.test.ex>
+From: CALLER_NAME <CALLER@myhost.test.ex>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+.
+QUIT
+451 Service not available
+221 Closing connection
+Expected EOF read from client
+End of script
+Listening on port 1225 ... 
+Connection request from [127.0.0.1]
+220 Server ready
+EHLO myhost.test.ex
+250-hi there
+250-PIPELINING
+250 OK
+MAIL FROM:<>
+250 OK mail
+RCPT TO:<permreject@test.ex>
+250 OK rcpt
+DATA
+300 go ahead
+Received: from CALLER by myhost.test.ex with local (Exim x.yz)
+       (envelope-from <CALLER@myhost.test.ex>)
+       id 10HmbA-0005vi-00
+       for permreject@test.ex; Tue, 2 Mar 1999 09:44:33 +0000
+Message-Id: <E10HmbA-0005vi-00@myhost.test.ex>
+From: CALLER_NAME <CALLER@myhost.test.ex>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+.
+QUIT
+550 content rejected
+221 Closing connection
+Expected EOF read from client
+End of script
+Listening on port 1225 ... 
+Connection request from [127.0.0.1]
+220 Server ready
+EHLO myhost.test.ex
+250-hi there
+250-PIPELINING
+250 OK
+MAIL FROM:<>
+250 OK mail
+RCPT TO:<permreject@test.ex>
+250 OK rcpt
+DATA
+300 go ahead
+Received: from CALLER by myhost.test.ex with local (Exim x.yz)
+       (envelope-from <CALLER@myhost.test.ex>)
+       id 10HmbB-0005vi-00
+       for permreject@test.ex; Tue, 2 Mar 1999 09:44:33 +0000
+Message-Id: <E10HmbB-0005vi-00@myhost.test.ex>
+From: CALLER_NAME <CALLER@myhost.test.ex>
+Date: Tue, 2 Mar 1999 09:44:33 +0000
+
+.
+>*eof
+End of script
index 88755665fa1904b867c3938a094889fc2824a629..6df7891157d50186aa341836c4dd060049b34d54 100644 (file)
@@ -110,17 +110,6 @@ EHLO testhost.test.ex
 250-PIPELINING
 250 CHUNKING
 MAIL FROM:<>
-RCPT TO:<q@test.ex>
-BDAT 329 LAST
-Unexpected EOF read from client
-Listening on port 1224 ... 
-Connection request from [127.0.0.1]
-220 Greetings
-EHLO testhost.test.ex
-250-Hello there
-250-PIPELINING
-250 CHUNKING
-MAIL FROM:<>
 RCPT TO:<r@test.ex>
 BDAT 329 LAST
 250 OK mail
diff --git a/test/stdout/0911 b/test/stdout/0911
new file mode 100644 (file)
index 0000000..92db28b
--- /dev/null
@@ -0,0 +1,123 @@
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000\r
+250 myhost.test.ex Hello root at tester\r
+250 OK\r
+250 Accepted\r
+354 Enter message, ending with "." on a line by itself\r
+250 OK id=10HmaX-0005vi-00\r
+221 myhost.test.ex closing connection\r
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000\r
+250 myhost.test.ex Hello root at tester\r
+250 OK\r
+250 Accepted\r
+354 Enter message, ending with "." on a line by itself\r
+250 OK id=10HmaY-0005vi-00\r
+221 myhost.test.ex closing connection\r
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000\r
+250 myhost.test.ex Hello root at tester\r
+250 OK\r
+250 Accepted\r
+354 Enter message, ending with "." on a line by itself\r
+250 OK id=10HmaZ-0005vi-00\r
+221 myhost.test.ex closing connection\r
+Message 10HmaZ-0005vi-00 has been removed
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000\r
+250 myhost.test.ex Hello root at tester\r
+250 OK\r
+250 Accepted\r
+354 Enter message, ending with "." on a line by itself\r
+250 OK id=10HmbA-0005vi-00\r
+221 myhost.test.ex closing connection\r
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000\r
+250 myhost.test.ex Hello root at tester\r
+250 OK\r
+250 Accepted\r
+354 Enter message, ending with "." on a line by itself\r
+250 OK id=10HmbB-0005vi-00\r
+221 myhost.test.ex closing connection\r
+Message 10HmbB-0005vi-00 has been removed
+
+******** SERVER ********
+Listening on port 1225 ... 
+Connection request from [127.0.0.1]
+220 Server ready
+EHLO myhost.test.ex
+250-hi there
+250-PIPELINING
+250-CHUNKING
+250 OK
+MAIL FROM:<>
+RCPT TO:<good@test.ex>
+BDAT 313 LAST
+250 OK mail
+250 OK rcpt
+QUIT
+250 OK chunked message data
+221 Closing connection
+End of script
+Listening on port 1225 ... 
+Connection request from [127.0.0.1]
+220 Server ready
+EHLO myhost.test.ex
+250-hi there
+250-CHUNKING
+250 OK
+MAIL FROM:<>
+250 OK mail
+RCPT TO:<nopipe@test.ex>
+250 OK rcpt
+BDAT 315 LAST
+250 OK chunked message data
+QUIT
+221 Closing connection
+End of script
+Listening on port 1225 ... 
+Connection request from [127.0.0.1]
+220 Server ready
+EHLO myhost.test.ex
+250-hi there
+250-PIPELINING
+250-CHUNKING
+250 OK
+MAIL FROM:<>
+250 OK mail
+RCPT TO:<tempreject@test.ex>
+250 OK rcpt
+BDAT 319 LAST
+QUIT
+451 Service not available
+221 Closing connection
+Expected EOF read from client
+End of script
+Listening on port 1225 ... 
+Connection request from [127.0.0.1]
+220 Server ready
+EHLO myhost.test.ex
+250-hi there
+250-PIPELINING
+250-CHUNKING
+250 OK
+MAIL FROM:<>
+250 OK mail
+RCPT TO:<permreject@test.ex>
+250 OK rcpt
+BDAT 319 LAST
+QUIT
+550 content rejected
+221 Closing connection
+Expected EOF read from client
+End of script
+Listening on port 1225 ... 
+Connection request from [127.0.0.1]
+220 Server ready
+EHLO myhost.test.ex
+250-hi there
+250-PIPELINING
+250-CHUNKING
+250 OK
+MAIL FROM:<>
+250 OK mail
+RCPT TO:<dataloss@test.ex>
+250 OK rcpt
+BDAT 317 LAST
+>*eof
+End of script