[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] xm-test: An additional ACM security test case for the test suite.



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1196943149 0
# Node ID 3df07c94c9aac344276ce4fcb22da6f33d2c1930
# Parent  0f9b5ab59579e8b980e231bfd3fdf5ab8a74e005
xm-test: An additional ACM security test case for the test suite.
Signed-off-by: Stefan Berger <stefanb@xxxxxxxxxx>
---
 tools/xm-test/lib/XmTestLib/acm.py                                  |    8 
 tools/xm-test/tests/security-acm/10_security-acm_pol_update.py      |  350 
++++++++++
 tools/xm-test/tests/security-acm/Makefile.am                        |    8 
 tools/xm-test/tests/security-acm/xm-test-update-security_policy.xml |  117 +++
 4 files changed, 479 insertions(+), 4 deletions(-)

diff -r 0f9b5ab59579 -r 3df07c94c9aa tools/xm-test/lib/XmTestLib/acm.py
--- a/tools/xm-test/lib/XmTestLib/acm.py        Thu Dec 06 11:56:51 2007 +0000
+++ b/tools/xm-test/lib/XmTestLib/acm.py        Thu Dec 06 12:12:29 2007 +0000
@@ -30,11 +30,17 @@ except:
 
 labeled_resources = {}
 acm_verbose = False
+policy='xm-test'
+
 
 def isACMEnabled():
     return security.on()
 
-def ACMSetPolicy(policy='xm-test'):
+def setCurrentPolicy(plcy):
+    global policy
+    policy = plcy
+
+def ACMSetPolicy():
     cmd='xm dumppolicy | grep -E "^POLICY REFERENCE = ' + policy + '.$"'
     s, o = traceCommand(cmd)
     if o != "":
diff -r 0f9b5ab59579 -r 3df07c94c9aa 
tools/xm-test/tests/security-acm/10_security-acm_pol_update.py
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/xm-test/tests/security-acm/10_security-acm_pol_update.py    Thu Dec 
06 12:12:29 2007 +0000
@@ -0,0 +1,350 @@
+#!/usr/bin/python
+
+# Copyright (C) International Business Machines Corp., 2006
+# Author: Stefan Berger <stefanb@xxxxxxxxxx>
+#
+
+import os
+import re
+import commands
+from XmTestLib import *
+import xen.util.xsm.xsm as security
+from xen.util import xsconstants
+
+def checkLabel(labeldata, expected, domname):
+    if labeldata[0] != expected[0]:
+        FAIL("Policy type of %s is bad: %s" % (domname, labeldata[0]))
+    if labeldata[1] != expected[1]:
+        FAIL("Unexpected policy indicated in %s label '%s', expected '%s'." %
+             (domname, labeldata[1], expected[1]))
+    if labeldata[2] != expected[2]:
+        FAIL("%s does not have '%s' label but '%s'." %
+             (domname, expected[2], labeldata[2]))
+
+testpolicy = "xm-test"
+testlabel1 = "blue"
+testlabel2 = "red"
+testlabel3 = "green"
+
+s, o = traceCommand('xm resources | grep -E "^[phy|file|vlan]" ')
+resnames = []
+if o:
+    resnames = o.split('\n')
+
+    for res in resnames:
+        s, o = traceCommand('xm rmlabel res %s' % res)
+
+#Unlabeled domain must not start under xm-test policy
+domain_ul = XmTestDomain(name='domain-unlabeled',
+                         extraConfig=None)
+del domain_ul.config.opts['access_control']
+try:
+    domain_ul.start(noConsole=True)
+    FAIL("Could start unlabeled domain.")
+except DomainError, e:
+    pass
+
+
+config = {"access_control":"policy=%s,label=%s" % (testpolicy,testlabel1)}
+
+domain_blue = XmTestDomain(name='domain-%s' % testlabel1,
+                           extraConfig=config)
+
+config = {"access_control":"policy=%s,label=%s" % (testpolicy,testlabel3)}
+
+domain_green = XmTestDomain(name='domain-%s' % testlabel3,
+                            extraConfig=config)
+
+
+try:
+    domain_blue.start(noConsole=True)
+except DomainError, e:
+    if verbose:
+        print e.extra
+    FAIL("Unable to start blue labeled test domain")
+
+s, o = traceCommand('xm list Domain-0 --label | grep -E "Domain-0"')
+if s:
+    FAIL("Could not get the label of Domain-0")
+
+info = o.strip().split(' ')
+labeldata = info[-1].split(':')
+if len(labeldata) != 3:
+    FAIL("Label of Domain-0 is bad: '%s'" % info[-1])
+checkLabel(labeldata,
+           [xsconstants.ACM_POLICY_ID, "xm-test", "SystemManagement"],
+           "Domain-0")
+
+# Should be able to set the Domain-0 label to blue
+s, o = traceCommand('xm addlabel blue mgt Domain-0')
+if s:
+    FAIL("Could not set the label of Domain-0 to 'blue'.")
+s,o = traceCommand('xm list Domain-0 --label | grep -E "Domain-0"')
+if s:
+    FAIL("Could not get the label of Domain-0")
+
+info = o.strip().split()
+labeldata = info[-1].split(':')
+if len(labeldata) != 3:
+     FAIL("Label of Domain-0 is bad: '%s'" % info[-1])
+checkLabel(labeldata,
+           [xsconstants.ACM_POLICY_ID, "xm-test", "blue"],
+           "Domain-0")
+
+#Should not be able to set the label of Domain-0 to 'red'
+s, o = traceCommand('xm addlabel red mgt Domain-0')
+if not s:
+    FAIL("Could set the label of Domain-0 to 'red'.")
+s,o = traceCommand('xm list Domain-0 --label | grep -E "Domain-0"')
+if s:
+    FAIL("Could not get the label of Domain-0")
+
+info = o.strip().split()
+labeldata = info[-1].split(':')
+if len(labeldata) != 3:
+     FAIL("Label of Domain-0 is bad: '%s'" % info[-1])
+checkLabel(labeldata,
+           [xsconstants.ACM_POLICY_ID, "xm-test", "blue"],
+           "Domain-0")
+
+# Should be able to set the label of Domain-0 to 'SystemManagement'
+s, o = traceCommand('xm addlabel SystemManagement mgt Domain-0')
+if s:
+    FAIL("Could not set the label of Domain-0 to 'SystemManagement'.")
+s,o = traceCommand('xm list Domain-0 --label | grep -E "Domain-0"')
+if s:
+    FAIL("Could not get the label of Domain-0")
+
+info = o.strip().split()
+labeldata = info[-1].split(':')
+if len(labeldata) != 3:
+     FAIL("Label of Domain-0 is bad: '%s'" % info[-1])
+checkLabel(labeldata,
+           [xsconstants.ACM_POLICY_ID, "xm-test", "SystemManagement"],
+           "Domain-0")
+
+#Label some resource green
+#Label some resource red
+#Label some resource blue
+
+s, o = traceCommand('xm addlabel green res file:/tmp/green')
+if s:
+    FAIL("Could not label resource 'green'.")
+s, o = traceCommand('xm addlabel red res file:/tmp/red')
+if s:
+    FAIL("Could not label resource 'red'.")
+s, o = traceCommand('xm addlabel blue res file:/tmp/blue')
+if s:
+    FAIL("Could not label resrouce 'blue'")
+
+# Start a green domain
+try:
+    domain_green.start(noConsole=True)
+except DomainError, e:
+    if verbose:
+        print e.extra
+    FAIL("Unable to start green labeled test domain")
+
+# Update the system's policy. Should not work, since blue Domain is running
+s, o = traceCommand('xm setpolicy ACM xm-test-update')
+if not s:
+    FAIL("Could set the new policy even though blue domain is running.")
+
+s, o = traceCommand('xm getpolicy | grep "Policy name"')
+info = o.split(':')
+poldata = [i.strip() for i in info]
+
+if poldata[1] != 'xm-test':
+   FAIL("Policy should be 'xm-test' but is now '%s'." % poldata[1])
+
+# Check that no labels have changed
+s, o = traceCommand('xm getlabel res file:/tmp/green')
+if s:
+    FAIL("Could not get label for green resource.")
+label=o.strip()
+if label != 'ACM:xm-test:green':
+    FAIL("Label for green resource has changed to '%s', but should not have,"
+         % label)
+
+s, o = traceCommand('xm getlabel res file:/tmp/red')
+if s:
+    FAIL("Could not get label for red resource.")
+label=o.strip()
+if label != 'ACM:xm-test:red':
+    FAIL("Label for red resource has changed to '%s', but should not have,"
+         % label)
+
+s, o = traceCommand('xm getlabel res file:/tmp/blue')
+if s:
+    FAIL("Could not get label for blue resource.")
+label=o.strip()
+if label != 'ACM:xm-test:blue':
+    FAIL("Label for blue resource has changed to '%s', but should not have,"
+         % label)
+
+# Terminate blue domain
+domain_blue.stop()
+
+# Update the system's policy. Should work and rename the green domain to GREEN
+s, o = traceCommand('xm setpolicy ACM xm-test-update')
+if s:
+    FAIL("Could not set the new policy.")
+
+acm.setCurrentPolicy('xm-test-update')
+
+s, o = traceCommand('xm getpolicy | grep "Policy name"')
+info = o.split(':')
+poldata = [i.strip() for i in info]
+
+if poldata[1] != 'xm-test-update':
+   FAIL("Policy should be 'xm-test-update' but is now '%s'." % poldata[1])
+
+# check previously labeled resources
+#  - green should be GREEN now
+#  - blue should have been invalidated
+#  - red should be the same
+s, o = traceCommand('xm getlabel res file:/tmp/green')
+if s:
+    FAIL("Could not get label for GREEN resource.")
+label=o.strip()
+if label != 'ACM:xm-test-update:GREEN':
+    FAIL("Label for green resource has changed to '%s', but should not have,"
+         % label)
+
+s, o = traceCommand('xm getlabel res file:/tmp/red')
+if s:
+    FAIL("Could not get label for RED resource.")
+label=o.strip()
+if label != 'ACM:xm-test-update:RED':
+    FAIL("Label for RED resource has changed to '%s', expected is '%s',"
+         % (label,'ACM:xm-test-update:RED'))
+
+s, o = traceCommand('xm getlabel res file:/tmp/blue')
+if s:
+    FAIL("Could not get label for blue resource.")
+label=o.strip()
+if label != 'INV_ACM:xm-test:blue':
+    FAIL("Label for blue resource has changed to '%s', expected is '%s',"
+         % (label,'INV_ACM:xm-test:blue'))
+
+config = {"access_control":"policy=%s,label=%s" % 
('xm-test-update',testlabel2)}
+
+domain_red = XmTestDomain(name='domain-%s' % testlabel2,
+                          extraConfig=config)
+
+# Start the red domain - should not work due to conflict set
+try:
+    domain_red.start(noConsole=True)
+    FAIL("Could start 'red' domain.")
+except DomainError, e:
+    pass
+
+# Terminate GREEN domain
+domain_green.destroy()
+
+# Start the red domain - should work now
+try:
+    domain_red.start()
+except DomainError, e:
+    FAIL("Could not start 'red' domain.")
+
+# Stop the red domain.
+domain_red.destroy()
+
+# Make Domain-0 GREEN
+s, o = traceCommand('xm addlabel GREEN mgt Domain-0')
+if s:
+    FAIL("Could not set Domain-0's label to 'GREEN'.")
+s,o = traceCommand('xm list Domain-0 --label | grep -E "Domain-0"')
+if s:
+    FAIL("Could not get the label of Domain-0")
+
+info = o.strip().split()
+labeldata = info[-1].split(':')
+if len(labeldata) != 3:
+    FAIL("Label of Domain-0 is bad: '%s'" % info[-1])
+checkLabel(labeldata,
+           [xsconstants.ACM_POLICY_ID, "xm-test-update", "GREEN"],
+           "Domain-0")
+
+# Start the red domain - should not work due to conflict set
+try:
+    domain_red.start()
+    FAIL("Could start 'red' domain.")
+except DomainError, e:
+    pass
+
+# Set Domain-0's domain to SystemManagement
+s, o = traceCommand('xm addlabel SystemManagement mgt Domain-0')
+if s:
+    FAIL("Could not set Domain-0's label to SystemManagement.")
+
+# Start unlabeled domain - should work
+try:
+    domain_ul.start(noConsole=True)
+except DomainError, e:
+    FAIL("Could not start unlabeled domain.")
+
+# Stop red domain
+domain_red.destroy()
+
+# reset the policy - should not work
+s, o = traceCommand('xm resetpolicy')
+if not s:
+    FAIL("Could reset the policy.")
+
+# Stop unlabeled domain
+domain_ul.destroy()
+
+
+# Mark Domain-0 as red. This must not have any effect on the later reset
+s, o = traceCommand('xm addlabel red mgt Domain-0')
+if s:
+    FAIL("Could not set Domain-0's label to 'red'.")
+s,o = traceCommand('xm list Domain-0 --label | grep -E "Domain-0"')
+if s:
+    FAIL("Could not get the label of Domain-0")
+
+info = o.strip().split()
+labeldata = info[-1].split(':')
+if len(labeldata) != 3:
+    FAIL("Label of Domain-0 is bad: '%s'" % info[-1])
+checkLabel(labeldata,
+           [xsconstants.ACM_POLICY_ID, "xm-test-update", "red"],
+           "Domain-0")
+
+# reset the policy - should work
+s, o = traceCommand('xm resetpolicy')
+if s:
+    FAIL("Could not reset the policy.")
+
+# check previously labeled resources
+#  - GREEN should be invalid
+#  - red should be invalid
+#  - blue should be invalid
+s, o = traceCommand('xm getlabel res file:/tmp/green')
+if s:
+    FAIL("Could not get label for GREEN resource.")
+label=o.strip()
+exp='INV_ACM:xm-test-update:GREEN'
+if label != exp:
+    FAIL("Label for green resource has changed to '%s', but should be '%s',"
+         % (label, exp))
+
+s, o = traceCommand('xm getlabel res file:/tmp/red')
+if s:
+    FAIL("Could not get label for RED resource.")
+label=o.strip()
+exp='INV_ACM:xm-test-update:RED'
+if label != exp:
+    FAIL("Label for RED resource has changed to '%s', but should be '%s'.,"
+         % (label, exp))
+
+s, o = traceCommand('xm getlabel res file:/tmp/blue')
+if s:
+    FAIL("Could not get label for blue resource.")
+label=o.strip()
+exp='INV_ACM:xm-test:blue'
+if label != exp:
+    FAIL("Label for blue resource has changed to '%s', but should be '%s',"
+         % (label, exp))
diff -r 0f9b5ab59579 -r 3df07c94c9aa 
tools/xm-test/tests/security-acm/Makefile.am
--- a/tools/xm-test/tests/security-acm/Makefile.am      Thu Dec 06 11:56:51 
2007 +0000
+++ b/tools/xm-test/tests/security-acm/Makefile.am      Thu Dec 06 12:12:29 
2007 +0000
@@ -8,7 +8,8 @@ TESTS = 01_security-acm_basic.test \
         06_security-acm_dom_block_attach.test \
         07_security-acm_pol_update.test \
         08_security-acm_xapi.test \
-        09_security-acm_pol_update.test
+        09_security-acm_pol_update.test \
+        10_security-acm_pol_update.test
 
 XFAIL_TESTS =
 
@@ -19,8 +20,9 @@ TESTS_ENVIRONMENT=@TENV@
        cp $< $@
        chmod +x $@
        @if [ -d /etc/xen/acm-security/policies ]; then \
-               cp -f xm-test-security_policy.xml      \
-                     /etc/xen/acm-security/policies;  \
+               cp -f xm-test-security_policy.xml       \
+                     xm-test-update-security_policy.xml\
+                     /etc/xen/acm-security/policies;   \
        fi;
 
 clean-local: am_config_clean-local
diff -r 0f9b5ab59579 -r 3df07c94c9aa 
tools/xm-test/tests/security-acm/xm-test-update-security_policy.xml
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/xm-test/tests/security-acm/xm-test-update-security_policy.xml       
Thu Dec 06 12:12:29 2007 +0000
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Auto-generated by ezPolicy        -->
+<SecurityPolicyDefinition xmlns="http://www.ibm.com"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://www.ibm.com ../../security_policy.xsd ">
+    <PolicyHeader>
+        <PolicyName>xm-test-update</PolicyName>
+        <Date>Fri Sep 29 14:44:38 2006</Date>
+        <Version>1.1</Version>
+        <FromPolicy>
+            <PolicyName>xm-test</PolicyName>
+            <Version>1.0</Version>
+        </FromPolicy>
+    </PolicyHeader>
+
+    <SimpleTypeEnforcement>
+        <SimpleTypeEnforcementTypes>
+            <Type>SystemManagement</Type>
+            <Type>GREEN</Type>
+            <Type>red</Type>
+            <Type>__UNLABELED__</Type>
+        </SimpleTypeEnforcementTypes>
+    </SimpleTypeEnforcement>
+
+    <ChineseWall priority="PrimaryPolicyComponent">
+        <ChineseWallTypes>
+            <Type>SystemManagement</Type>
+            <Type>GREEN</Type>
+            <Type>red</Type>
+            <Type>__UNLABELED__</Type>
+        </ChineseWallTypes>
+
+        <ConflictSets>
+            <Conflict name="RER">
+                <Type>GREEN</Type>
+                <Type>red</Type>
+            </Conflict>
+       </ConflictSets>
+    </ChineseWall>
+
+    <SecurityLabelTemplate>
+        <SubjectLabels bootstrap="SystemManagement">
+            <VirtualMachineLabel>
+                <Name>SystemManagement</Name>
+                <SimpleTypeEnforcementTypes>
+                    <Type>SystemManagement</Type>
+                    <Type>GREEN</Type>
+                    <Type>red</Type>
+                    <Type>__UNLABELED__</Type>
+                </SimpleTypeEnforcementTypes>
+                <ChineseWallTypes>
+                    <Type>SystemManagement</Type>
+                </ChineseWallTypes>
+            </VirtualMachineLabel>
+
+            <VirtualMachineLabel>
+                <Name from="green">GREEN</Name>
+                <SimpleTypeEnforcementTypes>
+                    <Type>GREEN</Type>
+                </SimpleTypeEnforcementTypes>
+                <ChineseWallTypes>
+                    <Type>GREEN</Type>
+                </ChineseWallTypes>
+            </VirtualMachineLabel>
+
+            <VirtualMachineLabel>
+                <Name>red</Name>
+                <SimpleTypeEnforcementTypes>
+                    <Type>red</Type>
+                </SimpleTypeEnforcementTypes>
+                <ChineseWallTypes>
+                    <Type>red</Type>
+                </ChineseWallTypes>
+            </VirtualMachineLabel>
+
+            <VirtualMachineLabel>
+                <Name>__UNLABELED__</Name>
+                <SimpleTypeEnforcementTypes>
+                    <Type>__UNLABELED__</Type>
+                </SimpleTypeEnforcementTypes>
+                <ChineseWallTypes>
+                    <Type>__UNLABELED__</Type>
+                </ChineseWallTypes>
+            </VirtualMachineLabel>
+
+        </SubjectLabels>
+
+        <ObjectLabels>
+            <ResourceLabel>
+                <Name>SystemManagement</Name>
+                <SimpleTypeEnforcementTypes>
+                    <Type>SystemManagement</Type>
+                </SimpleTypeEnforcementTypes>
+            </ResourceLabel>
+
+            <ResourceLabel>
+                <Name from="green">GREEN</Name>
+                <SimpleTypeEnforcementTypes>
+                    <Type>GREEN</Type>
+                </SimpleTypeEnforcementTypes>
+            </ResourceLabel>
+
+            <ResourceLabel>
+                <Name from="red">RED</Name>
+                <SimpleTypeEnforcementTypes>
+                    <Type>red</Type>
+                </SimpleTypeEnforcementTypes>
+            </ResourceLabel>
+
+            <ResourceLabel>
+                <Name>__UNLABELED__</Name>
+                <SimpleTypeEnforcementTypes>
+                    <Type>__UNLABELED__</Type>
+                </SimpleTypeEnforcementTypes>
+            </ResourceLabel>
+
+        </ObjectLabels>
+    </SecurityLabelTemplate>
+</SecurityPolicyDefinition>

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.