From 79f416d4000aa4192683207aea58a7b12ce66411 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Tue, 17 Nov 2009 14:01:33 -0500 Subject: [PATCH] lmtp: memdup default settings so RCPT TO settings lookups won't overwrite them. --HG-- branch : HEAD --- src/lmtp/client.c | 6 ++---- src/lmtp/lmtp-settings.c | 11 +++++++++++ src/lmtp/lmtp-settings.h | 6 ++++++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/lmtp/client.c b/src/lmtp/client.c index 943d9d3356..db6b5b32cc 100644 --- a/src/lmtp/client.c +++ b/src/lmtp/client.c @@ -14,6 +14,7 @@ #include "mail-storage.h" #include "mail-storage-service.h" #include "main.h" +#include "lmtp-settings.h" #include "lmtp-proxy.h" #include "commands.h" #include "client.h" @@ -148,7 +149,6 @@ static void client_read_settings(struct client *client) { struct mail_storage_service_input input; const char *error; - void **sets; memset(&input, 0, sizeof(input)); input.module = input.service = "lmtp"; @@ -161,9 +161,7 @@ static void client_read_settings(struct client *client) &error) < 0) i_fatal("%s", error); - sets = master_service_settings_get_others(master_service); - client->set = sets[1]; - client->lmtp_set = sets[2]; + lmtp_settings_dup(client->pool, &client->lmtp_set, &client->set); } static void client_generate_session_id(struct client *client) diff --git a/src/lmtp/lmtp-settings.c b/src/lmtp/lmtp-settings.c index 501e34a990..d44f25a718 100644 --- a/src/lmtp/lmtp-settings.c +++ b/src/lmtp/lmtp-settings.c @@ -4,6 +4,7 @@ #include "buffer.h" #include "settings-parser.h" #include "service-settings.h" +#include "master-service.h" #include "master-service-settings.h" #include "lda-settings.h" #include "lmtp-settings.h" @@ -81,3 +82,13 @@ const struct setting_parser_info lmtp_setting_parser_info = { MEMBER(check_func) NULL, MEMBER(dependencies) lmtp_setting_dependencies }; + +void lmtp_settings_dup(pool_t pool, const struct lmtp_settings **lmtp_set_r, + const struct lda_settings **lda_set_r) +{ + void **sets; + + sets = master_service_settings_get_others(master_service); + *lda_set_r = settings_dup(&lda_setting_parser_info, sets[1], pool); + *lmtp_set_r = settings_dup(&lmtp_setting_parser_info, sets[2], pool); +} diff --git a/src/lmtp/lmtp-settings.h b/src/lmtp/lmtp-settings.h index b54b3444fa..defae30f5c 100644 --- a/src/lmtp/lmtp-settings.h +++ b/src/lmtp/lmtp-settings.h @@ -1,10 +1,16 @@ #ifndef LMTP_SETTINGS_H #define LMTP_SETTINGS_H +struct lda_settings; +struct lmtp_settings; + struct lmtp_settings { bool lmtp_proxy; }; extern const struct setting_parser_info lmtp_setting_parser_info; +void lmtp_settings_dup(pool_t pool, const struct lmtp_settings **lmtp_set_r, + const struct lda_settings **lda_set_r); + #endif -- 2.47.3