return buf;
}
-static int apparmor_am_unconfined(void)
+/*
+ * Probably makes sense to reorganize these to only read
+ * the label once
+ */
+static bool apparmor_am_unconfined(void)
{
char *p = apparmor_process_label_get(getpid());
- int ret = 0;
+ bool ret = false;
if (!p || strcmp(p, "unconfined") == 0)
- ret = 1;
+ ret = true;
+ free(p);
+ return ret;
+}
+
+/* aa stacking is not yet supported */
+static bool aa_stacking_supported(void) {
+ return false;
+}
+
+/* are we in a confined container? */
+static bool in_aa_confined_container(void) {
+ char *p = apparmor_process_label_get(getpid());
+ bool ret = false;
+ if (p && strcmp(p, "/usr/bin/lxc-start") != 0)
+ ret = true;
free(p);
return ret;
}
return 0;
}
+ /*
+ * If we are already confined and no profile was requested,
+ * then default to unchanged
+ */
+ if (in_aa_confined_container() && !aa_stacking_supported()) {
+ if (label) {
+ ERROR("already apparmor confined, but new label requested.");
+ return -1;
+ }
+ INFO("Already apparmor-confined");
+ return 0;
+ }
+
if (!label) {
if (use_default)
label = AA_DEF_PROFILE;