#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(), "r"); 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; } hidden_def(selinux_check_securetty_context)