Factorize code, can use ${protocol_state} and ${protocol_name} in query formats.
authorFlorent Bruneau <florent.bruneau@polytechnique.org>
Fri, 17 Oct 2008 19:37:41 +0000 (21:37 +0200)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Fri, 17 Oct 2008 19:37:41 +0000 (21:37 +0200)
Signed-off-by: Florent Bruneau <florent.bruneau@polytechnique.org>
postlicyd/main-postlicyd.c
postlicyd/query.c
postlicyd/query.h

index 50c19d5..86d1400 100644 (file)
@@ -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) {
index 2d4cd89..4a4ae9c 100644 (file)
 #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;
     }
 }
index 61f894d..9dabfe0 100644 (file)
@@ -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;