Handle DNS server failures in case of AF_UNSPEC lookups correctly
This commit is contained in:
parent
4462fad3d9
commit
4769ae77fc
@ -1,5 +1,10 @@
|
|||||||
2011-05-30 Ulrich Drepper <drepper@gmail.com>
|
2011-05-30 Ulrich Drepper <drepper@gmail.com>
|
||||||
|
|
||||||
|
[BZ #12684]
|
||||||
|
* resolv/res_send.c (__libc_res_nsend): Only go to the next name server
|
||||||
|
if both request failed.
|
||||||
|
(send_dg): In case of server errors clear resplen or *resplen2.
|
||||||
|
|
||||||
[BZ #12454]
|
[BZ #12454]
|
||||||
* elf/dl-deps.c (_dl_map_object_deps): Run initializer sorting only
|
* elf/dl-deps.c (_dl_map_object_deps): Run initializer sorting only
|
||||||
when there are multiple maps.
|
when there are multiple maps.
|
||||||
|
6
NEWS
6
NEWS
@ -16,9 +16,9 @@ Version 2.14
|
|||||||
12393, 12420, 12432, 12445, 12449, 12453, 12454, 12460, 12469, 12489,
|
12393, 12420, 12432, 12445, 12449, 12453, 12454, 12460, 12469, 12489,
|
||||||
12509, 12510, 12511, 12518, 12527, 12541, 12545, 12551, 12582, 12583,
|
12509, 12510, 12511, 12518, 12527, 12541, 12545, 12551, 12582, 12583,
|
||||||
12587, 12597, 12601, 12611, 12625, 12626, 12631, 12650, 12653, 12655,
|
12587, 12597, 12601, 12611, 12625, 12626, 12631, 12650, 12653, 12655,
|
||||||
12660, 12671, 12681, 12685, 12711, 12713, 12714, 12717, 12723, 12724,
|
12660, 12671, 12681, 12684, 12685, 12711, 12713, 12714, 12717, 12723,
|
||||||
12734, 12738, 12746, 12766, 12775, 12777, 12782, 12788, 12792, 12795,
|
12724, 12734, 12738, 12746, 12766, 12775, 12777, 12782, 12788, 12792,
|
||||||
12811, 12813, 12814
|
12795, 12811, 12813, 12814
|
||||||
|
|
||||||
* The RPC implementation in libc is obsoleted. Old programs keep working
|
* The RPC implementation in libc is obsoleted. Old programs keep working
|
||||||
but new programs cannot be linked with the routines in libc anymore.
|
but new programs cannot be linked with the routines in libc anymore.
|
||||||
|
@ -549,7 +549,7 @@ __libc_res_nsend(res_state statp, const u_char *buf, int buflen,
|
|||||||
ns, ansp, ansp2, nansp2, resplen2);
|
ns, ansp, ansp2, nansp2, resplen2);
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
return (-1);
|
return (-1);
|
||||||
if (n == 0)
|
if (n == 0 && (buf2 == NULL || resplen2 == 0))
|
||||||
goto next_ns;
|
goto next_ns;
|
||||||
} else {
|
} else {
|
||||||
/* Use datagrams. */
|
/* Use datagrams. */
|
||||||
@ -559,7 +559,7 @@ __libc_res_nsend(res_state statp, const u_char *buf, int buflen,
|
|||||||
ansp2, nansp2, resplen2);
|
ansp2, nansp2, resplen2);
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
return (-1);
|
return (-1);
|
||||||
if (n == 0)
|
if (n == 0 && (buf2 == NULL || resplen2 == 0))
|
||||||
goto next_ns;
|
goto next_ns;
|
||||||
if (v_circuit)
|
if (v_circuit)
|
||||||
// XXX Check whether both requests failed or
|
// XXX Check whether both requests failed or
|
||||||
@ -1275,10 +1275,14 @@ send_dg(res_state statp,
|
|||||||
(*thisresplenp > *thisanssizp)
|
(*thisresplenp > *thisanssizp)
|
||||||
? *thisanssizp : *thisresplenp);
|
? *thisanssizp : *thisresplenp);
|
||||||
|
|
||||||
if (recvresp1 || (buf2 != NULL && recvresp2))
|
if (recvresp1 || (buf2 != NULL && recvresp2)) {
|
||||||
|
*resplen2 = 0;
|
||||||
return resplen;
|
return resplen;
|
||||||
|
}
|
||||||
if (buf2 != NULL)
|
if (buf2 != NULL)
|
||||||
{
|
{
|
||||||
|
/* No data from the first reply. */
|
||||||
|
resplen = 0;
|
||||||
/* We are waiting for a possible second reply. */
|
/* We are waiting for a possible second reply. */
|
||||||
if (hp->id == anhp->id)
|
if (hp->id == anhp->id)
|
||||||
recvresp1 = 1;
|
recvresp1 = 1;
|
||||||
@ -1344,7 +1348,7 @@ send_dg(res_state statp,
|
|||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* poll should not have returned > 0 in this case. */
|
/* poll should not have returned > 0 in this case. */
|
||||||
abort ();
|
abort ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user