]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
nss_compat: query NIS domain only when needed
authorAndreas Schwab <schwab@redhat.com>
Fri, 1 Jul 2011 22:37:28 +0000 (18:37 -0400)
committerUlrich Drepper <drepper@gmail.com>
Fri, 1 Jul 2011 22:37:28 +0000 (18:37 -0400)
ChangeLog
nis/nss_compat/compat-pwd.c
nis/nss_compat/compat-spwd.c

index db26998814a2fee84a8fccf44cc1ed41c73aa7c9..e3a0b709eca215111df48a4e8bb9dcfd773860cd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2011-07-01  Andreas Schwab  <schwab@redhat.com>
+
+       * nis/nss_compat/compat-pwd.c (getpwent_next_nss_netgr): Query NIS
+       domain only when needed.
+
 2011-06-30  Andreas Schwab  <schwab@redhat.com>
 
        * sysdeps/posix/getaddrinfo.c (gaih_inet): Make sure RES_USE_INET6
index 6462a85cf3e72f534d914545d109afa8b0a34762..5107f51ed75c54a17cace42e0f7dc110eb086294 100644 (file)
@@ -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)
index 6699259a495b7d2a688d07d72f4f51882b3e637e..f33dd3e0b039825ccfdfc32819915adfbd76191b 100644 (file)
@@ -318,7 +318,7 @@ getspent_next_nss_netgr (const char *name, struct spwd *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;
   size_t p2len;
 
   if (!nss_getspnam_r)
@@ -328,15 +328,7 @@ getspent_next_nss_netgr (const char *name, struct spwd *result, ent_t *ent,
   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);
@@ -361,8 +353,19 @@ getspent_next_nss_netgr (const char *name, struct spwd *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_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)