summaryrefslogtreecommitdiff
path: root/src/src/retry.c
diff options
context:
space:
mode:
authorPhilip Hazel <ph10@hermes.cam.ac.uk>2006-03-09 15:10:16 +0000
committerPhilip Hazel <ph10@hermes.cam.ac.uk>2006-03-09 15:10:16 +0000
commite97957bc478f60d32649b329659d4b72748745c1 (patch)
tree6d852c18138fc8ef147b98e94b1c2b61fbdb43d3 /src/src/retry.c
parent462182534289f0484d05688616f39943abd2f9a4 (diff)
downloadexim4-e97957bc478f60d32649b329659d4b72748745c1.tar.gz
Add new errors mail_4xx, data_4xx, lost_connection, tls_required.
Diffstat (limited to 'src/src/retry.c')
-rw-r--r--src/src/retry.c25
1 files changed, 18 insertions, 7 deletions
diff --git a/src/src/retry.c b/src/src/retry.c
index dbfd3cee8..ca61e5c0c 100644
--- a/src/src/retry.c
+++ b/src/src/retry.c
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/retry.c,v 1.8 2006/02/16 16:37:57 ph10 Exp $ */
+/* $Cambridge: exim/src/src/retry.c,v 1.9 2006/03/09 15:10:16 ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
@@ -414,20 +414,31 @@ for (yield = retries; yield != NULL; yield = yield->next)
continue;
}
- /* Handle 4xx responses to RCPT. The code that was received is in the 2nd
- least significant byte of more_errno (with 400 subtracted). The required
- value is coded in the 2nd least significant byte of the yield->more_errno
- field as follows:
+ /* The TLSREQUIRED error also covers TLSFAILURE. These are subtly different
+ errors, but not worth separating at this level. */
+
+ else if (yield->basic_errno == ERRNO_TLSREQUIRED)
+ {
+ if (basic_errno != ERRNO_TLSREQUIRED && basic_errno != ERRNO_TLSFAILURE)
+ continue;
+ }
+
+ /* Handle 4xx responses to MAIL, RCPT, or DATA. The code that was received
+ is in the 2nd least significant byte of more_errno (with 400 subtracted).
+ The required value is coded in the 2nd least significant byte of the
+ yield->more_errno field as follows:
255 => any 4xx code
>= 100 => the decade must match the value less 100
< 100 => the exact value must match
*/
- else if (yield->basic_errno == ERRNO_RCPT4XX)
+ else if (yield->basic_errno == ERRNO_MAIL4XX ||
+ yield->basic_errno == ERRNO_RCPT4XX ||
+ yield->basic_errno == ERRNO_DATA4XX)
{
int wanted;
- if (basic_errno != ERRNO_RCPT4XX) continue;
+ if (basic_errno != yield->basic_errno) continue;
wanted = (yield->more_errno >> 8) & 255;
if (wanted != 255)
{