]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lmtp: Connect to anvil earlier while still running as root
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Tue, 26 Apr 2016 15:51:55 +0000 (18:51 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 29 Apr 2016 19:08:23 +0000 (22:08 +0300)
This was a problem only with lmtp_rcpt_check_quota=yes.

src/lmtp/commands.c

index 480e9f2d53bbcfeec71cf6bbebcd08a046c6f58f..5d3f9c3e5fb3a6e5d61d6285aae7fb1af7c31ed8 100644 (file)
@@ -179,6 +179,14 @@ parse_xtext(struct client *client, const char *value)
        return p_strdup(client->state_pool, str_c(str));
 }
 
+static void lmtp_anvil_init(void)
+{
+       if (anvil == NULL) {
+               const char *path = t_strdup_printf("%s/anvil", base_dir);
+               anvil = anvil_client_init(path, NULL, 0);
+       }
+}
+
 int cmd_mail(struct client *client, const char *args)
 {
        const char *addr, *const *argv;
@@ -212,6 +220,11 @@ int cmd_mail(struct client *client, const char *args)
        client_send_line(client, "250 2.1.0 OK");
        client_state_set(client, "MAIL FROM", client->state.mail_from);
 
+       if (client->lmtp_set->lmtp_user_concurrency_limit > 0) {
+               /* connect to anvil before dropping privileges */
+               lmtp_anvil_init();
+       }
+
        client->state.mail_from_timeval = ioloop_timeval;
        return 0;
 }
@@ -604,14 +617,6 @@ static void rcpt_anvil_lookup_callback(const char *reply, void *context)
        }
 }
 
-static void lmtp_anvil_init(void)
-{
-       if (anvil == NULL) {
-               const char *path = t_strdup_printf("%s/anvil", base_dir);
-               anvil = anvil_client_init(path, NULL, 0);
-       }
-}
-
 int cmd_rcpt(struct client *client, const char *args)
 {
        struct mail_recipient *rcpt;
@@ -720,7 +725,6 @@ int cmd_rcpt(struct client *client, const char *args)
                const char *query = t_strconcat("LOOKUP\t",
                        master_service_get_name(master_service),
                        "/", str_tabescape(username), NULL);
-               lmtp_anvil_init();
                client->state.anvil_queries++;
                rcpt->anvil_query = anvil_client_query(anvil, query,
                                        rcpt_anvil_lookup_callback, rcpt);