int hard_threshold;
unsigned is_email :1;
+ unsigned is_hostname :1;
+
unsigned match_sender :1;
unsigned match_recipient :1;
- unsigned is_hostname :1;
unsigned match_helo :1;
unsigned match_client :1;
unsigned match_reverse :1;
--end;
}
if (end != map.end) {
- syslog(LOG_WARNING, "file %s miss a final \\n, ignoring last line",
- file);
+ warn("file %s miss a final \\n, ignoring last line",
+ file);
}
db = trie_new();
eol = end;
}
if (eol - p >= BUFSIZ) {
- syslog(LOG_ERR, "unreasonnable long line");
+ err("unreasonnable long line");
file_map_close(&map);
trie_delete(&db);
return NULL;
#define PARSE_CHECK(Expr, Str, ...) \
if (!(Expr)) { \
- syslog(LOG_ERR, Str, ##__VA_ARGS__); \
+ err(Str, ##__VA_ARGS__); \
strlist_config_delete(&config); \
return false; \
}
CASE(HELO_NAME, helo, hostname);
CASE(CLIENT_NAME, client, hostname);
CASE(REVERSE_CLIENT_NAME, reverse, hostname);
+ CASE(SENDER_DOMAIN, sender, hostname);
+ CASE(RECIPIENT_DOMAIN, recipient, hostname);
CASE(SENDER, sender, email);
CASE(RECIPIENT, recipient, email);
#undef CASE
if (config->is_email &&
((config->match_sender && query->state < SMTP_MAIL)
|| (config->match_recipient && query->state != SMTP_RCPT))) {
- syslog(LOG_WARNING, "trying to match an email against a field that is not "
- "available in current protocol state");
+ warn("trying to match an email against a field that is not "
+ "available in current protocol state");
return HTK_ABORT;
} else if (config->is_hostname && config->match_helo && query->state < SMTP_HELO) {
- syslog(LOG_WARNING, "trying to match hostname against helo before helo "
- "is received");
+ warn("trying to match hostname against helo before helo is received");
return HTK_ABORT;
}
#define LOOKUP(Flag, Field) \
if ((!part && trie_lookup(trie, rev ? reverse : normal)) \
|| (part && trie_prefix(trie, rev ? reverse : normal))) { \
sum += weight; \
+ if (sum >= config->hard_threshold) { \
+ return HTK_HARD_MATCH; \
+ } \
} \
} \
}
LOOKUP(helo, helo_name);
LOOKUP(client, client_name);
LOOKUP(reverse, reverse_client_name);
+ LOOKUP(recipient, recipient_domain);
+ LOOKUP(sender, sender_domain);
}
#undef LOOKUP
if (sum >= config->hard_threshold) {