2005-09-12 15:52:30 +00:00
|
|
|
diff --exclude-from=exclude -N -u -r nsalibselinux/include/selinux/selinux.h libselinux-1.25.7/include/selinux/selinux.h
|
|
|
|
--- nsalibselinux/include/selinux/selinux.h 2005-09-01 11:17:40.000000000 -0400
|
|
|
|
+++ libselinux-1.25.7/include/selinux/selinux.h 2005-09-12 11:33:32.000000000 -0400
|
|
|
|
@@ -304,6 +304,12 @@
|
|
|
|
extern int selinux_getenforcemode(int *enforce);
|
|
|
|
|
|
|
|
/*
|
|
|
|
+ selinux_gettype reads the /etc/selinux/config file and determines
|
|
|
|
+ whether the policy tyep for this machine, type must be freed.
|
|
|
|
+ */
|
|
|
|
+extern void selinux_gettype(char **type);
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
selinux_policy_root reads the /etc/selinux/config file and returns
|
|
|
|
the directory path under which the compiled policy file and context
|
|
|
|
configuration files exist.
|
|
|
|
diff --exclude-from=exclude -N -u -r nsalibselinux/src/init.c libselinux-1.25.7/src/init.c
|
|
|
|
--- nsalibselinux/src/init.c 2005-09-01 13:21:11.000000000 -0400
|
|
|
|
+++ libselinux-1.25.7/src/init.c 2005-09-12 11:36:33.000000000 -0400
|
|
|
|
@@ -8,6 +8,7 @@
|
|
|
|
#include <asm/page.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <dlfcn.h>
|
|
|
|
+#include <limits.h>
|
|
|
|
|
|
|
|
#include "dso.h"
|
|
|
|
#include "policy.h"
|
|
|
|
@@ -85,9 +86,14 @@
|
|
|
|
static void init_translations(void)
|
2005-09-01 15:23:17 +00:00
|
|
|
{
|
2005-09-12 15:52:30 +00:00
|
|
|
#ifdef SHARED
|
|
|
|
+ char *path[PATH_MAX];
|
|
|
|
+ char *type=NULL;
|
2005-09-01 15:23:17 +00:00
|
|
|
int (*lib_trans_init)(void) = NULL;
|
2005-09-12 15:52:30 +00:00
|
|
|
-
|
|
|
|
- translation_lib_handle = dlopen("libsetrans.so.0", RTLD_NOW);
|
|
|
|
+ selinux_gettype(&type);
|
|
|
|
+ if (!type) return;
|
|
|
|
+ snprintf(path, PATH_MAX-1, "/lib/selinux/lib%s.so.0", type);
|
|
|
|
+ free(type);
|
|
|
|
+ translation_lib_handle = dlopen(path, RTLD_NOW);
|
2005-09-01 15:23:17 +00:00
|
|
|
if (!translation_lib_handle)
|
|
|
|
return;
|
2005-08-24 13:15:02 +00:00
|
|
|
|
2005-09-12 15:52:30 +00:00
|
|
|
diff --exclude-from=exclude -N -u -r nsalibselinux/src/selinux_config.c libselinux-1.25.7/src/selinux_config.c
|
|
|
|
--- nsalibselinux/src/selinux_config.c 2005-03-17 14:56:21.000000000 -0500
|
|
|
|
+++ libselinux-1.25.7/src/selinux_config.c 2005-09-12 11:35:35.000000000 -0400
|
|
|
|
@@ -85,6 +85,28 @@
|
2005-09-01 15:23:17 +00:00
|
|
|
|
2005-09-12 15:52:30 +00:00
|
|
|
static int use_compat_file_path;
|
|
|
|
|
|
|
|
+void selinux_gettype(char **rtype) {
|
|
|
|
+ char *type=SELINUXDEFAULT;
|
|
|
|
+ char buf[4097];
|
|
|
|
+ int len, i;
|
|
|
|
+ FILE *cfg = fopen(SELINUXCONFIG,"r");
|
|
|
|
+ if (cfg) {
|
|
|
|
+ while (fgets_unlocked(buf, 4096, cfg)) {
|
|
|
|
+ if (strncmp(buf,SELINUXTYPETAG,len)==0) {
|
|
|
|
+ type=buf+len;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ fclose(cfg);
|
|
|
|
+ }
|
|
|
|
+ i=strlen(type)-1;
|
|
|
|
+ while ((i>=0) &&
|
|
|
|
+ (isspace(type[i]) || iscntrl(type[i]))) {
|
|
|
|
+ type[i]=0;
|
|
|
|
+ i--;
|
|
|
|
+ }
|
|
|
|
+ *rtype=strdup(type);
|
|
|
|
+}
|
|
|
|
int selinux_getenforcemode(int *enforce) {
|
|
|
|
int ret=-1;
|
|
|
|
FILE *cfg = fopen(SELINUXCONFIG,"r");
|
|
|
|
@@ -122,38 +144,24 @@
|
|
|
|
|
|
|
|
static void init_selinux_policyroot(void)
|
|
|
|
{
|
|
|
|
- char *type=SELINUXDEFAULT;
|
|
|
|
+ char *type=NULL;
|
|
|
|
int i=0, len=sizeof(SELINUXTYPETAG)-1, len2;
|
|
|
|
- char buf[4097];
|
|
|
|
- FILE *cfg;
|
|
|
|
if (selinux_policyroot) return;
|
|
|
|
if (access(SELINUXDIR, F_OK) != 0) {
|
|
|
|
selinux_policyroot = SECURITYDIR;
|
|
|
|
use_compat_file_path = 1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
- cfg = fopen(SELINUXCONFIG,"r");
|
|
|
|
- if (cfg) {
|
|
|
|
- while (fgets_unlocked(buf, 4096, cfg)) {
|
|
|
|
- if (strncmp(buf,SELINUXTYPETAG,len)==0) {
|
|
|
|
- type=buf+len;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- fclose(cfg);
|
|
|
|
- }
|
|
|
|
- i=strlen(type)-1;
|
|
|
|
- while ((i>=0) &&
|
|
|
|
- (isspace(type[i]) || iscntrl(type[i]))) {
|
|
|
|
- type[i]=0;
|
|
|
|
- i--;
|
|
|
|
- }
|
|
|
|
+ selinux_gettype(&type);
|
|
|
|
+ if (!type) return;
|
|
|
|
len=sizeof(SELINUXDIR) + strlen(type);
|
|
|
|
selinux_policyroot=malloc(len);
|
|
|
|
- if (!selinux_policyroot)
|
|
|
|
+ if (!selinux_policyroot) {
|
|
|
|
+ free(type);
|
|
|
|
return;
|
|
|
|
+ }
|
|
|
|
snprintf(selinux_policyroot,len, "%s%s", SELINUXDIR, type);
|
|
|
|
-
|
|
|
|
+ free(type);
|
|
|
|
for (i = 0; i < NEL; i++) {
|
|
|
|
len2 = len + strlen(file_path_suffixes_data.str
|
|
|
|
+ file_path_suffixes_idx[i])+1;
|