| #include <unistd.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <stdio.h> |
| #include <ctype.h> |
| #include "selinux_internal.h" |
| #include "context_internal.h" |
| |
| int selinux_check_securetty_context(const char * tty_context) |
| { |
| char *line = NULL; |
| char *start, *end = NULL; |
| size_t line_len = 0; |
| ssize_t len; |
| int found = -1; |
| FILE *fp; |
| fp = fopen(selinux_securetty_types_path(), "re"); |
| if (fp) { |
| context_t con = context_new(tty_context); |
| if (con) { |
| const char *type = context_type_get(con); |
| while ((len = getline(&line, &line_len, fp)) != -1) { |
| |
| if (line[len - 1] == '\n') |
| line[len - 1] = 0; |
| |
| /* Skip leading whitespace. */ |
| start = line; |
| while (*start && isspace(*start)) |
| start++; |
| if (!(*start)) |
| continue; |
| |
| end = start; |
| while (*end && !isspace(*end)) |
| end++; |
| if (*end) |
| *end++ = 0; |
| if (!strcmp(type, start)) { |
| found = 0; |
| break; |
| } |
| } |
| free(line); |
| context_free(con); |
| } |
| fclose(fp); |
| } |
| |
| return found; |
| } |
| |