X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=postlicyd%2Fconfig.c;h=ec634804aa1240eb1b8ddfda2568f1ab2dab5f3c;hb=5fc57f7c291b99db643dc22a814087b34b9f4b59;hp=871a71f649ba259b1b62fd295f809b72f432e0ae;hpb=929bb1ca2452a5bc7410896fd4e5eea44901a0b7;p=apps%2Fpfixtools.git diff --git a/postlicyd/config.c b/postlicyd/config.c index 871a71f..ec63480 100644 --- a/postlicyd/config.c +++ b/postlicyd/config.c @@ -34,14 +34,12 @@ */ #include "file.h" -#include "filter.h" #include "config.h" +#include "str.h" -struct config_t { - A(filter_t) filters; - A(filter_params_t) params; - int entry_point; -}; +#define config_param_register(Param) + +config_param_register("first_filter"); static inline config_t *config_new(void) { @@ -78,6 +76,23 @@ static bool config_second_pass(config_t *config) } }} + config->entry_point = -1; + foreach (filter_param_t *param, config->params) { + switch (param->type) { + case ATK_FIRST_FILTER: + config->entry_point = filter_find_with_name(&config->filters, + param->value); + break; + default: break; + } + }} + array_deep_wipe(config->params, filter_params_wipe); + + if (config->entry_point == -1) { + ok = false; + syslog(LOG_ERR, "no entry point defined"); + } + return ok; } @@ -233,10 +248,12 @@ read_param_value: READ_BLANK(goto badeof); READ_STRING("parameter value", value, value_len, ;); { - filter_params_t param; - param.name = strdup(key); - param.value = strdup(value); - array_add(config->params, param); + filter_param_t param; + param.type = param_tokenize(key, key_len); + if (param.type != ATK_UNKNOWN) { + param.value = m_strdup(value); + array_add(config->params, param); + } } goto read_section; @@ -265,9 +282,10 @@ read_filter: key + 3, filter.name); } } else { - if (!filter_add_param(&filter, key, key_len, value, value_len)) { - goto error; - } + /* filter_add_param failure mean unknown type or unsupported type. + * this are non-fatal errors. + */ + (void)filter_add_param(&filter, key, key_len, value, value_len); } } READ_NEXT(;);