From: Philip Hazel Date: Tue, 20 Feb 2007 11:37:16 +0000 (+0000) Subject: $smtp_command and $smtp_command_argument were incomplete for MAIL X-Git-Tag: exim-4_67~31 X-Git-Url: https://git.exim.org/exim.git/commitdiff_plain/ca86f471bf30f4630e96e24f6c13de269f380f41 $smtp_command and $smtp_command_argument were incomplete for MAIL commands with extra options such as SIZE. --- diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog index 33ecda9d3..96832f604 100644 --- a/doc/doc-txt/ChangeLog +++ b/doc/doc-txt/ChangeLog @@ -1,4 +1,4 @@ -$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.482 2007/02/20 09:53:41 ph10 Exp $ +$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.483 2007/02/20 11:37:16 ph10 Exp $ Change log file for Exim from version 4.21 ------------------------------------------- @@ -118,6 +118,11 @@ MH/03 Made $recipients available in local_scan(). local_scan() already has better access to the recipient list through recipients_list[], but $recipients can be useful in postmaster-provided expansion strings. +PH/28 The $smtp_command and $smtp_command_argument variables were not correct + in the case of a MAIL command with additional options following the + address, for example: MAIL FROM: SIZE=1234. The option settings + were accidentally chopped off. + Exim version 4.66 ----------------- diff --git a/src/src/smtp_in.c b/src/src/smtp_in.c index d0ac95967..c9c5842b1 100644 --- a/src/src/smtp_in.c +++ b/src/src/smtp_in.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/smtp_in.c,v 1.53 2007/01/30 11:45:20 ph10 Exp $ */ +/* $Cambridge: exim/src/src/smtp_in.c,v 1.54 2007/02/20 11:37:16 ph10 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * @@ -126,6 +126,9 @@ static int unknown_command_count; static int sync_cmd_limit; static int smtp_write_error = 0; +static uschar *smtp_data_buffer; +static uschar *smtp_cmd_data; + /* We need to know the position of RSET, HELO, EHLO, AUTH, and STARTTLS. Their final fields of all except AUTH are forced TRUE at the start of a new message setup, to allow one of each between messages that is not counted as a nonmail @@ -552,11 +555,16 @@ for (p = cmd_list; p < cmd_list_end; p++) !sender_host_notsocket) /* Really is a socket */ return BADSYN_CMD; - /* Point after the command, but don't skip over leading spaces till after - the following test, so that if it fails, the command name can easily be - logged. */ + /* The variables $smtp_command and $smtp_command_argument point into the + unmodified input buffer. A copy of the latter is taken for actual + processing, so that it can be chopped up into separate parts if necessary, + for example, when processing a MAIL command options such as SIZE that can + follow the sender address. */ smtp_cmd_argument = smtp_cmd_buffer + p->len; + while (isspace(*smtp_cmd_argument)) smtp_cmd_argument++; + Ustrcpy(smtp_data_buffer, smtp_cmd_argument); + smtp_cmd_data = smtp_data_buffer; /* Count non-mail commands from those hosts that are controlled in this way. The default is all hosts. We don't waste effort checking the list @@ -574,11 +582,10 @@ for (p = cmd_list; p < cmd_list_end; p++) return TOO_MANY_NONMAIL_CMD; } - /* Get the data pointer over leading spaces and return; if there is data - for a command that does not expect it, give the error centrally here. */ + /* If there is data for a command that does not expect it, generate the + error here. */ - while (isspace(*smtp_cmd_argument)) smtp_cmd_argument++; - return (p->has_arg || *smtp_cmd_argument == 0)? p->cmd : BADARG_CMD; + return (p->has_arg || *smtp_cmd_data == 0)? p->cmd : BADARG_CMD; } } @@ -839,7 +846,7 @@ return yield; * Extract SMTP command option * *************************************************/ -/* This function picks the next option setting off the end of smtp_cmd_argument. It +/* This function picks the next option setting off the end of smtp_cmd_data. It is called for MAIL FROM and RCPT TO commands, to pick off the optional ESMTP things that can appear there. @@ -854,11 +861,11 @@ static BOOL extract_option(uschar **name, uschar **value) { uschar *n; -uschar *v = smtp_cmd_argument + Ustrlen(smtp_cmd_argument) -1; +uschar *v = smtp_cmd_data + Ustrlen(smtp_cmd_data) - 1; while (isspace(*v)) v--; v[1] = 0; -while (v > smtp_cmd_argument && *v != '=' && !isspace(*v)) v--; +while (v > smtp_cmd_data && *v != '=' && !isspace(*v)) v--; if (*v != '=') return FALSE; n = v; @@ -1022,7 +1029,7 @@ while (done <= 0) case HELO_CMD: case EHLO_CMD: - check_helo(smtp_cmd_argument); + check_helo(smtp_cmd_data); /* Fall through */ case RSET_CMD: @@ -1042,7 +1049,7 @@ while (done <= 0) /* The function moan_smtp_batch() does not return. */ moan_smtp_batch(smtp_cmd_buffer, "503 Sender already given"); - if (smtp_cmd_argument[0] == 0) + if (smtp_cmd_data[0] == 0) /* The function moan_smtp_batch() does not return. */ moan_smtp_batch(smtp_cmd_buffer, "501 MAIL FROM must have an address operand"); @@ -1053,8 +1060,8 @@ while (done <= 0) /* Apply SMTP rewrite */ raw_sender = ((rewrite_existflags & rewrite_smtp) != 0)? - rewrite_one(smtp_cmd_argument, rewrite_smtp|rewrite_smtp_sender, NULL, FALSE, - US"", global_rewrite_rules) : smtp_cmd_argument; + rewrite_one(smtp_cmd_data, rewrite_smtp|rewrite_smtp_sender, NULL, FALSE, + US"", global_rewrite_rules) : smtp_cmd_data; /* Extract the address; the TRUE flag allows <> as valid */ @@ -1097,7 +1104,7 @@ while (done <= 0) /* The function moan_smtp_batch() does not return. */ moan_smtp_batch(smtp_cmd_buffer, "503 No sender yet given"); - if (smtp_cmd_argument[0] == 0) + if (smtp_cmd_data[0] == 0) /* The function moan_smtp_batch() does not return. */ moan_smtp_batch(smtp_cmd_buffer, "501 RCPT TO must have an address operand"); @@ -1112,8 +1119,8 @@ while (done <= 0) recipient address */ recipient = ((rewrite_existflags & rewrite_smtp) != 0)? - rewrite_one(smtp_cmd_argument, rewrite_smtp, NULL, FALSE, US"", - global_rewrite_rules) : smtp_cmd_argument; + rewrite_one(smtp_cmd_data, rewrite_smtp, NULL, FALSE, US"", + global_rewrite_rules) : smtp_cmd_data; /* rfc821_domains = TRUE; << no longer needed */ recipient = parse_extract_address(recipient, &errmess, &start, &end, @@ -1264,12 +1271,13 @@ tls_advertised = FALSE; acl_var_c = NULL; -/* Allow for trailing 0 in the command buffer. */ +/* Allow for trailing 0 in the command and data buffers. */ -smtp_cmd_buffer = (uschar *)malloc(smtp_cmd_buffer_size + 1); +smtp_cmd_buffer = (uschar *)malloc(2*smtp_cmd_buffer_size + 2); if (smtp_cmd_buffer == NULL) log_write(0, LOG_MAIN|LOG_PANIC_DIE, "malloc() failed for SMTP command buffer"); +smtp_data_buffer = smtp_cmd_buffer + smtp_cmd_buffer_size + 1; /* For batched input, the protocol setting can be overridden from the command line by a trusted caller. */ @@ -2041,9 +2049,9 @@ uschar *what = #endif (where == ACL_WHERE_PREDATA)? US"DATA" : (where == ACL_WHERE_DATA)? US"after DATA" : - (smtp_cmd_argument == NULL)? + (smtp_cmd_data == NULL)? string_sprintf("%s in \"connect\" ACL", acl_wherenames[where]) : - string_sprintf("%s %s", acl_wherenames[where], smtp_cmd_argument); + string_sprintf("%s %s", acl_wherenames[where], smtp_cmd_data); if (drop) rc = FAIL; @@ -2465,8 +2473,8 @@ while (done <= 0) /* Find the name of the requested authentication mechanism. */ - s = smtp_cmd_argument; - while ((c = *smtp_cmd_argument) != 0 && !isspace(c)) + s = smtp_cmd_data; + while ((c = *smtp_cmd_data) != 0 && !isspace(c)) { if (!isalnum(c) && c != '-' && c != '_') { @@ -2474,16 +2482,16 @@ while (done <= 0) US"invalid character in authentication mechanism name"); goto COMMAND_LOOP; } - smtp_cmd_argument++; + smtp_cmd_data++; } /* If not at the end of the line, we must be at white space. Terminate the name and move the pointer on to any data that may be present. */ - if (*smtp_cmd_argument != 0) + if (*smtp_cmd_data != 0) { - *smtp_cmd_argument++ = 0; - while (isspace(*smtp_cmd_argument)) smtp_cmd_argument++; + *smtp_cmd_data++ = 0; + while (isspace(*smtp_cmd_data)) smtp_cmd_data++; } /* Search for an authentication mechanism which is configured for use @@ -2519,7 +2527,7 @@ while (done <= 0) expand_nmax = 0; expand_nlength[0] = 0; /* $0 contains nothing */ - c = (au->info->servercode)(au, smtp_cmd_argument); + c = (au->info->servercode)(au, smtp_cmd_data); if (au->set_id != NULL) set_id = expand_string(au->set_id); expand_nmax = -1; /* Reset numeric variables */ for (i = 0; i < AUTH_VARS; i++) auth_vars[i] = NULL; /* Reset $auth */ @@ -2638,7 +2646,7 @@ while (done <= 0) /* Reject the HELO if its argument was invalid or non-existent. A successful check causes the argument to be saved in malloc store. */ - if (!check_helo(smtp_cmd_argument)) + if (!check_helo(smtp_cmd_data)) { smtp_printf("501 Syntactically invalid %s argument(s)\r\n", hello); @@ -2668,7 +2676,7 @@ while (done <= 0) if (!sender_host_unknown) { BOOL old_helo_verified = helo_verified; - uschar *p = smtp_cmd_argument; + uschar *p = smtp_cmd_data; while (*p != 0 && !isspace(*p)) { *p = tolower(*p); p++; } *p = 0; @@ -2986,7 +2994,7 @@ while (done <= 0) break; } - if (smtp_cmd_argument[0] == 0) + if (smtp_cmd_data[0] == 0) { done = synprot_error(L_smtp_protocol_error, 501, NULL, US"MAIL must have an address operand"); @@ -3145,8 +3153,8 @@ while (done <= 0) TRUE flag allows "<>" as a sender address. */ raw_sender = ((rewrite_existflags & rewrite_smtp) != 0)? - rewrite_one(smtp_cmd_argument, rewrite_smtp, NULL, FALSE, US"", - global_rewrite_rules) : smtp_cmd_argument; + rewrite_one(smtp_cmd_data, rewrite_smtp, NULL, FALSE, US"", + global_rewrite_rules) : smtp_cmd_data; /* rfc821_domains = TRUE; << no longer needed */ raw_sender = @@ -3156,7 +3164,7 @@ while (done <= 0) if (raw_sender == NULL) { - done = synprot_error(L_smtp_syntax_error, 501, smtp_cmd_argument, errmess); + done = synprot_error(L_smtp_syntax_error, 501, smtp_cmd_data, errmess); break; } @@ -3216,7 +3224,7 @@ while (done <= 0) else { smtp_printf("501 %s: sender address must contain a domain\r\n", - smtp_cmd_argument); + smtp_cmd_data); log_write(L_smtp_syntax_error, LOG_MAIN|LOG_REJECT, "unqualified sender rejected: <%s> %s%s", @@ -3285,7 +3293,7 @@ while (done <= 0) /* Check for an operand */ - if (smtp_cmd_argument[0] == 0) + if (smtp_cmd_data[0] == 0) { done = synprot_error(L_smtp_syntax_error, 501, NULL, US"RCPT must have an address operand"); @@ -3297,8 +3305,8 @@ while (done <= 0) as a recipient address */ recipient = ((rewrite_existflags & rewrite_smtp) != 0)? - rewrite_one(smtp_cmd_argument, rewrite_smtp, NULL, FALSE, US"", - global_rewrite_rules) : smtp_cmd_argument; + rewrite_one(smtp_cmd_data, rewrite_smtp, NULL, FALSE, US"", + global_rewrite_rules) : smtp_cmd_data; /* rfc821_domains = TRUE; << no longer needed */ recipient = parse_extract_address(recipient, &errmess, &start, &end, @@ -3307,7 +3315,7 @@ while (done <= 0) if (recipient == NULL) { - done = synprot_error(L_smtp_syntax_error, 501, smtp_cmd_argument, errmess); + done = synprot_error(L_smtp_syntax_error, 501, smtp_cmd_data, errmess); rcpt_fail_count++; break; } @@ -3337,7 +3345,7 @@ while (done <= 0) { rcpt_fail_count++; smtp_printf("501 %s: recipient address must contain a domain\r\n", - smtp_cmd_argument); + smtp_cmd_data); log_write(L_smtp_syntax_error, LOG_MAIN|LOG_REJECT, "unqualified recipient rejected: " "<%s> %s%s", recipient, host_and_ident(TRUE), @@ -3500,7 +3508,7 @@ while (done <= 0) uschar *s = NULL; /* rfc821_domains = TRUE; << no longer needed */ - address = parse_extract_address(smtp_cmd_argument, &errmess, &start, &end, + address = parse_extract_address(smtp_cmd_data, &errmess, &start, &end, &recipient_domain, FALSE); /* rfc821_domains = FALSE; << no longer needed */ @@ -3546,7 +3554,7 @@ while (done <= 0) { BOOL save_log_testing_mode = log_testing_mode; address_test_mode = log_testing_mode = TRUE; - (void) verify_address(deliver_make_addr(smtp_cmd_argument, FALSE), + (void) verify_address(deliver_make_addr(smtp_cmd_data, FALSE), smtp_out, vopt_is_recipient | vopt_qualify | vopt_expn, -1, -1, -1, NULL, NULL, NULL); address_test_mode = FALSE; @@ -3782,7 +3790,7 @@ while (done <= 0) /* Compute the serialization key for this command. */ - etrn_serialize_key = string_sprintf("etrn-%s\n", smtp_cmd_argument); + etrn_serialize_key = string_sprintf("etrn-%s\n", smtp_cmd_data); /* If a command has been specified for running as a result of ETRN, we permit any argument to ETRN. If not, only the # standard form is permitted, @@ -3794,7 +3802,7 @@ while (done <= 0) uschar *error; BOOL rc; etrn_command = smtp_etrn_command; - deliver_domain = smtp_cmd_argument; + deliver_domain = smtp_cmd_data; rc = transport_set_up_command(&argv, smtp_etrn_command, TRUE, 0, NULL, US"ETRN processing", &error); deliver_domain = NULL; @@ -3811,7 +3819,7 @@ while (done <= 0) else { - if (*smtp_cmd_argument++ != '#') + if (*smtp_cmd_data++ != '#') { done = synprot_error(L_smtp_syntax_error, 501, NULL, US"argument must begin with #"); @@ -3819,7 +3827,7 @@ while (done <= 0) } etrn_command = US"exim -R"; argv = child_exec_exim(CEE_RETURN_ARGV, TRUE, NULL, TRUE, 2, US"-R", - smtp_cmd_argument); + smtp_cmd_data); } /* If we are host-testing, don't actually do anything. */ @@ -3842,7 +3850,7 @@ while (done <= 0) if (smtp_etrn_serialize && !enq_start(etrn_serialize_key)) { - smtp_printf("458 Already processing %s\r\n", smtp_cmd_argument); + smtp_printf("458 Already processing %s\r\n", smtp_cmd_data); break; } @@ -3952,10 +3960,12 @@ while (done <= 0) case TOO_MANY_NONMAIL_CMD: + s = smtp_cmd_buffer; + while (*s != 0 && !isspace(*s)) s++; incomplete_transaction_log(US"too many non-mail commands"); log_write(0, LOG_MAIN|LOG_REJECT, "SMTP call from %s dropped: too many " "nonmail commands (last was \"%.*s\")", host_and_ident(FALSE), - smtp_cmd_argument - smtp_cmd_buffer, smtp_cmd_buffer); + s - smtp_cmd_buffer, smtp_cmd_buffer); smtp_printf("554 Too many nonmail commands\r\n"); done = 1; /* Pretend eof - drops connection */ break; diff --git a/test/confs/0021 b/test/confs/0021 index 5ff787e28..da9293312 100644 --- a/test/confs/0021 +++ b/test/confs/0021 @@ -65,7 +65,7 @@ mail: senders = ok@test3 accept senders = ok@test1 : ok@test3 verify = sender - logwrite = :main,reject: mail accepted + logwrite = :main,reject: mail accepted "$smtp_command" "$smtp_command_argument" rcpt: accept senders = +ok_senders diff --git a/test/log/0021 b/test/log/0021 index 77ae6a64f..39eb9610d 100644 --- a/test/log/0021 +++ b/test/log/0021 @@ -19,7 +19,7 @@ 1999-03-02 09:44:33 H=[10.9.8.7] U=CALLER rejected connection in "connect" ACL 1999-03-02 09:44:33 10.9.8.8 accepted by connect ACL 1999-03-02 09:44:33 H=[10.9.8.8] U=CALLER rejected MAIL -1999-03-02 09:44:33 mail accepted +1999-03-02 09:44:33 mail accepted "mail from:" "" 1999-03-02 09:44:33 H=[10.9.8.9] U=CALLER rejected connection in "connect" ACL: forcibly dropped 1999-03-02 09:44:33 U=CALLER rejected connection in "connect" ACL 1999-03-02 09:44:33 10.9.8.10 accepted by connect ACL @@ -27,7 +27,7 @@ 1999-03-02 09:44:33 ACL "warn" with "message" setting found in a non-message (EHLO or HELO) ACL: cannot specify header lines here: message ignored 1999-03-02 09:44:33 H=(x.y.z) [10.9.8.10] U=CALLER rejected EHLO or HELO x.y.z 1999-03-02 09:44:33 10.9.8.8 accepted by connect ACL -1999-03-02 09:44:33 mail accepted +1999-03-02 09:44:33 mail accepted "mail from:" "" 1999-03-02 09:44:33 10HmbH-0005vi-00 <= ok@test3 H=[10.9.8.8] U=CALLER P=smtp S=sss 1999-03-02 09:44:33 10HmbH-0005vi-00 => x R=accept T=appendfile 1999-03-02 09:44:33 10HmbH-0005vi-00 Completed @@ -39,3 +39,11 @@ 1999-03-02 09:44:33 10HmbJ-0005vi-00 <= <> R=10HmbB-0005vi-00 U=EXIMUSER P=local S=sss 1999-03-02 09:44:33 10HmbJ-0005vi-00 => userx R=accept T=appendfile 1999-03-02 09:44:33 10HmbJ-0005vi-00 Completed +1999-03-02 09:44:33 10.9.8.8 accepted by connect ACL +1999-03-02 09:44:33 H=(test.ex) [10.9.8.8] U=CALLER Warning: This warning is from a HELO ACL (command ehlo test.ex) +1999-03-02 09:44:33 ACL "warn" with "message" setting found in a non-message (EHLO or HELO) ACL: cannot specify header lines here: message ignored +1999-03-02 09:44:33 H=(test.ex) [10.9.8.8] U=CALLER rejected EHLO or HELO test.ex +1999-03-02 09:44:33 mail accepted "mail from: SIZE=1234" " SIZE=1234" +1999-03-02 09:44:33 10HmbK-0005vi-00 <= ok@test3 H=[10.9.8.8] U=CALLER P=smtp S=sss +1999-03-02 09:44:33 10HmbK-0005vi-00 => x R=accept T=appendfile +1999-03-02 09:44:33 10HmbK-0005vi-00 Completed diff --git a/test/mail/0021.x b/test/mail/0021.x index 9dd43af38..12fcf69e8 100644 --- a/test/mail/0021.x +++ b/test/mail/0021.x @@ -8,3 +8,13 @@ X-ACL-Warn: added header line Some message +From ok@test3 Tue Mar 02 09:44:33 1999 +Received: from [10.9.8.8] (ident=CALLER) + by myhost.test.ex with smtp (Exim x.yz) + (envelope-from ) + id 10HmbK-0005vi-00 + for x@y; Tue, 2 Mar 1999 09:44:33 +0000 +X-ACL-Warn: added header line + +Some message + diff --git a/test/paniclog/0021 b/test/paniclog/0021 index 3a0cd7fb8..dae415203 100644 --- a/test/paniclog/0021 +++ b/test/paniclog/0021 @@ -2,3 +2,5 @@ 1999-03-02 09:44:33 rcpt accepted 1999-03-02 09:44:33 ACL "warn" with "message" setting found in a non-message (EHLO or HELO) ACL: cannot specify header lines here: message ignored 1999-03-02 09:44:33 rcpt accepted +1999-03-02 09:44:33 ACL "warn" with "message" setting found in a non-message (EHLO or HELO) ACL: cannot specify header lines here: message ignored +1999-03-02 09:44:33 rcpt accepted diff --git a/test/rejectlog/0021 b/test/rejectlog/0021 index a2e943557..8fdad8e45 100644 --- a/test/rejectlog/0021 +++ b/test/rejectlog/0021 @@ -30,11 +30,11 @@ F From: ok@test4 Date: Tue, 2 Mar 1999 09:44:33 +0000 1999-03-02 09:44:33 H=[10.9.8.7] U=CALLER rejected connection in "connect" ACL 1999-03-02 09:44:33 H=[10.9.8.8] U=CALLER rejected MAIL -1999-03-02 09:44:33 mail accepted +1999-03-02 09:44:33 mail accepted "mail from:" "" 1999-03-02 09:44:33 H=[10.9.8.9] U=CALLER rejected connection in "connect" ACL: forcibly dropped 1999-03-02 09:44:33 U=CALLER rejected connection in "connect" ACL 1999-03-02 09:44:33 H=(x.y.z) [10.9.8.10] U=CALLER rejected EHLO or HELO x.y.z -1999-03-02 09:44:33 mail accepted +1999-03-02 09:44:33 mail accepted "mail from:" "" 1999-03-02 09:44:33 10HmbA-0005vi-00 F= rejected by non-SMTP ACL: don't like sender userx@test1 Envelope-from: Envelope-to: @@ -55,3 +55,5 @@ P Received: from CALLER by myhost.test.ex with local (Exim x.yz) I Message-Id: F From: userx@test1 Date: Tue, 2 Mar 1999 09:44:33 +0000 +1999-03-02 09:44:33 H=(test.ex) [10.9.8.8] U=CALLER rejected EHLO or HELO test.ex +1999-03-02 09:44:33 mail accepted "mail from: SIZE=1234" " SIZE=1234" diff --git a/test/scripts/0000-Basic/0021 b/test/scripts/0000-Basic/0021 index 71b334130..8fbf94837 100644 --- a/test/scripts/0000-Basic/0021 +++ b/test/scripts/0000-Basic/0021 @@ -60,3 +60,12 @@ exim -DBR=no_bounce_return_body -odi -f userx@test1 userx Test message 1. . **** +exim -odi -bs -oMa 10.9.8.8 +ehlo test.ex +mail from: SIZE=1234 +rcpt to: +data +Some message +. +quit +**** diff --git a/test/stderr/0021 b/test/stderr/0021 index c1ebc4d0c..70391fd12 100644 --- a/test/stderr/0021 +++ b/test/stderr/0021 @@ -58,9 +58,10 @@ check verify = sender ok in "!bad"? yes (end of list) ----------- end verify ------------ sender ok@test1 verified ok -check logwrite = :main,reject: mail accepted +check logwrite = :main,reject: mail accepted "$smtp_command" "$smtp_command_argument" + = :main,reject: mail accepted "mail from:" "" LOG: MAIN REJECT - mail accepted + mail accepted "mail from:" "" accept: condition test succeeded using ACL "rcpt" processing "accept" @@ -142,9 +143,10 @@ check verify = sender ok in "!bad"? yes (end of list) ----------- end verify ------------ sender ok@test3 verified ok -check logwrite = :main,reject: mail accepted +check logwrite = :main,reject: mail accepted "$smtp_command" "$smtp_command_argument" + = :main,reject: mail accepted "mail from:" "" LOG: MAIN REJECT - mail accepted + mail accepted "mail from:" "" accept: condition test succeeded using ACL "rcpt" processing "accept" @@ -184,3 +186,5 @@ LOG: MAIN LOG: smtp_connection MAIN SMTP connection from CALLER closed by QUIT >>>>>>>>>>>>>>>> Exim pid=pppp terminating with rc=0 >>>>>>>>>>>>>>>> +1999-03-02 09:44:33 ACL "warn" with "message" setting found in a non-message (EHLO or HELO) ACL: cannot specify header lines here: message ignored +1999-03-02 09:44:33 rcpt accepted diff --git a/test/stdout/0021 b/test/stdout/0021 index 490d13fad..5fff92b0a 100644 --- a/test/stdout/0021 +++ b/test/stdout/0021 @@ -16,3 +16,10 @@ 354 Enter message, ending with "." on a line by itself 250 OK id=10HmbH-0005vi-00 221 myhost.test.ex closing connection +220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 +550 Administrative prohibition +250 OK +250 Accepted +354 Enter message, ending with "." on a line by itself +250 OK id=10HmbK-0005vi-00 +221 myhost.test.ex closing connection