filter_config
struct filter_config *config;
struct filter_config *filter_config;
while (dict_iter(env->sc_filters_dict, &iter, &name, (void **)&filter_config)) {
switch (filter_config->filter_type) {
filter->phases |= (1<<filter_config->phase);
filter->config = filter_config;
filter->proc = filter_config->proc;
filter->config = filter_config;
name, filter_config->proc);
while (dict_iter(env->sc_filters_dict, &iter, &name, (void **)&filter_config)) {
switch (filter_config->filter_type) {
filter->chain = xcalloc(filter_config->chain_size, sizeof(void **));
filter->chain_size = filter_config->chain_size;
filter->config = filter_config;
filter->chain[i] = dict_xget(&filters, filter_config->chain[i]);
filter_config->junk = 1;
filter_config->bypass = 1;
filter_config->reject = $2;
filter_config->disconnect = $2;
filter_config->rewrite = $2;
filter_config->report = $2;
filter_config->not_fcrdns = $1 ? -1 : 1;
filter_config->fcrdns = 1;
filter_config->not_rdns = $1 ? -1 : 1;
filter_config->rdns = 1;
filter_config->not_rdns_table = $1 ? -1 : 1;
filter_config->rdns_table = $3;
filter_config->not_rdns_regex = $1 ? -1 : 1;
filter_config->rdns_regex = $4;
filter_config->not_src_table = $1 ? -1 : 1;
filter_config->src_table = $3;
filter_config->not_src_regex = $1 ? -1 : 1;
filter_config->src_regex = $4;
filter_config->not_helo_table = $1 ? -1 : 1;
filter_config->helo_table = $3;
filter_config->not_helo_regex = $1 ? -1 : 1;
filter_config->helo_regex = $4;
filter_config->not_auth = $1 ? -1 : 1;
filter_config->auth = 1;
filter_config->not_auth_table = $1 ? -1 : 1;
filter_config->auth_table = $3;
filter_config->not_auth_regex = $1 ? -1 : 1;
filter_config->auth_regex = $4;
filter_config->not_mail_from_table = $1 ? -1 : 1;
filter_config->mail_from_table = $3;
filter_config->not_mail_from_regex = $1 ? -1 : 1;
filter_config->mail_from_regex = $4;
filter_config->not_rcpt_to_table = $1 ? -1 : 1;
filter_config->rcpt_to_table = $3;
filter_config->not_rcpt_to_regex = $1 ? -1 : 1;
filter_config->rcpt_to_regex = $4;
filter_config->phase = FILTER_CONNECT;
filter_config->phase = FILTER_HELO;
filter_config->phase = FILTER_EHLO;
filter_config->phase = FILTER_MAIL_FROM;
filter_config->phase = FILTER_RCPT_TO;
filter_config->phase = FILTER_DATA;
filter_config->phase = FILTER_COMMIT;
struct filter_config *fr;
for (i = 0; i < filter_config->chain_size; i++) {
if (strcmp(filter_config->chain[i], $1) == 0) {
if (dict_get(&filter_config->chain_procs, fr->proc)) {
dict_set(&filter_config->chain_procs, fr->proc, NULL);
fr->filter_subsystem |= filter_config->filter_subsystem;
filter_config->chain_size += 1;
filter_config->chain = reallocarray(filter_config->chain, filter_config->chain_size, sizeof(char *));
if (filter_config->chain == NULL)
filter_config->chain[filter_config->chain_size - 1] = $1;
filter_config = xcalloc(1, sizeof *filter_config);
filter_config->filter_type = FILTER_TYPE_PROC;
filter_config->name = $2;
filter_config->proc = $4;
dict_set(conf->sc_filters_dict, $2, filter_config);
filter_config = NULL;
filter_config = xcalloc(1, sizeof *filter_config);
filter_config->filter_type = FILTER_TYPE_PROC;
filter_config->name = $2;
filter_config->proc = xstrdup($2);
dict_set(conf->sc_filters_dict, $2, filter_config);
processor->tag = processor_maketag(filter_config->proc);
dict_set(conf->sc_filter_processes_dict, filter_config->proc, processor);
filter_config = NULL;
filter_config = xcalloc(1, sizeof *filter_config);
filter_config->name = $2;
filter_config->filter_type = FILTER_TYPE_BUILTIN;
dict_set(conf->sc_filters_dict, $2, filter_config);
filter_config = NULL;
filter_config = xcalloc(1, sizeof *filter_config);
filter_config->filter_type = FILTER_TYPE_CHAIN;
dict_init(&filter_config->chain_procs);
dict_set(conf->sc_filters_dict, $2, filter_config);
filter_config = NULL;
struct filter_config *fc;
filter_config = xcalloc(1, sizeof *filter_config);
filter_config->filter_type = FILTER_TYPE_CHAIN;
filter_config->filter_subsystem |= FILTER_SUBSYSTEM_SMTP_IN;
dict_init(&filter_config->chain_procs);
dict_set(conf->sc_filters_dict, listen_opts.filtername, filter_config);
filter_config = NULL;
struct filter_config *fc;
filter_config = xcalloc(1, sizeof *filter_config);
filter_config->filter_type = FILTER_TYPE_CHAIN;
filter_config->filter_subsystem |= FILTER_SUBSYSTEM_SMTP_IN;
dict_init(&filter_config->chain_procs);
dict_set(conf->sc_filters_dict, listen_opts.filtername, filter_config);
filter_config = NULL;
struct filter_config *fc;
filter_config = xcalloc(1, sizeof *filter_config);
filter_config->filter_type = FILTER_TYPE_CHAIN;
filter_config->filter_subsystem |= FILTER_SUBSYSTEM_SMTP_OUT;
dict_init(&filter_config->chain_procs);
dict_set(conf->sc_filters_dict, dsp->u.remote.filtername, filter_config);
filter_config = NULL;
struct filter_config *filter_config;
struct filter_config *fc;
struct filter_config *fcs;