⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 07_security-acm_pol_update.py

📁 xen虚拟机源代码安装包
💻 PY
字号:
#!/usr/bin/python# Copyright (C) International Business Machines Corp., 2006# Author: Stefan Berger <stefanb@us.ibm.com># Test to exercise the xspolicy classfrom XmTestLib import xapifrom XmTestLib.XenAPIDomain import XmTestAPIDomainfrom XmTestLib import *from xen.xend import XendAPIConstantsimport xen.util.xsm.xsm as securityfrom xen.util import acmpolicy, xsconstantsfrom xen.util.acmpolicy import ACMPolicyfrom xen.xend.XendDomain import DOM0_UUIDfrom XmTestLib.acm import *import commandsimport osimport base64if not isACMEnabled():    SKIP("Not running this test since ACM not enabled.")try:    session = xapi.connect()except:    SKIP("Skipping this test since xm is not using the Xen-API.")xm_test = {}xm_test['policyname'] = "xm-test"xm_test['date'] = "Fri Sep 29 14:44:38 2006"xm_test['url']  = Nonevm_label_red   = "%s:xm-test:red" % xsconstants.ACM_POLICY_IDvm_label_green = "%s:xm-test:green" % xsconstants.ACM_POLICY_IDvm_label_blue  = "%s:xm-test:blue" % xsconstants.ACM_POLICY_IDvm_label_sys   = "%s:xm-test:SystemManagement" % xsconstants.ACM_POLICY_IDvm_label_black = "%s:xm-test:black"session = xapi.connect()oldlabel = session.xenapi.VM.get_security_label(DOM0_UUID)ssidref = session.xenapi.VM.set_security_label(DOM0_UUID,                                               vm_label_sys,                                               oldlabel)if int(ssidref) <= 0 or int(ssidref) != 0x00010001:    FAIL("(0) Domain-0 label for '%s' has unexpected failure: %08x" %         (vm_label_sys, int(ssidref)))print "ssidref for '%s' is 0x%08x" % (vm_label_sys, int(ssidref))xstype = session.xenapi.XSPolicy.get_xstype()if int(xstype) & xsconstants.XS_POLICY_ACM == 0:    SKIP("ACM not enabled/compiled in Xen")policystate = session.xenapi.XSPolicy.get_xspolicy()if not policystate.has_key('xs_ref'):    FAIL("get_xspolicy must return member 'xs_ref'")xs_ref = policystate['xs_ref']if xs_ref != "":    origpolicyxml = session.xenapi.ACMPolicy.get_xml(xs_ref)else:    origpolicyxml = ""f = open("xm-test-security_policy.xml", 'r')if f:    newpolicyxml = f.read()    f.close()else:    FAIL("Could not read 'xm-test' policy")try:    os.unlink("/boot/xm-test.bin")except:    passpolicystate = session.xenapi.XSPolicy.get_xspolicy()if int(policystate['type']) == 0:    policystate = session.xenapi.XSPolicy.set_xspolicy(                          xsconstants.XS_POLICY_ACM,                          newpolicyxml,                          xsconstants.XS_INST_LOAD | xsconstants.XS_INST_BOOT,                          1)    if int(policystate['flags']) == -1:        FAIL("Could not set the new policy.")print "state of policy = %s " % policystaterc = session.xenapi.XSPolicy.activate_xspolicy(                          policystate['xs_ref'],                          xsconstants.XS_INST_LOAD | xsconstants.XS_INST_BOOT)if int(rc) != xsconstants.XS_INST_LOAD | xsconstants.XS_INST_BOOT:    FAIL("Could not activate the current policy: rc = %08x" % int(rc))if not os.path.exists("/boot/xm-test.bin"):    FAIL("Binary policy was not installed. Check grub config file.")policystate = session.xenapi.XSPolicy.get_xspolicy()if int(policystate['flags']) != xsconstants.XS_INST_BOOT | \                                xsconstants.XS_INST_LOAD:    FAIL("Flags (%x) are not indicating the correct state of the policy.",         int(policystate['flags']))policystate = session.xenapi.XSPolicy.get_xspolicy()xs_ref = policystate['xs_ref']newpolicyxml = Nonef = open("xm-test-new-security_policy.xml", 'r')if f:    newpolicyxml = f.read()    f.close()else:    FAIL("Could not read 'xm-test-new' policy")cur_acmpol = ACMPolicy(xml = policystate['repr'])new_acmpol = ACMPolicy(xml = newpolicyxml)new_acmpol.update_frompolicy(cur_acmpol)policystate = session.xenapi.XSPolicy.set_xspolicy(xsconstants.XS_POLICY_ACM,                          new_acmpol.toxml(),                          xsconstants.XS_INST_LOAD | xsconstants.XS_INST_BOOT,                          1)f = open("xm-test-security_policy.xml", 'r')if f:    newpolicyxml = f.read()    f.close()else:    FAIL("Could not read 'xm-test-new' policy")cur_acmpol = new_acmpolnew_acmpol = ACMPolicy(xml = newpolicyxml)new_acmpol.update_frompolicy(cur_acmpol)policystate = session.xenapi.XSPolicy.set_xspolicy(xsconstants.XS_POLICY_ACM,                          new_acmpol.toxml(),                          xsconstants.XS_INST_LOAD | xsconstants.XS_INST_BOOT,                          1)dom0_lab = session.xenapi.VM.get_security_label(DOM0_UUID)ssidref = session.xenapi.VM.set_security_label(DOM0_UUID,                                               vm_label_sys, dom0_lab)if int(ssidref) <= 0 or int(ssidref) != 0x00010001:    FAIL("(1) Domain-0 label for '%s' has unexpected failure: %08x" %         (vm_label_sys, int(ssidref)))print "ssidref for '%s' is 0x%08x" % (vm_label_sys, int(ssidref))try:    ssidref = session.xenapi.VM.set_security_label(DOM0_UUID,                                                   vm_label_black,                                                   vm_label_sys)    FAIL("Could set label '%s', although it's not in the policy. "         "ssidref=%s" % (vm_label_black, ssidref))except:    passssidref = session.xenapi.VM.set_security_label(DOM0_UUID,                                               vm_label_red,                                               vm_label_sys)if int(ssidref) <= 0:    FAIL("(2) Domain-0 label for '%s' has unexpected failure: %08x" %         (vm_label_red, int(ssidref)))print "ssidref for '%s' is 0x%08x" % (vm_label_red, int(ssidref))label = session.xenapi.VM.get_security_label(DOM0_UUID)if label != vm_label_red:    FAIL("Dom0 label '%s' not as expected '%s'" % (label, vm_label_red))ssidref = session.xenapi.VM.set_security_label(DOM0_UUID,                                               vm_label_sys,                                               vm_label_red)if int(ssidref) <= 0 or int(ssidref) != 0x00010001:    FAIL("(3) Domain-0 label for '%s' has unexpected failure: %08x" %         (vm_label_sys, int(ssidref)))label = session.xenapi.VM.get_security_label(DOM0_UUID)if label != vm_label_sys:    FAIL("Dom0 label '%s' not as expected '%s'" % label, dom0_label)header = session.xenapi.ACMPolicy.get_header(xs_ref)if header['policyname'] != xm_test['policyname']:    FAIL("Name in header is '%s', expected is '%s'." %         (header['policyname'],xm_test['policyname']))if header['date'] != xm_test['date']:    FAIL("Date in header is '%s', expected is '%s'." %         (header['date'],xm_test['date']))if header.has_key("url") and header['url' ] != xm_test['url' ]:    FAIL("URL  in header is '%s', expected is '%s'." %         (header['url' ],xm_test['url' ]))# Create another domaintry:    # XmTestAPIDomain tries to establish a connection to XenD    domain = XmTestAPIDomain(extraConfig={ 'security_label' : vm_label_blue })except Exception, e:    SKIP("Skipping test. Error: %s" % str(e))vm_uuid = domain.get_uuid()res = session.xenapi.VM.get_security_label(vm_uuid)if res != vm_label_blue:    FAIL("VM has security label '%s', expected is '%s'" %         (res, vm_label_blue))try:    domain.start(noConsole=True)except:    FAIL("Could not create domain")# Attempt to relabel the running domainssidref = session.xenapi.VM.set_security_label(vm_uuid,                                               vm_label_red,                                               vm_label_blue)if int(ssidref) <= 0:    FAIL("Could not relabel running domain to '%s'." % vm_label_red)# user domain is 'red', dom0 is current 'SystemManagement'.# Try to move domain-0 to 'red' first, then to 'blue'.# Moving domain-0 to 'red' should workssidref = session.xenapi.VM.set_security_label(DOM0_UUID,                                               vm_label_red,                                               vm_label_sys)if int(ssidref) <= 0:    FAIL("Could not label domain-0 '%s'" % vm_label_red)# Moving the guest domain to 'blue' should not work due to conflict settry:    ssidref = session.xenapi.VM.set_security_label(vm_uuid,                                                   vm_label_blue,                                                   vm_label_red)    FAIL("Could label guest domain with '%s', although this is in a conflict "         "set. ssidref=%x" % (vm_label_blue,int(ssidref)))except:    passlabel = session.xenapi.VM.get_security_label(vm_uuid)if label != vm_label_red:    FAIL("User domain has wrong label '%s', expected '%s'." %         (label, vm_label_red))label = session.xenapi.VM.get_security_label(DOM0_UUID)if label != vm_label_red:    FAIL("Domain-0 has wrong label '%s'; expected '%s'." %         (label, vm_label_red))ssidref = session.xenapi.VM.set_security_label(DOM0_UUID,                                               vm_label_sys,                                               vm_label_red)if int(ssidref) < 0:    FAIL("Could not set the domain-0 security label to '%s'." %         (vm_label_sys))# pause the domain and relabel it...session.xenapi.VM.pause(vm_uuid)label = session.xenapi.VM.get_security_label(vm_uuid)if label != vm_label_red:    FAIL("User domain has wrong label '%s', expected '%s'." %         (label, vm_label_red))ssidref = session.xenapi.VM.set_security_label(vm_uuid,                                               vm_label_blue,                                               vm_label_red)print "guest domain new label '%s'; ssidref is 0x%08x" % \      (vm_label_blue, int(ssidref))if int(ssidref) <= 0:    FAIL("Could not label guest domain with '%s'" % (vm_label_blue))label = session.xenapi.VM.get_security_label(vm_uuid)if label != vm_label_blue:    FAIL("User domain has wrong label '%s', expected '%s'." %         (label, vm_label_blue))session.xenapi.VM.unpause(vm_uuid)rc = session.xenapi.VM.suspend(vm_uuid)ssidref = session.xenapi.VM.set_security_label(vm_uuid,                                               vm_label_green,                                               vm_label_blue)print "guest domain new label '%s'; ssidref is 0x%08x" % \      (vm_label_green, int(ssidref))if int(ssidref) < 0:    FAIL("Could not label suspended guest domain with '%s'" % (vm_label_blue))label = session.xenapi.VM.get_security_label(vm_uuid)if label != vm_label_green:    FAIL("User domain has wrong label '%s', expected '%s'." %         (label, vm_label_green))rc = session.xenapi.VM.resume(vm_uuid, False)label = session.xenapi.VM.get_security_label(vm_uuid)if label != vm_label_green:    FAIL("User domain has wrong label '%s', expected '%s'." %         (label, vm_label_green))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -