| """ |
| This module provides access to the Unix password database. |
| |
| Password database entries are reported as 7-tuples containing the |
| following items from the password database (see `<pwd.h>'), in order: |
| pw_name, pw_passwd, pw_uid, pw_gid, pw_gecos, pw_dir, pw_shell. The |
| uid and gid items are integers, all others are strings. An exception |
| is raised if the entry asked for cannot be found. |
| """ |
| |
| __all__ = ['getpwuid', 'getpwnam', 'getpwall'] |
| |
| from os import _name, _posix_impl |
| from org.python.core.Py import newString |
| |
| if _name == 'nt': |
| raise ImportError, 'pwd module not supported on Windows' |
| |
| class struct_passwd(tuple): |
| """ |
| pwd.struct_passwd: Results from getpw*() routines. |
| |
| This object may be accessed either as a tuple of |
| (pw_name,pw_passwd,pw_uid,pw_gid,pw_gecos,pw_dir,pw_shell) |
| or via the object attributes as named in the above tuple. |
| """ |
| |
| attrs = ['pw_name', 'pw_passwd', 'pw_uid', 'pw_gid', 'pw_gecos', |
| 'pw_dir', 'pw_shell'] |
| |
| def __new__(cls, pwd): |
| pwd = (newString(pwd.loginName), newString(pwd.password), int(pwd.UID), |
| int(pwd.GID), newString(pwd.GECOS), newString(pwd.home), |
| newString(pwd.shell)) |
| return tuple.__new__(cls, pwd) |
| |
| def __getattr__(self, attr): |
| try: |
| return self[self.attrs.index(attr)] |
| except ValueError: |
| raise AttributeError |
| |
| |
| def getpwuid(uid): |
| """ |
| getpwuid(uid) -> (pw_name,pw_passwd,pw_uid, |
| pw_gid,pw_gecos,pw_dir,pw_shell) |
| Return the password database entry for the given numeric user ID. |
| See pwd.__doc__ for more on password database entries. |
| """ |
| entry = _posix_impl.getpwuid(uid) |
| if not entry: |
| raise KeyError(uid) |
| return struct_passwd(entry) |
| |
| |
| def getpwnam(name): |
| """ |
| getpwnam(name) -> (pw_name,pw_passwd,pw_uid, |
| pw_gid,pw_gecos,pw_dir,pw_shell) |
| Return the password database entry for the given user name. |
| See pwd.__doc__ for more on password database entries. |
| """ |
| entry = _posix_impl.getpwnam(name) |
| if not entry: |
| raise KeyError(name) |
| return struct_passwd(entry) |
| |
| |
| def getpwall(): |
| """ |
| getpwall() -> list_of_entries |
| Return a list of all available password database entries, |
| in arbitrary order. |
| See pwd.__doc__ for more on password database entries. |
| """ |
| entries = [] |
| while True: |
| entry = _posix_impl.getpwent() |
| if not entry: |
| break |
| entries.append(struct_passwd(entry)) |
| return entries |