condition.field = policy_tokenize(p, n - p);
PARSE_CHECK(condition.field >= PTK_HELO_NAME
&& condition.field < PTK_SMTPD_ACCESS_POLICY,
- "invalid field name %.*s", n - p, p);
+ "invalid field name %.*s", (int)(n - p), p);
p = skipspaces(n);
n = p + 1;
PARSE_CHECK(IS_OP_START(*p) && IS_OP_END(*n),
static inline bool match_condition(const match_condition_t *cond, const query_t *query)
{
- const char *field = NULL;
- switch (cond->field) {
-#define CASE(Up, Low) \
- case PTK_ ## Up: field = query->Low; break;
- CASE(HELO_NAME, helo_name)
- CASE(QUEUE_ID, queue_id)
- CASE(SENDER, sender)
- CASE(RECIPIENT, recipient)
- CASE(RECIPIENT_COUNT, recipient_count)
- CASE(CLIENT_ADDRESS, client_address)
- CASE(CLIENT_NAME, client_name)
- CASE(REVERSE_CLIENT_NAME, reverse_client_name)
- CASE(INSTANCE, instance)
- CASE(SASL_METHOD, sasl_method)
- CASE(SASL_USERNAME, sasl_username)
- CASE(SASL_SENDER, sasl_sender)
- CASE(SIZE, size)
- CASE(CCERT_SUBJECT, ccert_subject)
- CASE(CCERT_ISSUER, ccert_issuer)
- CASE(CCERT_FINGERPRINT, ccert_fingerprint)
- CASE(ENCRYPTION_PROTOCOL, encryption_protocol)
- CASE(ENCRYPTION_CIPHER, encryption_cipher)
- CASE(ENCRYPTION_KEYSIZE, encryption_keysize)
- CASE(ETRN_DOMAIN, etrn_domain)
- CASE(STRESS, stress)
-#undef CASE
- default: return false;
- }
+ const char *field = query_field_for_id(query, cond->field);
debug("running condition: \"%s\" %s %s\"%s\"",
field, condition_names[cond->condition],
cond->case_sensitive ? "" : "(alternative) ",
return true;
}
-static filter_result_t match_filter(const filter_t *filter, const query_t *query)
+static filter_result_t match_filter(const filter_t *filter, const query_t *query,
+ filter_context_t *context)
{
const match_config_t *config = filter->data;
foreach (const match_condition_t *condition, config->conditions) {
static int match_init(void)
{
filter_type_t type = filter_register("match", match_filter_constructor,
- match_filter_destructor, match_filter);
+ match_filter_destructor, match_filter,
+ NULL, NULL);
/* Hooks.
*/
(void)filter_hook_register(type, "abort");