]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-settings, global: Change setting_parser_info.setting_apply() API
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 27 Nov 2023 12:52:25 +0000 (14:52 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Fri, 17 Jan 2025 08:39:57 +0000 (10:39 +0200)
Change override boolean to flags enum.

src/lib-settings/settings-parser.h
src/lib-settings/settings.c
src/lib-storage/mail-storage-settings.c

index 8f2d586725116d888f0680c99d51d330bea03bd7..7dc36d63d2ac58bb73cd2f6325f72d787bd486ad 100644 (file)
@@ -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
index 60fae7c3b5ecb2bd062b9a172ed2bc5d07430f3a..4140a0497b2b81c4897881e695f74d9593fc0e9a 100644 (file)
@@ -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",
index ddb5578b37f6075d6fa8cbd5ca4a60ad8376ad07..f0951bdce3dbefad85423f96ceef8ceda4d10758 100644 (file)
 #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;