aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rambler-co.ru>2009-06-05 19:19:44 +0400
committerVsevolod Stakhov <vsevolod@rambler-co.ru>2009-06-05 19:19:44 +0400
commit58f19b06569c3ef46949874e2c3d5bb62ec54fc2 (patch)
tree3a88f833153eef8c0e1dd39d61c27001f50e43c5 /src/plugins
parentf5c08786352dcd39f0669f61cd2b465dc8837279 (diff)
downloadrspamd-58f19b06569c3ef46949874e2c3d5bb62ec54fc2.tar.gz
rspamd-58f19b06569c3ef46949874e2c3d5bb62ec54fc2.zip
* Add urls command for extracting urls
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/surbl.c38
1 files changed, 29 insertions, 9 deletions
diff --git a/src/plugins/surbl.c b/src/plugins/surbl.c
index eb7ed2f20..020bf7764 100644
--- a/src/plugins/surbl.c
+++ b/src/plugins/surbl.c
@@ -37,6 +37,7 @@ static struct surbl_ctx *surbl_module_ctx = NULL;
static int surbl_test_url (struct worker_task *task);
static void dns_callback (int result, char type, int count, int ttl, void *addresses, void *data);
+static void process_dns_results (struct worker_task *task, struct suffix_item *suffix, char *url, uint32_t addr);
int
surbl_module_init (struct config_file *cfg, struct module_ctx **ctx)
@@ -311,9 +312,16 @@ make_surbl_requests (struct uri* url, struct worker_task *task, GTree *tree)
*host_end = '\0';
param->host_resolve = memory_pool_strdup (task->task_pool, surbl_req);
*host_end = '.';
- msg_debug ("surbl_test_url: send surbl dns request %s", surbl_req);
- evdns_resolve_ipv4 (surbl_req, DNS_QUERY_NO_SEARCH, dns_callback, (void *)param);
- param->task->save.saved ++;
+ if (task->cmd == CMD_URLS) {
+ process_dns_results (task, suffix, param->host_resolve, 0);
+ /* Immideately break cycle */
+ break;
+ }
+ else {
+ msg_debug ("surbl_test_url: send surbl dns request %s", surbl_req);
+ evdns_resolve_ipv4 (surbl_req, DNS_QUERY_NO_SEARCH, dns_callback, (void *)param);
+ param->task->save.saved ++;
+ }
}
else {
msg_debug ("make_surbl_requests: request %s is already sent", surbl_req);
@@ -334,6 +342,12 @@ process_dns_results (struct worker_task *task, struct suffix_item *suffix, char
GList *cur;
struct surbl_bit_item *bit;
int len, found = 0;
+
+ if (task->cmd == CMD_URLS) {
+ insert_result (task, surbl_module_ctx->metric, suffix->symbol, 1,
+ g_list_prepend (NULL, memory_pool_strdup (task->task_pool, url)));
+ return;
+ }
if ((c = strchr (suffix->symbol, '%')) != NULL && *(c + 1) == 'b') {
cur = g_list_first (surbl_module_ctx->bits);
@@ -639,17 +653,23 @@ tree_url_callback (gpointer key, gpointer value, void *data)
struct uri *url = value;
msg_debug ("surbl_test_url: check url %s", struri (url));
- if (surbl_module_ctx->use_redirector) {
- register_redirector_call (url, param->task, param->tree);
- param->task->save.saved++;
+
+ if (param->task->cmd == CMD_URLS) {
+ make_surbl_requests (url, param->task, param->tree);
}
else {
- if (param->task->worker->srv->cfg->memcached_servers_num > 0) {
- register_memcached_call (url, param->task, param->tree);
+ if (surbl_module_ctx->use_redirector) {
+ register_redirector_call (url, param->task, param->tree);
param->task->save.saved++;
}
else {
- make_surbl_requests (url, param->task, param->tree);
+ if (param->task->worker->srv->cfg->memcached_servers_num > 0) {
+ register_memcached_call (url, param->task, param->tree);
+ param->task->save.saved++;
+ }
+ else {
+ make_surbl_requests (url, param->task, param->tree);
+ }
}
}