X-Git-Url: http://git.madism.org/?a=blobdiff_plain;ds=sidebyside;f=postlicyd%2Fgreylist.c;h=e0250455287dc83451b60f658ec789d9e1bf5274;hb=abf6f912707e4d745a646c74396e10b1615f2008;hp=ca58979e23a199af0d9d51757e8ebdfbf1e6f995;hpb=9fc48ba2176a71585c13cd346968bdba499e80de;p=apps%2Fpfixtools.git diff --git a/postlicyd/greylist.c b/postlicyd/greylist.c index ca58979..e025045 100644 --- a/postlicyd/greylist.c +++ b/postlicyd/greylist.c @@ -209,7 +209,7 @@ static bool try_greylist(const greylist_config_t *config, /* Whitelist if count is enough. */ - if (aent.count > config->client_awl) { + if (aent.count >= config->client_awl) { if (now < aent.last + 3600) { INCR_AWL } @@ -306,25 +306,12 @@ static bool greylist_filter_constructor(filter_t *filter) foreach (filter_param_t *param, filter->params) { switch (param->type) { - case ATK_PATH: - path = param->value; - break; - - case ATK_PREFIX: - prefix = param->value; - break; - - case ATK_LOOKUP_BY_HOST: - config->lookup_by_host = (atoi(param->value) != 0); - break; - - case ATK_RETRY_WINDOW: - config->retry_window = atoi(param->value); - break; - - case ATK_CLIENT_AWL: - config->client_awl = atoi(param->value); - break; + FILTER_PARAM_PARSE_STRING(PATH, path); + FILTER_PARAM_PARSE_STRING(PREFIX, prefix); + FILTER_PARAM_PARSE_BOOLEAN(LOOKUP_BY_HOST, config->lookup_by_host); + FILTER_PARAM_PARSE_INT(RETRY_WINDOW, config->retry_window); + FILTER_PARAM_PARSE_INT(CLIENT_AWL, config->client_awl); + FILTER_PARAM_PARSE_INT(DELAY, config->delay); default: break; } @@ -349,6 +336,11 @@ static filter_result_t greylist_filter(const filter_t *filter, const query_t *query) { const greylist_config_t *config = filter->data; + if (query->state != SMTP_RCPT) { + syslog(LOG_WARNING, "greylisting only works as smtpd_recipient_restrictions"); + return HTK_ABORT; + } + return try_greylist(config, query->sender, query->client_address, query->client_name, query->recipient) ? HTK_WHITELIST : HTK_GREYLIST; @@ -361,6 +353,7 @@ static int greylist_init(void) greylist_filter); /* Hooks. */ + (void)filter_hook_register(type, "abort"); (void)filter_hook_register(type, "error"); (void)filter_hook_register(type, "greylist"); (void)filter_hook_register(type, "whitelist");