about summary refs log tree commit diff
path: root/nis/nss_compat/compat-pwd.c
diff options
context:
space:
mode:
Diffstat (limited to 'nis/nss_compat/compat-pwd.c')
-rw-r--r--nis/nss_compat/compat-pwd.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/nis/nss_compat/compat-pwd.c b/nis/nss_compat/compat-pwd.c
index 6462a85cf3..5107f51ed7 100644
--- a/nis/nss_compat/compat-pwd.c
+++ b/nis/nss_compat/compat-pwd.c
@@ -361,7 +361,7 @@ getpwent_next_nss_netgr (const char *name, struct passwd *result, ent_t *ent,
 			 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;
 
@@ -370,15 +370,7 @@ getpwent_next_nss_netgr (const char *name, struct passwd *result, ent_t *ent,
   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);
@@ -401,8 +393,19 @@ getpwent_next_nss_netgr (const char *name, struct passwd *result, ent_t *ent,
       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)