From a2044b9a61d9c8ca66067b286ad9bc01cf0490b9 Mon Sep 17 00:00:00 2001 From: Kamen Mazdrashki Date: Wed, 6 Jan 2010 13:40:33 +0200 Subject: s4: Fix result check for getaddrinfo() I think this completes commit 50feca550eed7828198b7c0fc5f0e5ddc863313d. Now result should be handled correctly both for systems that support EAI_NODATA but returns EAI_NONAME (as my Ubuntu 9.x) and systems that doesn't support EAI_NODATA at all. Signed-off-by: Stefan Metzmacher --- source4/libcli/resolve/dns_ex.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'source4/libcli/resolve/dns_ex.c') diff --git a/source4/libcli/resolve/dns_ex.c b/source4/libcli/resolve/dns_ex.c index 1b5037273a..79ed78340c 100644 --- a/source4/libcli/resolve/dns_ex.c +++ b/source4/libcli/resolve/dns_ex.c @@ -283,14 +283,19 @@ static void run_child_getaddrinfo(struct dns_ex_state *state, int fd) hints.ai_flags = AI_ADDRCONFIG | AI_NUMERICSERV; ret = getaddrinfo(state->name.name, "0", &hints, &res_list); + /* try to fallback in case of error */ + if (state->do_fallback) { + switch (ret) { #ifdef EAI_NODATA - if (ret == EAI_NODATA && state->do_fallback) { -#else - if (ret == EAI_NONAME && state->do_fallback) { + case EAI_NODATA: #endif - /* getaddrinfo() doesn't handle CNAME records */ - run_child_dns_lookup(state, fd); - return; + case EAI_NONAME: + /* getaddrinfo() doesn't handle CNAME records */ + run_child_dns_lookup(state, fd); + return; + default: + break; + } } if (ret != 0) { goto done; -- cgit