{
/* 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;
/* 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;
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);