]> git.cameronkatri.com Git - pw-darwin.git/blobdiff - pw/pwupd.c
Sort sections.
[pw-darwin.git] / pw / pwupd.c
index 1f0d86fa7322c6d7240a8b954a72a7133f8bfc5e..7e0e3cfb0c2a982fbe9000518480ea59ad11d34e 100644 (file)
@@ -111,7 +111,8 @@ fmtpwentry(char *buf, struct passwd * pwd, int type)
        int             l;
        char           *pw;
 
-       pw = (pwd->pw_passwd == NULL || !*pwd->pw_passwd) ? "" : (type == PWF_MASTER) ? pwd->pw_passwd : "*";
+       pw = (type == PWF_MASTER) ?
+           ((pwd->pw_passwd == NULL) ? "" : pwd->pw_passwd) : "*";
 
        if (type == PWF_PASSWD)
                l = sprintf(buf, "%s:*:%ld:%ld:%s:%s:%s\n",
@@ -147,7 +148,7 @@ pw_update(struct passwd * pwd, char const * user, int mode)
         * Note: -C is only available in FreeBSD 2.2 and above
         */
 #ifdef HAVE_PWDB_C
-       if (pwdb("-C", NULL) == 0) {    /* Check only */
+       if (pwdb("-C", (char *)NULL) == 0) {    /* Check only */
 #else
        {                               /* No -C */
 #endif
@@ -155,7 +156,7 @@ pw_update(struct passwd * pwd, char const * user, int mode)
                char            pwbuf[PWBUFSZ];
                int             l = snprintf(pfx, PWBUFSZ, "%s:", user);
 #ifdef HAVE_PWDB_U
-               int             isrename = strcmp(user, pwd->pw_name);
+               int             isrename = pwd!=NULL && strcmp(user, pwd->pw_name);
 #endif
 
                /*
@@ -166,6 +167,8 @@ pw_update(struct passwd * pwd, char const * user, int mode)
                else
                        fmtpwentry(pwbuf, pwd, PWF_PASSWD);
 
+               if (l < 0)
+                       l = 0;
                rc = fileupdate(getpwpath(_PASSWD), 0644, pwbuf, pfx, l, mode);
                if (rc == 0) {
 
@@ -174,7 +177,7 @@ pw_update(struct passwd * pwd, char const * user, int mode)
                         */
                        if (pwd != NULL)
                                fmtpwentry(pwbuf, pwd, PWF_MASTER);
-                       rc = fileupdate(getpwpath(_MASTERPASSWD), 0644, pwbuf, pfx, l, mode);
+                       rc = fileupdate(getpwpath(_MASTERPASSWD), 0600, pwbuf, pfx, l, mode);
                        if (rc == 0) {
 #ifdef HAVE_PWDB_U
                                if (mode == UPD_DELETE || isrename)
@@ -182,7 +185,7 @@ pw_update(struct passwd * pwd, char const * user, int mode)
                                        rc = pwdb(NULL);
 #ifdef HAVE_PWDB_U
                                else
-                                       rc = pwdb("-u", user, NULL);
+                                       rc = pwdb("-u", user, (char *)NULL);
 #endif
                        }
                }