diff options
author | Ulrich Drepper <drepper@redhat.com> | 2004-07-23 06:27:05 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2004-07-23 06:27:05 +0000 |
commit | 3426e770832a1511f2952c791172f56b85d8e296 (patch) | |
tree | 0ffab15811f1113b69f3cc4c67ba98720d37e5dc /nis/nss_compat | |
parent | 54c36b13af381020233eaaff74e154aa105e13f1 (diff) | |
download | glibc-3426e770832a1511f2952c791172f56b85d8e296.tar.gz glibc-3426e770832a1511f2952c791172f56b85d8e296.tar.xz glibc-3426e770832a1511f2952c791172f56b85d8e296.zip |
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.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/nis/nss_compat/compat-initgroups.c b/nis/nss_compat/compat-initgroups.c index d30d4700c0..7f14481395 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 |