#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 }
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);
/* OK.
*/
+ //syslog(LOG_INFO, "client whitelisted");
return true;
}
}
/* OK
*/
+ //syslog(LOG_INFO, "client whitelisted");
return true;
}
/* DUNNO
*/
+ //syslog(LOG_INFO, "client greylisted");
return false;
}
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;
}
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)
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.
*/