summaryrefslogtreecommitdiff
path: root/source4/libcli/resolve
diff options
context:
space:
mode:
authorLandon Fuller <landonf@bikemonkey.org>2013-02-16 22:57:40 -0500
committerAndrew Bartlett <abartlet@samba.org>2013-02-17 07:06:36 +0100
commit6dfb35f3ff7ad2d2089c0a3e5eab342384e45e4c (patch)
treed5ed356d6aeb395e0453b83e66b70f2404387a9b /source4/libcli/resolve
parent05235d5b444558f6d06ef12ea7d74850800425cf (diff)
downloadsamba-6dfb35f3ff7ad2d2089c0a3e5eab342384e45e4c.tar.gz
samba-6dfb35f3ff7ad2d2089c0a3e5eab342384e45e4c.tar.bz2
samba-6dfb35f3ff7ad2d2089c0a3e5eab342384e45e4c.zip
Fallback to the internal resolver on EAI_FAIL.
On Linux, non-RFC 1034-complaint names (such as gc._msdsc.example.org) will result in the resolver returning the non-POSIX EAI_NODATA. In that case, the case statement here would fall back on the internal resolver, allowing resolution to complete successfully. On FreeBSD, the libc resolver uses the same validation code, but the POSIX result of EAI_FAIL is returned instead of EAI_NODATA. Since there was no case for this error code, no fallback to the internal resolver would occur. This led to replication failing on FreeBSD. Reviewed-by: Andrew Bartlett <abartlet@samba.org> Autobuild-User(master): Andrew Bartlett <abartlet@samba.org> Autobuild-Date(master): Sun Feb 17 07:06:36 CET 2013 on sn-devel-104
Diffstat (limited to 'source4/libcli/resolve')
-rw-r--r--source4/libcli/resolve/dns_ex.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/source4/libcli/resolve/dns_ex.c b/source4/libcli/resolve/dns_ex.c
index bc64e8dd8d..1226ed6c18 100644
--- a/source4/libcli/resolve/dns_ex.c
+++ b/source4/libcli/resolve/dns_ex.c
@@ -400,8 +400,10 @@ static void run_child_getaddrinfo(struct dns_ex_state *state, int fd)
#ifdef EAI_NODATA
case EAI_NODATA:
#endif
+ case EAI_FAIL:
+ /* Linux returns EAI_NODATA on non-RFC1034-compliant names. FreeBSD returns EAI_FAIL */
case EAI_NONAME:
- /* getaddrinfo() doesn't handle CNAME records */
+ /* getaddrinfo() doesn't handle CNAME or non-RFC1034 compatible records */
run_child_dns_lookup(state, fd);
return;
default: