summaryrefslogtreecommitdiffstats
path: root/libutil/pw_util.c
diff options
context:
space:
mode:
Diffstat (limited to 'libutil/pw_util.c')
-rw-r--r--libutil/pw_util.c28
1 files changed, 25 insertions, 3 deletions
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);