]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-master, lib-storage: Move -o parameter checks inside master_service_set()
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Tue, 7 Mar 2023 11:53:43 +0000 (13:53 +0200)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 20 Nov 2023 12:20:55 +0000 (14:20 +0200)
src/lib-master/master-service-settings.c
src/lib-master/master-service-settings.h
src/lib-storage/mail-storage-service.c

index 1ef85a54d7dc3cb8102c5acae83a24d2cfa4731e..a24f97e4b7d02a0bcf7feec3389dd4cae9748eba 100644 (file)
@@ -153,6 +153,10 @@ setting_filter_parse(const char *set_name, const char *set_value,
        return TRUE;
 }
 
+static bool
+master_service_set_has_config_override(struct master_service *service,
+                                      const char *key);
+
 static void
 master_service_set_process_shutdown_filter_wrapper(struct event_filter *filter)
 {
@@ -1036,11 +1040,20 @@ master_service_settings_get_or_fatal(struct event *event,
 
 int master_service_set(struct master_service_settings_instance *instance,
                       const char *key, const char *value,
-                      enum master_service_set_type type ATTR_UNUSED,
-                      const char **error_r)
+                      enum master_service_set_type type, const char **error_r)
 {
        int ret;
 
+       if (type == MASTER_SERVICE_SET_TYPE_USERDB &&
+           master_service_set_has_config_override(master_service, key)) {
+               /* this setting was already overridden with -o parameter */
+               e_debug(master_service->event,
+                       "Ignoring overridden (-o) userdb setting: %s",
+                       key);
+               return 1;
+       }
+
+
        ret = settings_parse_keyvalue(instance->parser, key, value);
        if (ret <= 0)
                *error_r = settings_parser_get_error(instance->parser);
@@ -1054,8 +1067,9 @@ master_service_settings_find(struct master_service_settings_instance *instance,
        return settings_parse_get_value(instance->parser, key, type_r);
 }
 
-bool master_service_set_has_config_override(struct master_service *service,
-                                           const char *key)
+static bool
+master_service_set_has_config_override(struct master_service *service,
+                                      const char *key)
 {
        const char *override, *key_root;
        bool ret;
index f2c79348b5c6c376d77b71b85de20ad277a28be6..dbb9db90abcf188c9f449b2e47f5bb68eb214d41 100644 (file)
@@ -211,11 +211,6 @@ const void *
 master_service_settings_find(struct master_service_settings_instance *instance,
                             const char *key, enum setting_type *type_r);
 
-/* Returns TRUE if -o key=value parameter was used. Setting keys in overrides
-   and parameter are unaliased before comparing. */
-bool master_service_set_has_config_override(struct master_service *service,
-                                           const char *key);
-
 /* Return a new instance for settings. */
 struct master_service_settings_instance *
 master_service_settings_instance_new(struct master_service *service);
index 1e4c3980dc9bbe04cde23f13d495d9d013b1338b..07c2c37150527741b8e4ab0d4f366ec974ccbf4f 100644 (file)
@@ -99,21 +99,12 @@ static void set_keyval(struct mail_storage_service_user *user,
 {
        const char *error;
 
-       if (master_service_set_has_config_override(user->service_ctx->service, key)) {
-               /* this setting was already overridden with -o parameter */
-               e_debug(user->event,
-                       "Ignoring overridden (-o) userdb setting: %s",
-                       key);
-               return;
-       }
-
        if (master_service_set(user->set_instance, key, value,
                               MASTER_SERVICE_SET_TYPE_USERDB, &error) < 0)
                i_fatal("Invalid userdb input %s=%s: %s", key, value, error);
 }
 
-static int set_keyvalue(struct mail_storage_service_ctx *ctx,
-                       struct mail_storage_service_user *user,
+static int set_keyvalue(struct mail_storage_service_user *user,
                        const char *key, const char *value,
                        const char **error_r)
 {
@@ -140,13 +131,6 @@ static int set_keyvalue(struct mail_storage_service_ctx *ctx,
                old_value = master_service_settings_find(user->set_instance, key, &type);
        }
 
-       if (master_service_set_has_config_override(ctx->service, key)) {
-               /* this setting was already overridden with -o parameter */
-               e_debug(user->event, "Ignoring overridden (-o) userdb setting: %s",
-                       key);
-               return 1;
-       }
-
        if (append_value != NULL) {
                if (old_value == NULL || type != SET_STR) {
                        *error_r = "'+' can only be used for strings";
@@ -194,8 +178,7 @@ static bool validate_chroot(const struct mail_user_settings *user_set,
 }
 
 static int
-user_reply_handle(struct mail_storage_service_ctx *ctx,
-                 struct mail_storage_service_user *user,
+user_reply_handle(struct mail_storage_service_user *user,
                  const struct auth_user_reply *reply,
                  const char **error_r)
 {
@@ -275,7 +258,7 @@ user_reply_handle(struct mail_storage_service_ctx *ctx,
                } else if (strcmp(key, "admin") == 0) {
                        user->admin = strchr("1Yy", value[0]) != NULL;
                } else T_BEGIN {
-                       ret = set_keyvalue(ctx, user, key, value, &error);
+                       ret = set_keyvalue(user, key, value, &error);
                } T_END_PASS_STR_IF(ret < 0, &error);
                if (ret < 0)
                        break;
@@ -1331,7 +1314,7 @@ mail_storage_service_lookup_real(struct mail_storage_service_ctx *ctx,
                                                  &reply, &error);
                if (ret2 == 0) {
                        array_sort(&reply.extra_fields, extra_field_key_cmp_p);
-                       ret2 = user_reply_handle(ctx, user, &reply, &error);
+                       ret2 = user_reply_handle(user, &reply, &error);
                }
 
                if (ret2 < 0) {