Add a pw_mkdb2(3) function which does the same thing as pw_mkdb(3) except

it takes a new argument allowing to specify the endianness of the database
to generate

Differential Revision:	https://reviews.freebsd.org/D2730
Reviewed by:	ian
This commit is contained in:
Baptiste Daroussin 2015-06-03 20:48:28 +00:00
parent 46c3d3ac99
commit 972cf03ed9
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=283969
4 changed files with 53 additions and 4 deletions

View File

@ -78,6 +78,7 @@ MLINKS+=pw_util.3 pw_copy.3 \
pw_util.3 pw_make.3 \
pw_util.3 pw_make_v7.3 \
pw_util.3 pw_mkdb.3 \
pw_util.3 pw_mkdb2.3 \
pw_util.3 pw_lock.3 \
pw_util.3 pw_scan.3 \
pw_util.3 pw_tempname.3 \

View File

@ -144,6 +144,9 @@ char *fparseln(FILE *_fp, size_t *_len, size_t *_lineno,
#endif
#ifdef _PWD_H_
#define PWDB_NATIVE 0
#define PWDB_LE 1
#define PWDB_BE 2
int pw_copy(int _ffd, int _tfd, const struct passwd *_pw,
struct passwd *_old_pw);
struct passwd
@ -155,6 +158,7 @@ int pw_init(const char *_dir, const char *_master);
char *pw_make(const struct passwd *_pw);
char *pw_make_v7(const struct passwd *_pw);
int pw_mkdb(const char *_user);
int pw_mkdb2(const char *_user, int endian);
int pw_lock(void);
struct passwd *
pw_scan(const char *_line, int _flags);

View File

@ -37,6 +37,7 @@
.Nm pw_make ,
.Nm pw_make_v7 ,
.Nm pw_mkdb ,
.Nm pw_mkdb2 ,
.Nm pw_lock ,
.Nm pw_scan ,
.Nm pw_tempname ,
@ -66,6 +67,8 @@
.Ft int
.Fn pw_mkdb "const char *user"
.Ft int
.Fn pw_mkdb "const char *user" "int endian"
.Ft int
.Fn pw_lock "void"
.Ft "struct passwd *"
.Fn pw_scan "const char *line" "int flags"
@ -225,11 +228,30 @@ function regenerates the password database by running
.Xr pwd_mkdb 8 .
If
.Fa user
only the record corresponding to that user will be updated.
is set, only the record corresponding to that user will be updated.
The
.Fn pw_mkdb
function returns 0 in case of success and -1 in case of failure.
.Pp
.Fn pw_mkdb2
function regenerates the password database by running
.Xr pwd_mkdb 8 .
If
.Fa user
is set, only the record corresponding to that user will be updated.
.Pp
The
.Fa endian
variable can take the following values
.Bl -tag -width PWDB_NATIVE
.It Dv PWDB_NATIVE
the database will be generated in host native endianness.
.It Dv PWDB_LE
the database will be generated in Little-endian.
.It Dv PWDB_BE
the database will be generated in Big-endian.
.El
.Pp
The
.Fn pw_lock
function locks the master password file.

View File

@ -242,14 +242,36 @@ pw_tmp(int mfd)
return (tfd);
}
int
pw_mkdb(const char *user)
{
return (pw_mkdb2(user, PWDB_NATIVE));
}
/*
* Regenerate the password database.
*/
int
pw_mkdb(const char *user)
pw_mkdb2(const char *user, int endian)
{
int pstat;
pid_t pid;
const char *arg;
switch (endian) {
case PWDB_NATIVE:
arg = "-p";
break;
case PWDB_LE:
arg = "-pL";
break;
case PWDB_BE:
arg = "-pB";
break;
default:
return (-1);
}
(void)fflush(stderr);
switch ((pid = fork())) {
@ -258,10 +280,10 @@ pw_mkdb(const char *user)
case 0:
/* child */
if (user == NULL)
execl(_PATH_PWD_MKDB, "pwd_mkdb", "-p",
execl(_PATH_PWD_MKDB, "pwd_mkdb", arg,
"-d", passwd_dir, tempname, (char *)NULL);
else
execl(_PATH_PWD_MKDB, "pwd_mkdb", "-p",
execl(_PATH_PWD_MKDB, "pwd_mkdb", arg,
"-d", passwd_dir, "-u", user, tempname,
(char *)NULL);
_exit(1);