bug-coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] On AFS Systems groups where not outputted correctly


From: Jim Meyering
Subject: Re: [PATCH] On AFS Systems groups where not outputted correctly
Date: Tue, 04 Mar 2008 19:06:57 +0100

Didi <address@hidden> wrote:
> After some work, here the final patch proposal.
>
> Thank you very much for your help Jim.
>
> Summary of the patch:
>
> On some systems with AFS 'id' and 'groups' outputted a very big group
> number if no user was specified on the command line. This is now
> fixed.

Thanks.
That would fail (dereference NULL) upon getpwuid failure.
How about this instead?

>From 78ee912f890d64af43fc3a49d08bc19759a42ad0 Mon Sep 17 00:00:00 2001
From: ribalba <address@hidden>
Date: Tue, 4 Mar 2008 18:03:35 +0100
Subject: [PATCH] Work around AFS bug: id and groups would print invalid group 
info

* src/id.c (main): Call print_group_list with a user name, if possible.
* src/groups.c (main): Likewise.
For details, see
http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/12852
http://thread.gmane.org/gmane.comp.gnu.coreutils.bugs/12875

Signed-off-by: ribalba <address@hidden>
---
 src/groups.c |    2 +-
 src/id.c     |   11 ++++++++---
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/src/groups.c b/src/groups.c
index baac7b9..c8e617b 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 e4eda40..9ee52e1 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');

--
1.5.4.3.432.g4eb06




reply via email to

[Prev in Thread] Current Thread [Next in Thread]