Browse Source

Fix critical issue in surbl module

Previously, surbl could send many DNS requests for a single URL
tags/1.1.0
Vsevolod Stakhov 8 years ago
parent
commit
fe76a3cfd3
1 changed files with 22 additions and 17 deletions
  1. 22
    17
      src/plugins/surbl.c

+ 22
- 17
src/plugins/surbl.c View File

@@ -807,6 +807,20 @@ format_surbl_request (rspamd_mempool_t * pool,
url->surbl = result;
url->surbllen = r;

if (!forced &&
g_hash_table_lookup (surbl_module_ctx->whitelist, result) != NULL) {
msg_debug_pool ("url %s is whitelisted", result);
g_set_error (err, SURBL_ERROR,
WHITELIST_ERROR,
"URL is whitelisted: %s",
result);
return NULL;
}

if (append_suffix) {
rspamd_snprintf (result + r, len - r, ".%s", suffix->suffix);
}

if (tree != NULL) {
if (g_hash_table_lookup (tree, result) != NULL) {
msg_debug_pool ("url %s is already registered", result);
@@ -821,21 +835,6 @@ format_surbl_request (rspamd_mempool_t * pool,
}
}

if (!forced &&
g_hash_table_lookup (surbl_module_ctx->whitelist, result) != NULL) {
msg_debug_pool ("url %s is whitelisted", result);
g_set_error (err, SURBL_ERROR,
WHITELIST_ERROR,
"URL is whitelisted: %s",
result);
return NULL;
}


if (append_suffix) {
rspamd_snprintf (result + r, len - r, ".%s", suffix->suffix);
}

msg_debug_pool ("request: %s, dots: %d, level: %d, orig: %*s",
result,
dots_num,
@@ -887,7 +886,8 @@ make_surbl_requests (struct rspamd_url *url, struct rspamd_task *task,
param->suffix = suffix;
param->host_resolve =
rspamd_mempool_strdup (task->task_pool, surbl_req);
debug_task ("send surbl dns ip request %s", surbl_req);
debug_task ("send surbl dns ip request %s to %s", surbl_req,
suffix->suffix);

if (make_dns_request_task (task,
surbl_dns_ip_callback,
@@ -1032,6 +1032,11 @@ surbl_dns_ip_callback (struct rdns_reply *reply, gpointer arg)
ip_addr >> 16 & 0xff,
ip_addr >> 8 & 0xff,
ip_addr & 0xff, param->suffix->suffix);
msg_debug_task (
"<%s> domain [%s] send %v request to surbl",
param->task->message_id,
param->host_resolve,
to_resolve);

if (make_dns_request_task (task,
surbl_dns_callback,
@@ -1283,7 +1288,7 @@ surbl_test_url (struct rspamd_task *task, void *user_data)

param.task = task;
param.suffix = suffix;
param.tree = g_hash_table_new (rspamd_str_hash, rspamd_str_equal);
param.tree = g_hash_table_new (rspamd_strcase_hash, rspamd_strcase_equal);
rspamd_mempool_add_destructor (task->task_pool,
(rspamd_mempool_destruct_t)g_hash_table_unref,
param.tree);

Loading…
Cancel
Save