ACM: Recover if XML policy representation is missing.

Recover the system if the XML representation of the currently loaded
policy is missing. Force the installation of the DEFAULT policy.

Signed-off-by: Stefan Berger <stefanb@us.ibm.com>
This commit is contained in:
Keir Fraser committed 2007-12-06 12:13:12 +00:00
1 parent a814f6cd0f
commit 8fd28ec7bd
2 files changed
+33

No files matched your search

+27
View File
@@ -347,6 +347,33 @@ class ACMPolicy(XSPolicy):
rc = self.compile()
return rc, errors
def force_default_policy(klass):
"""
Force the installation of the DEFAULT policy if for
example no XML of the current policy is available and
the update path with comparisons of old and new policy
cannot be taken.
This only succeeds if only Domain-0 is running or
all guest have the same ssidref as Domain-0.
"""
errors = ""
acmpol_new = ACMPolicy(xml = get_DEFAULT_policy())
from xen.lowlevel import acm
dom0_ssidref = acm.getssid(0)
del_array = ""
chg_array = struct.pack("ii",
dom0_ssidref['ssidref'] & 0xffff,
0x1)
rc, pol_map, bin_pol = acmpol_new.policy_create_map_and_bin()
if rc != xsconstants.XSERR_SUCCESS:
return rc, errors, acmpol_new
rc, errors = security.hv_chg_policy(bin_pol, del_array, chg_array)
return rc, errors, acmpol_new
force_default_policy = classmethod(force_default_policy)
def __do_update_version_check(self, acmpol_new):
acmpol_old = self
@@ -57,6 +57,12 @@ class XSPolicyAdmin:
except Exception, e:
log.error("Could not find XML representation of policy '%s': "
"%s" % (act_pol_name,e))
rc, errors, acmpol_def = ACMPolicy.force_default_policy()
if rc == xsconstants.XSERR_SUCCESS:
self.xsobjs[ref] = acmpol_def
self.policies[ref] = (acmpol_def.get_name(),
xsconstants.ACM_POLICY_ID)
log.info("Switched to DEFAULT policy.")
log.debug("XSPolicyAdmin: Known policies: %s" % self.policies)
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.