X-Git-Url: http://git.madism.org/?a=blobdiff_plain;ds=sidebyside;f=postlicyd%2Fmain-postlicyd.c;h=d6c5cc4c383f4deae5fd8111ac2823a5aa644096;hb=6154a392a1f0d96d4599a45f1c37d84dbe5bfa4d;hp=e75965f0a703c2c630f6e905c52f13ca643a4514;hpb=0641f1d7426b95424efd3ee823feea97b1ff7751;p=apps%2Fpfixtools.git diff --git a/postlicyd/main-postlicyd.c b/postlicyd/main-postlicyd.c index e75965f..d6c5cc4 100644 --- a/postlicyd/main-postlicyd.c +++ b/postlicyd/main-postlicyd.c @@ -167,24 +167,23 @@ static void policy_answer(server_t *pcy, const char *fmt, ...) epoll_modify(pcy->fd, EPOLLIN | EPOLLOUT, pcy); } -static void policy_process(server_t *pcy, config_t *config) +static bool policy_process(server_t *pcy, const config_t *config) { const query_t* query = pcy->data; - filter_t *filter; + const filter_t *filter; if (config->entry_points[query->state] == -1) { syslog(LOG_WARNING, "no filter defined for current protocol_state (%d)", query->state); - policy_answer(pcy, "DUNNO"); - return; + return false; } filter = array_ptr(config->filters, config->entry_points[query->state]); while (true) { - filter_hook_t *hook = filter_run(filter, query); + const filter_hook_t *hook = filter_run(filter, query); if (hook == NULL) { - policy_answer(pcy, "DUNNO"); - return; + syslog(LOG_WARNING, "request aborted"); + return false; } else if (hook->postfix) { policy_answer(pcy, "%s", hook->value); - return; + return true; } else { filter = array_ptr(config->filters, hook->filter_id); } @@ -197,7 +196,7 @@ static int policy_run(server_t *pcy, void* vconfig) int nb = buffer_read(&pcy->ibuf, pcy->fd, -1); const char *eoq; query_t *query = pcy->data; - config_t *config = vconfig; + const config_t *config = vconfig; if (nb < 0) { if (errno == EAGAIN || errno == EINTR) @@ -218,8 +217,7 @@ static int policy_run(server_t *pcy, void* vconfig) return -1; query->eoq = eoq + strlen("\n\n"); epoll_modify(pcy->fd, 0, pcy); - policy_process(pcy, config); - return 0; + return policy_process(pcy, config) ? 0 : -1; } int start_listener(int port)