Author: bapt
Date: Sat Aug  1 10:25:55 2015
New Revision: 286152
URL: https://svnweb.freebsd.org/changeset/base/286152

Log:
  Validate expiration days and password days from commmand line and pw.conf

Modified:
  head/usr.sbin/pw/pw.c
  head/usr.sbin/pw/pw_conf.c
  head/usr.sbin/pw/pw_user.c
  head/usr.sbin/pw/pwupd.h

Modified: head/usr.sbin/pw/pw.c
==============================================================================
--- head/usr.sbin/pw/pw.c       Sat Aug  1 10:10:13 2015        (r286151)
+++ head/usr.sbin/pw/pw.c       Sat Aug  1 10:25:55 2015        (r286152)
@@ -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;

Modified: head/usr.sbin/pw/pw_conf.c
==============================================================================
--- head/usr.sbin/pw/pw_conf.c  Sat Aug  1 10:10:13 2015        (r286151)
+++ head/usr.sbin/pw/pw_conf.c  Sat Aug  1 10:25:55 2015        (r286152)
@@ -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:

Modified: head/usr.sbin/pw/pw_user.c
==============================================================================
--- head/usr.sbin/pw/pw_user.c  Sat Aug  1 10:10:13 2015        (r286151)
+++ head/usr.sbin/pw/pw_user.c  Sat Aug  1 10:25:55 2015        (r286152)
@@ -418,14 +418,14 @@ pw_user(int mode, char *name, long id, s
                        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 */

Modified: head/usr.sbin/pw/pwupd.h
==============================================================================
--- head/usr.sbin/pw/pwupd.h    Sat Aug  1 10:10:13 2015        (r286151)
+++ head/usr.sbin/pw/pwupd.h    Sat Aug  1 10:25:55 2015        (r286152)
@@ -86,6 +86,8 @@ struct pwconf {
        char            *newname;
        char            *config;
        char            *gecos;
+       int              expire_days;
+       int              password_days;
        int              fd;
        int              rootfd;
        int              which;
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to