virt-manager/virtinst/domain/seclabel.py

61 lines
1.6 KiB
Python

#
# Copyright 2010, 2012-2013 Red Hat, Inc.
#
# This work is licensed under the GNU GPLv2 or later.
# See the COPYING file in the top-level directory.
from ..xmlbuilder import XMLBuilder, XMLProperty
class DomainSeclabel(XMLBuilder):
"""
Class for generating <seclabel> XML
"""
TYPE_DYNAMIC = "dynamic"
TYPE_STATIC = "static"
MODEL_TEST = "testSecurity"
MODEL_SELINUX = "selinux"
MODEL_DAC = "dac"
MODEL_NONE = "none"
XML_NAME = "seclabel"
_XML_PROP_ORDER = ["type", "model", "relabel", "label"]
def _guess_secmodel(self):
caps_models = [x.model for x in self.conn.caps.host.secmodels]
# We always want the testSecurity model when running tests
if self.MODEL_TEST in caps_models:
return self.MODEL_TEST
if not self.label:
return caps_models and caps_models[0] or None
lab_len = None
if self.label:
lab_len = min(3, len(self.label.split(':')))
if lab_len == 3:
return self.MODEL_SELINUX
elif lab_len == 2:
return self.MODEL_DAC
model = XMLProperty("./@model")
type = XMLProperty("./@type")
label = XMLProperty("./label")
baselabel = XMLProperty("./baselabel")
relabel = XMLProperty("./@relabel", is_yesno=True)
##################
# Default config #
##################
def set_defaults(self, _guest):
if self.type or self.model:
if self.type is None:
self.type = self.TYPE_DYNAMIC
if self.model is None:
self.model = self._guess_secmodel()