Browse Source

[Fix] Fix parsing IPv6 nameservers in resolv.conf

tags/1.6.1
Vsevolod Stakhov 7 years ago
parent
commit
639c67dbd8

+ 8
- 0
contrib/librdns/util.c View File

@@ -556,6 +556,7 @@ rdns_resolver_parse_resolv_conf_cb (struct rdns_resolver *resolver,
{
FILE *in;
char buf[BUFSIZ];
char *p;

in = fopen (path, "r");

@@ -568,6 +569,13 @@ rdns_resolver_parse_resolv_conf_cb (struct rdns_resolver *resolver,
break;
}

/* Strip trailing spaces */
p = buf + strlen (buf) - 1;
while (p > buf &&
(*p == ' ' || *p == '\t' || *p == '\r' || *p == '\n')) {
*p-- = '\0';
}

if (!rdns_resolver_conf_process_line (resolver, buf, cb, ud)) {
rdns_warn ("rdns_resolver_parse_resolv_conf: cannot parse line: %s", buf);
fclose (in);

+ 3
- 2
src/libserver/dns.c View File

@@ -240,8 +240,9 @@ rspamd_dns_resolv_conf_on_server (struct rdns_resolver *resolver,
{
struct rspamd_dns_resolver *dns_resolver = ud;

return rspamd_upstreams_add_upstream (dns_resolver->ups,
name, port, NULL);
return rspamd_upstreams_add_upstream (dns_resolver->ups, name, port,
RSPAMD_UPSTREAM_PARSE_NAMESERVER,
NULL);
}

struct rspamd_dns_resolver *

+ 38
- 6
src/libutil/upstream.c View File

@@ -563,20 +563,50 @@ rspamd_upstream_name (struct upstream *up)
}

gboolean
rspamd_upstreams_add_upstream (struct upstream_list *ups,
const gchar *str, guint16 def_port, void *data)
rspamd_upstreams_add_upstream (struct upstream_list *ups, const gchar *str,
guint16 def_port, enum rspamd_upstream_parse_type parse_type,
void *data)
{
struct upstream *up;
GPtrArray *addrs = NULL;
guint i;
rspamd_inet_addr_t *addr;
gboolean ret = FALSE;

up = g_slice_alloc0 (sizeof (*up));

if (!rspamd_parse_host_port_priority (str, &addrs,
&up->weight,
&up->name, def_port, ups->ctx->pool)) {
switch (parse_type) {
case RSPAMD_UPSTREAM_PARSE_DEFAULT:
ret = rspamd_parse_host_port_priority (str, &addrs,
&up->weight,
&up->name, def_port, ups->ctx->pool);
break;
case RSPAMD_UPSTREAM_PARSE_NAMESERVER:
addrs = g_ptr_array_sized_new (1);

ret = rspamd_parse_inet_address (&addr, str, strlen (str));

if (ret) {
if (rspamd_inet_address_get_port (addr) == 0) {
rspamd_inet_address_set_port (addr, def_port);
}

g_ptr_array_add (addrs, addr);
rspamd_mempool_add_destructor (ups->ctx->pool,
(rspamd_mempool_destruct_t)rspamd_inet_address_free,
addr);
rspamd_mempool_add_destructor (ups->ctx->pool,
(rspamd_mempool_destruct_t)rspamd_ptr_array_free_hard,
addrs);
}
else {
g_ptr_array_free (addrs, TRUE);
}

break;
}

if (!ret) {
g_slice_free1 (sizeof (*up), up);
return FALSE;
}
@@ -691,7 +721,9 @@ rspamd_upstreams_parse_line (struct upstream_list *ups,
tmp = g_malloc (len + 1);
rspamd_strlcpy (tmp, p, len + 1);

if (rspamd_upstreams_add_upstream (ups, tmp, def_port, data)) {
if (rspamd_upstreams_add_upstream (ups, tmp, def_port,
RSPAMD_UPSTREAM_PARSE_DEFAULT,
data)) {
ret = TRUE;
}


+ 8
- 2
src/libutil/upstream.h View File

@@ -110,6 +110,11 @@ gsize rspamd_upstreams_count (struct upstream_list *ups);
*/
gsize rspamd_upstreams_alive (struct upstream_list *ups);

enum rspamd_upstream_parse_type {
RSPAMD_UPSTREAM_PARSE_DEFAULT = 0,
RSPAMD_UPSTREAM_PARSE_NAMESERVER,
};

/**
* Add upstream from the string
* @param ups upstream list
@@ -118,8 +123,9 @@ gsize rspamd_upstreams_alive (struct upstream_list *ups);
* @param data optional userdata
* @return TRUE if upstream has been added
*/
gboolean rspamd_upstreams_add_upstream (struct upstream_list *ups,
const gchar *str, guint16 def_port, void *data);
gboolean rspamd_upstreams_add_upstream (struct upstream_list *ups, const gchar *str,
guint16 def_port, enum rspamd_upstream_parse_type parse_type,
void *data);

/**
* Add multiple upstreams from comma, semicolon or space separated line

+ 2
- 1
src/plugins/surbl.c View File

@@ -768,7 +768,8 @@ surbl_module_config (struct rspamd_config *cfg)
{
redir_val = ucl_obj_tostring (cur);
if (rspamd_upstreams_add_upstream (surbl_module_ctx->redirectors,
redir_val, 80, NULL)) {
redir_val, 80, RSPAMD_UPSTREAM_PARSE_DEFAULT,
NULL)) {
surbl_module_ctx->use_redirector = TRUE;
}
}

+ 3
- 1
test/rspamd_upstream_test.c View File

@@ -78,7 +78,9 @@ rspamd_upstream_test_func (void)
* Test v4/v6 priorities
*/
nls = rspamd_upstreams_create (cfg->ups_ctx);
g_assert (rspamd_upstreams_add_upstream (nls, "127.0.0.1", 0, NULL));
g_assert (rspamd_upstreams_add_upstream (nls, "127.0.0.1", 0,
RSPAMD_UPSTREAM_PARSE_DEFAULT,
NULL));
up = rspamd_upstream_get (nls, RSPAMD_UPSTREAM_RANDOM, NULL, 0);
rspamd_parse_inet_address (&paddr, "127.0.0.2", 0);
g_assert (rspamd_upstream_add_addr (up, paddr));

Loading…
Cancel
Save