blob: 24e5e2c08960996abb4e57691e316e1e55b5dc0d [file] [log] [blame]
#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)