aboutsummaryrefslogtreecommitdiff
path: root/nis/nss_compat
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2004-07-23 06:27:05 +0000
committerUlrich Drepper <drepper@redhat.com>2004-07-23 06:27:05 +0000
commit3426e770832a1511f2952c791172f56b85d8e296 (patch)
tree0ffab15811f1113b69f3cc4c67ba98720d37e5dc /nis/nss_compat
parent54c36b13af381020233eaaff74e154aa105e13f1 (diff)
downloadglibc-3426e770832a1511f2952c791172f56b85d8e296.zip
glibc-3426e770832a1511f2952c791172f56b85d8e296.tar.gz
glibc-3426e770832a1511f2952c791172f56b85d8e296.tar.bz2
Update.
2004-07-19 Thorsten Kukuk <kukuk@suse.de> * nis/nss_compat/compat-initgroups.c (getgrent_next_nss): Don't allocate memory for large temporary variables with alloca. * sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S: Compatibility code must have version GLIBC_2.0. Patch by Dwayne McConnell.
Diffstat (limited to 'nis/nss_compat')
-rw-r--r--nis/nss_compat/compat-initgroups.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/nis/nss_compat/compat-initgroups.c b/nis/nss_compat/compat-initgroups.c
index d30d470..7f14481 100644
--- a/nis/nss_compat/compat-initgroups.c
+++ b/nis/nss_compat/compat-initgroups.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998,1999,2000,2001,2002,2003 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@suse.de>, 1998.
@@ -221,7 +221,7 @@ check_and_add_group (const char *user, gid_t group, long int *start,
}
}
-/* get the next group from NSS (+ entry). If the NSS module supports
+/* Get the next group from NSS (+ entry). If the NSS module supports
initgroups_dyn, get all entries at once. */
static enum nss_status
getgrent_next_nss (ent_t *ent, char *buffer, size_t buflen, const char *user,
@@ -241,8 +241,12 @@ getgrent_next_nss (ent_t *ent, char *buffer, size_t buflen, const char *user,
database with getgrent_r. */
if (nss_initgroups_dyn && nss_getgrgid_r)
{
- long int mystart = 0, mysize = limit;
- gid_t *mygroupsp = __alloca (limit * sizeof (gid_t));
+ long int mystart = 0;
+ long int mysize = limit;
+ gid_t *mygroupsp = malloc (limit * sizeof (gid_t));
+
+ if (mygroupsp == NULL)
+ return NSS_STATUS_TRYAGAIN;
/* For every gid in the list we get from the NSS module,
get the whole group entry. We need to do this, since we
@@ -280,8 +284,13 @@ getgrent_next_nss (ent_t *ent, char *buffer, size_t buflen, const char *user,
check_and_add_group (user, group, start, size, groupsp,
limit, &grpbuf);
}
+
+ free (mygroupsp);
+
return NSS_STATUS_NOTFOUND;
}
+
+ free (mygroupsp);
}
/* If we come here, the NSS module does not support initgroups_dyn