from xen.lowlevel import acm
from xen.xend import sxp
from xen.xend import XendConstants
+from xen.xend import XendOptions
from xen.xend.XendLogging import log
from xen.xend.XendError import VmError
from xen.util import dictio, xsconstants
if reslabel != "":
new_entry = { resource : tuple([policytype, policyref, reslabel])}
access_control.update(new_entry)
+ command = "add"
+ reslbl = ":".join([policytype, policyref, reslabel])
else:
if access_control.has_key(resource):
del access_control[resource]
+ command = "remove"
+ reslbl = ""
+ run_resource_label_change_script(resource, reslbl, command)
dictio.dict_write(access_control, "resources", res_label_filename)
finally:
resfile_unlock()
label = reslabel_map[label]
elif label not in polnew_reslabels:
policytype = xsconstants.INVALID_POLICY_PREFIX + policytype
+ run_resource_label_change_script(key, "", "remove")
# Update entry
access_control[key] = \
tuple([ policytype, new_policyname, label ])
if domid != 0:
label = self.info.get('security_label', label)
return label
+
+def run_resource_label_change_script(resource, label, command):
+ script = XendOptions.instance().get_resource_label_change_script()
+ if script:
+ parms = {
+ 'resource' : resource,
+ 'label' : label,
+ 'command' : command,
+ }
+ log.info("Running resource label change script %s: %s" %
+ (script, parms))
+ parms.update(os.environ)
+ os.spawnve(os.P_NOWAIT, script[0], script, parms)
+ else:
+ log.info("No script given for relabeling of resources.")
def get_keymap(self):
return self.get_config_value('keymap', None)
+ def get_resource_label_change_script(self):
+ s = self.get_config_value('resource-label-change-script')
+ if s:
+ result = s.split(" ")
+ result[0] = os.path.join(osdep.scripts_dir, result[0])
+ return result
+ else:
+ return None
+
+
class XendOptionsFile(XendOptions):
"""Default path to the config file."""