Can remove the sender and/or the recipient from the key of the greylister.
[apps/pfixtools.git] / postlicyd / query.c
index fe370b7..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;
     }
 }
@@ -225,7 +242,7 @@ ssize_t query_format(char *dest, size_t len, const char *fmt, const query_t *que
 
             postlicyd_token tok = policy_tokenize(fmt, next_format - fmt);
             if (tok == PTK_UNKNOWN) {
-                warn("unknown field name \"%.*s\"", next_format - fmt, fmt);
+                warn("unknown field name \"%.*s\"", (int)(next_format - fmt), fmt);
             }
             const char *field = query == NULL ? NULL : query_field_for_id(query, tok);
             if (field == NULL) {