147173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include <unistd.h>
247173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include <sys/types.h>
347173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include <fcntl.h>
447173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include <stdlib.h>
547173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include <errno.h>
647173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include <string.h>
747173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include <stdio.h>
847173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include "selinux_internal.h"
947173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include "policy.h"
1047173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner#include <limits.h>
1147173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner
1247173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turnerint security_check_context(const char * con)
1347173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner{
1447173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	char path[PATH_MAX];
1547173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	int fd, ret;
1647173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner
1747173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	if (!selinux_mnt) {
1847173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner		errno = ENOENT;
1947173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner		return -1;
2047173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	}
2147173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner
2247173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	snprintf(path, sizeof path, "%s/context", selinux_mnt);
2347173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	fd = open(path, O_RDWR);
2447173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	if (fd < 0)
2547173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner		return -1;
2647173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner
2747173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	ret = write(fd, con, strlen(con) + 1);
2847173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	close(fd);
2947173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	if (ret < 0)
3047173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner		return -1;
3147173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner	return 0;
3247173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner}
3347173c7d6704f1258b2d85537caa09185f6920c8David 'Digit' Turner
34