From: Timo Sirainen Date: Mon, 3 Mar 2025 13:12:34 +0000 (+0200) Subject: doveconf: Add -U parameter to ignore unknown settings in config file X-Git-Tag: 2.4.1~100 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=42766fc3df8e304043bb298a5d49df2b21d70b23;p=thirdparty%2Fdovecot%2Fcore.git doveconf: Add -U parameter to ignore unknown settings in config file --- diff --git a/src/config/config-parser-private.h b/src/config/config-parser-private.h index 3e9729a2ff..9416f0b10e 100644 --- a/src/config/config-parser-private.h +++ b/src/config/config-parser-private.h @@ -105,6 +105,7 @@ struct config_parser_context { bool hide_errors:1; bool delay_errors:1; bool hide_obsolete_warnings:1; + bool ignore_unknown:1; }; extern void (*hook_config_parser_begin)(struct config_parser_context *ctx); diff --git a/src/config/config-parser.c b/src/config/config-parser.c index e1d3d13798..751ffb0fc2 100644 --- a/src/config/config-parser.c +++ b/src/config/config-parser.c @@ -1029,6 +1029,8 @@ again: } ctx->cur_section->filter_parser = orig_filter_parser; if (ret == 0) { + if (ctx->ignore_unknown) + return 0; ctx->error = p_strconcat(ctx->pool, "Unknown setting: ", get_setting_full_path(ctx, key), NULL); return -1; @@ -2707,6 +2709,8 @@ void config_parser_apply_line(struct config_parser_context *ctx, break; } if (hash_table_lookup(ctx->all_keys, key) == NULL) { + if (ctx->ignore_unknown) + break; ctx->error = p_strdup_printf(ctx->pool, "Unknown section name: %s", key); break; @@ -2851,6 +2855,7 @@ int config_parse_file(const char *path, enum config_parse_flags flags, ctx.hide_obsolete_warnings = (flags & CONFIG_PARSE_FLAG_HIDE_OBSOLETE_WARNINGS) != 0; ctx.delay_errors = (flags & CONFIG_PARSE_FLAG_DELAY_ERRORS) != 0; + ctx.ignore_unknown = (flags & CONFIG_PARSE_FLAG_IGNORE_UNKNOWN) != 0; hash_table_create(&ctx.all_keys, ctx.pool, 500, str_hash, strcmp); for (count = 0; all_infos[count] != NULL; count++) ; diff --git a/src/config/config-parser.h b/src/config/config-parser.h index 307c6ecd0d..7c1bd128b6 100644 --- a/src/config/config-parser.h +++ b/src/config/config-parser.h @@ -35,6 +35,8 @@ enum config_parse_flags { /* Merge default filters with non-default filters. This can be useful for doveconf output. */ CONFIG_PARSE_FLAG_MERGE_DEFAULT_FILTERS = BIT(9), + /* Ignore unknown settings in the config file. */ + CONFIG_PARSE_FLAG_IGNORE_UNKNOWN = BIT(10), }; /* Used to track changed settings for a setting_parser_info. Initially only diff --git a/src/config/doveconf.c b/src/config/doveconf.c index 161a206d3f..41b646f87f 100644 --- a/src/config/doveconf.c +++ b/src/config/doveconf.c @@ -1051,7 +1051,7 @@ int main(int argc, char *argv[]) } master_service = master_service_init("config", master_service_flags, - &argc, &argv, "aCdf:FhHI:nNPwxs"); + &argc, &argv, "aCdf:FhHI:nNPwxsU"); orig_config_path = t_strdup(master_service_get_config_path(master_service)); i_set_failure_prefix("doveconf: "); @@ -1108,6 +1108,9 @@ int main(int argc, char *argv[]) case 's': scope = CONFIG_DUMP_SCOPE_ALL_WITH_HIDDEN; break; + case 'U': + flags |= CONFIG_PARSE_FLAG_IGNORE_UNKNOWN; + break; case 'w': flags |= CONFIG_PARSE_FLAG_HIDE_OBSOLETE_WARNINGS; break;