You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
2.2 KiB
97 lines
2.2 KiB
From 85a12d481d664120865b46cd1c4c325307179471 Mon Sep 17 00:00:00 2001 |
|
From: Miroslav Grepl <mgrepl@redhat.com> |
|
Date: Fri, 11 Apr 2014 10:53:54 +0200 |
|
Subject: [PATCH 04/11] Apply selinux_current_policy_path patch |
|
|
|
--- |
|
libqpol/src/util.c | 73 ++++-------------------------------------------------- |
|
1 file changed, 5 insertions(+), 68 deletions(-) |
|
|
|
diff --git a/libqpol/src/util.c b/libqpol/src/util.c |
|
index 7c49876..8f74b2b 100644 |
|
--- a/libqpol/src/util.c |
|
+++ b/libqpol/src/util.c |
|
@@ -84,75 +84,12 @@ static int get_binpol_version(const char *policy_fname) |
|
|
|
static int search_policy_binary_file(char **path) |
|
{ |
|
- const char *binary_path; |
|
- if ((binary_path = selinux_binary_policy_path()) == NULL) { |
|
- return -1; |
|
- } |
|
- |
|
- int expected_version = -1, latest_version = -1; |
|
-#ifdef LIBSELINUX |
|
- /* if the system has SELinux enabled, prefer the policy whose |
|
- name matches the current policy version */ |
|
- if ((expected_version = security_policyvers()) < 0) { |
|
- return -1; |
|
- } |
|
-#endif |
|
- |
|
- glob_t glob_buf; |
|
- struct stat fs; |
|
- int rt, error = 0, retval = -1; |
|
- size_t i; |
|
- char *pattern = NULL; |
|
- if (asprintf(&pattern, "%s.*", binary_path) < 0) { |
|
- return -1; |
|
- } |
|
- glob_buf.gl_offs = 1; |
|
- glob_buf.gl_pathc = 0; |
|
- rt = glob(pattern, GLOB_DOOFFS, NULL, &glob_buf); |
|
- if (rt != 0 && rt != GLOB_NOMATCH) { |
|
- errno = EIO; |
|
- return -1; |
|
- } |
|
- |
|
- for (i = 0; i < glob_buf.gl_pathc; i++) { |
|
- char *p = glob_buf.gl_pathv[i + glob_buf.gl_offs]; |
|
- if (stat(p, &fs) != 0) { |
|
- error = errno; |
|
- goto cleanup; |
|
- } |
|
- if (S_ISDIR(fs.st_mode)) |
|
- continue; |
|
- |
|
- if ((rt = get_binpol_version(p)) < 0) { |
|
- error = errno; |
|
- goto cleanup; |
|
- } |
|
- |
|
- if (rt > latest_version || rt == expected_version) { |
|
- free(*path); |
|
- if ((*path = strdup(p)) == NULL) { |
|
- error = errno; |
|
- goto cleanup; |
|
- } |
|
- if (rt == expected_version) { |
|
- break; |
|
- } |
|
- latest_version = rt; |
|
- } |
|
- } |
|
- |
|
- if (*path == NULL) { |
|
- retval = 1; |
|
- } else { |
|
- retval = 0; |
|
- } |
|
- cleanup: |
|
- free(pattern); |
|
- globfree(&glob_buf); |
|
- if (retval == -1) { |
|
- errno = error; |
|
+ const char *binary_path = selinux_current_policy_path(); |
|
+ if (binary_path) { |
|
+ *path = strdup(binary_path); |
|
+ if (*path) return 0; |
|
} |
|
- return retval; |
|
+ return -1; |
|
} |
|
|
|
int qpol_default_policy_find(char **path) |
|
-- |
|
1.8.5.3 |
|
|
|
|