From: Florent Bruneau Date: Fri, 17 Oct 2008 19:37:41 +0000 (+0200) Subject: Factorize code, can use ${protocol_state} and ${protocol_name} in query formats. X-Git-Url: http://git.madism.org/?a=commitdiff_plain;h=c00b60854ba8968b9e91da74096d913c084139c5;p=apps%2Fpfixtools.git Factorize code, can use ${protocol_state} and ${protocol_name} in query formats. Signed-off-by: Florent Bruneau --- diff --git a/postlicyd/main-postlicyd.c b/postlicyd/main-postlicyd.c index 50c19d5..86d1400 100644 --- a/postlicyd/main-postlicyd.c +++ b/postlicyd/main-postlicyd.c @@ -126,53 +126,43 @@ static void policy_answer(client_t *pcy, const char *message) static const filter_t *next_filter(client_t *pcy, const filter_t *filter, const query_t *query, const filter_hook_t *hook, bool *ok) { +#define MESSAGE_FORMAT "request client=%s from=<%s> to=<%s> at %s: " +#define MESSAGE_PARAMS query->client_name, \ + query->sender == NULL ? "undefined" : query->sender, \ + query->recipient == NULL ? "undefined" : query->recipient, \ + smtp_state_names[query->state] + if (hook != NULL) { query_context_t *context = client_data(pcy); if (hook->counter >= 0 && hook->counter < MAX_COUNTERS && hook->cost > 0) { context->context.counters[hook->counter] += hook->cost; - debug("request client=%s, from=<%s>, to=<%s>: added %d to counter %d (now %u)", - query->client_name, - query->sender == NULL ? "undefined" : query->sender, - query->recipient == NULL ? "undefined" : query->recipient, + debug(MESSAGE_FORMAT "added %d to counter %d (now %u)", MESSAGE_PARAMS, hook->cost, hook->counter, context->context.counters[hook->counter]); } } if (hook == NULL) { - warn("request client=%s, from=<%s>, to=<%s>: aborted", - query->client_name, - query->sender == NULL ? "undefined" : query->sender, - query->recipient == NULL ? "undefined" : query->recipient); + warn(MESSAGE_FORMAT "aborted", MESSAGE_PARAMS); *ok = false; return NULL; } else if (hook->async) { - debug("request client=%s, from=<%s>, to=<%s>: " - "asynchronous filter from filter %s", - query->client_name, - query->sender == NULL ? "undefined" : query->sender, - query->recipient == NULL ? "undefined" : query->recipient, - filter->name); + debug(MESSAGE_FORMAT "asynchronous filter from filter %s", + MESSAGE_PARAMS, filter->name); *ok = true; return NULL; } else if (hook->postfix) { - info("request client=%s, from=<%s>, to=<%s>: " - "awswer %s from filter %s: \"%s\"", - query->client_name, - query->sender == NULL ? "undefined" : query->sender, - query->recipient == NULL ? "undefined" : query->recipient, + info(MESSAGE_FORMAT "awswer %s from filter %s: \"%s\"", MESSAGE_PARAMS, htokens[hook->type], filter->name, hook->value); policy_answer(pcy, hook->value); *ok = true; return NULL; } else { - debug("request client=%s, from=<%s>, to=<%s>: " - "awswer %s from filter %s: next filter %s", - query->client_name, - query->sender == NULL ? "undefined" : query->sender, - query->recipient == NULL ? "undefined" : query->recipient, - htokens[hook->type], filter->name, - (array_ptr(config->filters, hook->filter_id))->name); + debug(MESSAGE_FORMAT "awswer %s from filter %s: next filter %s", + MESSAGE_PARAMS, htokens[hook->type], filter->name, + (array_ptr(config->filters, hook->filter_id))->name); return array_ptr(config->filters, hook->filter_id); } +#undef MESSAGE_PARAMS +#undef MESSAGE_FORMAT } static bool policy_process(client_t *pcy, const config_t *mconfig) @@ -181,7 +171,7 @@ static bool policy_process(client_t *pcy, const config_t *mconfig) const query_t* query = &context->query; const filter_t *filter; if (mconfig->entry_points[query->state] == -1) { - warn("no filter defined for current protocol_state (%d)", query->state); + warn("no filter defined for current protocol_state (%s)", smtp_state_names[query->state]); return false; } if (context->context.current_filter != NULL) { diff --git a/postlicyd/query.c b/postlicyd/query.c index 2d4cd89..4a4ae9c 100644 --- a/postlicyd/query.c +++ b/postlicyd/query.c @@ -38,6 +38,17 @@ #include "policy_tokens.h" #include "str.h" +const char *smtp_state_names[SMTP_count] = { + "CONNECT", + "HELO", + "MAIL", + "RCPT", + "DATA", + "END-OF-MESSAGE", + "VRFY", + "ETRN", +}; + bool query_parse(query_t *query, char *p) { #define PARSE_CHECK(expr, error, ...) \ @@ -179,6 +190,12 @@ const char *query_field_for_id(const query_t *query, postlicyd_token id) CASE(ETRN_DOMAIN, etrn_domain) CASE(STRESS, stress) #undef CASE + case PTK_PROTOCOL_NAME: + return query->esmtp ? "ESMTP" : "SMTP"; + + case PTK_PROTOCOL_STATE: + return smtp_state_names[query->state]; + default: return NULL; } } diff --git a/postlicyd/query.h b/postlicyd/query.h index 61f894d..9dabfe0 100644 --- a/postlicyd/query.h +++ b/postlicyd/query.h @@ -55,6 +55,8 @@ enum smtp_state { SMTP_UNKNOWN, }; +extern const char *smtp_state_names[SMTP_count]; + /* \see http://www.postfix.org/SMTPD_POLICY_README.html */ typedef struct query_t { unsigned state : 4;