summaryrefslogtreecommitdiff
path: root/resolv
diff options
context:
space:
mode:
Diffstat (limited to 'resolv')
-rw-r--r--resolv/res_query.c7
-rw-r--r--resolv/res_send.c2
2 files changed, 6 insertions, 3 deletions
diff --git a/resolv/res_query.c b/resolv/res_query.c
index a9db837a01..4e6612c283 100644
--- a/resolv/res_query.c
+++ b/resolv/res_query.c
@@ -382,7 +382,9 @@ __libc_res_nsearch(res_state statp,
answer, anslen, answerp,
answerp2, nanswerp2, resplen2,
answerp2_malloced);
- if (ret > 0 || trailing_dot)
+ if (ret > 0 || trailing_dot
+ /* If the second response is valid then we use that. */
+ || (ret == 0 && answerp2 != NULL && resplen2 > 0))
return (ret);
saved_herrno = h_errno;
tried_as_is++;
@@ -422,7 +424,8 @@ __libc_res_nsearch(res_state statp,
answer, anslen, answerp,
answerp2, nanswerp2,
resplen2, answerp2_malloced);
- if (ret > 0)
+ if (ret > 0 || (ret == 0 && answerp2 != NULL
+ && resplen2 > 0))
return (ret);
if (answerp && *answerp != answer) {
diff --git a/resolv/res_send.c b/resolv/res_send.c
index 60743dfa8c..3273d55ceb 100644
--- a/resolv/res_send.c
+++ b/resolv/res_send.c
@@ -1351,6 +1351,7 @@ send_dg(res_state statp,
(*thisresplenp > *thisanssizp)
? *thisanssizp : *thisresplenp);
+ next_ns:
if (recvresp1 || (buf2 != NULL && recvresp2)) {
*resplen2 = 0;
return resplen;
@@ -1368,7 +1369,6 @@ send_dg(res_state statp,
goto wait;
}
- next_ns:
__res_iclose(statp, false);
/* don't retry if called from dig */
if (!statp->pfcode)