From d6a96edc044b5876b32787374618e44c37e40423 Mon Sep 17 00:00:00 2001 From: Philip Hazel Date: Mon, 20 Nov 2006 11:43:40 +0000 Subject: [PATCH] Fix space bug in previous patch for "message" used with "accept". --- src/src/exim.c | 5 +++-- src/src/routers/redirect.c | 6 +++--- src/src/smtp_in.c | 23 ++++++++++++++--------- test/scripts/0000-Basic/0546 | 4 ++++ test/stdout/0546 | 6 ++++++ 5 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/src/exim.c b/src/src/exim.c index 6f53c1ffb..60e5b5261 100644 --- a/src/src/exim.c +++ b/src/src/exim.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/exim.c,v 1.49 2006/11/13 11:56:41 ph10 Exp $ */ +/* $Cambridge: exim/src/src/exim.c,v 1.50 2006/11/20 11:43:40 ph10 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * @@ -1498,7 +1498,8 @@ regex_ismsgid = regex_must_compile(US"^(?:[^\\W_]{6}-){2}[^\\W_]{2}$", FALSE, TRUE); /* Precompile the regular expression that is used for matching an SMTP error -code, possibly extended, at the start of an error message. */ +code, possibly extended, at the start of an error message. Note that the +terminating whitespace character is included. */ regex_smtp_code = regex_must_compile(US"^\\d\\d\\d\\s(?:\\d\\.\\d\\d?\\d?\\.\\d\\d?\\d?\\s)?", diff --git a/src/src/routers/redirect.c b/src/src/routers/redirect.c index 2a9d5e3b2..e22699216 100644 --- a/src/src/routers/redirect.c +++ b/src/src/routers/redirect.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/routers/redirect.c,v 1.17 2006/07/13 13:53:33 ph10 Exp $ */ +/* $Cambridge: exim/src/src/routers/redirect.c,v 1.18 2006/11/20 11:43:40 ph10 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * @@ -736,8 +736,8 @@ switch (frc) int ovector[3]; if (ob->forbid_smtp_code && pcre_exec(regex_smtp_code, NULL, CS addr->message, - Ustrlen(addr->message), 0, PCRE_EOPT, - ovector, sizeof(ovector)/sizeof(int)) >= 0) + Ustrlen(addr->message), 0, PCRE_EOPT, + ovector, sizeof(ovector)/sizeof(int)) >= 0) { DEBUG(D_route) debug_printf("SMTP code at start of error message " "is ignored because forbid_smtp_code is set\n"); diff --git a/src/src/smtp_in.c b/src/src/smtp_in.c index 97b721e55..371ed5bb7 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.47 2006/11/14 16:40:36 ph10 Exp $ */ +/* $Cambridge: exim/src/src/smtp_in.c,v 1.48 2006/11/20 11:43:40 ph10 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * @@ -1605,7 +1605,7 @@ else int codelen = 3; s = user_msg; smtp_message_code(&code, &codelen, &s, NULL); - if (codelen > 3) + if (codelen > 4) { esc = code + 4; esclen = codelen - 4; @@ -1793,7 +1793,7 @@ output nothing for non-final calls, and only the first line for anything else. Arguments: code SMTP code, may involve extended status codes - codelen length of smtp code; if > 3 there's an ESC + codelen length of smtp code; if > 4 there's an ESC final FALSE if the last line isn't the final line msg message text, possibly containing newlines @@ -1808,7 +1808,7 @@ uschar *esc = US""; if (!final && no_multiline_responses) return; -if (codelen > 3) +if (codelen > 4) { esc = code + 4; esclen = codelen - 4; @@ -1856,9 +1856,12 @@ is actually going to be used (the original one). This function is global because it is called from receive.c as well as within this module. +Note that the code length returned includes the terminating whitespace +character, which is always included in the regex match. + Arguments: code SMTP code, may involve extended status codes - codelen length of smtp code; if > 3 there's an ESC + codelen length of smtp code; if > 4 there's an ESC msg message text log_msg optional log message, to be adjusted with the new SMTP code @@ -2650,7 +2653,7 @@ while (done <= 0) tls_advertised = FALSE; #endif - smtp_code = US"250"; /* Default response code */ + smtp_code = US"250 "; /* Default response code plus space*/ if (user_msg == NULL) { s = string_sprintf("%.3s %s Hello %s%s%s", @@ -2672,14 +2675,16 @@ while (done <= 0) } } - /* A user-supplied EHLO greeting may not contain more than one line */ + /* A user-supplied EHLO greeting may not contain more than one line. Note + that the code returned by smtp_message_code() includes the terminating + whitespace character. */ else { char *ss; - int codelen = 3; + int codelen = 4; smtp_message_code(&smtp_code, &codelen, &user_msg, NULL); - s = string_sprintf("%.*s %s", codelen, smtp_code, user_msg); + s = string_sprintf("%.*s%s", codelen, smtp_code, user_msg); if ((ss = strpbrk(CS s, "\r\n")) != NULL) { log_write(0, LOG_MAIN|LOG_PANIC, "EHLO/HELO response must not contain " diff --git a/test/scripts/0000-Basic/0546 b/test/scripts/0000-Basic/0546 index 1486d3538..4374776c3 100644 --- a/test/scripts/0000-Basic/0546 +++ b/test/scripts/0000-Basic/0546 @@ -16,4 +16,8 @@ mail from:<> rcpt to: quit **** +exim -bs -DHELO_MSG='299 With code' +ehlo a.b.c +quit +**** no_msglog_check diff --git a/test/stdout/0546 b/test/stdout/0546 index 0865c5f17..7f123f85f 100644 --- a/test/stdout/0546 +++ b/test/stdout/0546 @@ -18,3 +18,9 @@ 299 OK 250 Bad number 221 the.local.host.name closing connection +220 the.local.host.name ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000 +299-With code +299-SIZE 52428800 +299-PIPELINING +299 HELP +221 the.local.host.name closing connection -- 2.30.2