]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-settings: Add SETTING_APPLY_FLAG_NO_EXPAND
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 27 Nov 2023 12:56:11 +0000 (14:56 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 12 Feb 2025 10:34:10 +0000 (12:34 +0200)
src/lib-settings/settings-parser.h
src/lib-settings/settings.c

index 7dc36d63d2ac58bb73cd2f6325f72d787bd486ad..95a11904b45f692c338533a9a06dcb15555b7511 100644 (file)
@@ -44,6 +44,8 @@ enum setting_flags {
 enum setting_apply_flags {
        /* Used when applying override settings (e.g. userdb or -o parameter) */
        SETTING_APPLY_FLAG_OVERRIDE = BIT(0),
+       /* SETTINGS_GET_FLAG_NO_EXPAND is being used. */
+       SETTING_APPLY_FLAG_NO_EXPAND = BIT(1),
 };
 
 #define SETTING_DEFINE_LIST_END { 0, 0, NULL, 0, NULL, NULL }
index 4140a0497b2b81c4897881e695f74d9593fc0e9a..06441538461af3a23c66c105df0a7aec898da4c5 100644 (file)
@@ -499,9 +499,12 @@ settings_mmap_apply_key(struct settings_apply_ctx *ctx, unsigned int key_idx,
                key = t_strdup_printf("%s/%s", key, list_key);
 
        /* call settings_apply() before variable expansion */
+       enum setting_apply_flags apply_flags =
+               (ctx->flags & SETTINGS_GET_FLAG_NO_EXPAND) == 0 ? 0 :
+               SETTING_APPLY_FLAG_NO_EXPAND;
        if (ctx->info->setting_apply != NULL &&
            !ctx->info->setting_apply(ctx->event, ctx->set_struct, key, &value,
-                                     0, error_r)) {
+                                     apply_flags, error_r)) {
                *error_r = t_strdup_printf("Invalid setting %s=%s: %s",
                                           key, orig_value, *error_r);
                return -1;
@@ -544,6 +547,9 @@ static int
 settings_mmap_apply_defaults(struct settings_apply_ctx *ctx,
                             const char **error_r)
 {
+       enum setting_apply_flags apply_flags = SETTING_APPLY_FLAG_OVERRIDE |
+               ((ctx->flags & SETTINGS_GET_FLAG_NO_EXPAND) == 0 ? 0 :
+                SETTING_APPLY_FLAG_NO_EXPAND);
        const char *error;
        unsigned int key_idx;
 
@@ -564,9 +570,7 @@ 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,
-                                             SETTING_APPLY_FLAG_OVERRIDE,
-                                             &error))
+                                             &value, apply_flags, &error))
                        i_panic("BUG: Failed to apply default setting %s=%s: %s",
                                key, value, error);
 
@@ -1339,6 +1343,9 @@ settings_instance_override(struct settings_apply_ctx *ctx,
        const struct failure_context failure_ctx = {
                .type = LOG_TYPE_DEBUG
        };
+       enum setting_apply_flags apply_flags = SETTING_APPLY_FLAG_OVERRIDE |
+               ((ctx->flags & SETTINGS_GET_FLAG_NO_EXPAND) == 0 ? 0 :
+                SETTING_APPLY_FLAG_NO_EXPAND);
 
        bool seen_filter = FALSE;
        array_foreach_modifiable(&ctx->overrides, set_elem) {
@@ -1428,9 +1435,7 @@ 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,
-                                             SETTING_APPLY_FLAG_OVERRIDE,
-                                             error_r)) {
+                                             &value, apply_flags, error_r)) {
                        *error_r = t_strdup_printf(
                                "Failed to override configuration from %s: "
                                "Invalid %s=%s: %s",