---
name: "getpw"
section: "3"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/getpw"
---

# getpw(3)

reconstruct password line entry

## NAME

getpw - reconstruct password line entry

## LIBRARY

Standard C library (*libc*, *-lc*)

## SYNOPSIS

```
#define _GNU_SOURCE             /* See feature_test_macros(7) */
#include <sys/types.h>
#include <pwd.h>
```

**\[\[deprecated\]\] int getpw(uid\_t** *uid***, char \****buf***);**

## DESCRIPTION

The **getpw**() function reconstructs the password line entry for the given user ID *uid* in the buffer *buf*. The returned buffer contains a line of format

```
name:passwd:uid:gid:gecos:dir:shell
```

The *passwd* structure is defined in *\<pwd.h\>* as follows:

```
struct passwd {
    char   *pw_name;       /* username */
    char   *pw_passwd;     /* user password */
    uid_t   pw_uid;        /* user ID */
    gid_t   pw_gid;        /* group ID */
    char   *pw_gecos;      /* user information */
    char   *pw_dir;        /* home directory */
    char   *pw_shell;      /* shell program */
};
```

For more information about the fields of this structure, see [**passwd**(5)](/passwd/5.md).

## RETURN VALUE

The **getpw**() function returns 0 on success; on error, it returns -1, and *errno* is set to indicate the error.

If *uid* is not found in the password database, **getpw**() returns -1, sets *errno* to 0, and leaves *buf* unchanged.

## ERRORS

- **0** or **ENOENT**

  No user corresponding to *uid*.

- **EINVAL**

  *buf* is NULL.

- **ENOMEM**

  Insufficient memory to allocate *passwd* structure.

## FILES

- */etc/passwd*

  password database file

## ATTRIBUTES

For an explanation of the terms used in this section, see [**attributes**(7)](/attributes/7.md).

| | | |
| --- | --- | --- |
| **Interface** | **Attribute** | **Value** |
| **getpw**() | Thread safety | MT-Safe locale |

## STANDARDS

None.

## HISTORY

SVr2.

## BUGS

The **getpw**() function is dangerous as it may overflow the provided buffer *buf*. It is obsoleted by [**getpwuid**(3)](/getpwuid/3.md).

## SEE ALSO

[**endpwent**(3)](/endpwent/3.md), [**fgetpwent**(3)](/fgetpwent/3.md), [**getpwent**(3)](/getpwent/3.md), [**getpwnam**(3)](/getpwnam/3.md), [**getpwuid**(3)](/getpwuid/3.md), [**putpwent**(3)](/putpwent/3.md), [**setpwent**(3)](/setpwent/3.md), [**passwd**(5)](/passwd/5.md)
