diff options
author | Gilles Chehade <gilles@poolp.org> | 2018-12-21 18:32:31 +0100 |
---|---|---|
committer | Gilles Chehade <gilles@poolp.org> | 2018-12-21 18:32:31 +0100 |
commit | d15af1705cb6493084a8d786970c41e9ef4520ab (patch) | |
tree | aa46792b942ec17fdda3f5e66f9aa0a6b0df1d5d | |
parent | sync (diff) | |
download | OpenSMTPD-d15af1705cb6493084a8d786970c41e9ef4520ab.tar.xz OpenSMTPD-d15af1705cb6493084a8d786970c41e9ef4520ab.zip |
split lka_filter_init() in two passes
-rw-r--r-- | smtpd/lka_filter.c | 21 |
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; } |