mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
Fix multiple nss_compat initgroups() bugs
Compat initgroups() is completely broken; the code will always set skip_initgroups_dyn to true, so initgroups() will never be actually called, but due to the nature of the code, setgrent() won't be called either - thus, subsequent invocations of initgroups() will not return the NIS group list anymore. This is a simple patch that makes sure skip_initgroups_dyn is set only in case initgroups is not available; it also attempts to handle the unavailability of other NSS interfaces better. Conflicts: ChangeLog
This commit is contained in:
parent
cf7c9078a5
commit
3056dcdb78
@ -1,3 +1,9 @@
|
|||||||
|
2010-05-31 Petr Baudis <pasky@suse.cz>
|
||||||
|
|
||||||
|
[BZ #10085]
|
||||||
|
* nis/nss_compat/compat-initgroups.c (internal_getgrent_r): Fix
|
||||||
|
initialization of skip_initgroups_dyn.
|
||||||
|
|
||||||
2010-11-19 Ulrich Drepper <drepper@gmail.com>
|
2010-11-19 Ulrich Drepper <drepper@gmail.com>
|
||||||
|
|
||||||
* sysdeps/unix/sysv/linux/i386/bits/mman.h: Define MAP_HUGETLB.
|
* sysdeps/unix/sysv/linux/i386/bits/mman.h: Define MAP_HUGETLB.
|
||||||
|
@ -474,18 +474,21 @@ internal_getgrent_r (ent_t *ent, char *buffer, size_t buflen, const char *user,
|
|||||||
/* If the selected module does not support getgrent_r or
|
/* If the selected module does not support getgrent_r or
|
||||||
initgroups_dyn, abort. We cannot find the needed group
|
initgroups_dyn, abort. We cannot find the needed group
|
||||||
entries. */
|
entries. */
|
||||||
if (nss_getgrent_r == NULL && nss_initgroups_dyn == NULL)
|
if (nss_initgroups_dyn == NULL || nss_getgrgid_r == NULL)
|
||||||
|
{
|
||||||
|
if (nss_setgrent != NULL)
|
||||||
|
{
|
||||||
|
nss_setgrent (1);
|
||||||
|
ent->need_endgrent = true;
|
||||||
|
}
|
||||||
|
ent->skip_initgroups_dyn = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ent->skip_initgroups_dyn && nss_getgrent_r == NULL)
|
||||||
return NSS_STATUS_UNAVAIL;
|
return NSS_STATUS_UNAVAIL;
|
||||||
|
|
||||||
ent->files = false;
|
ent->files = false;
|
||||||
|
|
||||||
if (nss_initgroups_dyn == NULL && nss_setgrent != NULL)
|
|
||||||
{
|
|
||||||
nss_setgrent (1);
|
|
||||||
ent->need_endgrent = true;
|
|
||||||
}
|
|
||||||
ent->skip_initgroups_dyn = true;
|
|
||||||
|
|
||||||
return getgrent_next_nss (ent, buffer, buflen, user, group,
|
return getgrent_next_nss (ent, buffer, buflen, user, group,
|
||||||
start, size, groupsp, limit, errnop);
|
start, size, groupsp, limit, errnop);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user