Browse Source

[Minor] Allow to skip IDN checks in rdns

tags/2.6
Vsevolod Stakhov 3 years ago
parent
commit
e4fcd0fcda

+ 1
- 0
contrib/librdns/dns_private.h View File

@@ -151,6 +151,7 @@ struct rdns_resolver {
bool async_binded;
bool initialized;
bool enable_dnssec;
int flags;
ref_entry_t ref;
};


+ 11
- 7
contrib/librdns/packet.c View File

@@ -105,21 +105,25 @@ rdns_format_dns_name (struct rdns_resolver *resolver, const char *in,
}

/* Check for non-ascii characters */
while (p != end) {
if (*p >= 0x80) {
need_encode = true;
}
else if (*p == '.') {
labels ++;
if (!(resolver->flags & RDNS_RESOLVER_NOIDN)) {
while (p != end) {
if (*p >= 0x80) {
need_encode = true;
}
else if (*p == '.') {
labels++;
}
p++;
}
p ++;
}

if (!need_encode) {
*out = malloc (inlen + 1);

if (*out == NULL) {
return false;
}

o = *out;
memcpy (o, in, inlen);
o[inlen] = '\0';

+ 6
- 1
contrib/librdns/rdns.h View File

@@ -233,10 +233,15 @@ struct rdns_request_name {
* RDNS API
*/

enum rdns_resolver_flags {
RDNS_RESOLVER_DEFAULT,
RDNS_RESOLVER_NOIDN = (1u << 0u),
};

/**
* Create DNS resolver structure
*/
struct rdns_resolver *rdns_resolver_new (void);
struct rdns_resolver *rdns_resolver_new (int flags);

/**
* Bind resolver to specified async context

+ 8
- 7
contrib/librdns/resolver.c View File

@@ -1049,18 +1049,19 @@ rdns_resolver_free (struct rdns_resolver *resolver)


struct rdns_resolver *
rdns_resolver_new (void)
rdns_resolver_new (int flags)
{
struct rdns_resolver *new;
struct rdns_resolver *new_resolver;

new = calloc (1, sizeof (struct rdns_resolver));
new_resolver = calloc (1, sizeof (struct rdns_resolver));

REF_INIT_RETAIN (new, rdns_resolver_free);
REF_INIT_RETAIN (new_resolver, rdns_resolver_free);

new->logger = rdns_logger_internal;
new->log_data = new;
new_resolver->logger = rdns_logger_internal;
new_resolver->log_data = new_resolver;
new_resolver->flags = flags;

return new;
return new_resolver;
}

void

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

@@ -884,7 +884,8 @@ rspamd_dns_resolver_init (rspamd_logger_t *logger,
dns_resolver->max_retransmits = 2;
}

dns_resolver->r = rdns_resolver_new ();
/* IDN translation is performed in Rspamd now */
dns_resolver->r = rdns_resolver_new (RDNS_RESOLVER_NOIDN);

UErrorCode uc_err = U_ZERO_ERROR;


Loading…
Cancel
Save