X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=postlicyd%2Fgreylist.c;h=7d7087557c47bacef43406a7a7a59d7879a72b75;hb=e2ed1a31651a4f3e31d005005ca8677b15cec19d;hp=108b02b246f2dbabd4110e27963771b366545c4a;hpb=7d041574a564b98145fc2235bd3c8676a1689911;p=apps%2Fpfixtools.git diff --git a/postlicyd/greylist.c b/postlicyd/greylist.c index 108b02b..7d70875 100644 --- a/postlicyd/greylist.c +++ b/postlicyd/greylist.c @@ -51,7 +51,7 @@ typedef struct greylist_config_t { #define GREYLIST_INIT { .lookup_by_host = false, \ .delay = 300, \ - .retry_window = 2 * 24 * 2600, \ + .retry_window = 2 * 24 * 3600, \ .client_awl = 5, \ .awl_db = NULL, \ .obj_db = NULL } @@ -78,8 +78,8 @@ static bool greylist_initialize(greylist_config_t *config, if (!tcbdbopen(config->awl_db, path, BDBOWRITER | BDBOCREAT)) { tcbdbdel(config->awl_db); config->awl_db = NULL; + return false; } - return false; } snprintf(path, sizeof(path), "%s/%sgreylist.db", directory, prefix); @@ -216,6 +216,7 @@ static bool try_greylist(const greylist_config_t *config, /* OK. */ + //syslog(LOG_INFO, "client whitelisted"); return true; } } @@ -259,11 +260,13 @@ static bool try_greylist(const greylist_config_t *config, /* OK */ + //syslog(LOG_INFO, "client whitelisted"); return true; } /* DUNNO */ + //syslog(LOG_INFO, "client greylisted"); return false; } @@ -303,25 +306,11 @@ 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); default: break; } @@ -346,9 +335,14 @@ 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_MATCH : HTK_FAIL; + HTK_WHITELIST : HTK_GREYLIST; } static int greylist_init(void) @@ -358,9 +352,10 @@ 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, "fail"); - (void)filter_hook_register(type, "match"); + (void)filter_hook_register(type, "greylist"); + (void)filter_hook_register(type, "whitelist"); /* Parameters. */