mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-09 23:00:07 +00:00
Optimize last initgroups patch a bit.
This commit is contained in:
parent
3056dcdb78
commit
eaca75697f
@ -1,3 +1,8 @@
|
|||||||
|
2010-11-22 Ulrich Drepper <drepper@gmail.com>
|
||||||
|
|
||||||
|
* nis/nss_compat/compat-initgroups.c (internal_getgrent_r): Optimize
|
||||||
|
last patch a bit. Pretty printing
|
||||||
|
|
||||||
2010-05-31 Petr Baudis <pasky@suse.cz>
|
2010-05-31 Petr Baudis <pasky@suse.cz>
|
||||||
|
|
||||||
[BZ #10085]
|
[BZ #10085]
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1998-2004, 2006, 2007, 2009 Free Software Foundation, Inc.
|
/* Copyright (C) 1998-2004,2006,2007,2009,2010 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Thorsten Kukuk <kukuk@suse.de>, 1998.
|
Contributed by Thorsten Kukuk <kukuk@suse.de>, 1998.
|
||||||
|
|
||||||
@ -288,12 +288,12 @@ getgrent_next_nss (ent_t *ent, char *buffer, size_t buflen, const char *user,
|
|||||||
return NSS_STATUS_TRYAGAIN;
|
return NSS_STATUS_TRYAGAIN;
|
||||||
|
|
||||||
/* For every gid in the list we get from the NSS module,
|
/* For every gid in the list we get from the NSS module,
|
||||||
get the whole group entry. We need to do this, since we
|
get the whole group entry. We need to do this, since we
|
||||||
need the group name to check if it is in the blacklist.
|
need the group name to check if it is in the blacklist.
|
||||||
In worst case, this is as twice as slow as stepping with
|
In worst case, this is as twice as slow as stepping with
|
||||||
getgrent_r through the whole group database. But for large
|
getgrent_r through the whole group database. But for large
|
||||||
group databases this is faster, since the user can only be
|
group databases this is faster, since the user can only be
|
||||||
in a limited number of groups. */
|
in a limited number of groups. */
|
||||||
if (nss_initgroups_dyn (user, group, &mystart, &mysize, &mygroups,
|
if (nss_initgroups_dyn (user, group, &mystart, &mysize, &mygroups,
|
||||||
limit, errnop) == NSS_STATUS_SUCCESS)
|
limit, errnop) == NSS_STATUS_SUCCESS)
|
||||||
{
|
{
|
||||||
@ -426,7 +426,7 @@ internal_getgrent_r (ent_t *ent, char *buffer, size_t buflen, const char *user,
|
|||||||
}
|
}
|
||||||
while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines. */
|
while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines. */
|
||||||
/* Parse the line. If it is invalid, loop to
|
/* Parse the line. If it is invalid, loop to
|
||||||
get the next line of the file to parse. */
|
get the next line of the file to parse. */
|
||||||
!(parse_res = _nss_files_parse_grent (p, &grpbuf, data, buflen,
|
!(parse_res = _nss_files_parse_grent (p, &grpbuf, data, buflen,
|
||||||
errnop)));
|
errnop)));
|
||||||
|
|
||||||
@ -477,15 +477,15 @@ internal_getgrent_r (ent_t *ent, char *buffer, size_t buflen, const char *user,
|
|||||||
if (nss_initgroups_dyn == NULL || nss_getgrgid_r == NULL)
|
if (nss_initgroups_dyn == NULL || nss_getgrgid_r == NULL)
|
||||||
{
|
{
|
||||||
if (nss_setgrent != NULL)
|
if (nss_setgrent != NULL)
|
||||||
{
|
{
|
||||||
nss_setgrent (1);
|
nss_setgrent (1);
|
||||||
ent->need_endgrent = true;
|
ent->need_endgrent = true;
|
||||||
}
|
}
|
||||||
ent->skip_initgroups_dyn = true;
|
ent->skip_initgroups_dyn = true;
|
||||||
}
|
|
||||||
|
|
||||||
if (ent->skip_initgroups_dyn && nss_getgrent_r == NULL)
|
if (nss_getgrent_r == NULL)
|
||||||
return NSS_STATUS_UNAVAIL;
|
return NSS_STATUS_UNAVAIL;
|
||||||
|
}
|
||||||
|
|
||||||
ent->files = false;
|
ent->files = false;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user