aboutsummaryrefslogtreecommitdiff
path: root/nis/nis_lookup.c
diff options
context:
space:
mode:
Diffstat (limited to 'nis/nis_lookup.c')
-rw-r--r--nis/nis_lookup.c21
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;