git://git.exim.org
/
exim.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Call initgroups() when dropping privilege, in order that Exim runs with
[exim.git]
/
src
/
src
/
readconf.c
diff --git
a/src/src/readconf.c
b/src/src/readconf.c
index b860b96d3308724a7dde4a4948ff041ecdf776be..d1911a7b634289e69c31162613b89e9c8a496208 100644
(file)
--- a/
src/src/readconf.c
+++ b/
src/src/readconf.c
@@
-1,4
+1,4
@@
-/* $Cambridge: exim/src/src/readconf.c,v 1.
17 2006/02/07 11:19:00
ph10 Exp $ */
+/* $Cambridge: exim/src/src/readconf.c,v 1.
22 2006/03/09 15:10:16
ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
/*************************************************
* Exim - an Internet mail transport agent *
@@
-812,6
+812,10
@@
for (;;)
}
*t = 0;
}
*t = 0;
+ if (*ss != '/')
+ log_write(0, LOG_PANIC_DIE|LOG_CONFIG_IN, ".include specifies a non-"
+ "absolute path \"%s\"", ss);
+
if (include_if_exists != 0 && (Ustat(ss, &statbuf) != 0)) continue;
save = store_get(sizeof(config_file_item));
if (include_if_exists != 0 && (Ustat(ss, &statbuf) != 0)) continue;
save = store_get(sizeof(config_file_item));
@@
-2011,6
+2015,12
@@
readconf_printtime(int t)
int s, m, h, d, w;
uschar *p = time_buffer;
int s, m, h, d, w;
uschar *p = time_buffer;
+if (t < 0)
+ {
+ *p++ = '-';
+ t = -t;
+ }
+
s = t % 60;
t /= 60;
m = t % 60;
s = t % 60;
t /= 60;
m = t % 60;
@@
-2809,10
+2819,19
@@
wanted. */
if (timezone_string != NULL && *timezone_string == 0) timezone_string = NULL;
if (timezone_string != NULL && *timezone_string == 0) timezone_string = NULL;
+/* The max retry interval must not be greater than 24 hours. */
+
+if (retry_interval_max > 24*60*60) retry_interval_max = 24*60*60;
+
/* remote_max_parallel must be > 0 */
if (remote_max_parallel <= 0) remote_max_parallel = 1;
/* remote_max_parallel must be > 0 */
if (remote_max_parallel <= 0) remote_max_parallel = 1;
+/* Save the configured setting of freeze_tell, so we can re-instate it at the
+start of a new SMTP message. */
+
+freeze_tell_config = freeze_tell;
+
/* The primary host name may be required for expansion of spool_directory
and log_file_path, so make sure it is set asap. It is obtained from uname(),
but if that yields an unqualified value, make a FQDN by using gethostbyname to
/* The primary host name may be required for expansion of spool_directory
and log_file_path, so make sure it is set asap. It is obtained from uname(),
but if that yields an unqualified value, make a FQDN by using gethostbyname to
@@
-3402,7
+3421,9
@@
else if (len == 7 && strncmpic(pp, US"timeout", len) == 0)
}
}
}
}
-else if (strncmpic(pp, US"rcpt_4", 6) == 0)
+else if (strncmpic(pp, US"mail_4", 6) == 0 ||
+ strncmpic(pp, US"rcpt_4", 6) == 0 ||
+ strncmpic(pp, US"data_4", 6) == 0)
{
BOOL bad = FALSE;
int x = 255; /* means "any 4xx code" */
{
BOOL bad = FALSE;
int x = 255; /* means "any 4xx code" */
@@
-3419,18
+3440,24
@@
else if (strncmpic(pp, US"rcpt_4", 6) == 0)
else if (a != 'x' || b != 'x') bad = TRUE;
}
else if (a != 'x' || b != 'x') bad = TRUE;
}
- if (bad) return US"rcpt_4 must be followed by xx, dx, or dd, where "
- "x is literal and d is any digit";
+ if (bad)
+ return string_sprintf("%.4s_4 must be followed by xx, dx, or dd, where "
+ "x is literal and d is any digit", pp);
- *basic_errno = ERRNO_RCPT4XX;
+ *basic_errno = (*pp == 'm')? ERRNO_MAIL4XX :
+ (*pp == 'r')? ERRNO_RCPT4XX : ERRNO_DATA4XX;
*more_errno = x << 8;
}
else if (len == 4 && strncmpic(pp, US"auth", len) == 0 &&
strncmpic(q+1, US"failed", p-q-1) == 0)
*more_errno = x << 8;
}
else if (len == 4 && strncmpic(pp, US"auth", len) == 0 &&
strncmpic(q+1, US"failed", p-q-1) == 0)
- {
*basic_errno = ERRNO_AUTHFAIL;
*basic_errno = ERRNO_AUTHFAIL;
- }
+
+else if (strcmpic(pp, US"lost_connection") == 0)
+ *basic_errno = ERRNO_SMTPCLOSED;
+
+else if (strcmpic(pp, US"tls_required") == 0)
+ *basic_errno = ERRNO_TLSREQUIRED;
else if (len != 1 || Ustrncmp(pp, "*", 1) != 0)
return string_sprintf("unknown or malformed retry error \"%.*s\"", p-pp, pp);
else if (len != 1 || Ustrncmp(pp, "*", 1) != 0)
return string_sprintf("unknown or malformed retry error \"%.*s\"", p-pp, pp);