First test case with logname 9.1 and glibc 2.36: $ echo $LOGNAME nicolas $ logname nicolas $ su --login root $ echo $LOGNAME root $ logname nicolas $ logname (musl) root $ logname (uclibc) root
Second test case, with a minimal chroot, no /proc and busybox login: $ echo $LOGNAME nicolas $ logname logname: no login name $ busybox logname logname: getlogin: No such file or directory $ logname (musl) nicolas $ logname (uclibc) nicolas It seems getlogin() is malfunctioning only with glibc. The following patch with "equivalent code" fixes the issue: --- logname.c.orig +++ logname.c @@ -71,7 +71,11 @@ /* POSIX requires using getlogin (or equivalent code) and prohibits using a fallback technique. */ - cp = getlogin (); + #if __GLIBC__ + cp = getenv ("LOGNAME"); + #else + cp = getlogin (); + #endif if (! cp) error (EXIT_FAILURE, 0, _("no login name")); Adding a permanent fix to gnulib/getlogin.c code might be a better solution. NB