X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=postlicyd%2Ffilter.c;h=7aba638679e61d9b6bc766992290e15c786ffec3;hb=92dc834e982d4b71ce6a3fcc2c973e555afd3fcf;hp=de6ba0398ec407d3acb7180142b3d0c6128505bf;hpb=b90060d134b09aff84d0bd1312850abb9fc6fb9e;p=apps%2Fpfixtools.git diff --git a/postlicyd/filter.c b/postlicyd/filter.c index de6ba03..7aba638 100644 --- a/postlicyd/filter.c +++ b/postlicyd/filter.c @@ -111,8 +111,8 @@ bool filter_update_references(filter_t *filter, A(filter_t) *filter_list) if (!hook->postfix) { hook->filter_id = filter_find_with_name(filter_list, hook->value); if (hook->filter_id == -1) { - syslog(LOG_ERR, "invalid filter name %s for hook %s", - hook->value, htokens[hook->type]); + err("invalid filter name %s for hook %s", + hook->value, htokens[hook->type]); return false; } p_delete(&hook->value); @@ -145,7 +145,7 @@ bool filter_check_safety(A(filter_t) *array) { foreach (filter_t *filter, *array) { if (!filter_check_loop(filter, array, __Ai)) { - syslog(LOG_ERR, "the filter tree contains a loop"); + err("the filter tree contains a loop"); return false; } }} @@ -167,21 +167,20 @@ const filter_hook_t *filter_run(const filter_t *filter, const query_t *query) { int start = 0; int end = filter->hooks.len; - //syslog(LOG_DEBUG, "running filter %s (%s)", - // filter->name, ftokens[filter->type]); + debug("running filter %s (%s)", filter->name, ftokens[filter->type]); filter_result_t res = runners[filter->type](filter, query); if (res == HTK_ABORT) { return NULL; } - //syslog(LOG_DEBUG, "filter run, result is %s", htokens[res]); + debug("filter run, result is %s", htokens[res]); while (start < end) { int mid = (start + end) / 2; filter_hook_t *hook = array_ptr(filter->hooks, mid); if (hook->type == res) { - //syslog(LOG_DEBUG, "return hook of type %s, value %s", - // htokens[hook->type], hook->value); + debug("return hook of type %s, value %s", + htokens[hook->type], hook->value); return hook; } else if (res < hook->type) { end = mid; @@ -189,34 +188,38 @@ const filter_hook_t *filter_run(const filter_t *filter, const query_t *query) start = mid + 1; } } - syslog(LOG_WARNING, "missing hook %s for filter %s", - htokens[res], filter->name); + warn("missing hook %s for filter %s", htokens[res], filter->name); return &default_hook; } -void filter_set_name(filter_t *filter, const char *name, ssize_t len) +bool filter_test(const filter_t *filter, const query_t *query, filter_result_t result) +{ + return !!(runners[filter->type](filter, query) == result); +} + +void filter_set_name(filter_t *filter, const char *name, int len) { filter->name = p_dupstr(name, len); } -bool filter_set_type(filter_t *filter, const char *type, ssize_t len) +bool filter_set_type(filter_t *filter, const char *type, int len) { filter->type = filter_tokenize(type, len); return filter->type != FTK_UNKNOWN; } -bool filter_add_param(filter_t *filter, const char *name, ssize_t name_len, - const char *value, ssize_t value_len) +bool filter_add_param(filter_t *filter, const char *name, int name_len, + const char *value, int value_len) { filter_param_t param; param.type = param_tokenize(name, name_len); if (param.type == ATK_UNKNOWN) { - syslog(LOG_ERR, "unknown parameter %.*s", name_len, name); + err("unknown parameter %.*s", name_len, name); return false; } if (!params[filter->type][param.type]) { - syslog(LOG_ERR, "hook %s is not valid for filter %s", - atokens[param.type], ftokens[filter->type]); + err("hook %s is not valid for filter %s", + atokens[param.type], ftokens[filter->type]); return false; } param.value = p_dupstr(value, value_len); @@ -225,18 +228,18 @@ bool filter_add_param(filter_t *filter, const char *name, ssize_t name_len, return true; } -bool filter_add_hook(filter_t *filter, const char *name, ssize_t name_len, - const char *value, ssize_t value_len) +bool filter_add_hook(filter_t *filter, const char *name, int name_len, + const char *value, int value_len) { filter_hook_t hook; hook.type = hook_tokenize(name, name_len); if (hook.type == HTK_UNKNOWN) { - syslog(LOG_ERR, "unknown hook type %.*s", name_len, name); + err("unknown hook type %.*s", name_len, name); return false; } if (!hooks[filter->type][hook.type] || hook.type == HTK_ABORT) { - syslog(LOG_ERR, "hook %s not is valid for filter %s", - htokens[hook.type], ftokens[filter->type]); + err("hook %s not is valid for filter %s", + htokens[hook.type], ftokens[filter->type]); return false; } hook.postfix = (strncmp(value, "postfix:", 8) == 0);