JH/18 Bug 3102: The dmarc_tld_file and dmarc_history_file options are now
expanded before use.
+JH/19 Bug 3092: Call acl_smtp_notquit for drops associated with the
+ smtp_max_synprot_errors limit.
+
Exim version 4.98
-----------------
/* Smtp_setup_msg() returns 0 on QUIT or if the call is from an
unacceptable host or if an ACL "drop" command was triggered, -1 on
- connection lost, and +1 on validly reaching DATA. Receive_msg() almost
- always returns TRUE when smtp_input is true; just retry if no message was
- accepted (can happen for invalid message parameters). However, it can yield
- FALSE if the connection was forcibly dropped by the DATA ACL. */
+ connection lost or synprot-error, and +1 on validly reaching DATA.
+ Receive_msg() almost always returns TRUE when smtp_input is true; just retry
+ if no message was accepted (can happen for invalid message parameters).
+ However, it can yield FALSE if the connection was forcibly dropped by the
+ DATA ACL. */
- if ((rc = smtp_setup_msg()) > 0)
- {
- BOOL ok = receive_msg(FALSE);
- search_tidyup(); /* Close cached databases */
- if (!ok) /* Connection was dropped */
- {
- cancel_cutthrough_connection(TRUE, US"receive dropped");
- mac_smtp_fflush();
- smtp_log_no_mail(); /* Log no mail if configured */
- exim_underbar_exit(EXIT_SUCCESS);
- }
- if (!message_id[0]) continue; /* No message was accepted */
- }
- else /* bad smtp_setup_msg() */
+ if ((rc = smtp_setup_msg()) <= 0) /* bad smtp_setup_msg() */
{
if (smtp_out)
{
exim_underbar_exit(rc ? EXIT_FAILURE : EXIT_SUCCESS);
}
+ {
+ BOOL ok = receive_msg(FALSE);
+ search_tidyup(); /* Close cached databases */
+ if (!ok) /* Connection was dropped */
+ {
+ cancel_cutthrough_connection(TRUE, US"receive dropped");
+ mac_smtp_fflush();
+ smtp_log_no_mail(); /* Log no mail if configured */
+ exim_underbar_exit(EXIT_SUCCESS);
+ }
+ if (!message_id[0]) continue; /* No message was accepted */
+ }
+
/* Show the recipients when debugging */
DEBUG(D_receive)
extern int smtp_handle_acl_fail(int, int, uschar *, uschar *);
extern void smtp_log_no_mail(void);
extern void smtp_message_code(uschar **, int *, uschar **, uschar **, BOOL);
-extern void smtp_notquit_exit(uschar *, uschar *, uschar *, ...);
+extern void smtp_notquit_exit(const uschar *, uschar *, const uschar *, ...);
extern void smtp_port_for_connect(host_item *, int);
extern void smtp_proxy_tls(void *, uschar *, size_t, int *, int, const uschar *) NORETURN;
extern BOOL smtp_read_response(void *, uschar *, int, int, int);
uschar *smtp_etrn_command = NULL;
int smtp_max_synprot_errors= 3;
int smtp_max_unknown_commands = 3;
-uschar *smtp_notquit_reason = NULL;
+const uschar *smtp_notquit_reason = NULL;
unsigned smtp_peer_options = 0;
unsigned smtp_peer_options_wrap= 0;
uschar *smtp_ratelimit_hosts = NULL;
extern int smtp_max_synprot_errors;/* Max syntax/protocol errors */
extern int smtp_max_unknown_commands; /* As it says */
extern uschar *smtp_names[]; /* decode for command codes */
-extern uschar *smtp_notquit_reason; /* Global for disconnect reason */
+extern const uschar *smtp_notquit_reason; /* Global for disconnect reason */
extern FILE *smtp_out; /* Incoming SMTP output file */
extern uschar *smtp_ratelimit_hosts; /* Rate limit these hosts */
extern uschar *smtp_ratelimit_mail; /* Parameters for MAIL limiting */
int last_ch = '\n';
for ( ;
- log_close_chk(), (ch = (receive_getc)(GETC_BUFFER_UNLIMITED)) != EOF;
+ log_close_chk(), (ch = (receive_getc)(GETC_BUFFER_UNLIMITED)) >= 0;
last_ch = ch)
{
if (ch == 0) body_zerocount++;
ch_state = 1;
-while (log_close_chk(), (ch = (receive_getc)(GETC_BUFFER_UNLIMITED)) != EOF)
+while (log_close_chk(), (ch = (receive_getc)(GETC_BUFFER_UNLIMITED)) >= 0)
{
if (ch == 0) body_zerocount++;
switch (ch_state)
s_linestart;
int linelength = 0, ch;
-while ((ch = (receive_getc)(GETC_BUFFER_UNLIMITED)) != EOF)
+while ((ch = (receive_getc)(GETC_BUFFER_UNLIMITED)) >= 0)
{
if (ch == 0) body_zerocount++;
switch (ch_state)
#endif
if (misc_mod_msg_init() != OK)
- goto TIDYUP;
+ goto CONN_GONE;
/* In SMTP sessions we may receive several messages in one connection. Before
each subsequent one, we wait for the clock to tick at the level of message-id
goto TIDYUP; /* Skip to end of function */
}
else if (ch == ERR)
- goto TIDYUP;
+ goto CONN_GONE;
/* See if we are at the current header's size limit - there must be at least
four bytes left. This allows for the new character plus a zero, plus two for
if (f.dot_ends && ptr == 0 && ch == '.')
{
/* leading dot while in headers-read mode */
- ch = (receive_getc)(GETC_BUFFER_UNLIMITED);
+ if ((ch = (receive_getc)(GETC_BUFFER_UNLIMITED)) < 0)
+ goto CONN_GONE;
if (ch == '\n' && first_line_ended_crlf == TRUE /* and not TRUE_UNSET */ )
/* dot, LF but we are in CRLF mode. Attack? */
ch = ' '; /* replace the LF with a space */
else if (ch == '\r')
{
- ch = (receive_getc)(GETC_BUFFER_UNLIMITED);
+ if ((ch = (receive_getc)(GETC_BUFFER_UNLIMITED)) < 0)
+ goto CONN_GONE;
if (ch != '\n')
{
if (ch >= 0) receive_ungetc(ch);
if (ch == '\r')
{
- ch = (receive_getc)(GETC_BUFFER_UNLIMITED);
+ if ((ch = (receive_getc)(GETC_BUFFER_UNLIMITED)) < 0)
+ goto CONN_GONE;
if (ch == '\n')
{
if (first_line_ended_crlf == TRUE_UNSET)
if (poll_one_fd(fileno(smtp_in), POLLIN, 0) != 0)
{
int c = (receive_getc)(GETC_BUFFER_UNLIMITED);
- if (c != EOF) (receive_ungetc)(c);
+ if (c >= 0) (receive_ungetc)(c);
else
{
smtp_notquit_exit(US"connection-lost", NULL, NULL);
- smtp_reply = US""; /* No attempt to send a response */
- smtp_yield = FALSE; /* Nothing more on this connection */
/* Re-use the log line workspace */
Uunlink(spool_fname(US"input", message_subdir, message_id, US"-H"));
Uunlink(spool_fname(US"msglog", message_subdir, message_id, US""));
- goto TIDYUP;
+ goto CONN_GONE;
}
}
}
That seems like a good thing on data-security grounds, but how much will it hit
performance? */
-
goto TIDYUP;
+
+CONN_GONE:
+ smtp_reply = US""; /* No attempt to send a response */
+ smtp_yield = FALSE; /* Nothing more on this connection */
+ goto TIDYUP;
+
NOT_ACCEPTED:
-message_id[0] = 0; /* Indicate no message accepted */
+ message_id[0] = 0; /* Indicate no message accepted */
TIDYUP:
+DEBUG(D_receive) debug_printf("%s: tidyup\n", __FUNCTION__);
+
process_info[process_info_len] = 0; /* Remove message id */
if (spool_data_file && cutthrough_done == NOT_TRIED)
{
#endif
BOOL rcpt_smtp_response_same :1;
BOOL rcpt_in_progress :1;
- BOOL smtp_exit_function_called :1;
#ifdef SUPPORT_I18N
BOOL smtputf8_advertised :1;
#endif
} fl = {
.helo_verify_required = FALSE,
.helo_verify = FALSE,
- .smtp_exit_function_called = FALSE,
};
static auth_instance *authenticated_by;
{ US"NULL", ENV_MAIL_OPT_NULL, FALSE },
};
+/* State names for debug of chunking */
+
+static const uschar * chunking_states[] = {
+ [CHUNKING_NOT_OFFERED] = US"not-offered",
+ [CHUNKING_OFFERED] = US"offered",
+ [CHUNKING_ACTIVE] = US"active",
+ [CHUNKING_LAST] = US"last" };
+
+
/* When reading SMTP from a remote host, we have to use our own versions of the
C input-reading functions, in order to be able to flush the SMTP output only
when about to read more data from the socket. This is the only way to get
int
bdat_getc(unsigned lim)
{
-uschar * user_msg = NULL;
-uschar * log_msg;
+uschar * user_msg = NULL, * log_msg;
+int rc;
#ifndef DISABLE_DKIM
misc_module_info * dkim_info = misc_mod_findonly(US"dkim");
smtp_printf("250 %u byte chunk received\r\n", SP_NO_MORE, chunking_datasize);
chunking_state = CHUNKING_OFFERED;
- DEBUG(D_receive) debug_printf("chunking state %d\n", (int)chunking_state);
+ DEBUG(D_receive)
+ debug_printf("chunking state '%s'\n", chunking_states[chunking_state]);
/* Expect another BDAT cmd from input. RFC 3030 says nothing about
QUIT, RSET or NOOP but handling them seems obvious */
US"only BDAT permissible after non-LAST BDAT");
repeat_until_rset:
- switch(smtp_read_command(TRUE, 1))
+ switch(rc = smtp_read_command(TRUE, 1))
{
case QUIT_CMD: smtp_quit_handler(&user_msg, &log_msg); /*FALLTHROUGH */
case EOF_CMD: return EOF;
case RSET_CMD: smtp_rset_handler(); return ERR;
default: if (synprot_error(L_smtp_protocol_error, 503, NULL,
US"only RSET accepted now") > 0)
- return EOF;
+ return ERR;
goto repeat_until_rset;
}
chunking_state = strcmpic(smtp_cmd_data+n, US"LAST") == 0
? CHUNKING_LAST : CHUNKING_ACTIVE;
chunking_data_left = chunking_datasize;
- DEBUG(D_receive) debug_printf("chunking state %d, %d bytes\n",
- (int)chunking_state, chunking_data_left);
+ DEBUG(D_receive) debug_printf("chunking state '%s', %d bytes\n",
+ chunking_states[chunking_state], chunking_data_left);
if (chunking_datasize == 0)
if (chunking_state == CHUNKING_LAST)
bdat_pop_receive_functions();
chunking_state = CHUNKING_OFFERED;
-DEBUG(D_receive) debug_printf("chunking state %d\n", (int)chunking_state);
+DEBUG(D_receive)
+ debug_printf("chunking state '%s'\n", chunking_states[chunking_state]);
}
static int
smtp_read_command(BOOL check_sync, unsigned buffer_lim)
{
-int c;
-int ptr = 0;
+int ptr = 0, c, rc;
BOOL hadnull = FALSE;
had_command_timeout = 0;
os_non_restarting_signal(SIGALRM, command_timeout_handler);
-while ((c = (receive_getc)(buffer_lim)) != '\n' && c != EOF)
+/* Read up to end of line */
+
+while ((c = (receive_getc)(buffer_lim)) != '\n')
{
- if (ptr >= SMTP_CMD_BUFFER_SIZE)
+ /* If hit end of file, return pseudo EOF command. Whether we have a
+ part-line already read doesn't matter, since this is an error state. */
+
+ if (c < 0 || ptr >= SMTP_CMD_BUFFER_SIZE)
{
os_non_restarting_signal(SIGALRM, sigalrm_handler);
- return OTHER_CMD;
+ /* c could be EOF, ERR, or a good (positive) value overflowing the buffer */
+ DEBUG(D_receive)
+ if (c < 0)
+ debug_printf("SMTP(%s)<<\n", c == EOF ? "closed" : "error");
+ else
+ debug_printf("SMTP(overflow)<< '%.*s'\n",
+ SMTP_CMD_BUFFER_SIZE, smtp_cmd_buffer);
+ return c == EOF ? EOF_CMD : OTHER_CMD;
}
+
if (c == 0)
{
hadnull = TRUE;
receive_linecount++; /* For BSMTP errors */
os_non_restarting_signal(SIGALRM, sigalrm_handler);
-/* If hit end of file, return pseudo EOF command. Whether we have a
-part-line already read doesn't matter, since this is an error state. */
-
-if (c == EOF) return EOF_CMD;
-
/* Remove any CR and white space at the end of the line, and terminate the
string. */
}
/* If there is data for a command that does not expect it, generate the
- error here. */
+ error here. Otherwise, return the command code. */
- return (p->has_arg || *smtp_cmd_data == 0)? p->cmd : BADARG_CMD;
+ return p->has_arg || *smtp_cmd_data == 0 ? p->cmd : BADARG_CMD;
}
}
case QUIT_CMD:
f.smtp_in_quit = TRUE;
+ case OTHER_CMD:
case EOF_CMD:
done = 2;
break;
f.smtp_in_pipelining_advertised = f.smtp_in_pipelining_used = FALSE;
f.pipelining_enable = TRUE;
sync_cmd_limit = NON_SYNC_CMD_NON_PIPELINING;
-fl.smtp_exit_function_called = FALSE; /* For avoiding loop in not-quit exit */
+smtp_notquit_reason = NULL; /* For avoiding loop in not-quit exit */
/* If receiving by -bs from a trusted user, or testing with -bh, we allow
authentication settings from -oMaa to remain in force. */
type == L_smtp_syntax_error ? "syntax" : "protocol",
string_printing(smtp_cmd_buffer), host_and_ident(TRUE), errmess);
+GET_OPTION("smtp_max_synprot_errors");
if (++synprot_error_count > smtp_max_synprot_errors)
{
yield = 1;
if (code > 0)
{
- smtp_printf("%d%c%s%s%s\r\n", SP_NO_MORE, code, yield == 1 ? '-' : ' ',
+ BOOL more = yield == 1;
+ smtp_printf("%d%c%s%s%s\r\n", more, code, more ? '-' : ' ',
data ? data : US"", data ? US": " : US"", errmess);
- if (yield == 1)
- smtp_printf("%d Too many syntax or protocol errors\r\n", SP_NO_MORE, code);
+ if (more)
+ {
+ smtp_notquit_exit(US"bad-command-synprot", string_sprintf("%d", code),
+ US"Too many syntax or protocol errors");
+ DEBUG(D_any) debug_printf_indent("SMTP(close)>>\n");
+#ifndef DISABLE_TLS
+ tls_close(NULL, TLS_SHUTDOWN_WAIT);
+#endif
+ (void) fclose(smtp_in);
+ (void) fclose(smtp_out);
+ }
}
return yield;
in the TCP conn staying open, and retrying, despite this process exiting. A
malicious client could possibly do the same, tying up server netowrking
resources. Close the socket explicitly to try to avoid that (there's a note in
-the Linux socket(7) manpage, SO_LINGER para, to the effect that exim() without
+the Linux socket(7) manpage, SO_LINGER para, to the effect that exit() without
close() results in the socket always lingering). */
(void) poll_one_fd(fileno(smtp_in), POLLIN, 200);
*/
void
-smtp_notquit_exit(uschar *reason, uschar *code, uschar *defaultrespond, ...)
+smtp_notquit_exit(const uschar * reason, uschar * code,
+ const uschar * defaultrespond, ...)
{
int rc;
uschar *user_msg = NULL;
uschar *log_msg = NULL;
-/* Check for recursive call */
+/* When a bad-command-excess is seen in the CHUNKING sub-handler, it only
+reports as EOF to the toplevel command loop - which handles EOF for the
+traditional DATA mode and calls here because the line dropped. Maybe we
+should complexify that reporting value? For now just ignore the second call
+we get when the line goes on to drop when CHUNKING. */
-if (fl.smtp_exit_function_called)
+if (smtp_notquit_reason)
{
- log_write(0, LOG_PANIC, "smtp_notquit_exit() called more than once (%s)",
- reason);
+#ifdef notdef
+ log_write(0, LOG_PANIC,
+ "smtp_notquit_exit() called more than once (%s, prev: %s)",
+ reason, smtp_notquit_reason);
+#endif
return;
}
-fl.smtp_exit_function_called = TRUE;
+smtp_notquit_reason = reason;
/* Call the not-QUIT ACL, if there is one, unless no reason is given. */
GET_OPTION("acl_smtp_notquit");
if (acl_smtp_notquit && reason)
{
- smtp_notquit_reason = reason;
if ((rc = acl_check(ACL_WHERE_NOTQUIT, NULL, acl_smtp_notquit, &user_msg,
&log_msg)) == ERROR)
log_write(0, LOG_MAIN|LOG_PANIC, "ACL for not-QUIT returned ERROR: %s",
log_msg);
}
-/* If the connection was dropped, we certainly are no longer talking TLS */
-tls_in.active.sock = -1;
-
/* Write an SMTP response if we are expected to give one. As the default
responses are all internal, they should be reasonable size. */
va_list ap;
va_start(ap, defaultrespond);
- g = string_vformat(NULL, SVFMT_EXTEND|SVFMT_REBUFFER, CS defaultrespond, ap);
+ g = string_vformat(NULL, SVFMT_EXTEND|SVFMT_REBUFFER, CCS defaultrespond, ap);
va_end(ap);
smtp_printf("%s %Y\r\n", SP_NO_MORE, code, g);
}
Returns: > 0 message successfully started (reached DATA)
= 0 QUIT read or end of file reached or call refused
- < 0 lost connection
+ < 0 lost connection, or synprot error
*/
int
chunking_state = strcmpic(smtp_cmd_data+n, US"LAST") == 0
? CHUNKING_LAST : CHUNKING_ACTIVE;
chunking_data_left = chunking_datasize;
- DEBUG(D_receive) debug_printf("chunking state %d, %d bytes\n",
- (int)chunking_state, chunking_data_left);
+ DEBUG(D_receive) debug_printf("chunking state '%s', %d bytes\n",
+ chunking_states[chunking_state], chunking_data_left);
f.bdat_readers_wanted = TRUE; /* FIXME: redundant vs chunking_state? */
f.dot_ends = FALSE;
BOOL initgroups;
} ugid_block;
-typedef enum { CHUNKING_NOT_OFFERED = -1,
+typedef enum { CHUNKING_NOT_OFFERED = 0,
CHUNKING_OFFERED,
CHUNKING_ACTIVE,
CHUNKING_LAST} chunking_state_t;
const uschar * msg;
uschar * errstr;
+if (rc == GNUTLS_E_INVALID_SESSION && errno == 0)
+ {
+ DEBUG(D_tls) debug_printf("- INVALID_SESSION with zero errno\n");
+ return;
+ }
+
msg = rc == GNUTLS_E_FATAL_ALERT_RECEIVED
? string_sprintf("A TLS fatal alert has been received: %s",
US gnutls_alert_get_name(gnutls_alert_get(state->session)))
return -1;
case SSL_ERROR_SYSCALL:
- if (ct_ctx || errno != ECONNRESET || !f.smtp_in_quit)
+ if (errno == 0)
+ { DEBUG(D_tls) debug_printf("- SSL_ERROR_SYSCALL with zero errno\n"); }
+ else if (ct_ctx || errno != ECONNRESET || !f.smtp_in_quit)
log_write(0, LOG_MAIN, "SSL_write: (from %s) syscall: %s",
sender_fullhost ? sender_fullhost : US"<unknown>",
strerror(errno));
1999-03-02 09:44:33 10HmbF-000000005vi-0000 <= someone8@some.domain H=(tester) [127.0.0.1] P=esmtp K S=sss for CALLER@test.ex
1999-03-02 09:44:33 SMTP protocol synchronization error (next input sent too soon: pipelining was not advertised): rejected "BDAT 1" H=(tester) [127.0.0.1] next input="BDAT 87 last\r\no: Susan@random.co"...
1999-03-02 09:44:33 SMTP call from (tester) [127.0.0.1] dropped: too many syntax or protocol errors (last command was "From: Sam@random.com", C=EHLO,MAIL,RCPT,BDAT)
-1999-03-02 09:44:33 SMTP connection from (tester) [127.0.0.1] lost while reading message data (header)
Tue, 2 Mar 1999 09:44:33 +0000
LOG: MAIN
<= x@y H=(test) [V4NET.9.8.7] P=smtp S=sss
+receive_msg: tidyup
SMTP>> 250 OK id=10HmbF-000000005vi-0000
smtp_setup_msg entered
SMTP<< quit
Tue, 2 Mar 1999 09:44:33 +0000
LOG: MAIN
<= x@y H=(test) [V4NET.9.8.7] P=smtp S=sss
+receive_msg: tidyup
SMTP>> 250 OK id=10HmbG-000000005vi-0000
smtp_setup_msg entered
SMTP<< quit
>>
LOG: MAIN
<= x@y H=(test) [V4NET.9.8.7] P=smtp S=sss
+receive_msg: tidyup
SMTP>> 250 OK id=10HmbH-000000005vi-0000
smtp_setup_msg entered
SMTP<< quit
Tue, 2 Mar 1999 09:44:33 +0000
LOG: MAIN
<= postmaster@exim.test.ex H=(exim.test.ex) [V4NET.11.12.13] P=esmtp S=sss
+receive_msg: tidyup
SMTP>> 250 OK id=10HmaX-000000005vi-0000
smtp_setup_msg entered
SMTP<< quit
SMTP>> 550 Sender verify failed
LOG: MAIN REJECT
H=(exim.test.ex) [V4NET.99.99.99] F=<postmaster@exim.test.ex> rejected RCPT list@exim.test.ex: Sender verify failed
+SMTP(closed)<<
SMTP>> 421 the.local.host.name lost input connection
LOG: lost_incoming_connection MAIN
unexpected disconnection while reading SMTP command from (exim.test.ex) [V4NET.99.99.99] D=qqs
LOG: MAIN
<= CALLER@test.ex U=CALLER P=local S=sss
created log directory TESTSUITE/spool/log
+receive_msg: tidyup
search_tidyup called
exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
Exim version x.yz ....
LOG: MAIN
<= CALLER@test.ex U=CALLER P=local S=sss
created log directory TESTSUITE/spool/log
+receive_msg: tidyup
search_tidyup called
exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
Exim version x.yz ....
LOG: MAIN
<= x@y U=CALLER P=local-smtp S=sss
created log directory TESTSUITE/spool/log
+receive_msg: tidyup
SMTP>> 250 OK id=10HmaX-000000005vi-0000
smtp_setup_msg entered
SMTP<< mail from:<x@y>
Size of headers = sss
LOG: MAIN
<= x@y U=CALLER P=local-smtp S=sss
+receive_msg: tidyup
SMTP>> 250 OK id=10HmaY-000000005vi-0000
smtp_setup_msg entered
SMTP<< mail from:<x@y>
Tue, 2 Mar 1999 09:44:33 +0000
LOG: MAIN
<= <> H=([V4NET.2.3.4]) [V4NET.2.3.4] P=esmtp S=sss
+receive_msg: tidyup
SMTP>> 250 OK id=10HmaX-000000005vi-0000
smtp_setup_msg entered
SMTP<< quit
Tue, 2 Mar 1999 09:44:33 +0000
LOG: MAIN
<= <> H=host.name.tld [V4NET.2.3.4] P=esmtp S=sss
+receive_msg: tidyup
SMTP>> 250 OK id=10HmaY-000000005vi-0000
smtp_setup_msg entered
SMTP<< quit
LOG: MAIN
<= CALLER@test.ex U=CALLER P=local S=sss
created log directory TESTSUITE/spool/log
+receive_msg: tidyup
>>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
Exim version x.yz ....
Hints DB:
Size of headers = sss
LOG: MAIN
<= CALLER@test.ex U=CALLER P=local S=sss
+receive_msg: tidyup
>>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
Size of headers = sss
LOG: MAIN
<= CALLER@test.ex U=CALLER P=local S=sss
+receive_msg: tidyup
search_tidyup called
exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -N -odi -Mc 10HmaY-000000005vi-0000
Exim version x.yz ....
end of ACL data: ACCEPT
LOG: MAIN
<= x@y H=(something) [V4NET.0.0.0] P=esmtp S=sss
+receive_msg: tidyup
SMTP>> 250 OK id=10HmaX-000000005vi-0000
smtp_setup_msg entered
SMTP<< vrfy x@y
Size of headers = sss
LOG: MAIN
<= x@y H=(test) [V4NET.11.12.13] U=CALLER P=smtp S=sss
+receive_msg: tidyup
SMTP>> 250 OK id=10HmaX-000000005vi-0000
search_tidyup called
exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
Size of headers = sss
LOG: MAIN
<= x@y H=(test) [V4NET.11.12.13] U=CALLER P=smtp S=sss
+receive_msg: tidyup
SMTP>> 250 OK id=10HmaY-000000005vi-0000
search_tidyup called
exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaY-000000005vi-0000
LOG: MAIN
<= CALLER@test.ex U=CALLER P=local S=sss
created log directory TESTSUITE/spool/log
+receive_msg: tidyup
search_tidyup called
exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715dfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
Exim version x.yz ....
LOG: MAIN
<= CALLER@test.ex U=CALLER P=local S=sss
created log directory TESTSUITE/spool/log
+receive_msg: tidyup
search_tidyup called
exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -N -odi -Mc 10HmaX-000000005vi-0000
Exim version x.yz ....
Size of headers = sss
LOG: MAIN
<= CALLER@test.ex U=CALLER P=local S=sss
+receive_msg: tidyup
search_tidyup called
exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -N -odi -Mc 10HmaY-000000005vi-0000
Exim version x.yz ....
LOG: MAIN
<= CALLER@test.ex U=CALLER P=local S=sss
created log directory TESTSUITE/spool/log
+receive_msg: tidyup
search_tidyup called
exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
Exim version x.yz ....
LOG: MAIN
<= <> U=CALLER P=local-smtp S=sss
created log directory TESTSUITE/spool/log
+receive_msg: tidyup
SMTP>> 250 OK id=10HmaY-000000005vi-0000
smtp_setup_msg entered
SMTP<< quit
SMTP>> 550 Administrative prohibition
LOG: MAIN REJECT
U=CALLER F=<> rejected after DATA: domain missing or malformed: failing address in "To:" header is: abc@xyz.
+receive_msg: tidyup
smtp_setup_msg entered
SMTP<< quit
SMTP>> 221 myhost.test.ex closing connection
LOG: MAIN
<= CALLER@myhost.test.ex U=CALLER P=local S=sss
created log directory TESTSUITE/spool/log
+receive_msg: tidyup
search_tidyup called
>>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
Exim version x.yz ....
Size of headers = sss
LOG: MAIN
<= CALLER@myhost.test.ex U=CALLER P=local S=sss
+receive_msg: tidyup
search_tidyup called
>>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
Exim version x.yz ....
Size of headers = sss
LOG: MAIN
<= CALLER@myhost.test.ex U=CALLER P=local S=sss
+receive_msg: tidyup
search_tidyup called
>>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
Exim version x.yz ....
Size of headers = sss
LOG: MAIN
<= CALLER@myhost.test.ex U=CALLER P=local S=sss
+receive_msg: tidyup
search_tidyup called
>>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
Exim version x.yz ....
Size of headers = sss
LOG: MAIN
<= CALLER@myhost.test.ex U=CALLER P=local S=sss
+receive_msg: tidyup
search_tidyup called
>>>>>>>>>>>>>>>> Exim pid=p1238 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
Exim version x.yz ....
Size of headers = sss
LOG: MAIN
<= CALLER@myhost.test.ex U=CALLER P=local S=sss
+receive_msg: tidyup
search_tidyup called
>>>>>>>>>>>>>>>> Exim pid=p1239 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
LOG: MAIN
<= x@y U=CALLER P=local-esmtp S=sss
created log directory TESTSUITE/spool/log
+receive_msg: tidyup
SMTP>> 250 OK id=10HmaX-000000005vi-0000
search_tidyup called
exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
LOG: MAIN
<= CALLER@myhost.test.ex U=CALLER P=local S=sss
created log directory TESTSUITE/spool/log
+receive_msg: tidyup
>>>>>>>>>>>>>>>> Exim pid=p1234 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
Exim version x.yz ....
Hints DB:
Size of headers = sss
LOG: MAIN
<= CALLER@myhost.test.ex U=CALLER P=local S=sss
+receive_msg: tidyup
>>>>>>>>>>>>>>>> Exim pid=p1235 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
Exim version x.yz ....
Hints DB:
Size of headers = sss
LOG: MAIN
<= CALLER@myhost.test.ex U=CALLER P=local S=sss
+receive_msg: tidyup
>>>>>>>>>>>>>>>> Exim pid=p1236 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
Exim version x.yz ....
Hints DB:
Size of headers = sss
LOG: MAIN
<= CALLER@myhost.test.ex U=CALLER P=local S=sss
+receive_msg: tidyup
>>>>>>>>>>>>>>>> Exim pid=p1237 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
Exim version x.yz ....
Hints DB:
Size of headers = sss
LOG: MAIN
<= CALLER@myhost.test.ex U=CALLER P=local S=sss
+receive_msg: tidyup
>>>>>>>>>>>>>>>> Exim pid=p1238 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
Exim version x.yz ....
Hints DB:
Size of headers = sss
LOG: MAIN
<= CALLER@myhost.test.ex U=CALLER P=local S=sss
+receive_msg: tidyup
>>>>>>>>>>>>>>>> Exim pid=p1239 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
Exim version x.yz ....
Hints DB:
Size of headers = sss
LOG: MAIN
<= CALLER@myhost.test.ex U=CALLER P=local S=sss
+receive_msg: tidyup
>>>>>>>>>>>>>>>> Exim pid=p1240 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
Exim version x.yz ....
Hints DB:
Size of headers = sss
LOG: MAIN
<= CALLER@myhost.test.ex U=CALLER P=local S=sss
+receive_msg: tidyup
>>>>>>>>>>>>>>>> Exim pid=p1241 (fresh-exec) terminating with rc=0 >>>>>>>>>>>>>>>>
Tue, 2 Mar 1999 09:44:33 +0000
LOG: MAIN
<= x@y H=(test) [V4NET.0.0.0] P=smtp S=sss
+receive_msg: tidyup
SMTP>> 250 OK id=10HmaX-000000005vi-0000
smtp_setup_msg entered
SMTP<< quit
01:01:01 p1237 Size of headers = sss
01:01:01 p1237 LOG: MAIN
01:01:01 p1237 <= tester@test.ex H=(test.ex) [127.0.0.1] P=esmtp S=sss
+01:01:01 p1237 receive_msg: tidyup
01:01:01 p1237 SMTP>> 250 OK id=10HmaX-000000005vi-0000
01:01:01 p1237 search_tidyup called
01:01:01 p1237 Sender: tester@test.ex
01:01:01 p1240 <= tester2@test.ex H=(test.ex) [127.0.0.1] P=esmtp S=sss
01:01:01 p1240 LOG: delay_delivery MAIN
01:01:01 p1240 no immediate delivery: queued by ACL
+01:01:01 p1240 receive_msg: tidyup
01:01:01 p1240 SMTP>> 250 OK id=10HmaY-000000005vi-0000
01:01:01 p1240 search_tidyup called
01:01:01 p1240 Sender: tester2@test.ex
SMTP>> 252 Administrative prohibition
LOG: MAIN REJECT
H=[ip4.ip4.ip4.ip4] rejected VRFY a@test.again.dns
+SMTP(closed)<<
SMTP>> 421 myhost.test.ex lost input connection
LOG: smtp_connection MAIN
SMTP connection from [ip4.ip4.ip4.ip4] lost D=qqs
LOG: MAIN
<= CALLER@myhost.test.ex U=CALLER P=local S=sss
created log directory TESTSUITE/spool/log
+receive_msg: tidyup
search_tidyup called
exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -DOPT=y -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
Exim version x.yz ....
LOG: MAIN
<= CALLER@myhost.test.ex U=CALLER P=local S=sss
created log directory TESTSUITE/spool/log
+receive_msg: tidyup
search_tidyup called
exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
Exim version x.yz ....
LOG: MAIN
<= CALLER@myhost.test.ex U=CALLER P=local S=sss
created log directory TESTSUITE/spool/log
+receive_msg: tidyup
search_tidyup called
exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
Exim version x.yz ....
LOG: MAIN
<= CALLER@test.ex U=CALLER P=local S=sss
created log directory TESTSUITE/spool/log
+receive_msg: tidyup
search_tidyup called
exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
Exim version x.yz ....
Size of headers = sss
LOG: MAIN
<= <> R=10HmaX-000000005vi-0000 U=CALLER P=local S=sss
+receive_msg: tidyup
search_tidyup called
exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaY-000000005vi-0000
Exim version x.yz ....
LOG: MAIN
<= CALLER@test.ex U=CALLER P=local S=sss
created log directory TESTSUITE/spool/log
+receive_msg: tidyup
search_tidyup called
exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
Exim version x.yz ....
LOG: MAIN
<= CALLER@test.ex U=CALLER P=local S=sss
created log directory TESTSUITE/spool/log
+receive_msg: tidyup
search_tidyup called
exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
Exim version x.yz ....
Size of headers = sss
LOG: MAIN
<= CALLER@test.ex U=CALLER P=local S=sss
+receive_msg: tidyup
search_tidyup called
exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaY-000000005vi-0000
Exim version x.yz ....
Size of headers = sss
LOG: MAIN
<= CALLER@test.ex U=CALLER P=local S=sss
+receive_msg: tidyup
search_tidyup called
exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaZ-000000005vi-0000
Exim version x.yz ....
Size of headers = sss
LOG: MAIN
<= CALLER@test.ex U=CALLER P=local S=sss
+receive_msg: tidyup
search_tidyup called
exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmbA-000000005vi-0000
Exim version x.yz ....
LOG: MAIN
<= CALLER@test.ex U=CALLER P=local S=sss
created log directory TESTSUITE/spool/log
+receive_msg: tidyup
search_tidyup called
exec TESTSUITE/eximdir/exim -DEXIM_PATH=TESTSUITE/eximdir/exim -C TESTSUITE/test-config -d=0xf7715cfd -MCd local-accept-delivery -odi -Mc 10HmaX-000000005vi-0000
Exim version x.yz ....