When res_nquerydomain() returns SERVFAIL, we should try next domain.
This commit is contained in:
parent
946071cfb7
commit
bf9a791993
@ -2455,6 +2455,10 @@ res_searchN(name, target, res)
|
||||
case NO_DATA:
|
||||
case HOST_NOT_FOUND:
|
||||
break;
|
||||
case TRY_AGAIN:
|
||||
if (hp->rcode == SERVFAIL)
|
||||
break;
|
||||
/* FALLTHROUGH */
|
||||
default:
|
||||
return (-1);
|
||||
}
|
||||
@ -2514,9 +2518,9 @@ res_searchN(name, target, res)
|
||||
/* keep trying */
|
||||
break;
|
||||
case TRY_AGAIN:
|
||||
got_servfail++;
|
||||
if (hp->rcode == SERVFAIL) {
|
||||
/* try next search element, if any */
|
||||
got_servfail++;
|
||||
break;
|
||||
}
|
||||
/* FALLTHROUGH */
|
||||
@ -2537,6 +2541,10 @@ res_searchN(name, target, res)
|
||||
case NO_DATA:
|
||||
case HOST_NOT_FOUND:
|
||||
break;
|
||||
case TRY_AGAIN:
|
||||
if (hp->rcode == SERVFAIL)
|
||||
break;
|
||||
/* FALLTHROUGH */
|
||||
default:
|
||||
goto giveup;
|
||||
}
|
||||
|
@ -212,6 +212,7 @@ res_nsearch(res_state statp,
|
||||
int anslen) /* size of answer */
|
||||
{
|
||||
const char *cp, * const *domain;
|
||||
HEADER *hp = (HEADER *) answer;
|
||||
char tmp[NS_MAXDNAME];
|
||||
u_int dots;
|
||||
int trailing_dot, ret, saved_herrno;
|
||||
@ -252,6 +253,10 @@ res_nsearch(res_state statp,
|
||||
case NO_DATA:
|
||||
case HOST_NOT_FOUND:
|
||||
break;
|
||||
case TRY_AGAIN:
|
||||
if (hp->rcode == SERVFAIL)
|
||||
break;
|
||||
/* FALLTHROUGH */
|
||||
default:
|
||||
return (-1);
|
||||
}
|
||||
@ -320,10 +325,10 @@ res_nsearch(res_state statp,
|
||||
* ((HEADER *)answer)->rcode may not be set
|
||||
* to SERVFAIL in the case of a timeout.
|
||||
*
|
||||
* Either way we must terminate the search
|
||||
* and return TRY_AGAIN in order to avoid
|
||||
* non-deterministic return codes. For
|
||||
* example, loaded name servers or races
|
||||
* Either way we must return TRY_AGAIN in
|
||||
* order to avoid non-deterministic
|
||||
* return codes.
|
||||
* For example, loaded name servers or races
|
||||
* against network startup/validation (dhcp,
|
||||
* ppp, etc) can cause the search to timeout
|
||||
* on one search element, e.g. 'fu.bar.com',
|
||||
@ -331,6 +336,10 @@ res_nsearch(res_state statp,
|
||||
* next search element, e.g. 'fu.'.
|
||||
*/
|
||||
got_servfail++;
|
||||
if (hp->rcode == SERVFAIL) {
|
||||
/* try next search element, if any */
|
||||
break;
|
||||
}
|
||||
/* FALLTHROUGH */
|
||||
default:
|
||||
/* anything else implies that we're done */
|
||||
@ -349,6 +358,10 @@ res_nsearch(res_state statp,
|
||||
case NO_DATA:
|
||||
case HOST_NOT_FOUND:
|
||||
break;
|
||||
case TRY_AGAIN:
|
||||
if (hp->rcode == SERVFAIL)
|
||||
break;
|
||||
/* FALLTHROUGH */
|
||||
default:
|
||||
goto giveup;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user