acm: check for duplicate labels and types
authorKeir Fraser <keir.fraser@citrix.com>
Mon, 9 Jun 2008 08:37:56 +0000 (09:37 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Mon, 9 Jun 2008 08:37:56 +0000 (09:37 +0100)
Signed-off-by: Stefan Berger <stefanb@us.ibm.com>
tools/python/xen/util/acmpolicy.py
tools/python/xen/util/xsconstants.py

index b7ccb194b5b42fed476b88b7dcbddd4a38540300..5d4711c52ddbd5eda1fe74480dce0a538aea1555 100644 (file)
@@ -1323,6 +1323,13 @@ class ACMPolicy(XSPolicy):
         if ACM_LABEL_UNLABELED in resnames:
             resnames.remove(ACM_LABEL_UNLABELED)
 
+        # check for duplicate labels
+        if len(vmlabels) != len(set(vmlabels)) or \
+           len(resnames) != len(set(resnames)) or \
+           len(stes)     != len(set(stes))     or \
+           len(chws)     != len(set(chws)):
+            return -xsconstants.XSERR_POLICY_HAS_DUPLICATES, "", ""
+
         max_chw_ssids = 1 + len(vms_with_chws)
         max_chw_types = 1 + len(vms_with_chws)
         max_ste_ssids = 1 + len(vms_with_stes) + len(resnames)
index 730d66fbf5ac5874fd8272e5eed4666f307924b9..88fb8fdecc9b04744160f07667782d02dc416fa6 100644 (file)
@@ -59,7 +59,8 @@ XSERR_HV_OP_FAILED             = 24 + XSERR_BASE
 XSERR_BOOTPOLICY_INSTALL_ERROR = 25 + XSERR_BASE
 XSERR_VM_NOT_AUTHORIZED        = 26 + XSERR_BASE
 XSERR_VM_IN_CONFLICT           = 27 + XSERR_BASE
-XSERR_LAST                     = 27 + XSERR_BASE ## KEEP LAST
+XSERR_POLICY_HAS_DUPLICATES    = 28 + XSERR_BASE
+XSERR_LAST                     = 28 + XSERR_BASE ## KEEP LAST
 
 XSERR_MESSAGES = [
     '',
@@ -89,7 +90,8 @@ XSERR_MESSAGES = [
     'Operation failed in hypervisor',
     'Boot policy installation error',
     'VM is not authorized to run',
-    'VM label conflicts with another VM'
+    'VM label conflicts with another VM',
+    'Duplicate labels or types in policy'
 ]
 
 def xserr2string(err):