about summary refs log tree commit diff
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;