Author: bapt
Date: Sat Jul  4 15:56:59 2015
New Revision: 285137
URL: https://svnweb.freebsd.org/changeset/base/285137

Log:
  Fix validation of crypted password
  Small cleanups

Modified:
  head/usr.sbin/pw/pw_user.c

Modified: head/usr.sbin/pw/pw_user.c
==============================================================================
--- head/usr.sbin/pw/pw_user.c  Sat Jul  4 15:54:11 2015        (r285136)
+++ head/usr.sbin/pw/pw_user.c  Sat Jul  4 15:56:59 2015        (r285137)
@@ -87,7 +87,7 @@ create_and_populate_homedir(int mode, st
 }
 
 static int
-set_passwd(struct passwd *pwd, struct carg *arg, bool update)
+set_passwd(struct passwd *pwd, bool update)
 {
        int              b, istty;
        struct termios   t, n;
@@ -107,6 +107,7 @@ set_passwd(struct passwd *pwd, struct ca
                if (tcgetattr(conf.fd, &t) == -1)
                        istty = 0;
                else {
+                       n = t;
                        n.c_lflag &= ~(ECHO);
                        tcsetattr(conf.fd, TCSANOW, &n);
                        printf("%s%spassword for user %s:",
@@ -134,7 +135,7 @@ set_passwd(struct passwd *pwd, struct ca
                    conf.fd);
        if (conf.precrypted) {
                if (strchr(line, ':') != NULL)
-                       return EX_DATAERR;
+                       errx(EX_DATAERR, "bad encrypted password");
                pwd->pw_passwd = line;
        } else {
                lc = login_getpwclass(pwd);
@@ -531,8 +532,7 @@ pw_user(int mode, char *name, long id, s
                                warnx("WARNING: home `%s' is not a directory", 
pwd->pw_dir);
                }
 
-               if ((arg = getarg(args, 'w')) != NULL &&
-                   getarg(args, 'h') == NULL && getarg(args, 'H') == NULL) {
+               if ((arg = getarg(args, 'w')) != NULL && conf.fd == -1) {
                        login_cap_t *lc;
 
                        lc = login_getpwclass(pwd);
@@ -591,7 +591,7 @@ pw_user(int mode, char *name, long id, s
        }
 
        if (conf.fd != -1)
-               edited = set_passwd(pwd, arg, mode == M_UPDATE);
+               edited = set_passwd(pwd, mode == M_UPDATE);
 
        /*
         * Special case: -N only displays & exits
@@ -1004,8 +1004,7 @@ pw_password(struct userconf * cnf, struc
                /*
                 * We give this information back to the user
                 */
-               if (getarg(args, 'h') == NULL && getarg(args, 'H') == NULL &&
-                   !conf.dryrun) {
+               if (conf.fd == -1 && !conf.dryrun) {
                        if (isatty(STDOUT_FILENO))
                                printf("Password for '%s' is: ", user);
                        printf("%s\n", pwbuf);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to