]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
doveadm auth: Replace mail_user_set_get_storage_set() with direct settings lookup
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Sat, 8 Mar 2025 08:32:05 +0000 (10:32 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Mar 2025 13:01:57 +0000 (13:01 +0000)
src/doveadm/doveadm-auth-server.c
src/doveadm/doveadm-auth.c

index 81d012490fff1fe05f3a7d7d08a0dafe688c0382..baed4ab41d230e0fa524e6e6d28280323f9cf35c 100644 (file)
@@ -6,6 +6,7 @@
 #include "str.h"
 #include "var-expand.h"
 #include "wildcard-match.h"
+#include "settings.h"
 #include "settings-parser.h"
 #include "master-service.h"
 #include "master-service-settings.h"
@@ -212,11 +213,11 @@ static void cmd_user_mail_input_field(struct json_ostream *json_output,
 static void
 cmd_user_mail_print_fields(const struct authtest_input *input,
                           struct mail_user *user,
+                          const struct mail_storage_settings *mail_set,
                           struct json_ostream *json_output,
                           const char *const *userdb_fields,
                           const char *show_field)
 {
-       const struct mail_storage_settings *mail_set;
        const char *key, *value;
        unsigned int i;
 
@@ -230,8 +231,6 @@ cmd_user_mail_print_fields(const struct authtest_input *input,
                                  user->set->mail_gid, show_field);
        cmd_user_mail_input_field(json_output, "home",
                                  user->set->mail_home, show_field);
-
-       mail_set = mail_user_set_get_storage_set(user);
        cmd_user_mail_input_field(json_output, "mail_path",
                                  mail_set->mail_path, show_field);
 
@@ -264,6 +263,7 @@ cmd_user_mail_input(struct mail_storage_service_ctx *storage_service,
 {
        struct mail_storage_service_input service_input;
        struct mail_user *user;
+       const struct mail_storage_settings *mail_set;
        const char *error, *const *userdb_fields;
        int ret;
 
@@ -288,10 +288,16 @@ cmd_user_mail_input(struct mail_storage_service_ctx *storage_service,
                        input->username);
                return 0;
        }
+       if (settings_get(user->event, &mail_storage_setting_parser_info, 0,
+                        &mail_set, &error) < 0) {
+               json_ostream_nwrite_string(json_output, "error", error);
+               mail_user_deinit(&user);
+               return -1;
+       }
 
        if (expand_field == NULL) {
                userdb_fields = mail_storage_service_user_get_userdb_fields(user->service_user);
-               cmd_user_mail_print_fields(input, user,
+               cmd_user_mail_print_fields(input, user, mail_set,
                        json_output, userdb_fields, show_field);
        } else {
                string_t *str = t_str_new(128);
@@ -306,6 +312,7 @@ cmd_user_mail_input(struct mail_storage_service_ctx *storage_service,
                }
        }
 
+       settings_free(mail_set);
        mail_user_deinit(&user);
        return 1;
 }
index c2ba67be0b486a2d638614be297e34b693ce089b..939066c81df3193075127675c5d0a9915886dc73 100644 (file)
@@ -11,6 +11,7 @@
 #include "var-expand.h"
 #include "randgen.h"
 #include "dsasl-client.h"
+#include "settings.h"
 #include "settings-parser.h"
 #include "master-service.h"
 #include "master-service-settings.h"
@@ -692,10 +693,10 @@ static void cmd_user_mail_input_field(const char *key, const char *value,
 static void
 cmd_user_mail_print_fields(const struct authtest_input *input,
                           struct mail_user *user,
+                          const struct mail_storage_settings *mail_set,
                           const char *const *userdb_fields,
                           const char *show_field)
 {
-       const struct mail_storage_settings *mail_set;
        const char *key, *value;
        unsigned int i;
 
@@ -704,8 +705,6 @@ cmd_user_mail_print_fields(const struct authtest_input *input,
        cmd_user_mail_input_field("uid", user->set->mail_uid, show_field);
        cmd_user_mail_input_field("gid", user->set->mail_gid, show_field);
        cmd_user_mail_input_field("home", user->set->mail_home, show_field);
-
-       mail_set = mail_user_set_get_storage_set(user);
        cmd_user_mail_input_field("mail_path", mail_set->mail_path, show_field);
 
        if (userdb_fields != NULL) {
@@ -734,6 +733,7 @@ cmd_user_mail_input(struct mail_storage_service_ctx *storage_service,
 {
        struct mail_storage_service_input service_input;
        struct mail_user *user;
+       const struct mail_storage_settings *mail_set;
        const char *error, *const *userdb_fields;
        int ret;
 
@@ -757,10 +757,17 @@ cmd_user_mail_input(struct mail_storage_service_ctx *storage_service,
                        input->username);
                return 0;
        }
+       if (settings_get(user->event, &mail_storage_setting_parser_info, 0,
+                        &mail_set, &error) < 0) {
+               e_error(event, "%s", error);
+               mail_user_deinit(&user);
+               return -1;
+       }
 
        if (expand_field == NULL) {
                userdb_fields = mail_storage_service_user_get_userdb_fields(user->service_user);
-               cmd_user_mail_print_fields(input, user, userdb_fields, show_field);
+               cmd_user_mail_print_fields(input, user, mail_set,
+                                          userdb_fields, show_field);
        } else {
                string_t *str = t_str_new(128);
                const struct var_expand_params *params =
@@ -772,6 +779,7 @@ cmd_user_mail_input(struct mail_storage_service_ctx *storage_service,
                }
        }
 
+       settings_free(mail_set);
        mail_user_deinit(&user);
        return 1;
 }