From: Timo Sirainen Date: Wed, 6 Nov 2024 13:52:55 +0000 (+0200) Subject: config: doveconf - When asking for specific settings, show also defaults X-Git-Tag: 2.4.0~288 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=975a4081a11d4e49fc6fd7bf93a8b271e1d548c3;p=thirdparty%2Fdovecot%2Fcore.git config: doveconf - When asking for specific settings, show also defaults --- diff --git a/src/config/config-parser.c b/src/config/config-parser.c index 0d85d4aac6..23e0dc5cde 100644 --- a/src/config/config-parser.c +++ b/src/config/config-parser.c @@ -2012,6 +2012,19 @@ config_parse_finish_includes(struct config_parser_context *ctx, return 0; } +static void +config_parse_merge_default_filters(struct config_parser_context *ctx, + struct config_parsed *config) +{ + struct config_filter_parser *root_parser, *defaults_parser; + + root_parser = array_idx_elem(&ctx->all_filter_parsers, 0); + defaults_parser = array_idx_elem(&ctx->all_filter_parsers, 1); + i_assert(config_filter_is_empty_defaults(&defaults_parser->filter)); + + config_filters_merge(ctx, config, root_parser, defaults_parser); +} + static void config_parse_finish_service_defaults(struct config_parser_context *ctx) { @@ -2101,6 +2114,10 @@ config_parse_finish(struct config_parser_context *ctx, ctx->path, error); } + /* Merge defaults into main settings after running settings checks. */ + if (ret == 0 && (flags & CONFIG_PARSE_FLAG_MERGE_DEFAULT_FILTERS) != 0) + config_parse_merge_default_filters(ctx, new_config); + if (ret < 0 && (flags & CONFIG_PARSE_FLAG_RETURN_BROKEN_CONFIG) == 0) { config_parsed_free(&new_config); return -1; diff --git a/src/config/config-parser.h b/src/config/config-parser.h index 2ae9a375de..f8f146dcc6 100644 --- a/src/config/config-parser.h +++ b/src/config/config-parser.h @@ -34,6 +34,9 @@ enum config_parse_flags { /* Expand include @groups after parsing settings. This can be useful for doveconf output. */ CONFIG_PARSE_FLAG_MERGE_GROUP_FILTERS = BIT(8), + /* Merge default filters with non-default filters. This can be useful + for doveconf output. */ + CONFIG_PARSE_FLAG_MERGE_DEFAULT_FILTERS = BIT(9), }; /* 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 13075c6354..c84df2976c 100644 --- a/src/config/doveconf.c +++ b/src/config/doveconf.c @@ -1049,6 +1049,7 @@ int main(int argc, char *argv[]) case 'd': scope = CONFIG_DUMP_SCOPE_ALL_WITHOUT_HIDDEN; dump_defaults = TRUE; + flags |= CONFIG_PARSE_FLAG_MERGE_DEFAULT_FILTERS; break; case 'F': dump_full = TRUE; @@ -1116,7 +1117,8 @@ int main(int argc, char *argv[]) if (scope == CONFIG_DUMP_SCOPE_ALL_WITHOUT_HIDDEN) scope = CONFIG_DUMP_SCOPE_ALL_WITH_HIDDEN; flags |= CONFIG_PARSE_FLAG_PREFIXES_IN_FILTERS | - CONFIG_PARSE_FLAG_MERGE_GROUP_FILTERS; + CONFIG_PARSE_FLAG_MERGE_GROUP_FILTERS | + CONFIG_PARSE_FLAG_MERGE_DEFAULT_FILTERS; } else if (!simple_output) { /* print the config file path before parsing it, so in case of errors it's still shown */