]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
config: doveconf - When asking for specific settings, show also defaults
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Wed, 6 Nov 2024 13:52:55 +0000 (15:52 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Fri, 17 Jan 2025 08:40:00 +0000 (10:40 +0200)
src/config/config-parser.c
src/config/config-parser.h
src/config/doveconf.c

index 0d85d4aac6e85cac692e310bda942b0fbe945ae5..23e0dc5cde62dc2d6ac08bce1cae746ad795f3ca 100644 (file)
@@ -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;
index 2ae9a375de987b0d95bc24660bb85e9f9ba97318..f8f146dcc68de1bb4c02bea2f72442c30d9063c8 100644 (file)
@@ -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
index 13075c6354f40d90d8b55d2ad03b60ee523fb718..c84df2976cb114f244b07cbf8376e98cfbb78005 100644 (file)
@@ -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 */