Seth Woolley's Man Viewer

getlogin(3) - cuserid, getlogin, getlogin_r, cuserid, getlogin, getlogin_r - get user name - man 3 getlogin

([section] manual, -k keyword, -K [section] search, -f whatis)
man plain no title

GETLOGIN(3)                Linux Programmer's Manual               GETLOGIN(3)

       getlogin, getlogin_r, cuserid - get user name

       #include <unistd.h>

       char *getlogin(void);
       int getlogin_r(char *buf, size_t bufsize);

       #include <stdio.h>

       char *cuserid(char *string(3,n));

       getlogin  returns a pointer to a string(3,n) containing the name of the user
       logged in(1,8) on the controlling terminal of the process, or a null pointer
       if(3,n)  this  information  cannot  be determined.  The string(3,n) is statically
       allocated and might be overwritten on subsequent calls to this function
       or to cuserid.

       getlogin_r  returns  this  same user name in(1,8) the array buf of size buf-

       cuserid returns a pointer to a string(3,n) containing a user name associated
       with  the  effective  user  ID of the process.  If string(3,n) is not a null
       pointer, it should be an array that can hold at least L_cuserid charac-
       ters;  the string(3,n) is returned in(1,8) this array.  Otherwise, a pointer to a
       string(3,n) in(1,8) a static area is returned. This string(3,n)  is  statically  allo-
       cated  and might be overwritten on subsequent calls to this function or
       to getlogin.

       The macro L_cuserid is an integer constant that indicates how  long  an
       array  you  might  need to store a user name.  L_cuserid is declared in(1,8)

       These functions let your program identify positively the  user  who  is
       running  (cuserid)  or  the user who logged in(1,8) this session (getlogin).
       (These can differ when setuid programs are involved.)

       For most purposes, it is more useful to use  the  environment  variable
       LOGNAME  to  find out who the user is.  This is more flexible precisely
       because the user can set(7,n,1 builtins) LOGNAME arbitrarily.

       getlogin returns a pointer to the user name when successful,  and  NULL
       on failure.  getlogin_r returns 0 when successful, and nonzero on fail-

       POSIX specifies

       EMFILE The calling process already has the maximum  allowed  number  of
              open(2,3,n) files.

       ENFILE The system already has the maximum allowed number of open(2,3,n) files.

       ENXIO  The calling process has no controlling tty.

       ERANGE (getlogin_r) The length of the user name, including  final  NUL,
              is larger than bufsize.

       Linux/glibc also has

       ENOENT There was no corresponding entry in(1,8) the utmp-file.

       ENOMEM Insufficient memory to allocate passwd(1,5) structure.

       /etc/passwd(1,5)    password database file(1,n)
       /var/run/utmp  (traditionally /etc/utmp;
                      some libc versions used /var/adm/utmp)

       POSIX.1.   System  V has a cuserid function which uses the real user ID
       rather than the effective user ID. The cuserid function was included in(1,8)
       the 1988 version(1,3,5) of POSIX, but removed from the 1990 version.

       OpenBSD  has  getlogin  and  setlogin, and a username associated with a
       session, even if(3,n) it has no controlling tty.

       Unfortunately, it is often rather easy to fool  getlogin().   Sometimes
       it  does not work at all, because some program messed up the utmp file.
       Often, it gives only the first 8 characters of the login(1,3,5) name. The user
       currently  logged  in(1,8) on the controlling tty(1,4) of our program need not be
       the user who started it.  Avoid getlogin()  for  security-related  pur-

       Note  that  glibc does not follow the POSIX spec and uses stdin instead
       of /dev/tty(1,4).  A bug. (Other recent systems, like  SunOS  5.8  and  HPUX
       11.11  and  FreeBSD  4.8  all  return the login(1,3,5) name also when stdin is

       Nobody knows precisely what cuserid() does - avoid it in(1,8) portable  pro-
       grams  - avoid it altogether - use getpwuid(geteuid()) instead, if(3,n) that
       is what you meant.  DO NOT USE cuserid().

       geteuid(2), getuid(2)

Linux 2.4                         2003-08-24                       GETLOGIN(3)

References for this manual (incoming links)