| .. | .. |
|---|
| 18 | 18 | #include "classmap.h" |
|---|
| 19 | 19 | #include "initial_sid_to_string.h" |
|---|
| 20 | 20 | |
|---|
| 21 | | -#define max(x, y) (((int)(x) > (int)(y)) ? x : y) |
|---|
| 22 | | - |
|---|
| 23 | 21 | const char *progname; |
|---|
| 24 | 22 | |
|---|
| 25 | 23 | static void usage(void) |
|---|
| .. | .. |
|---|
| 45 | 43 | |
|---|
| 46 | 44 | int main(int argc, char *argv[]) |
|---|
| 47 | 45 | { |
|---|
| 48 | | - int i, j, k; |
|---|
| 46 | + int i, j; |
|---|
| 49 | 47 | int isids_len; |
|---|
| 50 | 48 | FILE *fout; |
|---|
| 51 | | - const char *needle = "SOCKET"; |
|---|
| 52 | | - char *substr; |
|---|
| 53 | 49 | |
|---|
| 54 | 50 | progname = argv[0]; |
|---|
| 55 | 51 | |
|---|
| .. | .. |
|---|
| 71 | 67 | } |
|---|
| 72 | 68 | |
|---|
| 73 | 69 | isids_len = sizeof(initial_sid_to_string) / sizeof (char *); |
|---|
| 74 | | - for (i = 1; i < isids_len; i++) |
|---|
| 75 | | - initial_sid_to_string[i] = stoupperx(initial_sid_to_string[i]); |
|---|
| 70 | + for (i = 1; i < isids_len; i++) { |
|---|
| 71 | + const char *s = initial_sid_to_string[i]; |
|---|
| 72 | + |
|---|
| 73 | + if (s) |
|---|
| 74 | + initial_sid_to_string[i] = stoupperx(s); |
|---|
| 75 | + } |
|---|
| 76 | 76 | |
|---|
| 77 | 77 | fprintf(fout, "/* This file is automatically generated. Do not edit. */\n"); |
|---|
| 78 | 78 | fprintf(fout, "#ifndef _SELINUX_FLASK_H_\n#define _SELINUX_FLASK_H_\n\n"); |
|---|
| 79 | 79 | |
|---|
| 80 | 80 | for (i = 0; secclass_map[i].name; i++) { |
|---|
| 81 | 81 | struct security_class_mapping *map = &secclass_map[i]; |
|---|
| 82 | | - fprintf(fout, "#define SECCLASS_%s", map->name); |
|---|
| 83 | | - for (j = 0; j < max(1, 40 - strlen(map->name)); j++) |
|---|
| 84 | | - fprintf(fout, " "); |
|---|
| 85 | | - fprintf(fout, "%2d\n", i+1); |
|---|
| 82 | + fprintf(fout, "#define SECCLASS_%-39s %2d\n", map->name, i+1); |
|---|
| 86 | 83 | } |
|---|
| 87 | 84 | |
|---|
| 88 | 85 | fprintf(fout, "\n"); |
|---|
| 89 | 86 | |
|---|
| 90 | 87 | for (i = 1; i < isids_len; i++) { |
|---|
| 91 | 88 | const char *s = initial_sid_to_string[i]; |
|---|
| 92 | | - fprintf(fout, "#define SECINITSID_%s", s); |
|---|
| 93 | | - for (j = 0; j < max(1, 40 - strlen(s)); j++) |
|---|
| 94 | | - fprintf(fout, " "); |
|---|
| 95 | | - fprintf(fout, "%2d\n", i); |
|---|
| 89 | + if (s) |
|---|
| 90 | + fprintf(fout, "#define SECINITSID_%-39s %2d\n", s, i); |
|---|
| 96 | 91 | } |
|---|
| 97 | 92 | fprintf(fout, "\n#define SECINITSID_NUM %d\n", i-1); |
|---|
| 98 | 93 | fprintf(fout, "\nstatic inline bool security_is_socket_class(u16 kern_tclass)\n"); |
|---|
| .. | .. |
|---|
| 100 | 95 | fprintf(fout, "\tbool sock = false;\n\n"); |
|---|
| 101 | 96 | fprintf(fout, "\tswitch (kern_tclass) {\n"); |
|---|
| 102 | 97 | for (i = 0; secclass_map[i].name; i++) { |
|---|
| 98 | + static char s[] = "SOCKET"; |
|---|
| 103 | 99 | struct security_class_mapping *map = &secclass_map[i]; |
|---|
| 104 | | - substr = strstr(map->name, needle); |
|---|
| 105 | | - if (substr && strcmp(substr, needle) == 0) |
|---|
| 100 | + int len = strlen(map->name), l = sizeof(s) - 1; |
|---|
| 101 | + if (len >= l && memcmp(map->name + len - l, s, l) == 0) |
|---|
| 106 | 102 | fprintf(fout, "\tcase SECCLASS_%s:\n", map->name); |
|---|
| 107 | 103 | } |
|---|
| 108 | 104 | fprintf(fout, "\t\tsock = true;\n"); |
|---|
| .. | .. |
|---|
| 128 | 124 | |
|---|
| 129 | 125 | for (i = 0; secclass_map[i].name; i++) { |
|---|
| 130 | 126 | struct security_class_mapping *map = &secclass_map[i]; |
|---|
| 127 | + int len = strlen(map->name); |
|---|
| 131 | 128 | for (j = 0; map->perms[j]; j++) { |
|---|
| 132 | 129 | if (j >= 32) { |
|---|
| 133 | 130 | fprintf(stderr, "Too many permissions to fit into an access vector at (%s, %s).\n", |
|---|
| 134 | 131 | map->name, map->perms[j]); |
|---|
| 135 | 132 | exit(5); |
|---|
| 136 | 133 | } |
|---|
| 137 | | - fprintf(fout, "#define %s__%s", map->name, |
|---|
| 138 | | - map->perms[j]); |
|---|
| 139 | | - for (k = 0; k < max(1, 40 - strlen(map->name) - strlen(map->perms[j])); k++) |
|---|
| 140 | | - fprintf(fout, " "); |
|---|
| 141 | | - fprintf(fout, "0x%08xU\n", (1<<j)); |
|---|
| 134 | + fprintf(fout, "#define %s__%-*s 0x%08xU\n", map->name, |
|---|
| 135 | + 39-len, map->perms[j], 1U<<j); |
|---|
| 142 | 136 | } |
|---|
| 143 | 137 | } |
|---|
| 144 | 138 | |
|---|