From: Timo Sirainen Date: Tue, 7 Mar 2023 11:53:43 +0000 (+0200) Subject: lib-master, lib-storage: Move -o parameter checks inside master_service_set() X-Git-Tag: 2.4.0~2241 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9e35c225fff6d1380b806370771002ea396b2648;p=thirdparty%2Fdovecot%2Fcore.git lib-master, lib-storage: Move -o parameter checks inside master_service_set() --- diff --git a/src/lib-master/master-service-settings.c b/src/lib-master/master-service-settings.c index 1ef85a54d7..a24f97e4b7 100644 --- a/src/lib-master/master-service-settings.c +++ b/src/lib-master/master-service-settings.c @@ -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; diff --git a/src/lib-master/master-service-settings.h b/src/lib-master/master-service-settings.h index f2c79348b5..dbb9db90ab 100644 --- a/src/lib-master/master-service-settings.h +++ b/src/lib-master/master-service-settings.h @@ -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); diff --git a/src/lib-storage/mail-storage-service.c b/src/lib-storage/mail-storage-service.c index 1e4c3980dc..07c2c37150 100644 --- a/src/lib-storage/mail-storage-service.c +++ b/src/lib-storage/mail-storage-service.c @@ -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) {