Subject: Problems with getlogin() returning "root" in NetBSD 1.0/-current
To: None <>
From: Greg Earle <earle@isolar.Tujunga.CA.US>
List: current-users
Date: 12/16/1994 19:12:47
I'm running NetBSD/SPARC 1.0 (final release; not 1.0A/-current).  "xbiff" is
not working for me, because getlogin() is returning "root" instead of "earle".

netbsd4me:1:255 % whoami

netbsd4me:1:256 % who am i
earle    ttyp2   Dec 15 16:52   (:0.0)

Yet we have

netbsd4me:1:257 % logname


("logname" does little else but parrot what getlogin() returns - oh, btw, the
 logname(1) man page mentions "getlogin(3)" instead of "getlogin(2)" ... )

The only explanation I can think of is that I logged in from "xdm" and not
from a standard login, and I don't have any login shell windows (i.e., no
"xterm -ls" windows).  The only things that do a "setlogin()" are "init",
"rshd" and "login", so I assume the initial setlogin("root") that "init" does
is still lying around, inherited across all of its child processes if no
one else does a setlogin().  (And gee, what do you know, no logins since I
last rebooted and got on via "xdm".)

This begs the obvious question, why isn't this field - i.e., the "s_login"
field in the per-process session structure - being set to NULL?

I don't know what the proper fix is, but it seems like a process which becomes
a new session leader should default to NULL'ing out the s_login field, since
it looks like most programs pretty much know what to do if getlogin() returns
NULL (i.e., try $LOGNAME, or try getpwuid(getuid()) if all else fails).
(Then again, several programs think that getlogin() returning NULL is an error
 and they'd better tell you about it, with an errno to boot (-: )

On the other hand, I'm willing to listen to arguments that "xdm" should be
doing the setlogin(), either internally or via an external program; what do
all you XFree86-using folks think?

Anyway, I'm throwing this out because it seems like a bug but maybe I'm
unaware of some potential side issue with other ramifications.

	- Greg