diff options
Diffstat (limited to 'nis/nis_lookup.c')
-rw-r--r-- | nis/nis_lookup.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/nis/nis_lookup.c b/nis/nis_lookup.c index 9677b4d3d1..839ee4ee42 100644 --- a/nis/nis_lookup.c +++ b/nis/nis_lookup.c @@ -1,5 +1,4 @@ -/* Copyright (C) 1997-1999, 2004, 2005, 2006, 2007 - Free Software Foundation, Inc. +/* Copyright (C) 1997-1999, 2004, 2005, 2006 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@uni-paderborn.de>, 1997. @@ -75,6 +74,7 @@ nis_lookup (const_nis_name name, const unsigned int flags) { static const struct timeval RPCTIMEOUT = {10, 0}; enum clnt_stat result; + char ndomain[strlen (req.ns_name) + 1]; again: result = clnt_call (bptr.clnt, NIS_LOOKUP, @@ -127,18 +127,27 @@ nis_lookup (const_nis_name name, const unsigned int flags) /* Otherwise __nisfind_server will not do anything. */ dir = NULL; - if (__nisfind_server (req.ns_name, 1, &dir, &bptr, - flags & ~MASTER_ONLY) + if (__nisfind_server (req.ns_name, 1, &dir) != NIS_SUCCESS) goto out; + + if (__nisbind_create (&bptr, + dir->do_servers.do_servers_val, + dir->do_servers.do_servers_len, + flags) != NIS_SUCCESS) + { + nis_free_directory (dir); + goto out; + } } else if (__nisbind_next (&bptr) != NIS_SUCCESS) { /* No more servers to search. Try parent. */ - const char *ndomain = __nis_domain_of (req.ns_name); + nis_domain_of_r (req.ns_name, ndomain, + sizeof (ndomain)); req.ns_name = strdupa (ndomain); - if (strcmp (req.ns_name, ".") == 0) + if (strcmp (ndomain, ".") == 0) { NIS_RES_STATUS (res) = NIS_NAMEUNREACHABLE; goto out; |