
:mod:`pwd` --- The password database
====================================

.. module:: pwd
   :platform: Unix
   :synopsis: The password database (getpwnam() and friends).


This module provides access to the Unix user account and password database.  It
is available on all Unix versions.

Password database entries are reported as a tuple-like object, whose attributes
correspond to the members of the ``passwd`` structure (Attribute field below,
see ``<pwd.h>``):

+-------+---------------+-----------------------------+
| Index | Attribute     | Meaning                     |
+=======+===============+=============================+
| 0     | ``pw_name``   | Login name                  |
+-------+---------------+-----------------------------+
| 1     | ``pw_passwd`` | Optional encrypted password |
+-------+---------------+-----------------------------+
| 2     | ``pw_uid``    | Numerical user ID           |
+-------+---------------+-----------------------------+
| 3     | ``pw_gid``    | Numerical group ID          |
+-------+---------------+-----------------------------+
| 4     | ``pw_gecos``  | User name or comment field  |
+-------+---------------+-----------------------------+
| 5     | ``pw_dir``    | User home directory         |
+-------+---------------+-----------------------------+
| 6     | ``pw_shell``  | User command interpreter    |
+-------+---------------+-----------------------------+

The uid and gid items are integers, all others are strings. :exc:`KeyError` is
raised if the entry asked for cannot be found.

.. note::

   .. index:: module: crypt

   In traditional Unix the field ``pw_passwd`` usually contains a password
   encrypted with a DES derived algorithm (see module :mod:`crypt`).  However most
   modern unices  use a so-called *shadow password* system.  On those unices the
   *pw_passwd* field only contains an asterisk (``'*'``) or the  letter ``'x'``
   where the encrypted password is stored in a file :file:`/etc/shadow` which is
   not world readable.  Whether the *pw_passwd* field contains anything useful is
   system-dependent.  If available, the :mod:`spwd` module should be used where
   access to the encrypted password is required.

It defines the following items:


.. function:: getpwuid(uid)

   Return the password database entry for the given numeric user ID.


.. function:: getpwnam(name)

   Return the password database entry for the given user name.


.. function:: getpwall()

   Return a list of all available password database entries, in arbitrary order.


.. seealso::

   Module :mod:`grp`
      An interface to the group database, similar to this.

   Module :mod:`spwd`
      An interface to the shadow password database, similar to this.

