1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-26 10:04:02 +03:00

s4-resolver: make it work back with ipv4 only DNS records

It turns out that if there is no AAAA record the dns server (bind and MS
windows at least) do not return the A record when just asked for AAAA.

Autobuild-User: Matthieu Patou <mat@samba.org>
Autobuild-Date: Wed Nov  2 11:15:34 CET 2011 on sn-devel-104
This commit is contained in:
Matthieu Patou 2011-11-02 09:39:23 +01:00 committed by Matthieu Patou
parent 6b11c9119f
commit 251209bd6f

View File

@ -178,29 +178,38 @@ static struct dns_records_container get_a_aaaa_records(TALLOC_CTX *mem_ctx,
to avoid them in the parent */
reply = rk_dns_lookup(name, "AAAA");
if (!reply) {
return ret;
}
count = count2 = 0;
count = count_dns_rr(reply->head, rk_ns_t_aaaa);
count2 = count_dns_rr(reply->head, rk_ns_t_a);
if (reply) {
if (!count2) {
/*
* DNS server didn't returned A when asked for AAAA records.
* Most of the server do it, let's ask for A specificaly.
*/
reply2 = rk_dns_lookup(name, "A");
count = count_dns_rr(reply->head, rk_ns_t_aaaa);
count2 = count_dns_rr(reply->head, rk_ns_t_a);
if (!reply2) {
if (!count2) {
/*
* DNS server didn't returned A when asked for AAAA records.
* Most of the server do it, let's ask for A specificaly.
*/
reply2 = rk_dns_lookup(name, "A");
if (!reply2) {
return ret;
}
count2 = count_dns_rr(reply2->head, rk_ns_t_a);
} else {
reply2 = NULL;
}
} else {
reply = rk_dns_lookup(name, "A");
if (!reply) {
return ret;
}
count2 = count_dns_rr(reply2->head, rk_ns_t_a);
} else {
reply2 = NULL;
count = count_dns_rr(reply->head, rk_ns_t_a);
}
count += count2;
if (count == 0) {
@ -322,7 +331,7 @@ static struct dns_records_container get_srv_records(TALLOC_CTX *mem_ctx,
addrs = talloc_realloc(mem_ctx, addrs, char*, total);
for (j=0; j < c.count; j++) {
addrs[total - j] = talloc_steal(addrs, c.list[j]);
addrs[total - j - 1] = talloc_steal(addrs, c.list[j]);
}
}
}