diff options
author | bapt <bapt@FreeBSD.org> | 2015-08-01 10:25:55 +0000 |
---|---|---|
committer | bapt <bapt@FreeBSD.org> | 2015-08-01 10:25:55 +0000 |
commit | 9a71628c9f96d9d0a64d5e4708d4ba4709c2c421 (patch) | |
tree | 06f499ddf3f646c290ee74968ae8970d44338ffb /usr.sbin/pw | |
parent | 10ba8e17a1929665721680c955d5c520867a4503 (diff) | |
download | FreeBSD-src-9a71628c9f96d9d0a64d5e4708d4ba4709c2c421.zip FreeBSD-src-9a71628c9f96d9d0a64d5e4708d4ba4709c2c421.tar.gz |
Validate expiration days and password days from commmand line and pw.conf
Diffstat (limited to 'usr.sbin/pw')
-rw-r--r-- | usr.sbin/pw/pw.c | 10 | ||||
-rw-r--r-- | usr.sbin/pw/pw_conf.c | 16 | ||||
-rw-r--r-- | usr.sbin/pw/pw_user.c | 8 | ||||
-rw-r--r-- | usr.sbin/pw/pwupd.h | 2 |
4 files changed, 28 insertions, 8 deletions
diff --git a/usr.sbin/pw/pw.c b/usr.sbin/pw/pw.c index 88c83db..bca6715 100644 --- a/usr.sbin/pw/pw.c +++ b/usr.sbin/pw/pw.c @@ -262,6 +262,11 @@ main(int argc, char *argv[]) case 'c': conf.gecos = pw_checkname(optarg, 1); break; + case 'e': + conf.expire_days = strtonum(optarg, 0, INT_MAX, &errstr); + if (errstr) + errx(EX_USAGE, "Invalid expired days: %s", optarg); + break; case 'g': if (which == 0) { /* for user* */ addarg(&arglist, 'g', optarg); @@ -321,6 +326,11 @@ main(int argc, char *argv[]) case 'o': conf.checkduplicate = false; break; + case 'p': + conf.password_days = strtonum(optarg, 0, INT_MAX, &errstr); + if (errstr) + errx(EX_USAGE, "Invalid password days: %s", optarg); + break; case 'q': conf.quiet = true; break; diff --git a/usr.sbin/pw/pw_conf.c b/usr.sbin/pw/pw_conf.c index c6a86b7..c1b5b33 100644 --- a/usr.sbin/pw/pw_conf.c +++ b/usr.sbin/pw/pw_conf.c @@ -355,12 +355,20 @@ read_userconfig(char const * file) } break; case _UC_EXPIRE: - if ((q = unquote(q)) != NULL && isdigit(*q)) - config.expire_days = atoi(q); + if ((q = unquote(q)) != NULL) { + errstr = NULL; + config.expire_days = strtonum(q, 0, INT_MAX, &errstr); + if (errstr) + warnx("Invalid expire days: '%s', ignoring", q); + } break; case _UC_PASSWORD: - if ((q = unquote(q)) != NULL && isdigit(*q)) - config.password_days = atoi(q); + if ((q = unquote(q)) != NULL) { + errstr = NULL; + config.password_days = strtonum(q, 0, INT_MAX, &errstr); + if (errstr) + warnx("Invalid password days: '%s', ignoring", q); + } break; case _UC_FIELDS: case _UC_NONE: diff --git a/usr.sbin/pw/pw_user.c b/usr.sbin/pw/pw_user.c index eca8235..6e07f1f 100644 --- a/usr.sbin/pw/pw_user.c +++ b/usr.sbin/pw/pw_user.c @@ -418,14 +418,14 @@ pw_user(int mode, char *name, long id, struct cargs * args) errx(EX_OSFILE, "root home `%s' is not a directory", cnf->home); } - if ((arg = getarg(args, 'e')) != NULL) - cnf->expire_days = atoi(arg->val); + if (conf.expire_days > 0) + cnf->expire_days = conf.expire_days; if ((arg = getarg(args, 'y')) != NULL) cnf->nispasswd = arg->val; - if ((arg = getarg(args, 'p')) != NULL && arg->val) - cnf->password_days = atoi(arg->val); + if (conf.password_days > 0) + cnf->password_days = conf.password_days; if ((arg = getarg(args, 'g')) != NULL) { if (!*(p = arg->val)) /* Handle empty group list specially */ diff --git a/usr.sbin/pw/pwupd.h b/usr.sbin/pw/pwupd.h index 054c5a5..9685bea 100644 --- a/usr.sbin/pw/pwupd.h +++ b/usr.sbin/pw/pwupd.h @@ -86,6 +86,8 @@ struct pwconf { char *newname; char *config; char *gecos; + int expire_days; + int password_days; int fd; int rootfd; int which; |