diff --git a/libselinux-rhat.patch b/libselinux-rhat.patch index 4728d2b..8e8307e 100644 --- a/libselinux-rhat.patch +++ b/libselinux-rhat.patch @@ -104,7 +104,7 @@ index 1a54307..f6eeb21 100644 /* * Label operations diff --git a/libselinux/include/selinux/selinux.h b/libselinux/include/selinux/selinux.h -index 2985f6f..e439c5f 100644 +index 2985f6f..3a260f0 100644 --- a/libselinux/include/selinux/selinux.h +++ b/libselinux/include/selinux/selinux.h @@ -139,7 +139,10 @@ struct av_decision { @@ -135,7 +135,7 @@ index 2985f6f..e439c5f 100644 /* These functions return the paths to specific files under the policy root directory. */ -+extern const char *selinux_installed_policy_path(void); ++extern const char *selinux_current_policy_path(void); extern const char *selinux_binary_policy_path(void); extern const char *selinux_failsafe_context_path(void); extern const char *selinux_removable_context_path(void); @@ -225,27 +225,29 @@ index 8674e37..fc5b120 100644 .BR selinux (8) - diff --git a/libselinux/man/man3/selinux_binary_policy_path.3 b/libselinux/man/man3/selinux_binary_policy_path.3 -index 8ead1a4..8fc4b30 100644 +index 8ead1a4..c68ace5 100644 --- a/libselinux/man/man3/selinux_binary_policy_path.3 +++ b/libselinux/man/man3/selinux_binary_policy_path.3 @@ -17,6 +17,8 @@ extern const char *selinux_policy_root(void); extern const char *selinux_binary_policy_path(void); -+extern const char *selinux_installed_policy_path(void); ++extern const char *selinux_current_policy_path(void); + extern const char *selinux_failsafe_context_path(void); extern const char *selinux_removable_context_path(void); -@@ -54,6 +56,8 @@ selinux_policy_root() - top-level policy directory +@@ -52,7 +54,9 @@ selinux_path() - top-level SELinux configuration directory .sp - selinux_binary_policy_path() - binary policy file loaded into kernel + selinux_policy_root() - top-level policy directory .sp -+selinux_installed_policy_path() - binary policy path on disk +-selinux_binary_policy_path() - binary policy file loaded into kernel ++selinux_current_policy_path() - binary policy file loaded into kernel +.sp ++selinux_binary_policy_path() - binary policy path on disk + .sp selinux_default_type_path - context file mapping roles to default types. .sp - selinux_failsafe_context_path() - failsafe context for emergency logins diff --git a/libselinux/man/man8/selinux.8 b/libselinux/man/man8/selinux.8 index 1fc5b95..9f16f77 100644 --- a/libselinux/man/man8/selinux.8 @@ -313,7 +315,7 @@ index 1ddddb0..472ec61 100644 $(SWIGSO): $(SWIGLOBJ) $(CC) $(CFLAGS) $(LDFLAGS) -shared -o $@ $< -L. -lselinux -L$(LIBDIR) $(PYTHONLIBDIR) -Wl,-soname,$@,-z,defs diff --git a/libselinux/src/audit2why.c b/libselinux/src/audit2why.c -index 1bf3599..f1b9001 100644 +index 1bf3599..f621de7 100644 --- a/libselinux/src/audit2why.c +++ b/libselinux/src/audit2why.c @@ -214,19 +214,12 @@ static int __policy_init(const char *init_path) @@ -328,25 +330,26 @@ index 1bf3599..f1b9001 100644 - selinux_binary_policy_path(), vers); - fp = fopen(path, "r"); - } -+ fp = fopen(selinux_binary_policy_path(), "r"); ++ fp = fopen(selinux_current_policy_path(), "r"); if (!fp) { snprintf(errormsg, sizeof(errormsg), - "unable to open %s.%d: %s\n", -+ "unable to open %s: %s\n", - selinux_binary_policy_path(), +- selinux_binary_policy_path(), - security_policyvers(), strerror(errno)); ++ "unable to open %s: %s\n", ++ selinux_current_policy_path(), + strerror(errno)); PyErr_SetString( PyExc_ValueError, errormsg); return 1; } diff --git a/libselinux/src/avc.c b/libselinux/src/avc.c -index e7ad31d..2de39b9 100644 +index e7ad31d..21c09f7 100644 --- a/libselinux/src/avc.c +++ b/libselinux/src/avc.c -@@ -801,6 +801,7 @@ int avc_has_perm_noaudit(security_id_t ssid, - - out: - avc_release_lock(avc_lock); +@@ -819,6 +819,7 @@ int avc_has_perm(security_id_t ssid, security_id_t tsid, + errsave = errno; + avc_audit(ssid, tsid, tclass, requested, &avd, rc, auditdata); + errno = errsave; + if (!avc_enforcing) return 0; return rc; } @@ -529,32 +532,9 @@ index 7bc46cc..82a608c 100644 goto finish; } diff --git a/libselinux/src/load_policy.c b/libselinux/src/load_policy.c -index f569664..aac9468 100644 +index f569664..10e29b9 100644 --- a/libselinux/src/load_policy.c +++ b/libselinux/src/load_policy.c -@@ -165,19 +165,19 @@ checkbool: - vers = maxvers; - search: - snprintf(path, sizeof(path), "%s.%d", -- selinux_binary_policy_path(), vers); -+ selinux_installed_policy_path(), vers); - fd = open(path, O_RDONLY); - while (fd < 0 && errno == ENOENT - && --vers >= minvers) { - /* Check prior versions to see if old policy is available */ - snprintf(path, sizeof(path), "%s.%d", -- selinux_binary_policy_path(), vers); -+ selinux_installed_policy_path(), vers); - fd = open(path, O_RDONLY); - } - if (fd < 0) { - fprintf(stderr, - "SELinux: Could not open policy file <= %s.%d: %s\n", -- selinux_binary_policy_path(), maxvers, strerror(errno)); -+ selinux_installed_policy_path(), maxvers, strerror(errno)); - goto dlclose; - } - @@ -369,7 +369,7 @@ int selinux_init_load_policy(int *enforce) * Check for the existence of SELinux via selinuxfs, and * mount it if present for use in the calls below. @@ -629,7 +609,7 @@ index 48f7a11..ca87bd2 100644 int matchpathcon_init(const char *path) diff --git a/libselinux/src/selinux_config.c b/libselinux/src/selinux_config.c -index f4c33df..be4db68 100644 +index f4c33df..67ccb26 100644 --- a/libselinux/src/selinux_config.c +++ b/libselinux/src/selinux_config.c @@ -9,6 +9,7 @@ @@ -640,7 +620,7 @@ index f4c33df..be4db68 100644 #include "get_default_type_internal.h" #define SELINUXDIR "/etc/selinux/" -@@ -246,172 +247,181 @@ static const char *get_path(int idx) +@@ -246,172 +247,195 @@ static const char *get_path(int idx) return file_paths[idx]; } @@ -700,23 +680,37 @@ index f4c33df..be4db68 100644 hidden_def(selinux_removable_context_path) -const char *selinux_binary_policy_path() -+const char *selinux_installed_policy_path(void) ++const char *selinux_binary_policy_path(void) { return get_path(BINPOLICY); } -+hidden_def(selinux_installed_policy_path) -+ -+const char *selinux_binary_policy_path(void) + hidden_def(selinux_binary_policy_path) + +-const char *selinux_file_context_path() ++const char *selinux_current_policy_path(void) +{ ++ int rc = 0; ++ int vers = 0; + static char policy_path[PATH_MAX]; ++ + snprintf(policy_path, sizeof(policy_path), "%s/policy", selinux_mnt); ++ if (access(policy_path, F_OK) != 0 ) { ++ vers = security_policyvers(); ++ do { ++ /* Check prior versions to see if old policy is available */ ++ snprintf(policy_path, sizeof(policy_path), "%s.%d", ++ selinux_binary_policy_path(), vers); ++ } while ((rc = access(policy_path, F_OK)) && --vers > 0); ++ ++ if (rc) return NULL; ++ } ++ + return policy_path; +} + - hidden_def(selinux_binary_policy_path) - --const char *selinux_file_context_path() ++hidden_def(selinux_binary_policy_path) ++ +const char *selinux_file_context_path(void) { return get_path(FILE_CONTEXTS); @@ -847,7 +841,7 @@ index f4c33df..be4db68 100644 { return get_path(VIRTUAL_IMAGE); } -@@ -430,7 +440,7 @@ const char * selinux_file_context_subs_dist_path(void) { +@@ -430,7 +454,7 @@ const char * selinux_file_context_subs_dist_path(void) { hidden_def(selinux_file_context_subs_dist_path) @@ -857,17 +851,17 @@ index f4c33df..be4db68 100644 return get_path(SEPGSQL_CONTEXTS); } diff --git a/libselinux/src/selinux_internal.h b/libselinux/src/selinux_internal.h -index 710396a..cd76373 100644 +index 710396a..e104920 100644 --- a/libselinux/src/selinux_internal.h +++ b/libselinux/src/selinux_internal.h -@@ -57,6 +57,7 @@ hidden_proto(selinux_mkload_policy) - hidden_proto(security_getenforce) +@@ -58,6 +58,7 @@ hidden_proto(selinux_mkload_policy) hidden_proto(security_setenforce) hidden_proto(security_deny_unknown) -+ hidden_proto(selinux_installed_policy_path) hidden_proto(selinux_binary_policy_path) ++ hidden_proto(selinux_current_policy_path) hidden_proto(selinux_default_context_path) hidden_proto(selinux_securetty_types_path) + hidden_proto(selinux_failsafe_context_path) @@ -80,6 +81,7 @@ hidden_proto(selinux_mkload_policy) hidden_proto(selinux_path) hidden_proto(selinux_check_passwd_access) diff --git a/libselinux.spec b/libselinux.spec index 779a5b6..bcb91ee 100644 --- a/libselinux.spec +++ b/libselinux.spec @@ -8,7 +8,7 @@ Summary: SELinux library and simple utilities Name: libselinux Version: 2.1.9 -Release: 8%{?dist} +Release: 9%{?dist} License: Public Domain Group: System Environment/Libraries Source: %{name}-%{version}.tgz @@ -233,6 +233,10 @@ rm -rf %{buildroot} %{ruby_sitearch}/selinux.so %changelog +* Thu Feb 16 2012 Dan Walsh - 2.1.9-9 +- Add selinux_current_policy_path to return /sys/fs/selinux/policy if it exists +- Otherwise search for policy on disk + * Wed Feb 15 2012 Dan Walsh - 2.1.9-8 - Change selinux_binary_policy_path to return /sys/fs/selinux/policy - Add selinux_installed_policy_path to return what selinux_binary_policy_path used to return