1 #include <unistd.h> 2 #include <sys/types.h> 3 #include <fcntl.h> 4 #include <stdlib.h> 5 #include <stdio.h> 6 #include <errno.h> 7 #include <string.h> 8 #include "selinux_internal.h" 9 #include "policy.h" 10 #include <limits.h> 11 12 #define SELINUX_INITCON_DIR "/initial_contexts/" 13 14 int security_get_initial_context(const char * name, security_context_t * con) 15 { 16 char path[PATH_MAX]; 17 char *buf; 18 size_t size; 19 int fd, ret; 20 21 if (!selinux_mnt) { 22 errno = ENOENT; 23 return -1; 24 } 25 26 snprintf(path, sizeof path, "%s%s%s", 27 selinux_mnt, SELINUX_INITCON_DIR, name); 28 fd = open(path, O_RDONLY); 29 if (fd < 0) 30 return -1; 31 32 size = selinux_page_size; 33 buf = malloc(size); 34 if (!buf) { 35 ret = -1; 36 goto out; 37 } 38 memset(buf, 0, size); 39 ret = read(fd, buf, size - 1); 40 if (ret < 0) 41 goto out2; 42 43 *con = strdup(buf); 44 if (!(*con)) { 45 ret = -1; 46 goto out2; 47 } 48 ret = 0; 49 out2: 50 free(buf); 51 out: 52 close(fd); 53 return ret; 54 } 55 56