From: Timo Sirainen Date: Fri, 9 Oct 2009 22:45:21 +0000 (-0400) Subject: config: Conflict handling fix. X-Git-Tag: 2.0.alpha1~28 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=04ce187ba9c7c98b4f3fbaa833a2dc929e4281b8;p=thirdparty%2Fdovecot%2Fcore.git config: Conflict handling fix. --HG-- branch : HEAD --- diff --git a/src/config/config-filter.c b/src/config/config-filter.c index 249376ee48..9843f6d53b 100644 --- a/src/config/config-filter.c +++ b/src/config/config-filter.c @@ -132,9 +132,9 @@ config_filter_is_superset(const struct config_filter *sup, { /* assume that both of the filters match the same subset, so we don't need to compare IPs and service name. */ - if (sup->local_bits < filter->local_bits) + if (sup->local_bits > filter->local_bits) return FALSE; - if (sup->remote_bits < filter->remote_bits) + if (sup->remote_bits > filter->remote_bits) return FALSE; if (sup->service != NULL && filter->service == NULL) return FALSE; @@ -185,8 +185,8 @@ int config_filter_parsers_get(struct config_filter_context *ctx, pool_t pool, /* apply the changes from rest of the matches */ for (i = 1; src[i] != NULL; i++) { - if (config_filter_is_superset(&src[i-1]->filter, - &src[i]->filter)) + if (config_filter_is_superset(&src[i]->filter, + &src[i-1]->filter)) error_p = NULL; else error_p = &error; diff --git a/src/config/config-parser.c b/src/config/config-parser.c index 2ff711678d..3ff1cd8c29 100644 --- a/src/config/config-parser.c +++ b/src/config/config-parser.c @@ -166,9 +166,15 @@ config_add_new_parser(struct parser_context *ctx) parser = p_new(ctx->pool, struct config_filter_parser, 1); parser->filter = cur_section->filter; - parser->file_and_line = - p_strdup_printf(ctx->pool, "%s:%d", - ctx->cur_input->path, ctx->cur_input->linenum); + if (ctx->cur_input->linenum == 0) { + parser->file_and_line = + p_strdup(ctx->pool, ctx->cur_input->path); + } else { + parser->file_and_line = + p_strdup_printf(ctx->pool, "%s:%d", + ctx->cur_input->path, + ctx->cur_input->linenum); + } parser->parsers = cur_section->prev == NULL ? ctx->root_parsers : config_module_parsers_init(ctx->pool); array_append(&ctx->all_parsers, &parser, 1);