char *file_context;
char *content_context;
virHashTablePtr mcs;
+ bool skipAllLabel;
};
struct _virSecuritySELinuxCallbackData {
virConfPtr selinux_conf;
virSecuritySELinuxDataPtr data = virSecurityManagerGetPrivateData(mgr);
+ data->skipAllLabel = true;
+
selinux_conf = virConfReadFile(selinux_lxc_contexts_path(), 0);
if (!selinux_conf) {
virReportSystemError(errno,
char *ptr;
virSecuritySELinuxDataPtr data = virSecurityManagerGetPrivateData(mgr);
+ data->skipAllLabel = false;
+
if (virFileReadAll(selinux_virtual_domain_context_path(), MAX_CONTEXT, &(data->domain_context)) < 0) {
virReportSystemError(errno,
_("cannot read SELinux virtual domain context file '%s'"),
static int
-virSecuritySELinuxRestoreSecurityAllLabel(virSecurityManagerPtr mgr ATTRIBUTE_UNUSED,
+virSecuritySELinuxRestoreSecurityAllLabel(virSecurityManagerPtr mgr,
virDomainDefPtr def,
int migrated ATTRIBUTE_UNUSED)
{
virSecurityLabelDefPtr secdef;
+ virSecuritySELinuxDataPtr data = virSecurityManagerGetPrivateData(mgr);
int i;
int rc = 0;
if (secdef == NULL)
return -1;
- if (secdef->norelabel)
+ if (secdef->norelabel || data->skipAllLabel)
return 0;
for (i = 0 ; i < def->nhostdevs ; i++) {
if (secdef == NULL)
return -1;
- if (secdef->norelabel)
+ if (secdef->norelabel || data->skipAllLabel)
return 0;
for (i = 0 ; i < def->ndisks ; i++) {