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