Re: whoami problem when two or more users have the same uid

2008-08-11 Thread flaviano petrocchi
Thanks for your explanation Bob. I will keep root above my other user in the
passwd file, so that all the scripts out there will continue to work properly.

Best regards.

Flaviano

2008/8/10 Bob Proulx [EMAIL PROTECTED]:
 First, thank you for making this suggestion.  However I do not believe
 this to be a deficency of the whoami command.  This is expected
 behavior in the GNU and Unix systems.

 flaviano petrocchi wrote:
 I use an alternate root user with login capabilities, created with
 useradd -u 0 -o -g 0 -G 0 -m -s /bin/bash superuser.

 Note that you are simply creating a new way to log into the account.
 You are not creating a new account.  You are simply enabling a new way
 to log into the existing root superuser account.  I think that is a
 key point.  It isn't a separate account.  This isn't even a documented
 behavior as far as I know.  It is simply the way the implementation
 has always worked.

 If I login with superuser, whoami returns root or superuser
 depending on which user comes before in the /etc/passwd file.

 Yes.  That is because the password file defines the mapping from uid
 to name.  The first one in the file defines the name.  This is the way
 it has always worked.  For decades.

 echo $USER instead always returns the correct user name.

 Caution here.  The USER variable is sometimes overridden by the
 operating system.  In particular Red Hat overrides USER and LOGNAME
 from their original settings in /etc/profile.

 Traditionally LOGNAME referred to the name the user used to log into
 the system.  (This was also available with 'who am i' too.)  RH breaks
 this by setting both LOGNAME and USER to the output of 'id -un'.
 Other systems that I am familiar with (Debian, Ubuntu, SuSE, HP-UX,
 Solaris) do not override the value.

 I think whoami should always report the correct name maybe

 The disagreement here is on the correct name.  The correct name is
 the named defined for the current effective user id from the password
 database (not necessarily the /etc/passwd file for example if NIS/YP
 or LDAP is in use).  The correct name is not the $USER nor $LOGNAME
 since those might be changed and invalid in the environment.

 retrieving the USER environment variable instead of parsing the
 passwd file. Those who use whoami to check if a user is root should
 instead use id -u and check if the uid is 0.

 The 'whoami' command must map the current user id to the associated
 name.  Otherwise too much system breakage would occur.  For example
 contemplate the following:

  $ USER=foo whoami
  foo

 That wouldn't be good.  If a script desires to use $USER then the
 script should simply use $USER instead of calling 'whoami'.  Also
 although I admit that while I usually use 'whoami' in my scripts the
 standard POSIX standard method would be to use 'id -un'.

 Note that 'whoami' is a BSD derived utility and isn't standardized by
 POSIX.  BSD therefore is the reference for the behavior of this
 command.  This has decades of legacy behavior and therefore it really
 isn't practical to try to change the behavior now.  Instead new
 behavior should be part of a new command.  But in this case what you
 wish is easily available simply by using the $USER value directly so
 there really isn't a need to put this in a command at all.

 See also the 'logname' and 'who am i' commands.

 Bob



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


Re: whoami problem when two or more users have the same uid

2008-08-10 Thread Bob Proulx
First, thank you for making this suggestion.  However I do not believe
this to be a deficiency of the whoami command.  This is expected
behavior in the GNU and Unix systems.

flaviano petrocchi wrote:
 I use an alternate root user with login capabilities, created with
 useradd -u 0 -o -g 0 -G 0 -m -s /bin/bash superuser.

Note that you are simply creating a new way to log into the account.
You are not creating a new account.  You are simply enabling a new way
to log into the existing root superuser account.  I think that is a
key point.  It isn't a separate account.  This isn't even a documented
behavior as far as I know.  It is simply the way the implementation
has always worked.

 If I login with superuser, whoami returns root or superuser
 depending on which user comes before in the /etc/passwd file.

Yes.  That is because the password file defines the mapping from uid
to name.  The first one in the file defines the name.  This is the way
it has always worked.  For decades.

 echo $USER instead always returns the correct user name.

Caution here.  The USER variable is sometimes overridden by the
operating system.  In particular Red Hat overrides USER and LOGNAME
from their original settings in /etc/profile.

Traditionally LOGNAME referred to the name the user used to log into
the system.  (This was also available with 'who am i' too.)  RH breaks
this by setting both LOGNAME and USER to the output of 'id -un'.
Other systems that I am familiar with (Debian, Ubuntu, SuSE, HP-UX,
Solaris) do not override the value.

 I think whoami should always report the correct name maybe

The disagreement here is on the correct name.  The correct name is
the named defined for the current effective user id from the password
database (not necessarily the /etc/passwd file for example if NIS/YP
or LDAP is in use).  The correct name is not the $USER nor $LOGNAME
since those might be changed and invalid in the environment.

 retrieving the USER environment variable instead of parsing the
 passwd file. Those who use whoami to check if a user is root should
 instead use id -u and check if the uid is 0.

The 'whoami' command must map the current user id to the associated
name.  Otherwise too much system breakage would occur.  For example
contemplate the following:

  $ USER=foo whoami
  foo

That wouldn't be good.  If a script desires to use $USER then the
script should simply use $USER instead of calling 'whoami'.  Also
although I admit that while I usually use 'whoami' in my scripts the
standard POSIX standard method would be to use 'id -un'.

Note that 'whoami' is a BSD derived utility and isn't standardized by
POSIX.  BSD therefore is the reference for the behavior of this
command.  This has decades of legacy behavior and therefore it really
isn't practical to try to change the behavior now.  Instead new
behavior should be part of a new command.  But in this case what you
wish is easily available simply by using the $USER value directly so
there really isn't a need to put this in a command at all.

See also the 'logname' and 'who am i' commands.

Bob


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