Peter Fales <[EMAIL PROTECTED]> wrote:
> Trying to build http://meyering.net/cu/coreutils-6.10.133-677610.tar.gz
> and getting test failures on darwin (Mac OS/X), as  "id -G" is returning
> incorrect values.  It seems that in id.c, we have
>
>       214       user_name = pwd ? pwd->pw_name : NULL;
>
> where user_name caches a value returned by getpwuid().  However, down
> in print_group_list() at line 43, getpwuid() is called again, and it
> causes the value pointed to by username to be corrupted.   I've attached
> a patch which appears to help.
...
> diff -ur coreutils-6.10.133-677610/src/id.c 
> coreutils-6.10.133-677610.new/src/id.c
> --- coreutils-6.10.133-677610/src/id.c        2008-03-13 18:09:44.000000000 
> -0500
> +++ coreutils-6.10.133-677610.new/src/id.c    2008-03-24 11:38:14.000000000 
> -0500
> @@ -211,7 +211,7 @@
>        struct passwd const *pwd;
>        euid = geteuid ();
>        pwd = getpwuid (euid);
> -      user_name = pwd ? pwd->pw_name : NULL;
> +      user_name = pwd ? strdup(pwd->pw_name) : NULL;

Thanks a lot!
I'm applying this patch:

>From f7d1c59c224f81a8bab5fa2afcaf815988f50467 Mon Sep 17 00:00:00 2001
From: Peter Fales <[EMAIL PROTECTED]>
Date: Tue, 25 Mar 2008 22:44:01 +0100
Subject: [PATCH] id bug fix: don't point to potentially clobbered static storage

On at least Mac OS, when calling getpwuid twice with the same UID,
the static storage containing results from the first call is
invalidated by the second call.
* src/id.c (main): Point to a copy of the user name string.

Signed-off-by: Jim Meyering <[EMAIL PROTECTED]>
---
 src/id.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/id.c b/src/id.c
index 9ee52e1..a178714 100644
--- a/src/id.c
+++ b/src/id.c
@@ -211,7 +211,7 @@ of a different user"));
       struct passwd const *pwd;
       euid = geteuid ();
       pwd = getpwuid (euid);
-      user_name = pwd ? pwd->pw_name : NULL;
+      user_name = pwd ? xstrdup (pwd->pw_name) : NULL;
       ruid = getuid ();
       egid = getegid ();
       rgid = getgid ();
--
1.5.5.rc0.22.g467c


_______________________________________________
Bug-coreutils mailing list
Bug-coreutils@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-coreutils

Reply via email to