Blame SOURCES/shadow-4.6-coverity.patch

5ab9c0
diff -up shadow-4.6/lib/commonio.c.coverity shadow-4.6/lib/commonio.c
5ab9c0
--- shadow-4.6/lib/commonio.c.coverity	2018-10-10 09:50:59.307738194 +0200
5ab9c0
+++ shadow-4.6/lib/commonio.c	2018-10-10 09:55:32.919319048 +0200
5ab9c0
@@ -382,7 +382,7 @@ int commonio_lock_nowait (struct commoni
5ab9c0
 	char* lock = NULL;
5ab9c0
 	size_t lock_file_len;
5ab9c0
 	size_t file_len;
5ab9c0
-	int err;
5ab9c0
+	int err = 0;
5ab9c0
 
5ab9c0
 	if (db->locked) {
5ab9c0
 		return 1;
5ab9c0
@@ -391,12 +391,10 @@ int commonio_lock_nowait (struct commoni
5ab9c0
 	lock_file_len = strlen(db->filename) + 6; /* sizeof ".lock" */
5ab9c0
 	file = (char*)malloc(file_len);
5ab9c0
 	if(file == NULL) {
5ab9c0
-		err = ENOMEM;
5ab9c0
 		goto cleanup_ENOMEM;
5ab9c0
 	}
5ab9c0
 	lock = (char*)malloc(lock_file_len);
5ab9c0
 	if(lock == NULL) {
5ab9c0
-		err = ENOMEM;
5ab9c0
 		goto cleanup_ENOMEM;
5ab9c0
 	}
5ab9c0
 	snprintf (file, file_len, "%s.%lu",
5ab9c0
diff -up shadow-4.6/libmisc/console.c.coverity shadow-4.6/libmisc/console.c
5ab9c0
--- shadow-4.6/libmisc/console.c.coverity	2018-04-29 18:42:37.000000000 +0200
5ab9c0
+++ shadow-4.6/libmisc/console.c	2018-10-10 11:56:51.368837533 +0200
5ab9c0
@@ -50,7 +50,7 @@ static bool is_listed (const char *cfgin
5ab9c0
 static bool is_listed (const char *cfgin, const char *tty, bool def)
5ab9c0
 {
5ab9c0
 	FILE *fp;
5ab9c0
-	char buf[200], *s;
5ab9c0
+	char buf[1024], *s;
5ab9c0
 	const char *cons;
5ab9c0
 
5ab9c0
 	/*
5ab9c0
@@ -70,7 +70,8 @@ static bool is_listed (const char *cfgin
5ab9c0
 
5ab9c0
 	if (*cons != '/') {
5ab9c0
 		char *pbuf;
5ab9c0
-		strcpy (buf, cons);
5ab9c0
+		strncpy (buf, cons, sizeof (buf));
5ab9c0
+		buf[sizeof (buf) - 1] = '\0';
5ab9c0
 		pbuf = &buf[0];
5ab9c0
 		while ((s = strtok (pbuf, ":")) != NULL) {
5ab9c0
 			if (strcmp (s, tty) == 0) {
5ab9c0
diff -up shadow-4.6/lib/spawn.c.coverity shadow-4.6/lib/spawn.c
5ab9c0
--- shadow-4.6/lib/spawn.c.coverity	2018-04-29 18:42:37.000000001 +0200
5ab9c0
+++ shadow-4.6/lib/spawn.c	2018-10-10 11:36:49.035784609 +0200
5ab9c0
@@ -69,7 +69,7 @@ int run_command (const char *cmd, const
5ab9c0
 	do {
5ab9c0
 		wpid = waitpid (pid, status, 0);
5ab9c0
 	} while (   ((pid_t)-1 == wpid && errno == EINTR)
5ab9c0
-	         || (wpid != pid));
5ab9c0
+	         || ((pid_t)-1 != wpid && wpid != pid));
5ab9c0
 
5ab9c0
 	if ((pid_t)-1 == wpid) {
5ab9c0
 		fprintf (stderr, "%s: waitpid (status: %d): %s\n",
5ab9c0
diff -up shadow-4.6/src/useradd.c.coverity shadow-4.6/src/useradd.c
5ab9c0
--- shadow-4.6/src/useradd.c.coverity	2018-10-10 09:50:59.303738098 +0200
5ab9c0
+++ shadow-4.6/src/useradd.c	2018-10-12 13:51:54.480490257 +0200
5ab9c0
@@ -314,7 +314,7 @@ static void fail_exit (int code)
5ab9c0
 static void get_defaults (void)
5ab9c0
 {
5ab9c0
 	FILE *fp;
5ab9c0
-	char* default_file = USER_DEFAULTS_FILE;
5ab9c0
+	char *default_file = USER_DEFAULTS_FILE;
5ab9c0
 	char buf[1024];
5ab9c0
 	char *cp;
5ab9c0
 
5ab9c0
@@ -324,6 +324,8 @@ static void get_defaults (void)
5ab9c0
 
5ab9c0
 		len = strlen(prefix) + strlen(USER_DEFAULTS_FILE) + 2;
5ab9c0
 		default_file = malloc(len);
5ab9c0
+                if (default_file == NULL)
5ab9c0
+                       return;
5ab9c0
 		wlen = snprintf(default_file, len, "%s/%s", prefix, USER_DEFAULTS_FILE);
5ab9c0
 		assert (wlen == (int) len -1);
5ab9c0
 	}
5ab9c0
@@ -334,7 +336,7 @@ static void get_defaults (void)
5ab9c0
 
5ab9c0
 	fp = fopen (default_file, "r");
5ab9c0
 	if (NULL == fp) {
5ab9c0
-		return;
5ab9c0
+		goto getdef_err;
5ab9c0
 	}
5ab9c0
 
5ab9c0
 	/*
5ab9c0
@@ -445,7 +447,7 @@ static void get_defaults (void)
5ab9c0
 		}
5ab9c0
 	}
5ab9c0
 	(void) fclose (fp);
5ab9c0
-
5ab9c0
+     getdef_err:
5ab9c0
 	if(prefix[0]) {
5ab9c0
 		free(default_file);
5ab9c0
 	}
5ab9c0
@@ -480,8 +482,8 @@ static int set_defaults (void)
5ab9c0
 	FILE *ifp;
5ab9c0
 	FILE *ofp;
5ab9c0
 	char buf[1024];
5ab9c0
-	char* new_file = NEW_USER_FILE;
5ab9c0
-	char* default_file = USER_DEFAULTS_FILE;
5ab9c0
+	char *new_file = NULL;
5ab9c0
+	char *default_file = USER_DEFAULTS_FILE;
5ab9c0
 	char *cp;
5ab9c0
 	int ofd;
5ab9c0
 	int wlen;
5ab9c0
@@ -492,17 +494,30 @@ static int set_defaults (void)
5ab9c0
 	bool out_shell = false;
5ab9c0
 	bool out_skel = false;
5ab9c0
 	bool out_create_mail_spool = false;
5ab9c0
+	size_t len;
5ab9c0
+	int ret = -1;
5ab9c0
 
5ab9c0
-	if(prefix[0]) {
5ab9c0
-		size_t len;
5ab9c0
 
5ab9c0
-		len = strlen(prefix) + strlen(NEW_USER_FILE) + 2;
5ab9c0
-		new_file = malloc(len);
5ab9c0
-		wlen = snprintf(new_file, len, "%s/%s", prefix, NEW_USER_FILE);
5ab9c0
-		assert (wlen == (int) len -1);
5ab9c0
+	len = strlen(prefix) + strlen(NEW_USER_FILE) + 2;
5ab9c0
+	new_file = malloc(len);
5ab9c0
+        if (new_file == NULL) {
5ab9c0
+		fprintf (stderr,
5ab9c0
+		         _("%s: cannot create new defaults file: %s\n"),
5ab9c0
+		         Prog, strerror(errno));
5ab9c0
+		return -1;
5ab9c0
+        }
5ab9c0
+	wlen = snprintf(new_file, len, "%s%s%s", prefix, prefix[0]?"/":"", NEW_USER_FILE);
5ab9c0
+	assert (wlen <= (int) len -1);
5ab9c0
 
5ab9c0
+	if(prefix[0]) {
5ab9c0
 		len = strlen(prefix) + strlen(USER_DEFAULTS_FILE) + 2;
5ab9c0
 		default_file = malloc(len);
5ab9c0
+		if (default_file == NULL) {
5ab9c0
+			fprintf (stderr,
5ab9c0
+			         _("%s: cannot create new defaults file: %s\n"),
5ab9c0
+			         Prog, strerror(errno));
5ab9c0
+			goto setdef_err;
5ab9c0
+		}
5ab9c0
 		wlen = snprintf(default_file, len, "%s/%s", prefix, USER_DEFAULTS_FILE);
5ab9c0
 		assert (wlen == (int) len -1);
5ab9c0
 	}
5ab9c0
@@ -515,7 +530,7 @@ static int set_defaults (void)
5ab9c0
 		fprintf (stderr,
5ab9c0
 		         _("%s: cannot create new defaults file\n"),
5ab9c0
 		         Prog);
5ab9c0
-		return -1;
5ab9c0
+		goto setdef_err;
5ab9c0
 	}
5ab9c0
 
5ab9c0
 	ofp = fdopen (ofd, "w");
5ab9c0
@@ -523,7 +538,7 @@ static int set_defaults (void)
5ab9c0
 		fprintf (stderr,
5ab9c0
 		         _("%s: cannot open new defaults file\n"),
5ab9c0
 		         Prog);
5ab9c0
-		return -1;
5ab9c0
+		goto setdef_err;
5ab9c0
 	}
5ab9c0
 
5ab9c0
 	/*
5ab9c0
@@ -550,7 +565,7 @@ static int set_defaults (void)
5ab9c0
 				         _("%s: line too long in %s: %s..."),
5ab9c0
 				         Prog, default_file, buf);
5ab9c0
 				(void) fclose (ifp);
5ab9c0
-				return -1;
5ab9c0
+				goto setdef_err;
5ab9c0
 			}
5ab9c0
 		}
5ab9c0
 
5ab9c0
@@ -614,7 +629,7 @@ static int set_defaults (void)
5ab9c0
 	    || (fsync (fileno (ofp)) != 0)
5ab9c0
 	    || (fclose (ofp) != 0)) {
5ab9c0
 		unlink (new_file);
5ab9c0
-		return -1;
5ab9c0
+		goto setdef_err;
5ab9c0
 	}
5ab9c0
 
5ab9c0
 	/*
5ab9c0
@@ -629,7 +644,7 @@ static int set_defaults (void)
5ab9c0
 		         _("%s: Cannot create backup file (%s): %s\n"),
5ab9c0
 		         Prog, buf, strerror (err));
5ab9c0
 		unlink (new_file);
5ab9c0
-		return -1;
5ab9c0
+		goto setdef_err;
5ab9c0
 	}
5ab9c0
 
5ab9c0
 	/*
5ab9c0
@@ -640,11 +655,11 @@ static int set_defaults (void)
5ab9c0
 		fprintf (stderr,
5ab9c0
 		         _("%s: rename: %s: %s\n"),
5ab9c0
 		         Prog, new_file, strerror (err));
5ab9c0
-		return -1;
5ab9c0
+		goto setdef_err;
5ab9c0
 	}
5ab9c0
 #ifdef WITH_AUDIT
5ab9c0
 	audit_logger (AUDIT_USYS_CONFIG, Prog,
5ab9c0
-	              "changing-useradd-defaults",
5ab9c0
+	              "changing useradd defaults",
5ab9c0
 	              NULL, AUDIT_NO_ID,
5ab9c0
 	              SHADOW_AUDIT_SUCCESS);
5ab9c0
 #endif
5ab9c0
@@ -654,13 +669,14 @@ static int set_defaults (void)
5ab9c0
 	         (unsigned int) def_group, def_home, def_shell,
5ab9c0
 	         def_inactive, def_expire, def_template,
5ab9c0
 	         def_create_mail_spool));
5ab9c0
-
5ab9c0
+	ret = 0;
5ab9c0
+    setdef_err:
5ab9c0
+	free(new_file);
5ab9c0
 	if(prefix[0]) {
5ab9c0
-		free(new_file);
5ab9c0
 		free(default_file);
5ab9c0
 	}
5ab9c0
 
5ab9c0
-	return 0;
5ab9c0
+	return ret;
5ab9c0
 }
5ab9c0
 
5ab9c0
 /*