diff options
author | Eric Blake <ebb9@byu.net> | 2009-12-04 08:06:55 -0700 |
---|---|---|
committer | Eric Blake <ebb9@byu.net> | 2009-12-04 19:18:06 -0700 |
commit | 9b4b38f56e854f8f1343fed9dbc225ffbb1d77d4 (patch) | |
tree | 019ad2a21b62a3ec30eec76b5891c8a749abc377 | |
parent | 5224fbd6f904633b72f4bfa9d64e903744b0beae (diff) | |
download | coreutils-9b4b38f56e854f8f1343fed9dbc225ffbb1d77d4.tar.xz |
id: handle systems without getgroups support
If getgroups failed with ENOSYS, mgetgroups would unnecessarily
fail, and that provoked id into freeing an uninitialized pointer.
Meanwhile, we were not using xalloc_die properly. Both issues
are better solved in gnulib, by introducing xgetgroups; this
patch uses the new interface.
Regression introduced by commit 6a31fd8d7.
* gnulib: Update, for mgetgroups improvments.
* src/id.c (print_full_info): Adjust caller to die on allocation
failure, and no longer worry about ENOSYS.
* src/group-list.c (print_group_list): Likewise.
* src/setuidgid.c (main): Likewise.
* NEWS: Mention the fix.
* THANKS: Update.
Reported by Scott Harrison.
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | THANKS | 1 | ||||
m--------- | gnulib | 0 | ||||
-rw-r--r-- | src/group-list.c | 4 | ||||
-rw-r--r-- | src/id.c | 4 | ||||
-rw-r--r-- | src/setuidgid.c | 2 |
6 files changed, 9 insertions, 5 deletions
@@ -4,6 +4,9 @@ GNU coreutils NEWS -*- outline -*- ** Bug fixes + id no longer crashes on systems without supplementary group support. + [bug introduced in coreutils-8.1] + rm once again handles zero-length arguments properly. The rewrite to make rm use fts introduced a regression whereby a command like "rm a '' b" would fail to remove "a" and "b", due to @@ -529,6 +529,7 @@ Samuli Karkkainen Samuli.Karkkainen@hut.fi Sander van Malssen svm@kozmix.ow.nl Santiago Vila Doncel sanvila@unex.es Savochkin Andrey Vladimirovich saw@msu.ru +Scott Harrison scott.gnu.2009@scottrix.co.uk Scott Lurndal slurn@griffin.engr.sgi.com Sébastien Maret smaret@umich.edu Sergei Steshenko sergstesh@yahoo.com diff --git a/gnulib b/gnulib -Subproject cdfe647f8d29540cdfe90cef0fa568c5d2fd448 +Subproject 3e035a5d686888e5eba0b622dac459b65cdd99d diff --git a/src/group-list.c b/src/group-list.c index 1fadd0c57..a4b1f6dc6 100644 --- a/src/group-list.c +++ b/src/group-list.c @@ -58,9 +58,9 @@ print_group_list (const char *username, gid_t *groups; int i; - int n_groups = mgetgroups (username, (pwd ? pwd->pw_gid : (gid_t) -1), + int n_groups = xgetgroups (username, (pwd ? pwd->pw_gid : (gid_t) -1), &groups); - if (n_groups < 0 && errno != ENOSYS) + if (n_groups < 0) { if (username) { @@ -296,9 +296,9 @@ print_full_info (const char *username) gid_t *groups; int i; - int n_groups = mgetgroups (username, (pwd ? pwd->pw_gid : (gid_t) -1), + int n_groups = xgetgroups (username, (pwd ? pwd->pw_gid : (gid_t) -1), &groups); - if (n_groups < 0 && errno != ENOSYS) + if (n_groups < 0) { if (username) { diff --git a/src/setuidgid.c b/src/setuidgid.c index 0adac215c..2710bc9de 100644 --- a/src/setuidgid.c +++ b/src/setuidgid.c @@ -179,7 +179,7 @@ main (int argc, char **argv) #if HAVE_SETGROUPS if (n_gids == 0) { - int n = mgetgroups (pwd->pw_name, pwd->pw_gid, &gids); + int n = xgetgroups (pwd->pw_name, pwd->pw_gid, &gids); if (n <= 0) error (EXIT_FAILURE, errno, _("failed to get groups for user %s"), quote (pwd->pw_name)); |