summaryrefslogtreecommitdiffstats
path: root/pw
diff options
context:
space:
mode:
Diffstat (limited to 'pw')
-rw-r--r--pw/cpdir.c10
-rw-r--r--pw/pw.813
-rw-r--r--pw/pw_user.c8
3 files changed, 23 insertions, 8 deletions
diff --git a/pw/cpdir.c b/pw/cpdir.c
index 017c200..0fd671b 100644
--- a/pw/cpdir.c
+++ b/pw/cpdir.c
@@ -83,14 +83,14 @@ copymkdir(char const * dir, char const * skel, mode_t mode, uid_t uid, gid_t gid
if (S_ISDIR(st.st_mode)) { /* Recurse for this */
if (strcmp(e->d_name, ".") != 0 && strcmp(e->d_name, "..") != 0)
copymkdir(dst, src, st.st_mode & _DEF_DIRMODE, uid, gid);
- chflags(dst, st.st_flags); /* propogate flags */
- } else if (S_ISLNK(st.st_mode) && (len = readlink(src, lnk, sizeof(lnk))) != -1) {
+ chflags(dst, st.st_flags); /* propagate flags */
+ } else if (S_ISLNK(st.st_mode) && (len = readlink(src, lnk, sizeof(lnk) - 1)) != -1) {
lnk[len] = '\0';
symlink(lnk, dst);
lchown(dst, uid, gid);
/*
- * Note: don't propogate special attributes
- * but do propogate file flags
+ * Note: don't propagate special attributes
+ * but do propagate file flags
*/
} else if (S_ISREG(st.st_mode) && (outfd = open(dst, O_RDWR | O_CREAT | O_EXCL, st.st_mode)) != -1) {
if ((infd = open(src, O_RDONLY)) == -1) {
@@ -108,7 +108,7 @@ copymkdir(char const * dir, char const * skel, mode_t mode, uid_t uid, gid_t gid
write(outfd, copybuf, b);
close(infd);
/*
- * Propogate special filesystem flags
+ * Propagate special filesystem flags
*/
fchown(outfd, uid, gid);
fchflags(outfd, st.st_flags);
diff --git a/pw/pw.8 b/pw/pw.8
index 6e79d56..8b21107 100644
--- a/pw/pw.8
+++ b/pw/pw.8
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd March 30, 2007
+.Dd December 21, 2011
.Dt PW 8
.Os
.Sh NAME
@@ -714,6 +714,17 @@ are also removed if the user's uid is unique and not also used by another accoun
system.
.Pp
The
+.Ar usermod
+command adds one additional option:
+.Bl -tag -width "-G grouplist"
+.It Fl l Ar name
+This option allows changing of an existing account name to
+.Ql \&name .
+The new name must not already exist, and any attempt to duplicate an
+existing account name will be rejected.
+.El
+.Pp
+The
.Ar usershow
command allows viewing of an account in one of two formats.
By default, the format is identical to the format used in
diff --git a/pw/pw_user.c b/pw/pw_user.c
index db33746..b59789c 100644
--- a/pw/pw_user.c
+++ b/pw/pw_user.c
@@ -1028,6 +1028,7 @@ pw_pwcrypt(char *password)
{
int i;
char salt[SALTSIZE + 1];
+ char *cryptpw;
static char buf[256];
@@ -1038,7 +1039,10 @@ pw_pwcrypt(char *password)
salt[i] = chars[arc4random_uniform(sizeof(chars) - 1)];
salt[SALTSIZE] = '\0';
- return strcpy(buf, crypt(password, salt));
+ cryptpw = crypt(password, salt);
+ if (cryptpw == NULL)
+ errx(EX_CONFIG, "crypt(3) failure");
+ return strcpy(buf, cryptpw);
}
@@ -1208,7 +1212,7 @@ pw_checkname(u_char *name, int gecos)
if (reject) {
snprintf(showch, sizeof(showch), (*ch >= ' ' && *ch < 127)
? "`%c'" : "0x%02x", *ch);
- errx(EX_DATAERR, "invalid character %s at position %d in %s",
+ errx(EX_DATAERR, "invalid character %s at position %td in %s",
showch, (ch - name), showtype);
}
if (!gecos && (ch - name) > LOGNAMESIZE)