summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPhilip Hazel <ph10@hermes.cam.ac.uk>2006-11-20 11:43:40 +0000
committerPhilip Hazel <ph10@hermes.cam.ac.uk>2006-11-20 11:43:40 +0000
commitd6a96edc044b5876b32787374618e44c37e40423 (patch)
treea40c366d45b22ca01290bc320498852eba8a70cd /src
parent0ea2a4686aa26c914cae710b023974bcdc258f27 (diff)
Fix space bug in previous patch for "message" used with "accept".
Diffstat (limited to 'src')
-rw-r--r--src/src/exim.c5
-rw-r--r--src/src/routers/redirect.c6
-rw-r--r--src/src/smtp_in.c23
3 files changed, 20 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 "