pw_copy
, pw_dup
,
pw_edit
, pw_equal
,
pw_fini
, pw_init
,
pw_make
, pw_make_v7
,
pw_mkdb
, pw_lock
,
pw_scan
, pw_tempname
,
pw_tmp
—
functions for passwd file handling
System Utilities Library (libutil, -lutil)
#include <pwd.h>
#include <libutil.h>
int
pw_copy
(int
ffd, int tfd,
const struct passwd *pw,
struct passwd
*oldpw);
struct passwd *
pw_dup
(const
struct passwd *pw);
int
pw_edit
(int
nosetuid);
int
pw_equal
(const
struct passwd *pw1, const
struct passwd *pw2);
void
pw_fini
(void);
int
pw_init
(const
char *dir, const char
*master);
void
pw_initpwd
(struct
passwd *pw);
char *
pw_make
(const
struct passwd *pw);
char *
pw_make_v7
(const
struct passwd *pw);
int
pw_mkdb
(const
char *user);
int
pw_lock
(void);
struct passwd *
pw_scan
(const
char *line, int
flags);
const char *
pw_tempname
(void);
int
pw_tmp
(int
mfd);
The pw_copy
() function reads a password file from
ffd and writes it back out to tfd
possibly with modifications:
- If pw is
NULL
and
oldpw is not NULL
, then the
record represented by oldpw will not be copied
(corresponding to user deletion).
- If pw and oldpw are not
NULL
then the record corresponding to
pw will be replaced by the record corresponding to
oldpw.
- If pw is set and oldpw is
NULL
then the record corresponding to
pw will be appended (corresponding to user
addition).
The pw_copy
() function returns -1 in case
of failure otherwise 0.
The pw_dup
() function duplicates the
struct passwd pointed to by pw
and returns a pointer to the copy, or NULL
in case
of failure. The new struct passwd is allocated with
malloc(3),
and it is the caller's responsibility to free it with
free(3).
The pw_edit
() function invokes the command
specified by the EDITOR
environment variable (or
/usr/bin/vi if EDITOR
is not
defined) on a temporary copy of the master password file created by
pw_tmp
(). If the file was modified,
pw_edit
() installs it and regenerates the password
database. The pw_edit
() function returns -1 in case
of failure, 0 if the file was not modified, and a non-zero positive number
if the file was modified and successfully installed.
The pw_equal
() function compares two
struct passwd and returns 0 if they are equal.
The pw_fini
() function destroy the
temporary file created by pw_tmp
() if any, kills any
running instance of EDITOR
executed by
pw_edit
() if any, and closes the lock created by
pw_lock
() if any.
The pw_init
() initializes the static
variable representing the path to a password file. dir
is the directory where the password file is located. If set to
NULL
, it will default to
/etc. master is the name of
the password file. If set to NULL?
it will default
to master.passwd
The pw_initpwd
() function initializes the
passwd struct to canonical values. The entire
structure is zeroed, then pw_uid and
pw_gid are set to -1, and all string pointers are set
to point at an internally-defined zero-length string.
The pw_make
() function creates a properly
formatted BSD
passwd(5)
line from a struct passwd, and returns a pointer to
the resulting string. The string is allocated with
malloc(3),
and it is the caller's responsibility to free it with
free(3).
The pw_make_v7
() function creates a
properly formatted UNIX V7
passwd(5)
line from a struct passwd, and returns a pointer to
the resulting string. The string is allocated with
malloc(3),
and it is the caller's responsibility to free it with
free(3).
The pw_mkdb
() function regenerates the
password database by running
pwd_mkdb(8).
If user only the record corresponding to that user
will be updated. The pw_mkdb
() function returns 0 in
case of success and -1 in case of failure.
The pw_lock
() function locks the master
password file. It returns a file descriptor to the master password file on
success and -1 on failure.
The pw_scan
() function is a wrapper around
the internal libc function __pw_scan
(). It scans the
master password file for a line corresponding to the
line provided and return a struct
passwd if it matched an existing record. In case of failure, it
returns NULL
. Otherwise, it returns a pointer to a
struct passwd containing the matching record. The
struct passwd is allocated with
malloc(3),
and it is the caller's responsibility to free it with
free(3).
The pw_tempname
() function returns the
temporary name of the masterfile created via
pw_tmp
().
The pw_tmp
() creates and opens a
presumably safe temporary password file. If mfd is a
file descriptor to an open password file, it will be read and written back
to the temporary password file. Otherwise if should be set -1. The
pw_tmp
() returns an open file descriptor to the
temporary password file or -1 in case of failure.
The functions for passwd file handling first appeared in
4.4BSD.
Portions of this software were developed for the FreeBSD
Project by ThinkSec AS and Network Associates Laboratories, the Security
Research Division of Network Associates, Inc. under DARPA/SPAWAR contract
N66001-01-C-8035 (“CBOSS”), as part of the DARPA CHATS research
program.
This manual page was written by Baptiste
Daroussin
<bapt@FreeBSD.org>.