From 6da4605810e158adc237a2ed5127dc7f3e67014a Mon Sep 17 00:00:00 2001 From: Baptiste Daroussin Date: Wed, 3 Jun 2015 20:48:28 +0000 Subject: 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 --- libutil/libutil.h | 4 ++++ libutil/pw_util.c | 28 +++++++++++++++++++++++++--- 2 files changed, 29 insertions(+), 3 deletions(-) (limited to 'libutil') diff --git a/libutil/libutil.h b/libutil/libutil.h index b20ffa2..fc32fe7 100644 --- a/libutil/libutil.h +++ b/libutil/libutil.h @@ -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); diff --git a/libutil/pw_util.c b/libutil/pw_util.c index befd1fb..b0bdad1 100644 --- a/libutil/pw_util.c +++ b/libutil/pw_util.c @@ -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); -- cgit v1.2.3-56-ge451