Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 8 Sep 2020 12:38:35 +0000 (UTC)
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org
Subject:   svn commit: r365454 - stable/12/usr.sbin/pw
Message-ID:  <202009081238.088CcZll058328@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202009081238.088CcZll058328>