X-Git-Url: https://git.cameronkatri.com/pw-darwin.git/blobdiff_plain/cf75e4c4fe862eb5b50d6146d9e8daafd95c243e..6a151c16645f90b21f171a44661b109f06e9097e:/pw/pwupd.c?ds=sidebyside diff --git a/pw/pwupd.c b/pw/pwupd.c index 1f0d86f..84226a9 100644 --- a/pw/pwupd.c +++ b/pw/pwupd.c @@ -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", @@ -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)