}
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;
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;
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++) ;
/* 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
}
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: ");
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;