]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lmtp: memdup default settings so RCPT TO settings lookups won't overwrite them.
authorTimo Sirainen <tss@iki.fi>
Tue, 17 Nov 2009 19:01:33 +0000 (14:01 -0500)
committerTimo Sirainen <tss@iki.fi>
Tue, 17 Nov 2009 19:01:33 +0000 (14:01 -0500)
--HG--
branch : HEAD

src/lmtp/client.c
src/lmtp/lmtp-settings.c
src/lmtp/lmtp-settings.h

index 943d9d33560be870766f32e92506c4afcde1d8d8..db6b5b32ccd682bfc7c032f6fb2f6e68f23f3e77 100644 (file)
@@ -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)
index 501e34a9907127908279ee0a0151f788253c5f36..d44f25a7182cf0e3c924a5df866878103c6a3b8f 100644 (file)
@@ -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);
+}
index b54b3444faa17657889f1245baf0889def901270..defae30f5c27c7d5f23b90c306e51f7d40bc8da6 100644 (file)
@@ -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