- semanage_migrate_store: add -r <root> option for migrating inside chroots
- fixes needed for secadm_r and auditadm_r in MLS policy
This commit is contained in:
parent
be16d7c136
commit
dec177337d
@ -1778,6 +1778,76 @@ index 93804ac..1451903 100644
|
|||||||
- except ValueError, e:
|
- except ValueError, e:
|
||||||
+ except ValueError as e:
|
+ except ValueError as e:
|
||||||
self.error(e.args[0])
|
self.error(e.args[0])
|
||||||
|
diff --git a/policycoreutils-2.4/hll/pp/pp.c b/policycoreutils-2.4/hll/pp/pp.c
|
||||||
|
index b863346..d994891 100644
|
||||||
|
--- a/policycoreutils-2.4/hll/pp/pp.c
|
||||||
|
+++ b/policycoreutils-2.4/hll/pp/pp.c
|
||||||
|
@@ -1995,12 +1995,23 @@ static int role_to_cil(int indent, struct policydb *pdb, struct avrule_block *UN
|
||||||
|
// one of these roles in base, the declaration will not appeaer in
|
||||||
|
// the resulting policy, likely resulting in a compilation error in
|
||||||
|
// CIL.
|
||||||
|
+ //
|
||||||
|
+ // To make things more complicated, the auditadm_r and secadm_r
|
||||||
|
+ // roles could actually be in either the base module or a non-base
|
||||||
|
+ // module, or both. So we can't rely on this same behavior. So for
|
||||||
|
+ // these roles, don't declare them here, even if they are in a base
|
||||||
|
+ // or non-base module. Instead we will just declare them in the
|
||||||
|
+ // base module elsewhere.
|
||||||
|
int is_base_role = (!strcmp(key, "user_r") ||
|
||||||
|
!strcmp(key, "staff_r") ||
|
||||||
|
!strcmp(key, "sysadm_r") ||
|
||||||
|
!strcmp(key, "system_r") ||
|
||||||
|
!strcmp(key, "unconfined_r"));
|
||||||
|
- if ((is_base_role && pdb->policy_type == SEPOL_POLICY_BASE) || !is_base_role) {
|
||||||
|
+ int is_builtin_role = (!strcmp(key, "auditadm_r") ||
|
||||||
|
+ !strcmp(key, "secadm_r"));
|
||||||
|
+ if ((is_base_role && pdb->policy_type == SEPOL_POLICY_BASE) ||
|
||||||
|
+ (!is_base_role && !is_builtin_role)) {
|
||||||
|
+
|
||||||
|
cil_println(indent, "(role %s)", key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -2051,7 +2062,9 @@ static int role_to_cil(int indent, struct policydb *pdb, struct avrule_block *UN
|
||||||
|
|
||||||
|
|
||||||
|
for (i = 0; i < num_types; i++) {
|
||||||
|
- cil_println(indent, "(roletype %s %s)", key, types[i]);
|
||||||
|
+ if (is_id_in_scope(pdb, decl_stack, types[i], SYM_TYPES)) {
|
||||||
|
+ cil_println(indent, "(roletype %s %s)", key, types[i]);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
@@ -3594,6 +3607,17 @@ static int generate_default_object(void)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int generate_builtin_roles(void)
|
||||||
|
+{
|
||||||
|
+ // due to inconsistentencies between policies and CIL not allowing
|
||||||
|
+ // duplicate roles, some roles are always created, regardless of if they
|
||||||
|
+ // are declared in modules or not
|
||||||
|
+ cil_println(0, "(role auditadm_r)");
|
||||||
|
+ cil_println(0, "(role secadm_r)");
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static int generate_gen_require_attribute(void)
|
||||||
|
{
|
||||||
|
cil_println(0, "(typeattribute " GEN_REQUIRE_ATTR ")");
|
||||||
|
@@ -3679,6 +3703,11 @@ static int module_package_to_cil(struct sepol_module_package *mod_pkg)
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ rc = generate_builtin_roles();
|
||||||
|
+ if (rc != 0) {
|
||||||
|
+ goto exit;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
// default attribute to be used to mimic gen_require in CIL
|
||||||
|
rc = generate_gen_require_attribute();
|
||||||
|
if (rc != 0) {
|
||||||
diff --git a/policycoreutils-2.4/newrole/newrole.c b/policycoreutils-2.4/newrole/newrole.c
|
diff --git a/policycoreutils-2.4/newrole/newrole.c b/policycoreutils-2.4/newrole/newrole.c
|
||||||
index 94794e9..55e8d39 100644
|
index 94794e9..55e8d39 100644
|
||||||
--- a/policycoreutils-2.4/newrole/newrole.c
|
--- a/policycoreutils-2.4/newrole/newrole.c
|
||||||
@ -662731,7 +662801,7 @@ index 2a7cfa3..95fba09 100644
|
|||||||
char path[PATH_MAX + 1];
|
char path[PATH_MAX + 1];
|
||||||
|
|
||||||
diff --git a/policycoreutils-2.4/setfiles/setfiles.c b/policycoreutils-2.4/setfiles/setfiles.c
|
diff --git a/policycoreutils-2.4/setfiles/setfiles.c b/policycoreutils-2.4/setfiles/setfiles.c
|
||||||
index 86d3f28..a9c182c 100644
|
index 86d3f28..e39b500 100644
|
||||||
--- a/policycoreutils-2.4/setfiles/setfiles.c
|
--- a/policycoreutils-2.4/setfiles/setfiles.c
|
||||||
+++ b/policycoreutils-2.4/setfiles/setfiles.c
|
+++ b/policycoreutils-2.4/setfiles/setfiles.c
|
||||||
@@ -153,6 +153,9 @@ int main(int argc, char **argv)
|
@@ -153,6 +153,9 @@ int main(int argc, char **argv)
|
||||||
@ -662744,7 +662814,23 @@ index 86d3f28..a9c182c 100644
|
|||||||
|
|
||||||
memset(&r_opts, 0, sizeof(r_opts));
|
memset(&r_opts, 0, sizeof(r_opts));
|
||||||
|
|
||||||
@@ -225,8 +228,13 @@ int main(int argc, char **argv)
|
@@ -196,6 +199,7 @@ int main(int argc, char **argv)
|
||||||
|
r_opts.add_assoc = 1;
|
||||||
|
r_opts.fts_flags = FTS_PHYSICAL | FTS_XDEV;
|
||||||
|
ctx_validate = 1;
|
||||||
|
+ opts = sopts;
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* restorecon:
|
||||||
|
@@ -215,6 +219,7 @@ int main(int argc, char **argv)
|
||||||
|
r_opts.add_assoc = 0;
|
||||||
|
r_opts.fts_flags = FTS_PHYSICAL;
|
||||||
|
ctx_validate = 0;
|
||||||
|
+ opts = ropts;
|
||||||
|
|
||||||
|
/* restorecon only: silent exit if no SELinux.
|
||||||
|
Allows unconditional execution by scripts. */
|
||||||
|
@@ -225,8 +230,13 @@ int main(int argc, char **argv)
|
||||||
/* This must happen before getopt. */
|
/* This must happen before getopt. */
|
||||||
r_opts.nfile = exclude_non_seclabel_mounts();
|
r_opts.nfile = exclude_non_seclabel_mounts();
|
||||||
|
|
||||||
@ -662759,16 +662845,27 @@ index 86d3f28..a9c182c 100644
|
|||||||
switch (opt) {
|
switch (opt) {
|
||||||
case 'c':
|
case 'c':
|
||||||
{
|
{
|
||||||
@@ -326,7 +334,7 @@ int main(int argc, char **argv)
|
@@ -315,18 +325,13 @@ int main(int argc, char **argv)
|
||||||
|
recurse = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
- if (optind + 1 >= argc) {
|
||||||
|
- fprintf(stderr, "usage: %s -r rootpath\n",
|
||||||
|
- argv[0]);
|
||||||
|
- exit(-1);
|
||||||
|
- }
|
||||||
|
if (NULL != r_opts.rootpath) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"%s: only one -r can be specified\n",
|
||||||
argv[0]);
|
argv[0]);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
- set_rootpath(argv[optind++]);
|
- set_rootpath(argv[optind++]);
|
||||||
+ set_rootpath(argv[optind]);
|
+ set_rootpath(optarg);
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
use_input_file = 1;
|
use_input_file = 1;
|
||||||
@@ -337,7 +345,7 @@ int main(int argc, char **argv)
|
@@ -337,7 +342,7 @@ int main(int argc, char **argv)
|
||||||
if (r_opts.progress) {
|
if (r_opts.progress) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Progress and Verbose mutually exclusive\n");
|
"Progress and Verbose mutually exclusive\n");
|
||||||
|
Loading…
Reference in New Issue
Block a user