--- 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))