From: Timo Sirainen Date: Mon, 27 Nov 2023 12:52:25 +0000 (+0200) Subject: lib-settings, global: Change setting_parser_info.setting_apply() API X-Git-Tag: 2.4.1~1268 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=38dbcc3aa2fe8e7c14490e7e9c6e67bee235ff59;p=thirdparty%2Fdovecot%2Fcore.git lib-settings, global: Change setting_parser_info.setting_apply() API Change override boolean to flags enum. --- diff --git a/src/lib-settings/settings-parser.h b/src/lib-settings/settings-parser.h index 8f2d586725..7dc36d63d2 100644 --- a/src/lib-settings/settings-parser.h +++ b/src/lib-settings/settings-parser.h @@ -41,6 +41,11 @@ enum setting_flags { SET_FLAG_HIDDEN = BIT(0), }; +enum setting_apply_flags { + /* Used when applying override settings (e.g. userdb or -o parameter) */ + SETTING_APPLY_FLAG_OVERRIDE = BIT(0), +}; + #define SETTING_DEFINE_LIST_END { 0, 0, NULL, 0, NULL, NULL } struct setting_define { @@ -127,11 +132,10 @@ struct setting_parser_info { /* This is called for every setting that is parsed. *value is already the final pointer stored into the settings struct. If it's modified, - it should usually be allocated from set->pool. override=TRUE for - settings overridden via userdb/cli. */ + it should usually be allocated from set->pool. */ bool (*setting_apply)(struct event *event, void *set, const char *key, const char **value, - bool override, const char **error_r); + enum setting_apply_flags flags, const char **error_r); /* This is called after %variable expansion. */ bool (*check_func)(void *set, pool_t pool, const char **error_r); /* The event parameter can be used with settings_get*() to access other diff --git a/src/lib-settings/settings.c b/src/lib-settings/settings.c index 60fae7c3b5..4140a0497b 100644 --- a/src/lib-settings/settings.c +++ b/src/lib-settings/settings.c @@ -501,7 +501,7 @@ settings_mmap_apply_key(struct settings_apply_ctx *ctx, unsigned int key_idx, /* call settings_apply() before variable expansion */ if (ctx->info->setting_apply != NULL && !ctx->info->setting_apply(ctx->event, ctx->set_struct, key, &value, - FALSE, error_r)) { + 0, error_r)) { *error_r = t_strdup_printf("Invalid setting %s=%s: %s", key, orig_value, *error_r); return -1; @@ -564,7 +564,9 @@ settings_mmap_apply_defaults(struct settings_apply_ctx *ctx, if (ctx->info->setting_apply != NULL && !ctx->info->setting_apply(ctx->event, ctx->set_struct, key, - &value, TRUE, &error)) + &value, + SETTING_APPLY_FLAG_OVERRIDE, + &error)) i_panic("BUG: Failed to apply default setting %s=%s: %s", key, value, error); @@ -1426,7 +1428,9 @@ settings_instance_override(struct settings_apply_ctx *ctx, } if (ctx->info->setting_apply != NULL && !ctx->info->setting_apply(ctx->event, ctx->set_struct, key, - &value, TRUE, error_r)) { + &value, + SETTING_APPLY_FLAG_OVERRIDE, + error_r)) { *error_r = t_strdup_printf( "Failed to override configuration from %s: " "Invalid %s=%s: %s", diff --git a/src/lib-storage/mail-storage-settings.c b/src/lib-storage/mail-storage-settings.c index ddb5578b37..f0951bdce3 100644 --- a/src/lib-storage/mail-storage-settings.c +++ b/src/lib-storage/mail-storage-settings.c @@ -17,11 +17,11 @@ #include "mail-storage-settings.h" #include "iostream-ssl.h" -static bool mail_storage_settings_apply(struct event *event, void *_set, const char *key, const char **value, bool override, const char **error_r); +static bool mail_storage_settings_apply(struct event *event, void *_set, const char *key, const char **value, enum setting_apply_flags, const char **error_r); static bool mail_storage_settings_ext_check(struct event *event, void *_set, pool_t pool, const char **error_r); static bool namespace_settings_ext_check(struct event *event, void *_set, pool_t pool, const char **error_r); static bool mailbox_settings_check(void *_set, pool_t pool, const char **error_r); -static bool mail_user_settings_apply(struct event *event, void *_set, const char *key, const char **value, bool override, const char **error_r); +static bool mail_user_settings_apply(struct event *event, void *_set, const char *key, const char **value, enum setting_apply_flags, const char **error_r); static bool mail_user_settings_check(void *_set, pool_t pool, const char **error_r); #undef DEF @@ -463,13 +463,15 @@ mail_storage_settings_check_namespaces(struct event *event, static bool mail_storage_settings_apply(struct event *event ATTR_UNUSED, void *_set, const char *key, const char **value, - bool override, const char **error_r ATTR_UNUSED) + enum setting_apply_flags flags, + const char **error_r ATTR_UNUSED) { struct mail_storage_settings *set = _set; if (strcmp(key, "mail_location") == 0) { set->unexpanded_mail_location = *value; - set->unexpanded_mail_location_override = override; + set->unexpanded_mail_location_override = + (flags & SETTING_APPLY_FLAG_OVERRIDE) != 0; } return TRUE; } @@ -788,7 +790,7 @@ static bool parse_postmaster_address(const char *address, pool_t pool, static bool mail_user_settings_apply(struct event *event ATTR_UNUSED, void *_set, const char *key, const char **value, - bool override ATTR_UNUSED, + enum setting_apply_flags flags ATTR_UNUSED, const char **error_r ATTR_UNUSED) { struct mail_user_settings *set = _set;