Fix for PR #4147: apparently BIND now returns a status of NO_RECOVERY

at the end of gethostanswer()/getanswer()/whatever where it used to
return TRY_AGAIN. This breaks the domain list traversal in ypserv's
async DNS lookup module: it would only retry using the domain(s) from
the 'domain' or 'search' lines in /etc/resolv.conf if __dns_getanswer()
returned TRY_AGAIN.

Changed the test so that either TRY_AGAIN or NO_RECOVERY will work.
This seemed to me the best solution in the event somebody tries to
compile this code on an older system with a different version of BIND.
(You shouldn't do that of course, but then there's a lot of things
in the world that you shouldn't do and people do them anyway.)
This commit is contained in:
Bill Paul 1997-07-28 14:13:57 +00:00
parent f5f607a03e
commit 9934af38df
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=27741

View file

@ -29,7 +29,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: yp_dnslookup.c,v 1.10 1997/02/22 16:15:10 peter Exp $
* $Id: yp_dnslookup.c,v 1.11 1997/07/27 03:41:53 wpaul Exp $
*/
/*
@ -65,7 +65,7 @@
#include "yp_extern.h"
#ifndef lint
static const char rcsid[] = "$Id: yp_dnslookup.c,v 1.10 1997/02/22 16:15:10 peter Exp $";
static const char rcsid[] = "$Id: yp_dnslookup.c,v 1.11 1997/07/27 03:41:53 wpaul Exp $";
#endif
static char *parse(hp)
@ -390,7 +390,8 @@ void yp_run_dnsq()
* query has failed.
*/
if (hent == NULL) {
if (h_errno == TRY_AGAIN && q->domain && *q->domain) {
if ((h_errno == TRY_AGAIN || h_errno == NO_RECOVERY)
&& q->domain && *q->domain) {
snprintf(retrybuf, sizeof(retrybuf), "%s.%s",
q->name, *q->domain);
if (debug)