]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man3/getlogin.3
Changes: Expanded tabs
[thirdparty/man-pages.git] / man3 / getlogin.3
CommitLineData
fea681da
MK
1.\" Copyright 1995 James R. Van Zandt <jrv@vanzandt.mv.com>
2.\"
93015253 3.\" %%%LICENSE_START(VERBATIM)
fea681da
MK
4.\" Permission is granted to make and distribute verbatim copies of this
5.\" manual provided the copyright notice and this permission notice are
6.\" preserved on all copies.
7.\"
8.\" Permission is granted to copy and distribute modified versions of this
9.\" manual under the conditions for verbatim copying, provided that the
10.\" entire resulting derived work is distributed under the terms of a
11.\" permission notice identical to this one.
c13182ef 12.\"
fea681da
MK
13.\" Since the Linux kernel and libraries are constantly changing, this
14.\" manual page may be incorrect or out-of-date. The author(s) assume no
15.\" responsibility for errors or omissions, or for damages resulting from
16.\" the use of the information contained herein. The author(s) may not
17.\" have taken the same level of care in the production of this manual,
18.\" which is licensed free of charge, as they might when working
19.\" professionally.
c13182ef 20.\"
fea681da
MK
21.\" Formatted or processed versions of this manual, if unaccompanied by
22.\" the source, must acknowledge the copyright and authors of this work.
4b72fb64 23.\" %%%LICENSE_END
fea681da
MK
24.\"
25.\" Changed Tue Sep 19 01:49:29 1995, aeb: moved from man2 to man3
26.\" added ref to /etc/utmp, added BUGS section, etc.
27.\" modified 2003 Walter Harms, aeb - added getlogin_r, note on stdin use
fe0fefbf 28.TH GETLOGIN 3 2015-03-02 "GNU" "Linux Programmer's Manual"
fea681da 29.SH NAME
18701562 30getlogin, getlogin_r, cuserid \- get username
fea681da
MK
31.SH SYNOPSIS
32.B #include <unistd.h>
33.sp
34.B "char *getlogin(void);"
35.br
36.BI "int getlogin_r(char *" buf ", size_t " bufsize );
37.sp
38.B #include <stdio.h>
39.sp
40.BI "char *cuserid(char *" string );
cc4615cc
MK
41.sp
42.in -4n
43Feature Test Macro Requirements for glibc (see
44.BR feature_test_macros (7)):
45.in
46.sp
47.BR getlogin_r ():
e0bf9127 48_REENTRANT || _POSIX_C_SOURCE\ >=\ 199506L
cc4615cc
MK
49.br
50.BR cuserid ():
51_XOPEN_SOURCE
fea681da 52.SH DESCRIPTION
60a90ecd
MK
53.BR getlogin ()
54returns a pointer to a string containing the name of
fea681da 55the user logged in on the controlling terminal of the process, or a
b437fdd9 56null pointer if this information cannot be determined.
c13182ef 57The string is
fea681da 58statically allocated and might be overwritten on subsequent calls to
60a90ecd
MK
59this function or to
60.BR cuserid ().
fea681da 61.PP
60a90ecd 62.BR getlogin_r ()
18701562 63returns this same username in the array
fea681da
MK
64.I buf
65of size
66.IR bufsize .
67.PP
60a90ecd 68.BR cuserid ()
18701562 69returns a pointer to a string containing a username
c13182ef
MK
70associated with the effective user ID of the process.
71If \fIstring\fP
b437fdd9 72is not a null pointer, it should be an array that can hold at least
fea681da 73\fBL_cuserid\fP characters; the string is returned in this array.
c13182ef
MK
74Otherwise, a pointer to a string in a static area is returned.
75This
fea681da 76string is statically allocated and might be overwritten on subsequent
60a90ecd
MK
77calls to this function or to
78.BR getlogin ().
fea681da
MK
79.PP
80The macro \fBL_cuserid\fP is an integer constant that indicates how
18701562 81long an array you might need to store a username.
1608e0bd 82\fBL_cuserid\fP is declared in \fI<stdio.h>\fP.
fea681da
MK
83.PP
84These functions let your program identify positively the user who is
988db661 85running
60a90ecd
MK
86.RB ( cuserid ())
87or the user who logged in this session
88.RB ( getlogin ()).
89(These can differ when set-user-ID programs are involved.)
fea681da
MK
90.PP
91For most purposes, it is more useful to use the environment variable
c13182ef
MK
92\fBLOGNAME\fP to find out who the user is.
93This is more flexible
fea681da 94precisely because the user can set \fBLOGNAME\fP arbitrarily.
47297adb 95.SH RETURN VALUE
60a90ecd 96.BR getlogin ()
18701562 97returns a pointer to the username when successful,
c0ebcc7a
MK
98and NULL on failure, with
99.I errno
100set to indicate the cause of the error.
60a90ecd 101.BR getlogin_r ()
c7094399 102returns 0 when successful, and nonzero on failure.
fea681da
MK
103.SH ERRORS
104POSIX specifies
105.TP
106.B EMFILE
107The calling process already has the maximum allowed number of open files.
108.TP
109.B ENFILE
110The system already has the maximum allowed number of open files.
111.TP
112.B ENXIO
1285ff3d 113The calling process has no controlling terminal.
fea681da
MK
114.TP
115.B ERANGE
116(getlogin_r)
f24e3a3a 117The length of the username, including the terminating null byte (\(aq\\0\(aq),
28d88c17 118is larger than
fea681da
MK
119.IR bufsize .
120.LP
121Linux/glibc also has
122.TP
123.B ENOENT
124There was no corresponding entry in the utmp-file.
125.TP
126.B ENOMEM
127Insufficient memory to allocate passwd structure.
1de9af46
MK
128.TP
129.B ENOTTY
130Standard input didn't refer to a terminal.
131(See BUGS.)
fea681da 132.SH FILES
3ffdc54f
MK
133.TP
134\fI/etc/passwd\fP
135password database file
136.TP
137\fI/var/run/utmp\fP
138(traditionally \fI/etc/utmp\fP;
139some libc versions used \fI/var/adm/utmp\fP)
1454246e 140.SH ATTRIBUTES
edb60ed0
PH
141For an explanation of the terms used in this section, see
142.BR attributes (7).
143.TS
144allbox;
145lb lb lb
146l l l.
147Interface Attribute Value
148T{
1454246e 149.BR getlogin ()
1e2afa78
MS
150T} Thread safety T{
151MT-Unsafe race:getlogin race:utent
152.br
153sig:ALRM timer locale
154T}
edb60ed0 155T{
1454246e 156.BR getlogin_r ()
1e2afa78
MS
157T} Thread safety T{
158MT-Unsafe race:utent sig:ALRM timer
159.br
160locale
161T}
edb60ed0 162T{
1454246e 163.BR cuserid ()
edb60ed0
PH
164T} Thread safety MT-Unsafe race:cuserid/!string locale
165.TE
1e2afa78 166
1e2afa78
MS
167In the above table,
168.I utent
169in
170.I race:utent
171signifies that if any of the functions
58f5b793
MK
172.BR setutent (3),
173.BR getutent (3),
1e2afa78 174or
58f5b793
MK
175.BR endutent (3)
176are used in parallel in different threads of a program,
177then data races could occur.
1e2afa78
MS
178.BR getlogin ()
179and
180.BR getlogin_r ()
58f5b793
MK
181call those functions,
182so we use race:utent to remind users.
47297adb 183.SH CONFORMING TO
68e1685c
MK
184.BR getlogin ()
185and
186.BR getlogin_r ()
187specified in POSIX.1-2001.
188
60a90ecd
MK
189System V has a
190.BR cuserid ()
191function which uses the real
c13182ef 192user ID rather than the effective user ID.
60a90ecd
MK
193The
194.BR cuserid ()
195function
c13182ef 196was included in the 1988 version of POSIX,
68e1685c
MK
197but removed from the 1990 version.
198It was present in SUSv2, but removed in POSIX.1-2001.
fea681da 199.LP
60a90ecd
MK
200OpenBSD has
201.BR getlogin ()
202and
203.BR setlogin (),
204and a username
1285ff3d 205associated with a session, even if it has no controlling terminal.
fea681da 206.SH BUGS
c13182ef 207Unfortunately, it is often rather easy to fool
b5cc2ffb 208.BR getlogin ().
fea681da 209Sometimes it does not work at all, because some program messed up
c13182ef
MK
210the utmp file.
211Often, it gives only the first 8 characters of
212the login name.
1285ff3d 213The user currently logged in on the controlling terminal
fea681da 214of our program need not be the user who started it.
c13182ef 215Avoid
b5cc2ffb
MK
216.BR getlogin ()
217for security-related purposes.
fea681da 218.LP
a306ffff 219Note that glibc does not follow the POSIX specification and uses
68e1685c 220.I stdin
fea681da
MK
221instead of
222.IR /dev/tty .
c13182ef
MK
223A bug.
224(Other recent systems, like SunOS 5.8 and HP-UX 11.11 and FreeBSD 4.8
225all return the login name also when
226.I stdin
68e1685c 227is redirected.)
fea681da 228.LP
c13182ef
MK
229Nobody knows precisely what
230.BR cuserid ()
b5cc2ffb 231does; avoid it in portable programs.
c13182ef 232Or avoid it altogether: use
b5cc2ffb
MK
233.I getpwuid(geteuid())
234instead, if that is
fea681da 235what you meant.
4bd8c614 236.B Do not use
b5cc2ffb 237.BR cuserid ().
47297adb 238.SH SEE ALSO
fea681da 239.BR geteuid (2),
1bced40f
MK
240.BR getuid (2),
241.BR utmp (5)