aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGilles Chehade <gilles@poolp.org>2018-12-21 18:32:31 +0100
committerGilles Chehade <gilles@poolp.org>2018-12-21 18:32:31 +0100
commitd15af1705cb6493084a8d786970c41e9ef4520ab (patch)
treeaa46792b942ec17fdda3f5e66f9aa0a6b0df1d5d
parentsync (diff)
downloadOpenSMTPD-d15af1705cb6493084a8d786970c41e9ef4520ab.tar.xz
OpenSMTPD-d15af1705cb6493084a8d786970c41e9ef4520ab.zip
split lka_filter_init() in two passes
-rw-r--r--smtpd/lka_filter.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/smtpd/lka_filter.c b/smtpd/lka_filter.c
index bdeac000..a3304650 100644
--- a/smtpd/lka_filter.c
+++ b/smtpd/lka_filter.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: lka_filter.c,v 1.17 2018/12/21 17:04:46 gilles Exp $ */
+/* $OpenBSD: lka_filter.c,v 1.19 2018/12/21 17:31:57 gilles Exp $ */
/*
* Copyright (c) 2018 Gilles Chehade <gilles@poolp.org>
@@ -157,15 +157,27 @@ lka_filter_init(void)
break;
case FILTER_TYPE_CHAIN:
+ break;
+ }
+ }
+
+ iter = NULL;
+ while (dict_iter(env->sc_filters_dict, &iter, &name, (void **)&filter_config)) {
+ switch (filter_config->filter_type) {
+ case FILTER_TYPE_CHAIN:
filter = xcalloc(1, sizeof(*filter));
filter->name = name;
filter->chain = xcalloc(filter_config->chain_size, sizeof(void **));
filter->chain_size = filter_config->chain_size;
filter->config = filter_config;
for (i = 0; i < filter->chain_size; ++i)
- filter->chain[i] = dict_get(&filters, filter_config->chain[i]);
+ filter->chain[i] = dict_xget(&filters, filter_config->chain[i]);
dict_set(&filters, name, filter);
break;
+
+ case FILTER_TYPE_BUILTIN:
+ case FILTER_TYPE_PROC:
+ break;
}
}
}
@@ -232,6 +244,7 @@ lka_filter_ready(void)
}
continue;
}
+
for (i = 0; i < nitems(filter_execs); ++i) {
if (filter->phases & (1<<i)) {
filter_entry = xcalloc(1, sizeof *filter_entry);
@@ -787,8 +800,8 @@ filter_builtins_global(struct filter_session *fs, struct filter *filter, uint64_
filter_check_rdns(filter, fs->rdns) ||
filter_check_rdns_table(filter, K_DOMAIN, fs->rdns) ||
filter_check_rdns_regex(filter, fs->rdns) ||
- filter_check_src_table(filter, K_NETADDR, fs->rdns) ||
- filter_check_src_regex(filter, fs->rdns))
+ filter_check_src_table(filter, K_NETADDR, ss_to_text(&fs->ss_src)) ||
+ filter_check_src_regex(filter, ss_to_text(&fs->ss_src)))
return 1;
return 0;
}