summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/src/exim.c5
-rw-r--r--src/src/routers/redirect.c6
-rw-r--r--src/src/smtp_in.c23
-rw-r--r--test/scripts/0000-Basic/05464
-rw-r--r--test/stdout/05466
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:<userx@test.ex>
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