summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Harris <jgh146exb@wizmail.org>2021-05-15 15:41:43 +0100
committerJeremy Harris <jgh146exb@wizmail.org>2021-06-28 00:30:02 +0100
commitc314dfcd9e33e02f409d86d06045cb6053fe4140 (patch)
tree60b12ef843d39c9098f3a3d7eef71f4fbb5016de
parentba0919f4ecac24b94a452d46b7d5dd6c9454e7e8 (diff)
downloadexim4-c314dfcd9e33e02f409d86d06045cb6053fe4140.tar.gz
smtp tpt fallback_hosts list must be mutable
-rw-r--r--src/src/readconf.c29
-rw-r--r--src/src/transports/smtp.c5
2 files changed, 17 insertions, 17 deletions
diff --git a/src/src/readconf.c b/src/src/readconf.c
index c8f25aaaf..5d14be811 100644
--- a/src/src/readconf.c
+++ b/src/src/readconf.c
@@ -3673,6 +3673,16 @@ return NULL; /* never obeyed */
+static void
+driver_init_fini(driver_instance * d, const uschar * class)
+{
+if (!d->driver_name)
+ log_write(0, LOG_PANIC_DIE|LOG_CONFIG,
+ "no driver defined for %s \"%s\"", class, d->name);
+(d->info->init)(d);
+}
+
+
/*************************************************
* Initialize driver list *
*************************************************/
@@ -3733,11 +3743,8 @@ while ((buffer = get_config_line()))
{
if (d)
{
- if (!d->driver_name)
- log_write(0, LOG_PANIC_DIE|LOG_CONFIG,
- "no driver defined for %s \"%s\"", class, d->name);
/* s is using big_buffer, so this call had better not */
- (d->info->init)(d);
+ driver_init_fini(d, class);
d = NULL;
}
if (!macro_read_assignment(buffer)) exim_exit(EXIT_FAILURE);
@@ -3753,12 +3760,7 @@ while ((buffer = get_config_line()))
/* Finish off initializing the previous driver. */
if (d)
- {
- if (!d->driver_name)
- log_write(0, LOG_PANIC_DIE|LOG_CONFIG,
- "no driver defined for %s \"%s\"", class, d->name);
- (d->info->init)(d);
- }
+ driver_init_fini(d, class);
/* Check that we haven't already got a driver of this name */
@@ -3822,12 +3824,7 @@ while ((buffer = get_config_line()))
/* Run the initialization function for the final driver. */
if (d)
- {
- if (!d->driver_name)
- log_write(0, LOG_PANIC_DIE|LOG_CONFIG,
- "no driver defined for %s \"%s\"", class, d->name);
- (d->info->init)(d);
- }
+ driver_init_fini(d, class);
}
diff --git a/src/src/transports/smtp.c b/src/src/transports/smtp.c
index e2b2250ad..dfb4a9284 100644
--- a/src/src/transports/smtp.c
+++ b/src/src/transports/smtp.c
@@ -355,6 +355,7 @@ void
smtp_transport_init(transport_instance *tblock)
{
smtp_transport_options_block *ob = SOB tblock->options_block;
+int old_pool = store_pool;
/* Retry_use_local_part defaults FALSE if unset */
@@ -390,7 +391,9 @@ if (ob->hosts_override && ob->hosts) tblock->overrides_hosts = TRUE;
/* If there are any fallback hosts listed, build a chain of host items
for them, but do not do any lookups at this time. */
-host_build_hostlist(&(ob->fallback_hostlist), ob->fallback_hosts, FALSE);
+store_pool = POOL_PERM;
+host_build_hostlist(&ob->fallback_hostlist, ob->fallback_hosts, FALSE);
+store_pool = old_pool;
}