summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS3
-rw-r--r--src/groups.c2
-rw-r--r--src/id.c11
3 files changed, 12 insertions, 4 deletions
diff --git a/NEWS b/NEWS
index b549513fd..a738dab1b 100644
--- a/NEWS
+++ b/NEWS
@@ -31,6 +31,9 @@ GNU coreutils NEWS -*- outline -*-
** Improvements
+ id and groups work around an AFS-related bug whereby those programs
+ would print an invalid group number, when given no user-name argument.
+
ls --color no longer outputs unnecessary escape sequences
seq gives better diagnostics for invalid formats.
diff --git a/src/groups.c b/src/groups.c
index baac7b931..c8e617b58 100644
--- a/src/groups.c
+++ b/src/groups.c
@@ -102,7 +102,7 @@ main (int argc, char **argv)
egid = getegid ();
rgid = getgid ();
- if (!print_group_list (NULL, ruid, rgid, egid, true))
+ if (!print_group_list (getlogin (), ruid, rgid, egid, true))
ok = false;
putchar ('\n');
}
diff --git a/src/id.c b/src/id.c
index e4eda4071..9ee52e1fc 100644
--- a/src/id.c
+++ b/src/id.c
@@ -196,17 +196,22 @@ of a different user"));
error (EXIT_FAILURE, 0,
_("cannot print only names or real IDs in default format"));
+ char const *user_name;
if (argc - optind == 1)
{
- struct passwd *pwd = getpwnam (argv[optind]);
+ struct passwd const *pwd = getpwnam (argv[optind]);
if (pwd == NULL)
error (EXIT_FAILURE, 0, _("%s: No such user"), argv[optind]);
+ user_name = argv[optind];
ruid = euid = pwd->pw_uid;
rgid = egid = pwd->pw_gid;
}
else
{
+ struct passwd const *pwd;
euid = geteuid ();
+ pwd = getpwuid (euid);
+ user_name = pwd ? pwd->pw_name : NULL;
ruid = getuid ();
egid = getegid ();
rgid = getgid ();
@@ -223,7 +228,7 @@ of a different user"));
}
else if (just_group_list)
{
- if (!print_group_list (argv[optind], ruid, rgid, egid, use_name))
+ if (!print_group_list (user_name, ruid, rgid, egid, use_name))
ok = false;
}
else if (just_context)
@@ -232,7 +237,7 @@ of a different user"));
}
else
{
- print_full_info (argv[optind]);
+ print_full_info (user_name);
}
putchar ('\n');