Blob Blame History Raw
2011-07-01  Andreas Schwab  <schwab@redhat.com>

	* nis/nss_compat/compat-pwd.c (getpwent_next_nss_netgr): Query NIS
	domain only when needed.

Index: glibc-2.12-2-gc4ccff1/nis/nss_compat/compat-pwd.c
===================================================================
--- glibc-2.12-2-gc4ccff1.orig/nis/nss_compat/compat-pwd.c
+++ glibc-2.12-2-gc4ccff1/nis/nss_compat/compat-pwd.c
@@ -360,7 +360,7 @@ getpwent_next_nss_netgr (const char *nam
 			 char *group, char *buffer, size_t buflen,
 			 int *errnop)
 {
-  char *curdomain, *host, *user, *domain, *p2;
+  char *curdomain = NULL, *host, *user, *domain, *p2;
   int status;
   size_t p2len;
 
@@ -369,15 +369,7 @@ getpwent_next_nss_netgr (const char *nam
   if (!nss_getpwnam_r)
     return NSS_STATUS_UNAVAIL;
 
-  if (yp_get_default_domain (&curdomain) != YPERR_SUCCESS)
-    {
-      ent->netgroup = false;
-      ent->first = false;
-      give_pwd_free (&ent->pwd);
-      return NSS_STATUS_UNAVAIL;
-    }
-
-  if (ent->first == true)
+  if (ent->first)
     {
       memset (&ent->netgrdata, 0, sizeof (struct __netgrent));
       __internal_setnetgrent (group, &ent->netgrdata);
@@ -403,8 +395,19 @@ getpwent_next_nss_netgr (const char *nam
       if (user == NULL || user[0] == '-')
 	continue;
 
-      if (domain != NULL && strcmp (curdomain, domain) != 0)
-	continue;
+      if (domain != NULL)
+	{
+	  if (curdomain == NULL
+	      && yp_get_default_domain (&curdomain) != YPERR_SUCCESS)
+	    {
+	      __internal_endnetgrent (&ent->netgrdata);
+	      ent->netgroup = false;
+	      give_pwd_free (&ent->pwd);
+	      return NSS_STATUS_UNAVAIL;
+	    }
+	  if (strcmp (curdomain, domain) != 0)
+	    continue;
+	}
 
       /* If name != NULL, we are called from getpwnam.  */
       if (name != NULL)
Index: glibc-2.12-2-gc4ccff1/nis/nss_compat/compat-spwd.c
===================================================================
--- glibc-2.12-2-gc4ccff1.orig/nis/nss_compat/compat-spwd.c
+++ glibc-2.12-2-gc4ccff1/nis/nss_compat/compat-spwd.c
@@ -317,7 +317,7 @@ getspent_next_nss_netgr (const char *nam
 			 char *group, char *buffer, size_t buflen,
 			 int *errnop)
 {
-  char *curdomain, *host, *user, *domain, *p2;
+  char *curdomain = NULL, *host, *user, *domain, *p2;
   size_t p2len;
 
   if (!nss_getspnam_r)
@@ -327,15 +327,7 @@ getspent_next_nss_netgr (const char *nam
   if (ent->setent_status != NSS_STATUS_SUCCESS)
     return ent->setent_status;
 
-  if (yp_get_default_domain (&curdomain) != YPERR_SUCCESS)
-    {
-      ent->netgroup = false;
-      ent->first = false;
-      give_spwd_free (&ent->pwd);
-      return NSS_STATUS_UNAVAIL;
-    }
-
-  if (ent->first == true)
+  if (ent->first)
     {
       memset (&ent->netgrdata, 0, sizeof (struct __netgrent));
       __internal_setnetgrent (group, &ent->netgrdata);
@@ -362,8 +354,19 @@ getspent_next_nss_netgr (const char *nam
       if (user == NULL || user[0] == '-')
 	continue;
 
-      if (domain != NULL && strcmp (curdomain, domain) != 0)
-	continue;
+      if (domain != NULL)
+	{
+	  if (curdomain == NULL
+	      && yp_get_default_domain (&curdomain) != YPERR_SUCCESS)
+	    {
+	      __internal_endnetgrent (&ent->netgrdata);
+	      ent->netgroup = false;
+	      give_spwd_free (&ent->pwd);
+	      return NSS_STATUS_UNAVAIL;
+	    }
+	  if (strcmp (curdomain, domain) != 0)
+	    continue;
+	}
 
       /* If name != NULL, we are called from getpwnam */
       if (name != NULL)