diff options
Diffstat (limited to 'src/init.c')
-rw-r--r-- | src/init.c | 123 |
1 files changed, 0 insertions, 123 deletions
diff --git a/src/init.c b/src/init.c deleted file mode 100644 index 65bc01b..0000000 --- a/src/init.c +++ /dev/null @@ -1,123 +0,0 @@ -#include <unistd.h> -#include <fcntl.h> -#include <string.h> -#include <stdlib.h> -#include <errno.h> -#include <ctype.h> -#include <stdio.h> -#include <dlfcn.h> - -#ifdef DARWIN -#include <sys/param.h> -#include <sys/mount.h> -#else -#include <sys/vfs.h> -#endif - -#include <stdint.h> -#include <limits.h> - -#include "dso.h" -#include "policy.h" -#include "selinux_internal.h" - -char *selinux_mnt = NULL; -int selinux_page_size = 0; - -static void init_selinuxmnt(void) -{ - char buf[BUFSIZ], *p; - FILE *fp=NULL; - struct statfs sfbuf; - int rc; - char *bufp; - int exists = 0; - - if (selinux_mnt) - return; - - /* We check to see if the preferred mount point for selinux file - * system has a selinuxfs. */ - do { - rc = statfs(SELINUXMNT, &sfbuf); - } while (rc < 0 && errno == EINTR); - if (rc == 0) { - if ((uint32_t)sfbuf.f_type == (uint32_t)SELINUX_MAGIC) { - selinux_mnt = strdup(SELINUXMNT); - return; - } - } - - /* Drop back to detecting it the long way. */ - fp = fopen("/proc/filesystems", "r"); - if (!fp) - return; - - while ((bufp = fgets(buf, sizeof buf - 1, fp)) != NULL) { - if (strstr(buf, "selinuxfs")) { - exists = 1; - break; - } - } - - if (!exists) - goto out; - - fclose(fp); - - /* At this point, the usual spot doesn't have an selinuxfs so - * we look around for it */ - fp = fopen("/proc/mounts", "r"); - if (!fp) - goto out; - - while ((bufp = fgets(buf, sizeof buf - 1, fp)) != NULL) { - char *tmp; - p = strchr(buf, ' '); - if (!p) - goto out; - p++; - tmp = strchr(p, ' '); - if (!tmp) - goto out; - if (!strncmp(tmp + 1, "selinuxfs ", 10)) { - *tmp = '\0'; - break; - } - } - - /* If we found something, dup it */ - if (bufp) - selinux_mnt = strdup(p); - - out: - if (fp) - fclose(fp); - return; -} - -void fini_selinuxmnt(void) -{ - free(selinux_mnt); - selinux_mnt = NULL; -} - -void set_selinuxmnt(const char *mnt) -{ - selinux_mnt = strdup(mnt); -} - -hidden_def(set_selinuxmnt) - -static void init_lib(void) __attribute__ ((constructor)); -static void init_lib(void) -{ - selinux_page_size = sysconf(_SC_PAGE_SIZE); - init_selinuxmnt(); -} - -static void fini_lib(void) __attribute__ ((destructor)); -static void fini_lib(void) -{ - fini_selinuxmnt(); -} |