getpwnam, getpwnam_r, getpwuid, getpwuid_r — get password file entry
#include <sys/types.h> #include <pwd.h>
| struct passwd *getpwnam( | const char * | name ); | 
| struct passwd *getpwuid( | uid_t | uid ); | 
| int
            getpwnam_r( | const char * | name, | 
| struct passwd * | pwbuf, | |
| char * | buf, | |
| size_t | buflen, | |
| struct passwd ** | pwbufp ); | 
| int
            getpwuid_r( | uid_t | uid, | 
| struct passwd * | pwbuf, | |
| char * | buf, | |
| size_t | buflen, | |
| struct passwd ** | pwbufp ); | 
| ![[Note]](../stylesheet/note.png) | Note | ||
|---|---|---|---|
| 
 | 
The getpwnam() function
      returns a pointer to a structure containing the broken-out
      fields of the record in the password database (e.g., the
      local password file /etc/passwd, NIS, and LDAP) that matches
      the user name name.
The getpwuid() function
      returns a pointer to a structure containing the broken-out
      fields of the record in the password database that matches
      the user ID uid.
The getpwnam_r() and
      getpwuid_r() functions obtain
      the same information, but store the retrieved passwd structure in the space pointed to
      by pwbuf. This
      passwd structure contains
      pointers to strings, and these strings are stored in the
      buffer buf of size
      buflen. A pointer to
      the result (in case of success) or NULL (in case no entry was
      found or an error occurred) is stored in *pwbufp.
The passwd structure is
      defined in <pwd.h> as
      follows:
struct passwd { char * pw_name;char * pw_passwd;uid_t pw_uid;gid_t pw_gid;char * pw_gecos;char * pw_dir;char * pw_shell;}; 
The maximum needed size for buf can be found using
      sysconf(3) with the
      _SC_GETPW_R_SIZE_MAX
      parameter.
The getpwnam() and
      getpwuid() functions return a
      pointer to a passwd
      structure, or NULL if the matching entry is not found or an
      error occurs. If an error occurs, errno is set appropriately. If one wants to
      check errno after the call, it
      should be set to zero before the call.
The return value may point to static area, and may be
      overwritten by subsequent calls to getpwent(3), getpwnam(), or getpwuid().
The getpwnam_r() and
      getpwuid_r() functions return
      zero on success. In case of error, an error number is
      returned.
0 or
          ENOENT or ESRCH or EBADF or EPERM or ...The given name or uid was not found.
A signal was caught.
I/O error.
The maximum number (OPEN_MAX) of files was open already
            in the calling process.
The maximum number of files was open already in the system.
Insufficient memory to allocate passwd structure.
Insufficient buffer space supplied.
The formulation given above under "RETURN VALUE" is from
      POSIX.1-2001. It does not call "not found" an error, and
      hence does not specify what value errno might have in this situation. But that
      makes it impossible to recognize errors. One might argue that
      according to POSIX errno should
      be left unchanged if an entry is not found. Experiments on
      various Unix-like systems show that lots of different values
      occur in this situation: 0, ENOENT, EBADF, ESRCH,
      EWOULDBLOCK, EPERM and probably others.
The pw_dir field
      contains the name of the initial working directory of the
      user. Login programs use the value of this field to
      initialize the HOME environment
      variable for the login shell. An application that wants to
      determine its user's home directory should inspect the value
      of HOME (rather than the value
      getpwuid(getuid())−>pw_dir) since this
      allows the user to modify their notion of "the home
      directory" during a login session. To determine the (initial)
      home directory of another user, it is necessary to use
      getpwnam("username")−>pw_dir
      or similar.
endpwent(3), fgetpwent(3), getgrnam(3), getpw(3), getpwent(3), putpwent(3), setpwent(3), passwd(5)
This page is part of release 2.79 of the Linux man-pages project. A
      description of the project, and information about reporting
      bugs, can be found at
      http://www.kernel.org/doc/man-pages/.
| Copyright 1993 David Metcalfe (davidprism.demon.co.uk) 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. References consulted: Linux libc source code Lewine's "POSIX Programmer's Guide" (O'Reilly & Associates, 1991) 386BSD man pages Modified 1993-07-24 by Rik Faith (faithcs.unc.edu) Modified 1996-05-27 by Martin Schulze (joeylinux.de) Modified 2003-11-15 by aeb |