Blob Blame History Raw
--- checkpolicy-1.23.3/checkpolicy.c~	2005-05-19 13:46:55.000000000 -0400
+++ checkpolicy-1.23.3/checkpolicy.c	2005-05-19 14:04:16.000000000 -0400
@@ -104,6 +104,12 @@
 	exit(1);
 }
 
+#define FGETS(out, size, in) \
+if (fgets(out,size,in)==NULL) {	\
+		fprintf(stderr, "fgets failed at line %d: %s\n", __LINE__,\
+				strerror(errno)); \
+			exit(1);\
+}
 static int print_sid(sepol_security_id_t sid,
 		     context_struct_t * context __attribute__ ((unused)), void *data __attribute__ ((unused)))
 {
@@ -692,19 +698,19 @@
 	printf("q)  Exit\n");
 	while (1) {
 		printf("\nChoose:  ");
-		fgets(ans, sizeof(ans), stdin);
+		FGETS(ans, sizeof(ans), stdin);
 		switch (ans[0]) {
 		case '0':
 			printf("source sid?  ");
-			fgets(ans, sizeof(ans), stdin);
+			FGETS(ans, sizeof(ans), stdin);
 			ssid = atoi(ans);
 
 			printf("target sid?  ");
-			fgets(ans, sizeof(ans), stdin);
+			FGETS(ans, sizeof(ans), stdin);
 			tsid = atoi(ans);
 
 			printf("target class?  ");
-			fgets(ans, sizeof(ans), stdin);
+			FGETS(ans, sizeof(ans), stdin);
 			if (isdigit(ans[0])) {
 				tclass = atoi(ans);
 				if (!tclass || tclass > policydb.p_classes.nprim) {
@@ -756,7 +762,7 @@
 			break;
 		case '1':
 			printf("sid?  ");
-			fgets(ans, sizeof(ans), stdin);
+			FGETS(ans, sizeof(ans), stdin);
 			ssid = atoi(ans);
 			ret = sepol_sid_to_context(ssid,
 					       &scontext, &scontext_len);
@@ -777,7 +783,7 @@
 			break;
 		case '2':
 			printf("scontext?  ");
-			fgets(ans, sizeof(ans), stdin);
+			FGETS(ans, sizeof(ans), stdin);
 			scontext_len = strlen(ans);
 			ans[scontext_len - 1] = 0;
 			ret = sepol_context_to_sid(ans, scontext_len,
@@ -802,14 +808,14 @@
 			ch = ans[0];
 
 			printf("source sid?  ");
-			fgets(ans, sizeof(ans), stdin);
+			FGETS(ans, sizeof(ans), stdin);
 			ssid = atoi(ans);
 			printf("target sid?  ");
-			fgets(ans, sizeof(ans), stdin);
+			FGETS(ans, sizeof(ans), stdin);
 			tsid = atoi(ans);
 
 			printf("object class?  ");
-			fgets(ans, sizeof(ans), stdin);
+			FGETS(ans, sizeof(ans), stdin);
 			if (isdigit(ans[0])) {
 				tclass = atoi(ans);
 				if (!tclass || tclass > policydb.p_classes.nprim) {
@@ -852,7 +858,7 @@
 			break;
 		case '7':
 			printf("pathname?  ");
-			fgets(ans, sizeof(ans), stdin);
+			FGETS(ans, sizeof(ans), stdin);
 			pathlen = strlen(ans);
 			ans[pathlen - 1] = 0;
 			printf("%s:  loading policy configuration from %s\n", argv[0], ans);
@@ -890,7 +896,7 @@
 			break;
 		case '8':
 			printf("fs kdevname?  ");
-			fgets(ans, sizeof(ans), stdin);
+			FGETS(ans, sizeof(ans), stdin);
 			ans[strlen(ans) - 1] = 0;
 			sepol_fs_sid(ans, &ssid, &tsid);
 			printf("fs_sid %d default_file_sid %d\n",
@@ -898,7 +904,7 @@
 			break;
 		case '9':
 			printf("protocol?  ");
-			fgets(ans, sizeof(ans), stdin);
+			FGETS(ans, sizeof(ans), stdin);
 			ans[strlen(ans) - 1] = 0;
 			if (!strcmp(ans, "tcp") || !strcmp(ans, "TCP"))
 				protocol = IPPROTO_TCP;
@@ -909,14 +915,14 @@
 				break;
 			}
 			printf("port? ");
-			fgets(ans, sizeof(ans), stdin);
+			FGETS(ans, sizeof(ans), stdin);
 			port = atoi(ans);
 			sepol_port_sid(0, 0, protocol, port, &ssid);
 			printf("sid %d\n", ssid);
 			break;
 		case 'a':
 			printf("netif name?  ");
-			fgets(ans, sizeof(ans), stdin);
+			FGETS(ans, sizeof(ans), stdin);
 			ans[strlen(ans) - 1] = 0;
 			sepol_netif_sid(ans, &ssid, &tsid);
 			printf("if_sid %d default_msg_sid %d\n",
@@ -929,7 +935,7 @@
 			struct in6_addr addr6;
 			
 			printf("protocol family? ");
-			fgets(ans, sizeof(ans), stdin);
+			FGETS(ans, sizeof(ans), stdin);
 			ans[strlen(ans) - 1] = 0;
 			if (!strcasecmp(ans, "ipv4"))
 				family = AF_INET;
@@ -941,7 +947,7 @@
 			}
 			
 			printf("node address?  ");
-			fgets(ans, sizeof(ans), stdin);
+			FGETS(ans, sizeof(ans), stdin);
 			ans[strlen(ans) - 1] = 0;
 			
 			if (family == AF_INET) {
@@ -963,7 +969,7 @@
 		}	
 		case 'c':
 			printf("fstype?  ");
-			fgets(ans, sizeof(ans), stdin);
+			FGETS(ans, sizeof(ans), stdin);
 			ans[strlen(ans) - 1] = 0;
 			sepol_fs_use(ans, &uret, &ssid);
 			switch (uret) {
@@ -987,15 +993,15 @@
 			break;
 		case 'd':
 			printf("fstype?  ");
-			fgets(ans, sizeof(ans), stdin);
+			FGETS(ans, sizeof(ans), stdin);
 			ans[strlen(ans) - 1] = 0;
 			fstype = strdup(ans);
 			printf("path?  ");
-			fgets(ans, sizeof(ans), stdin);
+			FGETS(ans, sizeof(ans), stdin);
 			ans[strlen(ans) - 1] = 0;
 			path = strdup(ans);
 			printf("object class?  ");
-			fgets(ans, sizeof(ans), stdin);
+			FGETS(ans, sizeof(ans), stdin);
 			if (isdigit(ans[0])) {
 				tclass = atoi(ans);
 				if (!tclass || tclass > policydb.p_classes.nprim) {
@@ -1019,12 +1025,12 @@
 			break;
 		case 'e':
 			printf("from SID?  ");
-			fgets(ans, sizeof(ans), stdin);
+			FGETS(ans, sizeof(ans), stdin);
 			ans[strlen(ans) - 1] = 0;
 			ssid = atoi(ans);
 
 			printf("username?  ");
-			fgets(ans, sizeof(ans), stdin);
+			FGETS(ans, sizeof(ans), stdin);
 			ans[strlen(ans) - 1] = 0;
 
 			ret = sepol_get_user_sids(ssid, ans, &sids, &nel);
@@ -1055,7 +1061,7 @@
 			break;
 		case 'h':
 			printf("name? ");
-			fgets(ans, sizeof(ans), stdin);
+			FGETS(ans, sizeof(ans), stdin);
 			ans[strlen(ans) - 1] = 0;
 			
 			name = malloc((strlen(ans) + 1) * sizeof(char));
@@ -1067,7 +1073,7 @@
 
 
 			printf("state? ");
-			fgets(ans, sizeof(ans), stdin);
+			FGETS(ans, sizeof(ans), stdin);
 			ans[strlen(ans) - 1] = 0;
 
 			if (atoi(ans))