summaryrefslogtreecommitdiffstats
path: root/man3/getlogin.3
diff options
context:
space:
mode:
Diffstat (limited to 'man3/getlogin.3')
-rw-r--r--man3/getlogin.3135
1 files changed, 135 insertions, 0 deletions
diff --git a/man3/getlogin.3 b/man3/getlogin.3
new file mode 100644
index 000000000..aed1b80e7
--- /dev/null
+++ b/man3/getlogin.3
@@ -0,0 +1,135 @@
+.\" Hey Emacs! This file is -*- nroff -*- source.
+.\"
+.\" Copyright 1995 James R. Van Zandt <jrv@vanzandt.mv.com>
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of this
+.\" manual under the conditions for verbatim copying, provided that the
+.\" entire resulting derived work is distributed under the terms of a
+.\" permission notice identical to this one.
+.\"
+.\" Since the Linux kernel and libraries are constantly changing, this
+.\" manual page may be incorrect or out-of-date. The author(s) assume no
+.\" responsibility for errors or omissions, or for damages resulting from
+.\" the use of the information contained herein. The author(s) may not
+.\" have taken the same level of care in the production of this manual,
+.\" which is licensed free of charge, as they might when working
+.\" professionally.
+.\"
+.\" Formatted or processed versions of this manual, if unaccompanied by
+.\" the source, must acknowledge the copyright and authors of this work.
+.\"
+.\" Changed Tue Sep 19 01:49:29 1995, aeb: moved from man2 to man3
+.\" added ref to /etc/utmp, added BUGS section, etc.
+.\" modified 2003 Walter Harms, aeb - added getlogin_r, note on stdin use
+.TH GETLOGIN 3 2003-08-24 "Linux 2.4" "Linux Programmer's Manual"
+.SH NAME
+getlogin, getlogin_r, cuserid \- get user name
+.SH SYNOPSIS
+.B #include <unistd.h>
+.sp
+.B "char *getlogin(void);"
+.br
+.BI "int getlogin_r(char *" buf ", size_t " bufsize );
+.sp
+.B #include <stdio.h>
+.sp
+.BI "char *cuserid(char *" string );
+.SH DESCRIPTION
+\fBgetlogin\fP returns a pointer to a string containing the name of
+the user logged in on the controlling terminal of the process, or a
+null pointer if this information cannot be determined. The string is
+statically allocated and might be overwritten on subsequent calls to
+this function or to \fBcuserid\fP.
+.PP
+\fBgetlogin_r\fP returns this same user name in the array
+.I buf
+of size
+.IR bufsize .
+.PP
+\fBcuserid\fP returns a pointer to a string containing a user name
+associated with the effective user ID of the process. If \fIstring\fP
+is not a null pointer, it should be an array that can hold at least
+\fBL_cuserid\fP characters; the string is returned in this array.
+Otherwise, a pointer to a string in a static area is returned. This
+string is statically allocated and might be overwritten on subsequent
+calls to this function or to \fBgetlogin\fP.
+.PP
+The macro \fBL_cuserid\fP is an integer constant that indicates how
+long an array you might need to store a user name. \fBL_cuserid\fP is
+declared in \fBstdio.h\fP.
+.PP
+These functions let your program identify positively the user who is
+running (\fBcuserid\fP) or the user who logged in this session
+(\fBgetlogin\fP). (These can differ when setuid programs are
+involved.)
+.PP
+For most purposes, it is more useful to use the environment variable
+\fBLOGNAME\fP to find out who the user is. This is more flexible
+precisely because the user can set \fBLOGNAME\fP arbitrarily.
+.SH "RETURN VALUE"
+\fBgetlogin\fP returns a pointer to the user name when successful,
+and NULL on failure.
+\fBgetlogin_r\fP returns 0 when successful, and nonzero on failure.
+.SH ERRORS
+POSIX specifies
+.TP
+.B EMFILE
+The calling process already has the maximum allowed number of open files.
+.TP
+.B ENFILE
+The system already has the maximum allowed number of open files.
+.TP
+.B ENXIO
+The calling process has no controlling tty.
+.TP
+.B ERANGE
+(getlogin_r)
+The length of the user name, including final NUL, is larger than
+.IR bufsize .
+.LP
+Linux/glibc also has
+.TP
+.B ENOENT
+There was no corresponding entry in the utmp-file.
+.TP
+.B ENOMEM
+Insufficient memory to allocate passwd structure.
+.SH FILES
+.nf
+\fI/etc/passwd\fP password database file
+.br
+\fI/var/run/utmp\fP (traditionally \fI/etc/utmp\fP;
+ some libc versions used \fI/var/adm/utmp\fP)
+.fi
+.SH "CONFORMING TO"
+POSIX.1. System V has a \fBcuserid\fP function which uses the real
+user ID rather than the effective user ID. The \fBcuserid\fP function
+was included in the 1988 version of POSIX, but removed from the 1990 version.
+.LP
+OpenBSD has \fBgetlogin\fP and \fBsetlogin\fP, and a username
+associated with a session, even if it has no controlling tty.
+.SH BUGS
+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 name. The user currently logged in on the controlling tty
+of our program need not be the user who started it.
+Avoid getlogin() for security-related purposes.
+.LP
+Note that glibc does not follow the POSIX spec and uses stdin
+instead of
+.IR /dev/tty .
+A bug. (Other recent systems, like SunOS 5.8 and HPUX 11.11 and FreeBSD 4.8
+all return the login name also when stdin is redirected.)
+.LP
+Nobody knows precisely what cuserid() does - avoid it in portable programs -
+avoid it altogether - use getpwuid(geteuid()) instead, if that is
+what you meant.
+DO NOT USE cuserid().
+.SH "SEE ALSO"
+.BR geteuid (2),
+.BR getuid (2)