summaryrefslogtreecommitdiff
path: root/nis/nss_nis/nis-initgroups.c
diff options
context:
space:
mode:
Diffstat (limited to 'nis/nss_nis/nis-initgroups.c')
-rw-r--r--nis/nss_nis/nis-initgroups.c29
1 files changed, 13 insertions, 16 deletions
diff --git a/nis/nss_nis/nis-initgroups.c b/nis/nss_nis/nis-initgroups.c
index 33a9662b4c..647adf5119 100644
--- a/nis/nss_nis/nis-initgroups.c
+++ b/nis/nss_nis/nis-initgroups.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998-2000, 2002, 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2000,2002,2003,2004,2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@suse.de>, 1998.
@@ -30,6 +30,7 @@
#include <sys/param.h>
#include "nss-nis.h"
+#include <libnsl.h>
/* Get the declaration of the parser function. */
#define ENTNAME grent
@@ -99,25 +100,23 @@ static enum nss_status
internal_getgrent_r (struct group *grp, char *buffer, size_t buflen,
int *errnop, intern_t *intern)
{
- struct parser_data *data = (void *) buffer;
- int parse_res;
- char *p;
-
if (intern->start == NULL)
return NSS_STATUS_NOTFOUND;
/* Get the next entry until we found a correct one. */
+ int parse_res;
do
{
if (intern->next == NULL)
return NSS_STATUS_NOTFOUND;
- p = strncpy (buffer, intern->next->val, buflen);
+ char *p = strncpy (buffer, intern->next->val, buflen);
while (isspace (*p))
++p;
- parse_res = _nss_files_parse_grent (p, grp, data, buflen, errnop);
- if (parse_res == -1)
+ parse_res = _nss_files_parse_grent (p, grp, (void *) buffer, buflen,
+ errnop);
+ if (__builtin_expect (parse_res == -1, 0))
return NSS_STATUS_TRYAGAIN;
intern->next = intern->next->next;
}
@@ -166,13 +165,12 @@ initgroups_netid (uid_t uid, gid_t group, long int *start, long int *size,
ssize_t keylen = snprintf (key, sizeof (key), "unix.%lu@%s",
(unsigned long int) uid, domainname);
- enum nss_status retval;
char *result;
int reslen;
- retval = yperr2nss (yp_match (domainname, "netid.byname", key, keylen,
- &result, &reslen));
- if (retval != NSS_STATUS_SUCCESS)
- return retval;
+ int yperr = yp_match (domainname, "netid.byname", key, keylen, &result,
+ &reslen);
+ if (__builtin_expect (yperr != YPERR_SUCCESS, 0))
+ return yperr2nss (yperr);
/* Parse the result: following the colon is a comma separated list of
group IDs. */
@@ -207,7 +205,6 @@ initgroups_netid (uid_t uid, gid_t group, long int *start, long int *size,
if (*start == *size)
{
/* Need a bigger buffer. */
- gid_t *newgroups;
long int newsize;
if (limit > 0 && *size == limit)
@@ -219,7 +216,7 @@ initgroups_netid (uid_t uid, gid_t group, long int *start, long int *size,
else
newsize = MIN (limit, 2 * *size);
- newgroups = realloc (groups, newsize * sizeof (*groups));
+ gid_t *newgroups = realloc (groups, newsize * sizeof (*groups));
if (newgroups == NULL)
goto errout;
*groupsp = groups = newgroups;
@@ -247,7 +244,7 @@ _nss_nis_initgroups_dyn (const char *user, gid_t group, long int *start,
return NSS_STATUS_UNAVAIL;
/* Check whether we are supposed to use the netid.byname map. */
- if (_nis_default_nss () & NSS_FLAG_NETID_AUTHORITATIVE)
+ if (_nsl_default_nss () & NSS_FLAG_NETID_AUTHORITATIVE)
{
/* We need the user ID. */
uid_t uid;