]> git.cameronkatri.com Git - pw-darwin.git/commitdiff
Add a pw_mkdb2(3) function which does the same thing as pw_mkdb(3) except
authorBaptiste Daroussin <bapt@FreeBSD.org>
Wed, 3 Jun 2015 20:48:28 +0000 (20:48 +0000)
committerBaptiste Daroussin <bapt@FreeBSD.org>
Wed, 3 Jun 2015 20:48:28 +0000 (20:48 +0000)
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
libutil/pw_util.c

index b20ffa291a904d97ddb973ef50ef4d82c060a60a..fc32fe7be1ea9c5e7976f18f99da78649d689f94 100644 (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);
index befd1fb02d701ee9f8bf67f83077073139b36dc2..b0bdad15daba7f71305915b6459589b886d72e63 100644 (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);