]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
global: Stop assuming mail_storage_service_lookup*() is going to read settings
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Fri, 10 Mar 2023 23:11:28 +0000 (01:11 +0200)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 20 Nov 2023 12:20:55 +0000 (14:20 +0200)
src/imap-urlauth/imap-urlauth-worker.c
src/imap/main.c
src/indexer/indexer-worker.c
src/lda/main.c
src/lmtp/main.c
src/pop3/main.c
src/submission/main.c
src/util/script-login.c

index 969e792340d38c3f1fd59387c66abad686bdd8bd..1be86f83d27c058cc07d6ce987ee8f0d8447aaa5 100644 (file)
@@ -983,7 +983,7 @@ int main(int argc, char *argv[])
                MAIL_STORAGE_SERVICE_FLAG_USERDB_LOOKUP |
                MAIL_STORAGE_SERVICE_FLAG_NO_LOG_INIT;
        ARRAY_TYPE (const_string) access_apps;
-       const char *access_user = NULL;
+       const char *access_user = NULL, *error;
        int c;
 
        if (IS_STANDALONE()) {
@@ -1019,6 +1019,9 @@ int main(int argc, char *argv[])
        master_service_init_log_with_pid(master_service);
        master_service_set_die_callback(master_service, imap_urlauth_worker_die);
 
+       if (master_service_settings_read_simple(master_service, &error) < 0)
+               i_fatal("%s", error);
+
        storage_service =
                mail_storage_service_init(master_service,
                                          storage_service_flags);
index d5a8f7f79678cd1e24b7f5125f04a968464e850f..a7dd93d95ae101d2b04df7cdec877c096191c56e 100644 (file)
@@ -495,6 +495,7 @@ int main(int argc, char *argv[])
                 */
                MAIL_STORAGE_SERVICE_FLAG_NO_NAMESPACES;
        const char *username = NULL, *auth_socket_path = "auth-master";
+       const char *error;
        int c;
 
        i_zero(&login_set);
@@ -542,6 +543,9 @@ int main(int argc, char *argv[])
        master_admin_clients_init(&admin_callbacks);
        master_service_set_die_callback(master_service, imap_die);
 
+       if (master_service_settings_read_simple(master_service, &error) < 0)
+               i_fatal("%s", error);
+
        /* plugins may want to add commands, so this needs to be called early */
        commands_init();
        imap_fetch_handlers_init();
@@ -552,7 +556,6 @@ int main(int argc, char *argv[])
        verbose_proctitle = !IS_STANDALONE() &&
                getenv(MASTER_VERBOSE_PROCTITLE_ENV) != NULL;
 
-       const char *error;
        if (t_abspath(auth_socket_path, &login_set.auth_socket_path, &error) < 0)
                i_fatal("t_abspath(%s) failed: %s", auth_socket_path, error);
 
index 7d293acce4b652e4c2d00648e3da7fca0e70f1d1..d3e7d9d53a4cb206f10f7a3966489b78064879d4 100644 (file)
@@ -26,18 +26,11 @@ static void drop_privileges(void)
        struct restrict_access_settings set;
        const char *error;
 
+       if (master_service_settings_read_simple(master_service, &error) < 0)
+               i_fatal("%s", error);
+
        /* by default we don't drop any privileges, but keep running as root. */
        restrict_access_get_env(&set);
-       if (set.uid != 0) {
-               /* open config connection before dropping privileges */
-               struct master_service_settings_input input;
-               struct master_service_settings_output output;
-
-               i_zero(&input);
-               input.service = "indexer-worker";
-               (void)master_service_settings_read(master_service,
-                                                  &input, &output, &error);
-       }
        restrict_access_by_env(RESTRICT_ACCESS_FLAG_ALLOW_ROOT, NULL);
 }
 
index 9bbaf73b73f5491ee2337586c4d91a0d053a76a7..570e0267dd12a5c1f9160d5e11fda95960581269 100644 (file)
@@ -348,7 +348,7 @@ int main(int argc, char *argv[])
 {
        struct mail_deliver_input dinput;
        enum mail_storage_service_flags service_flags = 0;
-       const char *user, *errstr, *path;
+       const char *user, *errstr, *path, *error;
        struct smtp_address *rcpt_to, *final_rcpt_to, *mail_from;
        struct mail_storage_service_ctx *storage_service;
        struct mail_storage_service_input service_input;
@@ -474,6 +474,9 @@ int main(int argc, char *argv[])
                i_fatal_status(EX_USAGE, "Unknown argument: %s", argv[optind]);
        }
 
+       if (master_service_settings_read_simple(master_service, &error) < 0)
+               i_fatal("%s", error);
+
        process_euid = geteuid();
        if ((service_flags & MAIL_STORAGE_SERVICE_FLAG_USERDB_LOOKUP) != 0)
                ;
index ffe9b689a3547971db9ebc47d8a5ea0bccd5cd6f..7d05c3360a283b2ce3518534f51f154cd9a01e31 100644 (file)
@@ -61,17 +61,11 @@ static void drop_privileges(void)
        struct restrict_access_settings set;
        const char *error;
 
+       if (master_service_settings_read_simple(master_service, &error) < 0)
+               i_fatal("%s", error);
+
        /* by default we don't drop any privileges, but keep running as root. */
        restrict_access_get_env(&set);
-       /* open config connection before dropping privileges */
-       struct master_service_settings_input input;
-       struct master_service_settings_output output;
-
-       i_zero(&input);
-       input.service = "lmtp";
-       if (master_service_settings_read(master_service,
-                                        &input, &output, &error) < 0)
-               i_fatal("%s", error);
        restrict_access_by_env(RESTRICT_ACCESS_FLAG_ALLOW_ROOT, NULL);
 }
 
index 01ec964cf00d3d794d3e4bb9eb2b169e7d57da13..d2cd382b527bb7c225b6bc509aa37e9fee09f1ac 100644 (file)
@@ -370,6 +370,7 @@ int main(int argc, char *argv[])
        enum master_service_flags service_flags = 0;
        enum mail_storage_service_flags storage_service_flags = 0;
        const char *username = NULL, *auth_socket_path = "auth-master";
+       const char *error;
        int c;
 
        i_zero(&login_set);
@@ -418,7 +419,9 @@ int main(int argc, char *argv[])
                }
        }
 
-       const char *error;
+       if (master_service_settings_read_simple(master_service, &error) < 0)
+               i_fatal("%s", error);
+
        if (t_abspath(auth_socket_path, &login_set.auth_socket_path, &error) < 0) {
                i_fatal("t_abspath(%s) failed: %s", auth_socket_path, error);
        }
index 978488f7e6824eae859ed6386874fca727a3eea6..c72c133e1dd28da447d1dc8d1db65cb67e645040 100644 (file)
@@ -418,6 +418,9 @@ int main(int argc, char *argv[])
        master_admin_clients_init(&admin_callbacks);
        master_service_set_die_callback(master_service, submission_die);
 
+       if (master_service_settings_read_simple(master_service, &error) < 0)
+               i_fatal("%s", error);
+
        storage_service =
                mail_storage_service_init(master_service,
                                          storage_service_flags);
index f33c296bcfe557ffc4f031105aa4242a1198d8e1..62d40a501c67b79b97c7c6c3630fe33601d65e1e 100644 (file)
@@ -115,6 +115,8 @@ static void client_connected(struct master_service_connection *conn)
                t_strdup_printf("script-login(%s): ", input.username));
 
        if (drop_to_userdb_privileges) {
+               if (master_service_settings_read_simple(master_service, &error) < 0)
+                       i_fatal("%s", error);
                service_ctx = mail_storage_service_init(master_service, flags);
                if (mail_storage_service_lookup(service_ctx, &input, &user, &error) <= 0)
                        i_fatal("%s", error);