Author: markj
Date: Tue Sep  8 12:38:34 2020
New Revision: 365454
URL: https://svnweb.freebsd.org/changeset/base/365454

Log:
  MFC r365043-r365046:
  pw: Coverity fixes.

Modified:
  stable/12/usr.sbin/pw/pw_group.c
  stable/12/usr.sbin/pw/pw_user.c
  stable/12/usr.sbin/pw/rm_r.c
  stable/12/usr.sbin/pw/strtounum.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/usr.sbin/pw/pw_group.c
==============================================================================
--- stable/12/usr.sbin/pw/pw_group.c    Tue Sep  8 12:37:46 2020        
(r365453)
+++ stable/12/usr.sbin/pw/pw_group.c    Tue Sep  8 12:38:34 2020        
(r365454)
@@ -66,13 +66,18 @@ grp_set_passwd(struct group *grp, bool update, int fd,
        }
        
        if ((istty = isatty(fd))) {
-               n = t;
-               /* Disable echo */
-               n.c_lflag &= ~(ECHO);
-               tcsetattr(fd, TCSANOW, &n);
-               printf("%sassword for group %s:", update ? "New p" : "P",
-                   grp->gr_name);
-               fflush(stdout);
+               if (tcgetattr(fd, &t) == -1)
+                       istty = 0;
+               else {
+                       n = t;
+                       /* Disable echo */
+                       n.c_lflag &= ~(ECHO);
+                       tcsetattr(fd, TCSANOW, &n);
+                       printf("%sassword for group %s:",
+                           update ? "New p" : "P",
+                           grp->gr_name);
+                       fflush(stdout);
+               }
        }
        b = read(fd, line, sizeof(line) - 1);
        if (istty) {    /* Restore state */

Modified: stable/12/usr.sbin/pw/pw_user.c
==============================================================================
--- stable/12/usr.sbin/pw/pw_user.c     Tue Sep  8 12:37:46 2020        
(r365453)
+++ stable/12/usr.sbin/pw/pw_user.c     Tue Sep  8 12:38:34 2020        
(r365454)
@@ -712,24 +712,24 @@ rmopie(char const * name)
 {
        char tmp[1014];
        FILE *fp;
-       int fd;
        size_t len;
-       off_t   atofs = 0;
-       
+       long atofs;
+       int fd;
+
        if ((fd = openat(conf.rootfd, "etc/opiekeys", O_RDWR)) == -1)
                return;
 
        fp = fdopen(fd, "r+");
        len = strlen(name);
 
-       while (fgets(tmp, sizeof(tmp), fp) != NULL) {
+       for (atofs = 0; fgets(tmp, sizeof(tmp), fp) != NULL && atofs >= 0;
+           atofs = ftell(fp)) {
                if (strncmp(name, tmp, len) == 0 && tmp[len]==' ') {
                        /* Comment username out */
                        if (fseek(fp, atofs, SEEK_SET) == 0)
                                fwrite("#", 1, 1, fp);
                        break;
                }
-               atofs = ftell(fp);
        }
        /*
         * If we got an error of any sort, don't update!

Modified: stable/12/usr.sbin/pw/rm_r.c
==============================================================================
--- stable/12/usr.sbin/pw/rm_r.c        Tue Sep  8 12:37:46 2020        
(r365453)
+++ stable/12/usr.sbin/pw/rm_r.c        Tue Sep  8 12:38:34 2020        
(r365454)
@@ -57,6 +57,10 @@ rm_r(int rootfd, const char *path, uid_t uid)
        }
 
        d = fdopendir(dirfd);
+       if (d == NULL) {
+               (void)close(dirfd);
+               return;
+       }
        while ((e = readdir(d)) != NULL) {
                if (strcmp(e->d_name, ".") == 0 || strcmp(e->d_name, "..") == 0)
                        continue;

Modified: stable/12/usr.sbin/pw/strtounum.c
==============================================================================
--- stable/12/usr.sbin/pw/strtounum.c   Tue Sep  8 12:37:46 2020        
(r365453)
+++ stable/12/usr.sbin/pw/strtounum.c   Tue Sep  8 12:38:34 2020        
(r365454)
@@ -44,28 +44,24 @@ strtounum(const char * __restrict np, uintmax_t minval
        *errpp = NULL;
        if (minval > maxval) {
                errno = EINVAL;
-               if (errpp != NULL)
-                       *errpp = "invalid";
+               *errpp = "invalid";
                return (0);
        }
        errno = 0;
        ret = strtoumax(np, &endp, 10);
        if (endp == np || *endp != '\0') {
                errno = EINVAL;
-               if (errpp != NULL)
-                       *errpp = "invalid";
+               *errpp = "invalid";
                return (0);
        }
        if (ret < minval) {
                errno = ERANGE;
-               if (errpp != NULL)
-                       *errpp = "too small";
+               *errpp = "too small";
                return (0);
        }
        if (errno == ERANGE || ret > maxval) {
                errno = ERANGE;
-               if (errpp != NULL)
-                       *errpp = "too large";
+               *errpp = "too large";
                return (0);
        }
        return (ret);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to