return TRUE;
}
-gboolean make_dns_request_task (struct rspamd_task *task,
+static gboolean
+make_dns_request_task_common (struct rspamd_task *task,
dns_callback_type cb,
gpointer ud,
enum rdns_request_type type,
- const char *name)
+ const char *name,
+ gboolean forced)
{
gboolean ret;
- if (task->dns_requests >= task->cfg->dns_max_requests) {
+ if (!forced && task->dns_requests >= task->cfg->dns_max_requests) {
return FALSE;
}
if (ret) {
task->dns_requests ++;
- if (task->dns_requests >= task->cfg->dns_max_requests) {
+ if (!forced && task->dns_requests >= task->cfg->dns_max_requests) {
msg_info_task ("<%s> stop resolving on reaching %ud requests",
task->message_id, task->dns_requests);
}
return ret;
}
+gboolean
+make_dns_request_task (struct rspamd_task *task,
+ dns_callback_type cb,
+ gpointer ud,
+ enum rdns_request_type type,
+ const char *name)
+{
+ return make_dns_request_task_common (task, cb, ud, type, name, FALSE);
+}
+
+gboolean
+make_dns_request_task_forced (struct rspamd_task *task,
+ dns_callback_type cb,
+ gpointer ud,
+ enum rdns_request_type type,
+ const char *name)
+{
+ return make_dns_request_task_common (task, cb, ud, type, name, TRUE);
+}
+
static void rspamd_rnds_log_bridge (
void *log_data,
enum rdns_log_level level,
/* Now resolve A record for this MX */
msg_debug_spf ("resolve %s after resolving of MX",
elt_data->content.mx.name);
- if (make_dns_request_task (task,
+ if (make_dns_request_task_forced (task,
spf_record_dns_callback, (void *) cb,
RDNS_REQUEST_A,
elt_data->content.mx.name)) {
cb->rec->requests_inflight++;
}
- if (make_dns_request_task (task,
+ if (make_dns_request_task_forced (task,
spf_record_dns_callback, (void *) cb,
RDNS_REQUEST_AAAA,
elt_data->content.mx.name)) {
elt_data->content.ptr.name)) {
msg_debug_spf ("resolve %s after resolving of PTR",
elt_data->content.ptr.name);
- if (make_dns_request_task (task,
+ if (make_dns_request_task_forced (task,
spf_record_dns_callback, (void *) cb,
RDNS_REQUEST_A,
elt_data->content.ptr.name)) {
cb->rec->requests_inflight++;
}
- if (make_dns_request_task (task,
+ if (make_dns_request_task_forced (task,
spf_record_dns_callback, (void *) cb,
RDNS_REQUEST_AAAA,
elt_data->content.ptr.name)) {
cb->resolved = resolved;
msg_debug_spf ("resolve a %s", host);
- if (make_dns_request_task (task,
+ if (make_dns_request_task_forced (task,
spf_record_dns_callback, (void *) cb, RDNS_REQUEST_A, host)) {
rec->requests_inflight++;
- if (make_dns_request_task (task,
+ if (make_dns_request_task_forced (task,
spf_record_dns_callback, (void *) cb, RDNS_REQUEST_AAAA, host)) {
rec->requests_inflight++;
}
rspamd_mempool_add_destructor (task->task_pool, free, ptr);
msg_debug_spf ("resolve ptr %s for %s", ptr, host);
- if (make_dns_request_task (task,
+ if (make_dns_request_task_forced (task,
spf_record_dns_callback, (void *) cb, RDNS_REQUEST_PTR, ptr)) {
rec->requests_inflight++;
cb->resolved = resolved;
msg_debug_spf ("resolve mx for %s", host);
- if (make_dns_request_task (task,
+ if (make_dns_request_task_forced (task,
spf_record_dns_callback, (void *) cb, RDNS_REQUEST_MX, host)) {
rec->requests_inflight++;
addr->flags |= RSPAMD_SPF_FLAG_REFRENCE;
msg_debug_spf ("resolve include %s", domain);
- if (make_dns_request_task (task,
+ if (make_dns_request_task_forced (task,
spf_record_dns_callback, (void *) cb, RDNS_REQUEST_TXT, domain)) {
rec->requests_inflight++;
cb->resolved = rspamd_spf_new_addr_list (rec, domain);
msg_debug_spf ("resolve redirect %s", domain);
- if (make_dns_request_task (task,
+ if (make_dns_request_task_forced (task,
spf_record_dns_callback, (void *) cb, RDNS_REQUEST_TXT, domain)) {
rec->requests_inflight++;
cb->resolved = resolved;
msg_debug_spf ("resolve exists %s", host);
- if (make_dns_request_task (task,
+ if (make_dns_request_task_forced (task,
spf_record_dns_callback, (void *) cb, RDNS_REQUEST_A, host)) {
rec->requests_inflight++;
return FALSE;
}
- if (make_dns_request_task (task,
+ if (make_dns_request_task_forced (task,
spf_dns_callback,
(void *) rec, RDNS_REQUEST_TXT, rec->sender_domain)) {
rec->requests_inflight++;