# HG changeset patch
# User smh22@xxxxxxxxxxxxxxxxxxxx
# Node ID 65ce9bf4a86f40fe3a1774a992951ef0475cc601
# Parent ad30019015a24cc2a7e4594db9469aef8c0d4ecc
This patch adds support for managing and creating the simplified
policies to the policy generation tools.
Signed-off by: Thomas Lendacky <toml@xxxxxxxxxx>
Signed-off by: Reiner Sailer <sailer@xxxxxxxxxx>
diff -r ad30019015a2 -r 65ce9bf4a86f
tools/security/python/xensec_gen/cgi-bin/policy.cgi
--- a/tools/security/python/xensec_gen/cgi-bin/policy.cgi Mon Apr 24
10:51:50 2006 +0100
+++ b/tools/security/python/xensec_gen/cgi-bin/policy.cgi Mon Apr 24
10:52:19 2006 +0100
@@ -2,7 +2,7 @@
#
# The Initial Developer of the Original Code is International
# Business Machines Corporation. Portions created by IBM
-# Corporation are Copyright (C) 2005 International Business
+# Corporation are Copyright (C) 2005, 2006 International Business
# Machines Corporation. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or modify
@@ -31,9 +31,9 @@ from sets import Set
from sets import Set
def getSavedData( ):
- global formData, policyXml, formVariables, formCSNames
- global templateCSMTypes, templateCSMDel, templateCSMType, templateCSMAdd
- global allCSMTypes
+ global formData, policyXml
+ global formVariables, formCSNames, formVmNames, formResNames
+ global allCSMTypes, allVmChWs, allVmStes, allResStes
# Process the XML upload policy file
if formData.has_key( 'i_policy' ):
@@ -64,6 +64,46 @@ def getSavedData( ):
if len( dataList ) > 0:
exec 'allCSMTypes[csName][1] = ' + dataList[0]
+ # The form can contain any number of "Virtual Machines"
+ # so update the list of form variables to include
+ # each virtual machine (hidden input variable)
+ for vmName in formVmNames[1]:
+ newVm( vmName )
+
+ vmFormVar = allVmChWs[vmName]
+ if (vmFormVar[2] != '') and formData.has_key( vmFormVar[2] ):
+ dataList = formData.getlist( vmFormVar[2] )
+ if len( dataList ) > 0:
+ if isinstance( vmFormVar[1], list ):
+ exec 'vmFormVar[1] = ' + dataList[0]
+ else:
+ vmFormVar[1] = dataList[0]
+
+ vmFormVar = allVmStes[vmName]
+ if (vmFormVar[2] != '') and formData.has_key( vmFormVar[2] ):
+ dataList = formData.getlist( vmFormVar[2] )
+ if len( dataList ) > 0:
+ if isinstance( vmFormVar[1], list ):
+ exec 'vmFormVar[1] = ' + dataList[0]
+ else:
+ vmFormVar[1] = dataList[0]
+
+ # The form can contain any number of "Resources"
+ # so update the list of form variables to include
+ # each resource (hidden input variable)
+ for resName in formResNames[1]:
+ newRes( resName )
+
+ resFormVar = allResStes[resName]
+ if (resFormVar[2] != '') and formData.has_key( resFormVar[2] ):
+ dataList = formData.getlist( resFormVar[2] )
+ if len( dataList ) > 0:
+ if isinstance( resFormVar[1], list ):
+ exec 'resFormVar[1] = ' + dataList[0]
+ else:
+ resFormVar[1] = dataList[0]
+
+
def getCurrentTime( ):
return time.strftime( '%Y-%m-%d %H:%M:%S', time.localtime( ) )
@@ -77,14 +117,49 @@ def getName( domNode ):
for childNode in nameNodes[0].childNodes:
if childNode.nodeType == xml.dom.Node.TEXT_NODE:
name = name + childNode.data
-
return name
+
+def getPolicyName( domNode ):
+ nameNodes = domNode.getElementsByTagName( 'PolicyName' )
+ if len( nameNodes ) == 0:
+ formatXmlError( '"<PolicyName>" tag is missing' )
+ return None
+
+ name = ''
+ for childNode in nameNodes[0].childNodes:
+ if childNode.nodeType == xml.dom.Node.TEXT_NODE:
+ name = name + childNode.data
+
+ return name
+
+def getUrl( domNode ):
+ urlNodes = domNode.getElementsByTagName( 'PolicyUrl' )
+ if len( urlNodes ) == 0:
+ return ''
+
+ url = ''
+ for childNode in urlNodes[0].childNodes:
+ if childNode.nodeType == xml.dom.Node.TEXT_NODE:
+ url = url + childNode.data
+
+ return url
+
+def getRef( domNode ):
+ refNodes = domNode.getElementsByTagName( 'Reference' )
+ if len( refNodes ) == 0:
+ return ''
+
+ ref = ''
+ for childNode in refNodes[0].childNodes:
+ if childNode.nodeType == xml.dom.Node.TEXT_NODE:
+ ref = ref + childNode.data
+
+ return ref
def getDate( domNode ):
dateNodes = domNode.getElementsByTagName( 'Date' )
if len( dateNodes ) == 0:
- formatXmlError( '"<Date>" tag is missing' )
- return None
+ return ''
date = ''
for childNode in dateNodes[0].childNodes:
@@ -92,6 +167,18 @@ def getDate( domNode ):
date = date + childNode.data
return date
+
+def getNSUrl( domNode ):
+ urlNodes = domNode.getElementsByTagName( 'NameSpaceUrl' )
+ if len( urlNodes ) == 0:
+ return ''
+
+ url = ''
+ for childNode in urlNodes[0].childNodes:
+ if childNode.nodeType == xml.dom.Node.TEXT_NODE:
+ url = url + childNode.data
+
+ return url
def getSteTypes( domNode, missingIsError = 0 ):
steNodes = domNode.getElementsByTagName( 'SimpleTypeEnforcementTypes' )
@@ -170,9 +257,7 @@ def formatXmlGenError( msg ):
xmlMessages.append( cgi.escape( msg ) )
def parseXml( xmlInput ):
- global xmlMessages, xmlError, xmlLine, xmlColumn
-
- xmlParser = xml.sax.make_parser( )
+ xmlParser = xml.sax.make_parser( )
try:
domDoc = xml.dom.minidom.parseString( xmlInput, xmlParser )
@@ -198,14 +283,16 @@ def parseXml( xmlInput ):
def parsePolicyXml( ):
global policyXml
- global formPolicyName, formPolicyDate, formPolicyOrder
- global formSteTypes, formChWallTypes
- global allCSMTypes
+ global formPolicyName, formPolicyUrl, formPolicyRef, formPolicyDate,
formPolicyNSUrl
+ global formPolicyOrder
+ global formSteTypes, formChWallTypes, formVmNames, formVmNameDom0
+ global allCSMTypes, allVmStes, allVmChWs
domDoc = parseXml( policyXml )
if domDoc == None:
return
+ # Process the PolicyHeader
domRoot = domDoc.documentElement
domHeaders = domRoot.getElementsByTagName( 'PolicyHeader' )
if len( domHeaders ) == 0:
@@ -215,7 +302,7 @@ def parsePolicyXml( ):
formatXmlError( msg )
return
- pName = getName( domHeaders[0] )
+ pName = getPolicyName( domHeaders[0] )
if pName == None:
msg = ''
msg = msg + 'Error processing the Policy header information.\n'
@@ -223,18 +310,13 @@ def parsePolicyXml( ):
formatXmlError( msg )
return
- formPolicyName[1] = pName
-
- pDate = getDate( domHeaders[0] )
- if pDate == None:
- msg = ''
- msg = msg + 'Error processing the Policy header information.\n'
- msg = msg + 'Please validate the Policy file used.'
- formatXmlError( msg )
- return
-
- formPolicyDate[1] = pDate
-
+ formPolicyName[1] = pName
+ formPolicyUrl[1] = getUrl( domHeaders[0] )
+ formPolicyRef[1] = getRef( domHeaders[0] )
+ formPolicyDate[1] = getDate( domHeaders[0] )
+ formPolicyNSUrl[1] = getNSUrl( domHeaders[0] )
+
+ # Process the STEs
pOrder = ''
domStes = domRoot.getElementsByTagName( 'SimpleTypeEnforcement' )
if len( domStes ) > 0:
@@ -259,6 +341,7 @@ def parsePolicyXml( ):
formSteTypes[1] = steTypes
+ # Process the ChineseWalls and Conflict Sets
domChWalls = domRoot.getElementsByTagName( 'ChineseWall' )
if len( domChWalls ) > 0:
if domChWalls[0].hasAttribute( 'priority' ):
@@ -291,45 +374,39 @@ def parsePolicyXml( ):
formChWallTypes[1] = chwTypes
csNodes = domChWalls[0].getElementsByTagName( 'ConflictSets' )
- if len( csNodes ) == 0:
- msg = ''
- msg = msg + 'Required "<ConflictSets>" tag missing.\n'
- msg = msg + 'Please validate the Policy file used.'
- formatXmlError( msg )
- return
-
- cNodes = csNodes[0].getElementsByTagName( 'Conflict' )
- if len( cNodes ) == 0:
- msg = ''
- msg = msg + 'Required "<Conflict>" tag missing.\n'
- msg = msg + 'Please validate the Policy file used.'
- formatXmlError( msg )
- return
-
- for cNode in cNodes:
- csName = cNode.getAttribute( 'name' )
- newCS( csName, 1 )
-
- csMemberList = getTypes( cNode )
- if csMemberList == None:
+ if csNodes and (len( csNodes ) > 0):
+ cNodes = csNodes[0].getElementsByTagName( 'Conflict' )
+ if not cNodes or len( cNodes ) == 0:
msg = ''
- msg = msg + 'Error processing the Conflict Set
members.\n'
+ msg = msg + 'Required "<Conflict>" tag
missing.\n'
msg = msg + 'Please validate the Policy file
used.'
formatXmlError( msg )
return
- # Verify the conflict set members are valid types
- ctSet = Set( formChWallTypes[1] )
- csSet = Set( csMemberList )
- if not csSet.issubset( ctSet ):
- msg = ''
- msg = msg + 'Error processing Conflict Set "' +
csName + '".\n'
- msg = msg + 'Members of the conflict set are
not valid '
- msg = msg + 'Chinese Wall types.\n'
- msg = msg + 'Please validate the Policy file
used.'
- formatXmlError( msg )
-
- allCSMTypes[csName][1] = csMemberList
+ for cNode in cNodes:
+ csName = cNode.getAttribute( 'name' )
+ newCS( csName, 1 )
+
+ csMemberList = getTypes( cNode )
+ if csMemberList == None:
+ msg = ''
+ msg = msg + 'Error processing the
Conflict Set members.\n'
+ msg = msg + 'Please validate the Policy
file used.'
+ formatXmlError( msg )
+ return
+
+ # Verify the conflict set members are valid
types
+ ctSet = Set( formChWallTypes[1] )
+ csSet = Set( csMemberList )
+ if not csSet.issubset( ctSet ):
+ msg = ''
+ msg = msg + 'Error processing Conflict
Set "' + csName + '".\n'
+ msg = msg + 'Members of the conflict
set are not valid '
+ msg = msg + 'Chinese Wall types.\n'
+ msg = msg + 'Please validate the Policy
file used.'
+ formatXmlError( msg )
+
+ allCSMTypes[csName][1] = csMemberList
if pOrder != '':
formPolicyOrder[1] = pOrder
@@ -341,6 +418,74 @@ def parsePolicyXml( ):
msg = msg + 'Please validate the Policy file used.'
formatXmlError( msg )
return
+
+ # Process the Labels
+ domLabels = domRoot.getElementsByTagName( 'SecurityLabelTemplate' )
+ if not domLabels or (len( domLabels ) == 0):
+ msg = ''
+ msg = msg + '<SecurityLabelTemplate> tag is missing.\n'
+ msg = msg + 'Please validate the Policy file used.'
+ formatXmlError( msg )
+ return
+
+
+ # Process the VMs
+ domSubjects = domLabels[0].getElementsByTagName( 'SubjectLabels' )
+ if len( domSubjects ) > 0:
+ formVmNameDom0[1] = domSubjects[0].getAttribute( 'bootstrap' )
+ domNodes = domSubjects[0].getElementsByTagName(
'VirtualMachineLabel' )
+ for domNode in domNodes:
+ vmName = getName( domNode )
+ if vmName == None:
+ msg = ''
+ msg = msg + 'Error processing the
VirtualMachineLabel name.\n'
+ msg = msg + 'Please validate the Policy file
used.'
+ formatXmlError( msg )
+ continue
+
+ steTypes = getSteTypes( domNode )
+ if steTypes == None:
+ msg = ''
+ msg = msg + 'Error processing the
SimpleTypeEnforcement types.\n'
+ msg = msg + 'Please validate the Policy file
used.'
+ formatXmlError( msg )
+ return
+
+ chwTypes = getChWTypes( domNode )
+ if chwTypes == None:
+ msg = ''
+ msg = msg + 'Error processing the ChineseWall
types.\n'
+ msg = msg + 'Please validate the Policy file
used.'
+ formatXmlError( msg )
+ return
+
+ newVm( vmName, 1 )
+ allVmStes[vmName][1] = steTypes
+ allVmChWs[vmName][1] = chwTypes
+
+ # Process the Resources
+ domObjects = domLabels[0].getElementsByTagName( 'ObjectLabels' )
+ if len( domObjects ) > 0:
+ domNodes = domObjects[0].getElementsByTagName( 'ResourceLabel' )
+ for domNode in domNodes:
+ resName = getName( domNode )
+ if resName == None:
+ msg = ''
+ msg = msg + 'Error processing the ResourceLabel
name.\n'
+ msg = msg + 'Please validate the Policy file
used.'
+ formatXmlError( msg )
+ continue
+
+ steTypes = getSteTypes( domNode )
+ if steTypes == None:
+ msg = ''
+ msg = msg + 'Error processing the
SimpleTypeEnforcement types.\n'
+ msg = msg + 'Please validate the Policy file
used.'
+ formatXmlError( msg )
+ return
+
+ newRes( resName, 1 )
+ allResStes[resName][1] = steTypes
def modFormTemplate( formTemplate, suffix ):
formVar = [x for x in formTemplate]
@@ -383,18 +528,79 @@ def newCS( csName, addToList = 0 ):
formCSNames[1].append( csName )
formCSNames[1] = removeDups( formCSNames[1] )
+def newVm( vmName, addToList = 0 ):
+ global formVmNames
+ global templateVmDel, allVmDel, templateVmDom0, allVmDom0
+ global templateVmChWs, templateVmChWDel, templateVmChW, templateVmChWAdd
+ global allVmChWs, allVmChWDel, allVmChWType, allVmChWAdd
+ global templateVmStes, templateVmSteDel, templateVmSte, templateVmSteAdd
+ global allVmStes, allVmSteDel, allVmSteType, allVmSteAdd
+
+ # Make sure we have an actual name and check one of the 'all'
+ # variables to be sure it hasn't been previously defined
+ if (len( vmName ) > 0) and (not allVmDom0.has_key( vmName )):
+ vmSuffix = '_' + vmName
+ allVmDom0[vmName] = modFormTemplate( templateVmDom0,
vmSuffix )
+ allVmDel[vmName] = modFormTemplate( templateVmDel,
vmSuffix )
+ allVmChWs[vmName] = modFormTemplate( templateVmChWs,
vmSuffix )
+ allVmChWDel[vmName] = modFormTemplate( templateVmChWDel,
vmSuffix )
+ allVmChW[vmName] = modFormTemplate( templateVmChW,
vmSuffix )
+ allVmChWAdd[vmName] = modFormTemplate( templateVmChWAdd,
vmSuffix )
+ allVmStes[vmName] = modFormTemplate( templateVmStes,
vmSuffix )
+ allVmSteDel[vmName] = modFormTemplate( templateVmSteDel,
vmSuffix )
+ allVmSte[vmName] = modFormTemplate( templateVmSte,
vmSuffix )
+ allVmSteAdd[vmName] = modFormTemplate( templateVmSteAdd,
vmSuffix )
+ if addToList == 1:
+ formVmNames[1].append( vmName )
+ formVmNames[1] = removeDups( formVmNames[1] )
+
+def newRes( resName, addToList = 0 ):
+ global formResNames
+ global templateResDel, allResDel
+ global templateResStes, templateResSteDel, templateResSte,
templateResSteAdd
+ global allResStes, allResSteDel, allResSteType, allResSteAdd
+
+ # Make sure we have an actual name and check one of the 'all'
+ # variables to be sure it hasn't been previously defined
+ if (len( resName ) > 0) and (not allResDel.has_key( resName )):
+ resSuffix = '_' + resName
+ allResDel[resName] = modFormTemplate( templateResDel,
resSuffix )
+ allResStes[resName] = modFormTemplate( templateResStes,
resSuffix )
+ allResSteDel[resName] = modFormTemplate( templateResSteDel,
resSuffix )
+ allResSte[resName] = modFormTemplate( templateResSte,
resSuffix )
+ allResSteAdd[resName] = modFormTemplate( templateResSteAdd,
resSuffix )
+ if addToList == 1:
+ formResNames[1].append( resName )
+ formResNames[1] = removeDups( formResNames[1] )
+
def updateInfo( ):
- global formData, formPolicyName, formPolicyDate, formPolicyOrder
+ global formData, formPolicyName, formPolicyUrl, formPolicyRef,
formPolicyDate, formPolicyNSUrl
+ global formPolicyOrder
if formData.has_key( formPolicyName[3] ):
formPolicyName[1] = formData[formPolicyName[3]].value
elif formData.has_key( formPolicyUpdate[3] ):
formPolicyName[1] = ''
+ if formData.has_key( formPolicyUrl[3] ):
+ formPolicyUrl[1] = formData[formPolicyUrl[3]].value
+ elif formData.has_key( formPolicyUpdate[3] ):
+ formPolicyUrl[1] = ''
+
+ if formData.has_key( formPolicyRef[3] ):
+ formPolicyRef[1] = formData[formPolicyRef[3]].value
+ elif formData.has_key( formPolicyUpdate[3] ):
+ formPolicyRef[1] = ''
+
if formData.has_key( formPolicyDate[3] ):
formPolicyDate[1] = formData[formPolicyDate[3]].value
elif formData.has_key( formPolicyUpdate[3] ):
formPolicyDate[1] = ''
+
+ if formData.has_key( formPolicyNSUrl[3] ):
+ formPolicyNSUrl[1] = formData[formPolicyNSUrl[3]].value
+ elif formData.has_key( formPolicyUpdate[3] ):
+ formPolicyNSUrl[1] = ''
if formData.has_key( formPolicyOrder[3] ):
formPolicyOrder[1] = formData[formPolicyOrder[3]].value
@@ -483,6 +689,136 @@ def delCSMember( csName ):
csm = csm.strip( )
formVar[1].remove( csm )
+def addVm( ):
+ global formData, fromVmName, formVmNames, formVmNameDom0
+
+ if (formData.has_key( formDefaultButton[3] )) or (formData.has_key(
formVmAdd[3] )):
+ if formData.has_key( formVmName[3] ):
+ vmName = formData[formVmName[3]].value
+ vmName = vmName.strip( )
+ newVm( vmName, 1 )
+ if formVmNameDom0[1] == '':
+ formVmNameDom0[1] = vmName
+
+def delVm( vmName ):
+ global formVmNames, formVmNameDom0
+ global allVmDel, allVmDom0
+ global allVmChWs, allVmChWDel, allVmChWType, allVmChWAdd
+ global allVmStes, allVmSteDel, allVmSteType, allVmSteAdd
+
+ vmName = vmName.strip( )
+ formVmNames[1].remove( vmName )
+ del allVmDom0[vmName]
+ del allVmDel[vmName]
+ del allVmChWs[vmName]
+ del allVmChWDel[vmName]
+ del allVmChW[vmName]
+ del allVmChWAdd[vmName]
+ del allVmStes[vmName]
+ del allVmSteDel[vmName]
+ del allVmSte[vmName]
+ del allVmSteAdd[vmName]
+
+ if formVmNameDom0[1] == vmName:
+ if len( formVmNames[1] ) > 0:
+ formVmNameDom0[1] = formVmNames[1][0]
+ else:
+ formVmNameDom0[1] = ''
+
+def makeVmDom0( vmName ):
+ global formVmNameDom0
+
+ vmName = vmName.strip( )
+ formVmNameDom0[1] = vmName
+
+def addVmChW( vmName ):
+ global formData, allVmChW, allVmChWs
+
+ formVar = allVmChW[vmName]
+ if formData.has_key( formVar[3] ):
+ chwList = formData.getlist( formVar[3] )
+ formVar = allVmChWs[vmName]
+ for chw in chwList:
+ chw = chw.strip( )
+ formVar[1].append( chw )
+ formVar[1] = removeDups( formVar[1] )
+
+def delVmChW( vmName ):
+ global formData, allVmChWs
+
+ formVar = allVmChWs[vmName]
+ if formData.has_key( formVar[3] ):
+ chwList = formData.getlist( formVar[3] )
+ for chw in chwList:
+ chw = chw.strip( )
+ formVar[1].remove( chw )
+
+def addVmSte( vmName ):
+ global formData, allVmSte, allVmStes
+
+ formVar = allVmSte[vmName]
+ if formData.has_key( formVar[3] ):
+ steList = formData.getlist( formVar[3] )
+ formVar = allVmStes[vmName]
+ for ste in steList:
+ ste = ste.strip( )
+ formVar[1].append( ste )
+ formVar[1] = removeDups( formVar[1] )
+
+def delVmSte( vmName ):
+ global formData, allVmStes
+
+ formVar = allVmStes[vmName]
+ if formData.has_key( formVar[3] ):
+ steList = formData.getlist( formVar[3] )
+ for ste in steList:
+ ste = ste.strip( )
+ formVar[1].remove( ste )
+
+def addRes( ):
+ global formData, fromResName, formResNames
+
+ if (formData.has_key( formDefaultButton[3] )) or (formData.has_key(
formResAdd[3] )):
+ if formData.has_key( formResName[3] ):
+ resName = formData[formResName[3]].value
+ resName = resName.strip( )
+ newRes( resName, 1 )
+
+def delRes( resName ):
+ global formResNames
+ global allResDel
+ global allResStes, allResSteDel, allResSteType, allResSteAdd
+
+ resName = resName.strip( )
+ formResNames[1].remove( resName )
+ del allResDel[resName]
+ del allResStes[resName]
+ del allResSteDel[resName]
+ del allResSte[resName]
+ del allResSteAdd[resName]
+
+def addResSte( vmName ):
+ global formData, allResSte, allResStes
+
+ formVar = allResSte[vmName]
+ if formData.has_key( formVar[3] ):
+ steList = formData.getlist( formVar[3] )
+ formVar = allResStes[vmName]
+ for ste in steList:
+ ste = ste.strip( )
+ formVar[1].append( ste )
+ formVar[1] = removeDups( formVar[1] )
+
+def delResSte( vmName ):
+ global formData, allResStes
+
+ formVar = allResStes[vmName]
+ if formData.has_key( formVar[3] ):
+ steList = formData.getlist( formVar[3] )
+ for ste in steList:
+ ste = ste.strip( )
+ formVar[1].remove( ste )
+
def processRequest( ):
global policyXml
global formData, formPolicyUpdate
@@ -490,6 +826,12 @@ def processRequest( ):
global formChWallAdd, formChWallDel
global formCSAdd, allCSDel
global formCSNames, allCSMAdd, allCSMDel
+ global formVmAdd
+ global formVmNames, allVmDel, allVmDom0
+ global allVmChWAdd, allVmChWDel, allVmSteAdd, allVmSteDel
+ global formResAdd
+ global formResNames, allResDel
+ global allResSteAdd, allResSteDel
if policyXml != '':
parsePolicyXml( )
@@ -498,11 +840,13 @@ def processRequest( ):
# an action is performed
updateInfo( )
- # Allow the adding of types/sets if the user has hit the
- # enter key when attempting to add a type/set
+ # Allow the adding of types/sets/vms if the user has hit the
+ # enter key when attempting to add a type/set/vm
addSteType( )
addChWallType( )
addCS( )
+ addVm( )
+ addRes( )
if formData.has_key( formSteDel[3] ):
delSteType( )
@@ -521,6 +865,37 @@ def processRequest( ):
elif formData.has_key( allCSMDel[csName][3] ):
delCSMember( csName )
+
+ for vmName in formVmNames[1]:
+ if formData.has_key( allVmDel[vmName][3] ):
+ delVm( vmName )
+ continue
+
+ if formData.has_key( allVmDom0[vmName][3] ):
+ makeVmDom0( vmName )
+
+ if formData.has_key( allVmChWAdd[vmName][3] ):
+ addVmChW( vmName )
+
+ elif formData.has_key( allVmChWDel[vmName][3] ):
+ delVmChW( vmName )
+
+ elif formData.has_key( allVmSteAdd[vmName][3] ):
+ addVmSte( vmName )
+
+ elif formData.has_key( allVmSteDel[vmName][3] ):
+ delVmSte( vmName )
+
+ for resName in formResNames[1]:
+ if formData.has_key( allResDel[resName][3] ):
+ delRes( resName )
+ continue
+
+ if formData.has_key( allResSteAdd[resName][3] ):
+ addResSte( resName )
+
+ elif formData.has_key( allResSteDel[resName][3] ):
+ delResSte( resName )
def makeName( name, suffix='' ):
rName = name
@@ -553,7 +928,7 @@ def makeValueAttr( value, suffix='' ):
def makeValueAttr( value, suffix='' ):
return 'value="' + makeValue( value, suffix ) + '"'
-def sendHtmlFormVar( formVar, attrs='' ):
+def sendHtmlFormVar( formVar, attrs='', rb_select=0 ):
nameAttr = ''
valueAttr = ''
htmlText = ''
@@ -614,7 +989,7 @@ def sendHtmlFormVar( formVar, attrs='' )
print '<INPUT type="radio"', nameAttr,
valueAttr, addAttrs, checked, '>', htmlText, '<BR>'
- if formVar[2] != '':
+ if ( formVar[2] != '' ) and ( rb_select == 0 ):
nameAttr = makeNameAttr( formVar[2] )
valueAttr = makeValueAttr( formVar[1] )
print '<INPUT type="hidden"', nameAttr, valueAttr, '>'
@@ -625,7 +1000,9 @@ def sendHtmlHeaders( ):
print
def sendPolicyHtml( ):
- global xmlError, xmlIncomplete, xmlMessages, formXmlGen
+ global xmlError, xmlIncomplete, xmlMessages
+ global formDefaultButton, formXmlGen
+ global formVmNameDom0
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"'
print ' "http://www.w3.org/TR/html4/loose.dtd">'
@@ -704,12 +1081,17 @@ def sendPolicyHtml( ):
print ' <TR>'
print ' <TD>'
print ' <TABLE class="full">'
+ print ' <COLGROUP>'
+ print ' <COL width="49%">'
+ print ' <COL width="2%">'
+ print ' <COL width="49%">'
+ print ' </COLGROUP>'
print ' <TR>'
- print ' <TD width="49%">'
+ print ' <TD>'
sendPSteHtml( )
print ' </TD>'
- print ' <TD width="2%"> </TD>'
- print ' <TD width="49%">'
+ print ' <TD> </TD>'
+ print ' <TD>'
sendPChWallHtml( )
print ' </TD>'
print ' </TR>'
@@ -717,7 +1099,57 @@ def sendPolicyHtml( ):
print ' </TD>'
print ' </TR>'
+ # Separator
+ print ' <TR>'
+ print ' <TD>'
+ print ' <HR>'
+ print ' </TD>'
+ print ' </TR>'
+
+ # Policy Labels (vms)
+ print ' <TR>'
+ print ' <TD>'
+ print ' <TABLE class="full">'
+ print ' <COLGROUP>'
+ print ' <COL width="100%">'
+ print ' </COLGROUP>'
+ print ' <TR>'
+ print ' <TD>'
+ sendPLSubHtml( )
+ print ' </TD>'
+ print ' </TR>'
+ print ' </TABLE>'
+ print ' </TD>'
+ print ' </TR>'
+
+ # Separator
+ print ' <TR>'
+ print ' <TD>'
+ print ' <HR>'
+ print ' </TD>'
+ print ' </TR>'
+
+ # Policy Labels (resources)
+ print ' <TR>'
+ print ' <TD>'
+ print ' <TABLE class="full">'
+ print ' <COLGROUP>'
+ print ' <COL width="100%">'
+ print ' </COLGROUP>'
+ print ' <TR>'
+ print ' <TD>'
+ sendPLObjHtml( )
+ print ' </TD>'
+ print ' </TR>'
+ print ' </TABLE>'
+ print ' </TD>'
+ print ' </TR>'
+
print '</TABLE>'
+
+ # Send some data that needs to be available across sessions
+ sendHtmlFormVar( formVmNameDom0 )
+
print '</FORM>'
print '</CENTER>'
@@ -733,8 +1165,8 @@ def sendHtmlHead( ):
print '<!--'
print 'BODY {background-color: #EEEEFF;}'
print 'TABLE.container {width: 90%; border: 1px solid black;
border-collapse: seperate;}'
- print 'TABLE.fullbox {width: 100%; border: 1px solid black;
border-collapse: collapse;}'
- print 'TABLE.full {width: 100%; border: 0px solid black;
border-collapse: collapse;}'
+ print 'TABLE.full {width: 100%; border: 0px solid black;
border-collapse: collapse; border-spacing: 3px;}'
+ print 'TABLE.fullbox {width: 100%; border: 0px solid black;
border-collapse: collapse; border-spacing: 3px;}'
print 'THEAD {font-weight: bold; font-size: larger;}'
print 'TD {border: 0px solid black; vertical-align: top;}'
print 'TD.heading {border: 0px solid black; vertical-align: top;
font-weight: bold; font-size: larger;}'
@@ -752,7 +1184,8 @@ def sendHtmlHead( ):
print '</HEAD>'
def sendPHeaderHtml( ):
- global formPolicyName, formPolicyDate, formPolicyOrder, formPolicyUpdate
+ global formPolicyName, formPolicyUrl, formPolicyRef, formPolicyDate,
formPolicyNSUrl
+ global formPolicyOrder, formPolicyUpdate
# Policy header definition
print '<TABLE class="full">'
@@ -770,9 +1203,27 @@ def sendPHeaderHtml( ):
print ' </TD>'
print ' </TR>'
print ' <TR>'
+ print ' <TD align="right">Url:</TD>'
+ print ' <TD align="left">'
+ sendHtmlFormVar( formPolicyUrl, 'class="full"' )
+ print ' </TD>'
+ print ' </TR>'
+ print ' <TR>'
+ print ' <TD align="right">Reference:</TD>'
+ print ' <TD align="left">'
+ sendHtmlFormVar( formPolicyRef, 'class="full"' )
+ print ' </TD>'
+ print ' </TR>'
+ print ' <TR>'
print ' <TD align="right">Date:</TD>'
print ' <TD align="left">'
sendHtmlFormVar( formPolicyDate, 'class="full"' )
+ print ' </TD>'
+ print ' </TR>'
+ print ' <TR>'
+ print ' <TD align="right">NameSpace URL:</TD>'
+ print ' <TD align="left">'
+ sendHtmlFormVar( formPolicyNSUrl, 'class="full"' )
print ' </TD>'
print ' </TR>'
print ' <TR>'
@@ -983,17 +1434,335 @@ def sendPChWallHtml( ):
print '</TABLE>'
+def sendPLSubHtml( ):
+ global formVmNames, formVmDel, formVmName, formVmAdd
+ global allVmDel, allVmDom0
+ global allVmChWs, allVmChWDel, allVmChW, allVmChWAdd
+ global allVmStes, allVmSteDel, allVmSte, allVmSteAdd
+ global formSteTypes, formChWallTypes
+
+ print '<TABLE class="full">'
+ print ' <COLGROUP>'
+ print ' <COL width="100%">'
+ print ' </COLGROUP>'
+
+ # Virtual Machines...
+ print ' <TR>'
+ print ' <TD>'
+ print ' <TABLE class="full">'
+ print ' <COLGROUP>'
+ print ' <COL width="10%">'
+ print ' <COL width="40%">'
+ print ' <COL width="50%">'
+ print ' </COLGROUP>'
+ print ' <TR>'
+ print ' <TD class="heading" align="center" colspan="3">Virtual
Machine Classes</TD>'
+ print ' </TR>'
+ print ' <TR>'
+ print ' <TD colspan="2">'
+ sendHtmlFormVar( formVmName, 'class="full"' )
+ sendHtmlFormVar( formVmNames )
+ print ' </TD>'
+ print ' <TD> </TD>'
+ print ' </TR>'
+ print ' <TR>'
+ print ' <TD>'
+ sendHtmlFormVar( formVmAdd, 'class="full"' )
+ print ' </TD>'
+ print ' <TD colspan="2">'
+ print ' Create a new VM class with the above name'
+ print ' </TD>'
+ print ' </TR>'
+ print ' </TABLE>'
+ print ' </TD>'
+ print ' </TR>'
+ if len( formVmNames[1] ) > 0:
+ print ' <TR>'
+ print ' <TD colspan="1">'
+ print ' '
+ print ' </TD>'
+ print ' </TR>'
+ print ' <TR>'
+ print ' <TD>'
+ print ' <TABLE class="fullbox">'
+ print ' <COLGROUP>'
+ print ' <COL width="10%">'
+ print ' <COL width="40%">'
+ print ' <COL width="50%">'
+ print ' </COLGROUP>'
+ print ' <THEAD>'
+ print ' <TR>'
+ print ' <TD class="fullbox">Dom 0?</TD>'
+ print ' <TD class="fullbox">Name</TD>'
+ print ' <TD class="fullbox">Actions</TD>'
+ print ' </TR>'
+ print ' </THEAD>'
+ for i, vmName in enumerate( formVmNames[1] ):
+ print ' <TR>'
+ print ' <TD class="fullbox">'
+ if formVmNameDom0[1] == vmName:
+ print 'Yes'
+ else:
+ print ' '
+ print ' </TD>'
+ print ' <TD class="fullbox">' + vmName +
'</TD>'
+ print ' <TD class="fullbox">'
+ print ' <A href="#' + vmName + '">Edit</A>'
+ formVar = allVmDel[vmName]
+ sendHtmlFormVar( formVar, 'class="link"' )
+ formVar = allVmDom0[vmName]
+ sendHtmlFormVar( formVar, 'class="link"' )
+ print ' </TD>'
+ print ' </TR>'
+ print ' </TABLE>'
+ print ' </TD>'
+ print ' </TR>'
+ for vmName in formVmNames[1]:
+ print ' <TR>'
+ print ' <TD>'
+ print ' <HR>'
+ print ' </TD>'
+ print ' </TR>'
+ print ' <TR>'
+ print ' <TD>'
+ print ' <TABLE class="full">'
+ print ' <COLGROUP>'
+ print ' <COL width="10%">'
+ print ' <COL width="39%">'
+ print ' <COL width="2%">'
+ print ' <COL width="10%">'
+ print ' <COL width="39%">'
+ print ' </COLGROUP>'
+ print ' <TR>'
+ print ' <TD colspan="5" align="center"
class="heading">'
+ print ' <A name="' + vmName + '">Virtual
Machine Class: ' + vmName + '</A>'
+ print ' </TD>'
+ print ' </TR>'
+ print ' <TR>'
+ print ' <TD colspan="2" align="center">Simple
Type Enforcement Types</TD>'
+ print ' <TD> </TD>'
+ print ' <TD colspan="2" align="center">Chinese
Wall Types</TD>'
+ print ' </TR>'
+ print ' <TR>'
+ print ' <TD colspan="2">'
+ formVar = allVmStes[vmName];
+ sendHtmlFormVar( formVar, 'class="full" size="4"
multiple"' )
+ print ' </TD>'
+ print ' <TD> </TD>'
+ print ' <TD colspan="2">'
+ formVar = allVmChWs[vmName];
+ sendHtmlFormVar( formVar, 'class="full" size="4"
multiple"' )
+ print ' </TD>'
+ print ' </TR>'
+ print ' <TR>'
+ print ' <TD>'
+ formVar = allVmSteDel[vmName];
+ sendHtmlFormVar( formVar, 'class="full"' )
+ print ' </TD>'
+ print ' <TD>'
+ print ' Delete the type(s) selected above'
+ print ' </TD>'
+ print ' <TD> </TD>'
+ print ' <TD>'
+ formVar = allVmChWDel[vmName];
+ sendHtmlFormVar( formVar, 'class="full"' )
+ print ' </TD>'
+ print ' <TD>'
+ print ' Delete the type(s) selected above'
+ print ' </TD>'
+ print ' </TR>'
+ print ' <TR>'
+ print ' <TD colspan="2">'
+ stSet = Set( formSteTypes[1] )
+ vmSet = Set( allVmStes[vmName][1] )
+ formVar = allVmSte[vmName]
+ formVar[1] = []
+ for steType in stSet.difference( vmSet ):
+ formVar[1].append( steType )
+ formVar[1].sort( )
+ sendHtmlFormVar( formVar, 'class="full" size="2"
multiple"' )
+ print ' </TD>'
+ print ' <TD> </TD>'
+ print ' <TD colspan="2">'
+ ctSet = Set( formChWallTypes[1] )
+ vmSet = Set( allVmChWs[vmName][1] )
+ formVar = allVmChW[vmName]
+ formVar[1] = []
+ for chwallType in ctSet.difference( vmSet ):
+ formVar[1].append( chwallType )
+ formVar[1].sort( )
+ sendHtmlFormVar( formVar, 'class="full" size="2"
multiple"' )
+ print ' </TD>'
+ print ' </TR>'
+ print ' <TR>'
+ print ' <TD>'
+ formVar = allVmSteAdd[vmName];
+ sendHtmlFormVar( formVar, 'class="full"' )
+ print ' </TD>'
+ print ' <TD>'
+ print ' Add the type(s) selected above'
+ print ' </TD>'
+ print ' <TD> </TD>'
+ print ' <TD>'
+ formVar = allVmChWAdd[vmName];
+ sendHtmlFormVar( formVar, 'class="full"' )
+ print ' </TD>'
+ print ' <TD>'
+ print ' Add the type(s) selected above'
+ print ' </TD>'
+ print ' </TR>'
+ print ' </TABLE>'
+ print ' </TD>'
+ print ' </TR>'
+
+ print '</TABLE>'
+
+def sendPLObjHtml( ):
+ global formResNames, formResDel, formResName, formResAdd
+ global allResDel
+ global allResStes, allResSteDel, allResSte, allResSteAdd
+ global formSteTypes, formChWallTypes
+
+ print '<TABLE class="full">'
+ print ' <COLGROUP>'
+ print ' <COL width="100%">'
+ print ' </COLGROUP>'
+
+ # Resources...
+ print ' <TR>'
+ print ' <TD>'
+ print ' <TABLE class="full">'
+ print ' <COLGROUP>'
+ print ' <COL width="10%">'
+ print ' <COL width="40%">'
+ print ' <COL width="50%">'
+ print ' </COLGROUP>'
+ print ' <TR>'
+ print ' <TD class="heading" align="center"
colspan="3">Resource Classes</TD>'
+ print ' </TR>'
+ print ' <TR>'
+ print ' <TD colspan="2">'
+ sendHtmlFormVar( formResName, 'class="full"' )
+ sendHtmlFormVar( formResNames )
+ print ' </TD>'
+ print ' <TD> </TD>'
+ print ' </TR>'
+ print ' <TR>'
+ print ' <TD>'
+ sendHtmlFormVar( formResAdd, 'class="full"' )
+ print ' </TD>'
+ print ' <TD colspan="2">'
+ print ' Create a new Resource class with the above name'
+ print ' </TD>'
+ print ' </TR>'
+ print ' </TABLE>'
+ print ' </TD>'
+ print ' </TR>'
+ if len( formResNames[1] ) > 0:
+ print ' <TR>'
+ print ' <TD colspan="1">'
+ print ' '
+ print ' </TD>'
+ print ' </TR>'
+ print ' <TR>'
+ print ' <TD>'
+ print ' <TABLE class="fullbox">'
+ print ' <COLGROUP>'
+ print ' <COL width="50%">'
+ print ' <COL width="50%">'
+ print ' </COLGROUP>'
+ print ' <THEAD>'
+ print ' <TR>'
+ print ' <TD class="fullbox">Name</TD>'
+ print ' <TD class="fullbox">Actions</TD>'
+ print ' </TR>'
+ print ' </THEAD>'
+ for i, resName in enumerate( formResNames[1] ):
+ print ' <TR>'
+ print ' <TD class="fullbox">' + resName +
'</TD>'
+ print ' <TD class="fullbox">'
+ print ' <A href="#' + resName + '">Edit</A>'
+ formVar = allResDel[resName]
+ sendHtmlFormVar( formVar, 'class="link"' )
+ print ' </TD>'
+ print ' </TR>'
+ print ' </TABLE>'
+ print ' </TD>'
+ print ' </TR>'
+ for resName in formResNames[1]:
+ print ' <TR>'
+ print ' <TD>'
+ print ' <HR>'
+ print ' </TD>'
+ print ' </TR>'
+ print ' <TR>'
+ print ' <TD>'
+ print ' <TABLE class="full">'
+ print ' <COLGROUP>'
+ print ' <COL width="10%">'
+ print ' <COL width="90%">'
+ print ' </COLGROUP>'
+ print ' <TR>'
+ print ' <TD colspan="2" align="center"
class="heading">'
+ print ' <A name="' + resName + '">Resource
Class: ' + resName + '</A>'
+ print ' </TD>'
+ print ' </TR>'
+ print ' <TR>'
+ print ' <TD colspan="2" align="center">Simple
Type Enforcement Types</TD>'
+ print ' </TR>'
+ print ' <TR>'
+ print ' <TD colspan="2">'
+ formVar = allResStes[resName];
+ sendHtmlFormVar( formVar, 'class="full" size="4"
multiple"' )
+ print ' </TD>'
+ print ' </TR>'
+ print ' <TR>'
+ print ' <TD>'
+ formVar = allResSteDel[resName];
+ sendHtmlFormVar( formVar, 'class="full"' )
+ print ' </TD>'
+ print ' <TD>'
+ print ' Delete the type(s) selected above'
+ print ' </TD>'
+ print ' </TR>'
+ print ' <TR>'
+ print ' <TD colspan="2">'
+ stSet = Set( formSteTypes[1] )
+ resSet = Set( allResStes[resName][1] )
+ formVar = allResSte[resName]
+ formVar[1] = []
+ for steType in stSet.difference( resSet ):
+ formVar[1].append( steType )
+ formVar[1].sort( )
+ sendHtmlFormVar( formVar, 'class="full" size="2"
multiple"' )
+ print ' </TD>'
+ print ' </TR>'
+ print ' <TR>'
+ print ' <TD>'
+ formVar = allResSteAdd[resName];
+ sendHtmlFormVar( formVar, 'class="full"' )
+ print ' </TD>'
+ print ' <TD>'
+ print ' Add the type(s) selected above'
+ print ' </TD>'
+ print ' </TR>'
+ print ' </TABLE>'
+ print ' </TD>'
+ print ' </TR>'
+
+ print '</TABLE>'
+
def checkXmlData( ):
global xmlIncomplete
+ global formPolicyName, formPolicyOrder
+ global formChWallTypes, formSteTypes, formCSNames
# Validate the Policy Header requirements
- if ( len( formPolicyName[1] ) > 0 ) or ( len( formPolicyDate[1] ) > 0 ):
- if ( len( formPolicyName[1] ) == 0 ) or ( len(
formPolicyDate[1] ) == 0 ):
- msg = ''
- msg = msg + 'The XML policy schema requires that the
Policy '
- msg = msg + 'Information Name and Date fields both have
values '
- msg = msg + 'or both not have values.'
- formatXmlGenError( msg )
+ if ( len( formPolicyName[1] ) == 0 ):
+ msg = ''
+ msg = msg + 'The XML policy schema requires that the Policy '
+ msg = msg + 'Information Name field have a value.'
+ formatXmlGenError( msg )
if formPolicyOrder[1] == 'v_ChWall':
if len( formChWallTypes[1] ) == 0:
@@ -1014,14 +1783,6 @@ def checkXmlData( ):
msg = msg + 'primary policy.'
formatXmlGenError( msg )
- # Validate the Chinese Wall required data
- if len( formChWallTypes[1] ) > 0:
- if len( formCSNames[1] ) == 0:
- msg = ''
- msg = msg + 'The XML policy schema for the Chinese Wall
'
- msg = msg + 'requires at least one Conflict Set be
defined.'
- formatXmlGenError( msg )
-
def sendXmlHeaders( ):
# HTML headers
print 'Content-Type: text/xml'
@@ -1042,17 +1803,28 @@ def sendPolicyXml( ):
sendPSteXml( )
sendPChWallXml( )
+ # Policy Labels (subjects and objects)
+ print '<SecurityLabelTemplate>'
+ sendPLSubXml( )
+ sendPLObjXml( )
+ print '</SecurityLabelTemplate>'
print '</SecurityPolicyDefinition>'
def sendPHeaderXml( ):
- global formPolicyName, formPolicyDate
+ global formPolicyName, formPolicyUrl, formPolicyRef, formPolicyDate,
formPolicyNSUrl
# Policy header definition
- if ( len( formPolicyName[1] ) > 0 ) or ( len( formPolicyDate[1] ) > 0 ):
- print '<PolicyHeader>'
- print ' <Name>' + formPolicyName[1] + '</Name>'
+ print '<PolicyHeader>'
+ print ' <PolicyName>' + formPolicyName[1] + '</PolicyName>'
+ if len( formPolicyUrl[1] ) > 0:
+ print ' <PolicyUrl>' + formPolicyUrl[1] + '</PolicyUrl>'
+ if len( formPolicyRef[1] ) > 0:
+ print ' <Reference>' + formPolicyRef[1] + '</Reference>'
+ if len( formPolicyDate[1] ) > 0:
print ' <Date>' + formPolicyDate[1] + '</Date>'
- print '</PolicyHeader>'
+ if len( formPolicyNSUrl[1] ) > 0:
+ print ' <NameSpaceUrl>' + formPolicyNSUrl[1] +
'</NameSpaceUrl>'
+ print '</PolicyHeader>'
def sendPSteXml( ):
global formPolicyOrder, formSteTypes
@@ -1091,19 +1863,71 @@ def sendPChWallXml( ):
print ' <Type>' + chWallType + '</Type>'
print ' </ChineseWallTypes>'
- # Chinese Wall Conflict Sets...
- print ' <ConflictSets>'
- for cs in formCSNames[1]:
- formVar = allCSMTypes[cs]
- if len( formVar[1] ) == 0:
- continue
- print ' <Conflict name="' + cs + '">'
- for csm in formVar[1]:
- print ' <Type>' + csm + '</Type>'
- print ' </Conflict>'
- print ' </ConflictSets>'
+ # Chinese Wall Conflict Sets (if any) ...
+ if len( formCSNames[1] ) > 0:
+ print ' <ConflictSets>'
+ for cs in formCSNames[1]:
+ formVar = allCSMTypes[cs]
+ if len( formVar[1] ) == 0:
+ continue
+ print ' <Conflict name="' + cs + '">'
+ for csm in formVar[1]:
+ print ' <Type>' + csm + '</Type>'
+ print ' </Conflict>'
+ print ' </ConflictSets>'
print '</ChineseWall>'
+
+def sendPLSubXml( ):
+ global formVmNames, allVmChWs, allVmStes
+
+ # Virtual machines...
+ if len( formVmNames[1] ) == 0:
+ return
+
+ print ' <SubjectLabels bootstrap="' + formVmNameDom0[1] + '">'
+ for vmName in formVmNames[1]:
+ print ' <VirtualMachineLabel>'
+ print ' <Name>' + vmName + '</Name>'
+ formVar = allVmStes[vmName]
+ if len( formVar[1] ) > 0:
+ print ' <SimpleTypeEnforcementTypes>'
+ for ste in formVar[1]:
+ print ' <Type>' + ste + '</Type>'
+ print ' </SimpleTypeEnforcementTypes>'
+
+ formVar = allVmChWs[vmName]
+ if len( formVar[1] ) > 0:
+ print ' <ChineseWallTypes>'
+ for chw in formVar[1]:
+ print ' <Type>' + chw + '</Type>'
+ print ' </ChineseWallTypes>'
+
+ print ' </VirtualMachineLabel>'
+
+ print ' </SubjectLabels>'
+
+def sendPLObjXml( ):
+ global formResNames, allResStes
+
+ # Resources...
+ if len( formResNames[1] ) == 0:
+ return
+
+ print ' <ObjectLabels>'
+ for resName in formResNames[1]:
+ print ' <ResourceLabel>'
+ print ' <Name>' + resName + '</Name>'
+ formVar = allResStes[resName]
+ if len( formVar[1] ) > 0:
+ print ' <SimpleTypeEnforcementTypes>'
+ for ste in formVar[1]:
+ print ' <Type>' + ste + '</Type>'
+ print ' </SimpleTypeEnforcementTypes>'
+
+ print ' </ResourceLabel>'
+
+ print ' </ObjectLabels>'
# Set up initial HTML variables
@@ -1125,6 +1949,20 @@ formPolicyName = [ 'text',
'',
'',
]
+formPolicyUrl = [ 'text',
+ '',
+ 'h_policyUrl',
+ 'i_policyUrl',
+ '',
+ '',
+ ]
+formPolicyRef = [ 'text',
+ '',
+ 'h_policyRef',
+ 'i_policyRef',
+ '',
+ '',
+ ]
formPolicyDate = [ 'text',
getCurrentTime( ),
'h_policyDate',
@@ -1132,6 +1970,13 @@ formPolicyDate = [ 'text',
'',
'',
]
+formPolicyNSUrl = [ 'text',
+ '',
+ 'h_policyNSUrl',
+ 'i_policyNSUrl',
+ '',
+ '',
+ ]
formPolicyOrder = [ 'radiobutton-all',
'v_ChWall',
'h_policyOrder',
@@ -1289,13 +2134,218 @@ allCSMType = {};
allCSMType = {};
allCSMAdd = {};
+formVmNames = [ '',
+ [],
+ 'h_vmNames',
+ '',
+ '',
+ '',
+ ]
+formVmDel = [ 'button',
+ '',
+ '',
+ 'i_vmDel',
+ 'Delete',
+ '',
+ ]
+formVmName = [ 'text',
+ '',
+ '',
+ 'i_vmName',
+ '',
+ '',
+ ]
+formVmAdd = [ 'button',
+ '',
+ '',
+ 'i_vmAdd',
+ 'New',
+ '',
+ ]
+
+formVmNameDom0 = [ '',
+ '',
+ 'h_vmDom0',
+ '',
+ '',
+ '',
+ ]
+
+# This is a set of templates used for each virtual machine
+# Each virtual machine is initially assigned these templates,
+# then each form attribute value is changed to append
+# "_virtual-machine-name" for uniqueness.
+templateVmDel = [ 'button',
+ '',
+ '',
+ 'i_vmDel',
+ 'Delete',
+ '',
+ ]
+templateVmDom0 = [ 'button',
+ '',
+ '',
+ 'i_vmDom0',
+ 'SetDom0',
+ '',
+ ]
+allVmDel = {};
+allVmDom0 = {};
+
+templateVmChWs = [ 'list',
+ [],
+ 'h_vmChWs',
+ 'i_vmChWs',
+ '',
+ '',
+ ]
+templateVmChWDel = [ 'button',
+ '',
+ '',
+ 'i_vmChWDel',
+ 'Delete',
+ '',
+ ]
+templateVmChW = [ 'list',
+ [],
+ '',
+ 'i_vmChW',
+ '',
+ '',
+ ]
+templateVmChWAdd = [ 'button',
+ '',
+ '',
+ 'i_vmChWAdd',
+ 'Add',
+ '',
+ ]
+allVmChWs = {};
+allVmChWDel = {};
+allVmChW = {};
+allVmChWAdd = {};
+
+templateVmStes = [ 'list',
+ [],
+ 'h_vmStes',
+ 'i_vmStes',
+ '',
+ '',
+ ]
+templateVmSteDel = [ 'button',
+ '',
+ '',
+ 'i_vmSteDel',
+ 'Delete',
+ '',
+ ]
+templateVmSte = [ 'list',
+ [],
+ '',
+ 'i_vmSte',
+ '',
+ '',
+ ]
+templateVmSteAdd = [ 'button',
+ '',
+ '',
+ 'i_vmSteAdd',
+ 'Add',
+ '',
+ ]
+allVmStes = {};
+allVmSteDel = {};
+allVmSte = {};
+allVmSteAdd = {};
+
+formResNames = [ '',
+ [],
+ 'h_resNames',
+ '',
+ '',
+ '',
+ ]
+formResDel = [ 'button',
+ '',
+ '',
+ 'i_resDel',
+ 'Delete',
+ '',
+ ]
+formResName = [ 'text',
+ '',
+ '',
+ 'i_resName',
+ '',
+ '',
+ ]
+formResAdd = [ 'button',
+ '',
+ '',
+ 'i_resAdd',
+ 'New',
+ '',
+ ]
+
+# This is a set of templates used for each resource
+# Each resource is initially assigned these templates,
+# then each form attribute value is changed to append
+# "_resource-name" for uniqueness.
+templateResDel = [ 'button',
+ '',
+ '',
+ 'i_resDel',
+ 'Delete',
+ '',
+ ]
+allResDel = {};
+
+templateResStes = [ 'list',
+ [],
+ 'h_resStes',
+ 'i_resStes',
+ '',
+ '',
+ ]
+templateResSteDel = [ 'button',
+ '',
+ '',
+ 'i_resSteDel',
+ 'Delete',
+ '',
+ ]
+templateResSte = [ 'list',
+ [],
+ '',
+ 'i_resSte',
+ '',
+ '',
+ ]
+templateResSteAdd = [ 'button',
+ '',
+ '',
+ 'i_resSteAdd',
+ 'Add',
+ '',
+ ]
+allResStes = {};
+allResSteDel = {};
+allResSte = {};
+allResSteAdd = {};
+
# A list of all form variables used for saving info across requests
formVariables = [ formPolicyName,
+ formPolicyUrl,
+ formPolicyRef,
formPolicyDate,
+ formPolicyNSUrl,
formPolicyOrder,
formSteTypes,
formChWallTypes,
formCSNames,
+ formVmNames,
+ formVmNameDom0,
+ formResNames,
]
policyXml = ''
diff -r ad30019015a2 -r 65ce9bf4a86f tools/security/python/xensec_gen/index.html
--- a/tools/security/python/xensec_gen/index.html Mon Apr 24 10:51:50
2006 +0100
+++ b/tools/security/python/xensec_gen/index.html Mon Apr 24 10:52:19
2006 +0100
@@ -1,7 +1,7 @@
<!--
The Initial Developer of the Original Code is International
Business Machines Corporation. Portions created by IBM
- Corporation are Copyright (C) 2005 International Business
+ Corporation are Copyright (C) 2005, 2006 International Business
Machines Corporation. All Rights Reserved.
-->
@@ -10,7 +10,7 @@
<HTML>
<HEAD>
<META name="author" content="Tom Lendacky">
- <META name="copyright" content="Copyright (C) 2005 International Business
Machines Corporation. All rights reserved">
+ <META name="copyright" content="Copyright (C) 2005, 2006 International
Business Machines Corporation. All rights reserved">
<STYLE type="text/css">
<!--
@@ -67,60 +67,6 @@
</TR>
</TABLE>
</FORM>
-
- <FORM action="/cgi-bin/policylabel.cgi" method="post"
enctype="multipart/form-data">
- <TABLE class="xen">
- <COLGROUP>
- <COL width="25%">
- <COL width="20%">
- <COL width="55%">
- </COLGROUP>
-
- <TR>
- <TD valign="top" class="heading">
- Security Policy Labeling
- </TD>
- <TD valign="top" colspan="2">
- To generate or edit the Xen Security Policy Labeling you <B>must</B>
- specify the name of
- an existing Xen Security Policy file in the
- <B>"Policy File"</B> entry field.<BR>
- To generate new Xen Security Policy Labeling leave the
- <B>"Policy Labeling File"</B> entry field
- empty and click the "Create" button.<BR>
- To modify existing Xen Security Policy Labeling enter the
- file name containing the labeling in the
- <B>"Policy Labeling File"</B> entry field
- and click the "Create" button.<HR>
- </TD>
- </TR>
- <TR>
- <TD></TD>
- <TD>
- Policy File:
- </TD>
- <TD>
- <INPUT type="file" size="50" name="i_policy">
- </TD>
- </TR>
- <TR>
- <TD></TD>
- <TD>
- Policy Labeling File:
- </TD>
- <TD>
- <INPUT type="file" size="50" name="i_policyLabel">
- </TD>
- </TR>
- <TR>
- <TD></TD>
- <TD valign="top">
- <INPUT type="submit" name="i_policyLabelCreate" value="Create">
- </TD>
- <TD></TD>
- </TR>
- </TABLE>
- </FORM>
</CENTER>
</BODY>
</HTML>
diff -r ad30019015a2 -r 65ce9bf4a86f
tools/security/python/xensec_gen/cgi-bin/policylabel.cgi
--- a/tools/security/python/xensec_gen/cgi-bin/policylabel.cgi Mon Apr 24
10:51:50 2006 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1396 +0,0 @@
-#!/usr/bin/python
-#
-# The Initial Developer of the Original Code is International
-# Business Machines Corporation. Portions created by IBM
-# Corporation are Copyright (C) 2005 International Business
-# Machines Corporation. All Rights Reserved.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License,
-# or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-#
-
-import os
-import cgi
-import cgitb; cgitb.enable( )
-import time
-import xml.dom.minidom
-import xml.sax
-import xml.sax.handler
-from StringIO import StringIO
-from sets import Set
-
-def getSavedData( ):
- global formData, policyXml, policyLabelXml
- global formVariables, formVmNames
- global allVmChWs, allVmStes
-
- # Process the XML upload policy file
- if formData.has_key( 'i_policy' ):
- dataList = formData.getlist( 'i_policy' )
- if len( dataList ) > 0:
- policyXml = dataList[0].strip( )
-
- # The XML upload policy file must be specified at the start
- if formData.has_key( 'i_policyLabelCreate' ):
- if policyXml == '':
- msg = ''
- msg = msg + 'A Policy file was not supplied. A Policy
file '
- msg = msg + 'must be supplied in order to successfully
create '
- msg = msg + 'a Policy Labeling file.'
- formatXmlError( msg )
-
- # Process the XML upload policy label file
- if formData.has_key( 'i_policyLabel' ):
- dataList = formData.getlist( 'i_policyLabel' )
- if len( dataList ) > 0:
- policyLabelXml = dataList[0].strip( )
-
- # Process all the hidden input variables (if present)
- for formVar in formVariables:
- if formVar[2] == '':
- continue
-
- if formData.has_key( formVar[2] ):
- dataList = formData.getlist( formVar[2] )
- if len( dataList ) > 0:
- if isinstance( formVar[1], list ):
- exec 'formVar[1] = ' + dataList[0]
- else:
- formVar[1] = dataList[0]
-
- # The form can contain any number of "Virtual Machines"
- # so update the list of form variables to include
- # each virtual machine (hidden input variable)
- for vmName in formVmNames[1]:
- newVm( vmName )
-
- vmFormVar = allVmChWs[vmName]
- if (vmFormVar[2] != '') and formData.has_key( vmFormVar[2] ):
- dataList = formData.getlist( vmFormVar[2] )
- if len( dataList ) > 0:
- if isinstance( vmFormVar[1], list ):
- exec 'vmFormVar[1] = ' + dataList[0]
- else:
- vmFormVar[1] = dataList[0]
-
- vmFormVar = allVmStes[vmName]
- if (vmFormVar[2] != '') and formData.has_key( vmFormVar[2] ):
- dataList = formData.getlist( vmFormVar[2] )
- if len( dataList ) > 0:
- if isinstance( vmFormVar[1], list ):
- exec 'vmFormVar[1] = ' + dataList[0]
- else:
- vmFormVar[1] = dataList[0]
-
-def getCurrentTime( ):
- return time.strftime( '%Y-%m-%d %H:%M:%S', time.localtime( ) )
-
-def getName( domNode ):
- nameNodes = domNode.getElementsByTagName( 'Name' )
- if len( nameNodes ) == 0:
- formatXmlError( '"<Name>" tag is missing' )
- return None
-
- name = ''
- for childNode in nameNodes[0].childNodes:
- if childNode.nodeType == xml.dom.Node.TEXT_NODE:
- name = name + childNode.data
-
- return name
-
-def getDate( domNode ):
- dateNodes = domNode.getElementsByTagName( 'Date' )
- if len( dateNodes ) == 0:
- formatXmlError( '"<Date>" tag is missing' )
- return None
-
- date = ''
- for childNode in dateNodes[0].childNodes:
- if childNode.nodeType == xml.dom.Node.TEXT_NODE:
- date = date + childNode.data
-
- return date
-
-def getDefUrl( domNode ):
- domNodes = domNode.getElementsByTagName( 'PolicyName' )
- if len( domNodes ) == 0:
- formatXmlError( '"<PolicyName>" tag is missing' )
- return None
-
- urlNodes = domNode.getElementsByTagName( 'Url' )
- if len( urlNodes ) == 0:
- formatXmlError( '"<Url>" tag is missing' )
- return None
-
- url = ''
- for childNode in urlNodes[0].childNodes:
- if childNode.nodeType == xml.dom.Node.TEXT_NODE:
- url = url + childNode.data
-
- return url
-
-def getDefRef( domNode ):
- domNodes = domNode.getElementsByTagName( 'PolicyName' )
- if len( domNodes ) == 0:
- formatXmlError( '"<PolicyName>" tag is missing' )
- return None
-
- refNodes = domNode.getElementsByTagName( 'Reference' )
- if len( refNodes ) == 0:
- formatXmlError( '"<Reference>" tag is missing' )
- return None
-
- ref = ''
- for childNode in refNodes[0].childNodes:
- if childNode.nodeType == xml.dom.Node.TEXT_NODE:
- ref = ref + childNode.data
-
- return ref
-
-def getSteTypes( domNode, missingIsError = 0 ):
- steNodes = domNode.getElementsByTagName( 'SimpleTypeEnforcementTypes' )
- if len( steNodes ) == 0:
- if missingIsError == 1:
- formatXmlError( '"<SimpleTypeEnforcementTypes>" tag is
missing' )
- return None
- else:
- return []
-
- return getTypes( steNodes[0] )
-
-def getChWTypes( domNode, missingIsError = 0 ):
- chwNodes = domNode.getElementsByTagName( 'ChineseWallTypes' )
- if len( chwNodes ) == 0:
- if missingIsError == 1:
- formatXmlError( '"<ChineseWallTypes>" tag is missing' )
- return None
- else:
- return []
-
- return getTypes( chwNodes[0] )
-
-def getTypes( domNode ):
- types = []
-
- domNodes = domNode.getElementsByTagName( 'Type' )
- if len( domNodes ) == 0:
- formatXmlError( '"<Type>" tag is missing' )
- return None
-
- for domNode in domNodes:
- typeText = ''
- for childNode in domNode.childNodes:
- if childNode.nodeType == xml.dom.Node.TEXT_NODE:
- typeText = typeText + childNode.data
-
- if typeText == '':
- formatXmlError( 'No text associated with the "<Type>"
tag' )
- return None
-
- types.append( typeText )
-
- return types
-
-def formatXmlError( msg, xml = '', lineNum = -1, colNum = -1 ):
- global xmlMessages, xmlError
-
- xmlError = 1
- addMsg = cgi.escape( msg )
-
- if lineNum != -1:
- sio = StringIO( xml )
- for xmlLine in sio:
- lineNum = lineNum - 1
- if lineNum == 0:
- break;
-
- addMsg += '<BR><PRE>' + cgi.escape( xmlLine.rstrip( ) )
-
- if colNum != -1:
- errLine = ''
- for i in range( colNum ):
- errLine = errLine + '-'
-
- addMsg += '\n' + errLine + '^'
-
- addMsg += '</PRE>'
-
- xmlMessages.append( addMsg )
-
-def formatXmlGenError( msg ):
- global xmlMessages, xmlIncomplete
-
- xmlIncomplete = 1
- xmlMessages.append( cgi.escape( msg ) )
-
-def parseXml( xmlInput ):
- global xmlMessages, xmlError, xmlLine, xmlColumn
-
- xmlParser = xml.sax.make_parser( )
- try:
- domDoc = xml.dom.minidom.parseString( xmlInput, xmlParser )
-
- except xml.sax.SAXParseException, xmlErr:
- msg = ''
- msg = msg + 'XML parsing error occurred at line '
- msg = msg + `xmlErr.getLineNumber( )`
- msg = msg + ', column '
- msg = msg + `xmlErr.getColumnNumber( )`
- msg = msg + ': reason = "'
- msg = msg + xmlErr.getMessage( )
- msg = msg + '"'
- formatXmlError( msg, xmlInput, xmlErr.getLineNumber( ),
xmlErr.getColumnNumber( ) )
- return None
-
- except xml.sax.SAXException, xmlErr:
- msg = ''
- msg = msg + 'XML Parsing error: ' + `xmlErr`
- formatXmlError( msg, xmlInput, xmlErr.getLineNumber( ),
xmlErr.getColumnNumber( ) )
- return None
-
- return domDoc
-
-def parsePolicyXml( ):
- global policyXml
- global formSteTypes, formChWallTypes
-
- domDoc = parseXml( policyXml )
- if domDoc == None:
- return
-
- domRoot = domDoc.documentElement
- domNodes = domRoot.getElementsByTagName( 'SimpleTypeEnforcement' )
- if len( domNodes ) > 0:
- steTypes = getSteTypes( domNodes[0], 1 )
- if steTypes == None:
- msg = ''
- msg = msg + 'Error processing the SimpleTypeEnforcement
types.\n'
- msg = msg + 'Please validate the Policy Definition file
used.'
- formatXmlError( msg )
- return
-
- formSteTypes[1] = steTypes
-
- domNodes = domRoot.getElementsByTagName( 'ChineseWall' )
- if len( domNodes ) > 0:
- chwTypes = getChWTypes( domNodes[0], 1 )
- if chwTypes == None:
- msg = ''
- msg = msg + 'Error processing the ChineseWall types.\n'
- msg = msg + 'Please validate the Policy Definition file
used.'
- formatXmlError( msg )
- return
-
- formChWallTypes[1] = chwTypes
-
-def parsePolicyLabelXml( ):
- global policyLabelXml
-
- domDoc = parseXml( policyLabelXml )
- if domDoc == None:
- return
-
- domRoot = domDoc.documentElement
- domHeaders = domRoot.getElementsByTagName( 'LabelHeader' )
- if len( domHeaders ) == 0:
- msg = ''
- msg = msg + '"<LabelHeader>" tag is missing.\n'
- msg = msg + 'Please validate the Policy Labeling file used.'
- formatXmlError( msg )
- return
-
- pName = getName( domHeaders[0] )
- if pName == None:
- msg = ''
- msg = msg + 'Error processing the Policy Labeling header
information.\n'
- msg = msg + 'Please validate the Policy Labeling file used.'
- formatXmlError( msg )
- return
-
- formPolicyLabelName[1] = pName
-
- pDate = getDate( domHeaders[0] )
- if pDate == None:
- msg = ''
- msg = msg + 'Error processing the Policy Labeling header
information.\n'
- msg = msg + 'Please validate the Policy Labeling file used.'
- formatXmlError( msg )
- return
-
- formPolicyLabelDate[1] = pDate
-
- pUrl = getDefUrl( domHeaders[0] )
- if pUrl == None:
- msg = ''
- msg = msg + 'Error processing the Policy Labeling header
information.\n'
- msg = msg + 'Please validate the Policy Labeling file used.'
- formatXmlError( msg )
- return
-
- formPolicyUrl[1] = pUrl
-
- pRef = getDefRef( domHeaders[0] )
- if pRef == None:
- msg = ''
- msg = msg + 'Error processing the Policy Labeling header
information.\n'
- msg = msg + 'Please validate the Policy Labeling file used.'
- formatXmlError( msg )
- return
-
- formPolicyRef[1] = pRef
-
- domSubjects = domRoot.getElementsByTagName( 'SubjectLabels' )
- if len( domSubjects ) > 0:
- formVmNameDom0[1] = domSubjects[0].getAttribute( 'bootstrap' )
- domNodes = domSubjects[0].getElementsByTagName(
'VirtualMachineLabel' )
- for domNode in domNodes:
- vmName = getName( domNode )
- if vmName == None:
- msg = ''
- msg = msg + 'Error processing the
VirtualMachineLabel name.\n'
- msg = msg + 'Please validate the Policy
Labeling file used.'
- formatXmlError( msg )
- continue
-
- steTypes = getSteTypes( domNode )
- if steTypes == None:
- msg = ''
- msg = msg + 'Error processing the
SimpleTypeEnforcement types.\n'
- msg = msg + 'Please validate the Policy
Labeling file used.'
- formatXmlError( msg )
- return
-
- chwTypes = getChWTypes( domNode )
- if chwTypes == None:
- msg = ''
- msg = msg + 'Error processing the ChineseWall
types.\n'
- msg = msg + 'Please validate the Policy
Labeling file used.'
- formatXmlError( msg )
- return
-
- newVm( vmName, 1 )
- allVmStes[vmName][1] = steTypes
- allVmChWs[vmName][1] = chwTypes
-
-def removeDups( curList ):
- newList = []
- curSet = Set( curList )
- for x in curSet:
- newList.append( x )
- newList.sort( )
-
- return newList
-
-def newVm( vmName, addToList = 0 ):
- global formVmNames
- global templateVmDel, allVmDel, templateVmDom0, allVmDom0
- global templateVmChWs, templateVmChWDel, templateVmChW, templateVmChWAdd
- global allVmChWs, allVmChWDel, allVmChWType, allVmChWAdd
- global templateVmStes, templateVmSteDel, templateVmSte, templateVmSteAdd
- global allVmStes, allVmSteDel, allVmSteType, allVmSteAdd
-
- # Make sure we have an actual name and check one of the 'all'
- # variables to be sure it hasn't been previously defined
- if (len( vmName ) > 0) and (not allVmDom0.has_key( vmName )):
- vmSuffix = '_' + vmName
- allVmDom0[vmName] = modFormTemplate( templateVmDom0,
vmSuffix )
- allVmDel[vmName] = modFormTemplate( templateVmDel,
vmSuffix )
- allVmChWs[vmName] = modFormTemplate( templateVmChWs,
vmSuffix )
- allVmChWDel[vmName] = modFormTemplate( templateVmChWDel,
vmSuffix )
- allVmChW[vmName] = modFormTemplate( templateVmChW,
vmSuffix )
- allVmChWAdd[vmName] = modFormTemplate( templateVmChWAdd,
vmSuffix )
- allVmStes[vmName] = modFormTemplate( templateVmStes,
vmSuffix )
- allVmSteDel[vmName] = modFormTemplate( templateVmSteDel,
vmSuffix )
- allVmSte[vmName] = modFormTemplate( templateVmSte,
vmSuffix )
- allVmSteAdd[vmName] = modFormTemplate( templateVmSteAdd,
vmSuffix )
- if addToList == 1:
- formVmNames[1].append( vmName )
- formVmNames[1] = removeDups( formVmNames[1] )
-
-def updateInfo( ):
- global formData, formPolicyLabelName, formPolicyLabelDate
- global formPolicyUrl, formPolicyRef
-
- if formData.has_key( formPolicyLabelName[3] ):
- formPolicyLabelName[1] = formData[formPolicyLabelName[3]].value
- elif formData.has_key( formPolicyLabelUpdate[3] ):
- formPolicyLabelName[1] = ''
-
- if formData.has_key( formPolicyLabelDate[3] ):
- formPolicyLabelDate[1] = formData[formPolicyLabelDate[3]].value
- elif formData.has_key( formPolicyLabelUpdate[3] ):
- formPolicyLabelDate[1] = ''
-
- if formData.has_key( formPolicyUrl[3] ):
- formPolicyUrl[1] = formData[formPolicyUrl[3]].value
- elif formData.has_key( formPolicyLabelUpdate[3] ):
- formPolicyUrl[1] = ''
-
- if formData.has_key( formPolicyRef[3] ):
- formPolicyRef[1] = formData[formPolicyRef[3]].value
- elif formData.has_key( formPolicyLabelUpdate[3] ):
- formPolicyRef[1] = ''
-
-def addVm( ):
- global formData, fromVmName, formVmNames, formVmNameDom0
-
- if (formData.has_key( formDefaultButton[3] )) or (formData.has_key(
formVmAdd[3] )):
- if formData.has_key( formVmName[3] ):
- vmName = formData[formVmName[3]].value
- vmName = vmName.strip( )
- newVm( vmName, 1 )
- if formVmNameDom0[1] == '':
- formVmNameDom0[1] = vmName
-
-def delVm( vmName ):
- global formVmNames, formVmNameDom0
- global allVmDel, allVmDom0
- global allVmChWs, allVmChWDel, allVmChWType, allVmChWAdd
- global allVmStes, allVmSteDel, allVmSteType, allVmSteAdd
-
- vmName = vmName.strip( )
- formVmNames[1].remove( vmName )
- del allVmDom0[vmName]
- del allVmDel[vmName]
- del allVmChWs[vmName]
- del allVmChWDel[vmName]
- del allVmChW[vmName]
- del allVmChWAdd[vmName]
- del allVmStes[vmName]
- del allVmSteDel[vmName]
- del allVmSte[vmName]
- del allVmSteAdd[vmName]
-
- if formVmNameDom0[1] == vmName:
- if len( formVmNames[1] ) > 0:
- formVmNameDom0[1] = formVmNames[1][0]
- else:
- formVmNameDom0[1] = ''
-
-def makeVmDom0( vmName ):
- global formVmNameDom0
-
- vmName = vmName.strip( )
- formVmNameDom0[1] = vmName
-
-def addVmChW( chwName ):
- global formData, allVmChW, allVmChWs
-
- formVar = allVmChW[chwName]
- if formData.has_key( formVar[3] ):
- chwList = formData.getlist( formVar[3] )
- formVar = allVmChWs[chwName]
- for chw in chwList:
- chw = chw.strip( )
- formVar[1].append( chw )
- formVar[1] = removeDups( formVar[1] )
-
-def delVmChW( chwName ):
- global formData, allVmChWs
-
- formVar = allVmChWs[chwName]
- if formData.has_key( formVar[3] ):
- chwList = formData.getlist( formVar[3] )
- for chw in chwList:
- chw = chw.strip( )
- formVar[1].remove( chw )
-
-def addVmSte( steName ):
- global formData, allVmSte, allVmStes
-
- formVar = allVmSte[steName]
- if formData.has_key( formVar[3] ):
- steList = formData.getlist( formVar[3] )
- formVar = allVmStes[steName]
- for ste in steList:
- ste = ste.strip( )
- formVar[1].append( ste )
- formVar[1] = removeDups( formVar[1] )
-
-def delVmSte( steName ):
- global formData, allVmStes
-
- formVar = allVmStes[steName]
- if formData.has_key( formVar[3] ):
- steList = formData.getlist( formVar[3] )
- for ste in steList:
- ste = ste.strip( )
- formVar[1].remove( ste )
-
-def processRequest( ):
- global formData, policyXml, policyLabelXml, formPolicyLabelUpdate
- global formVmAdd
- global formVmNames, allVmDel, allVmDom0
- global allVmChWAdd, allVmChWDel, allVmSteAdd, allVmSteDel
-
- if policyXml != '':
- parsePolicyXml( )
-
- if policyLabelXml != '':
- parsePolicyLabelXml( )
-
- # Allow the updating of the header information whenever
- # an action is performed
- updateInfo( )
-
- # Allow the adding of labels if the user has hit the
- # enter key when attempting to add a type/set
- addVm( )
-
- for vmName in formVmNames[1]:
- if formData.has_key( allVmDel[vmName][3] ):
- delVm( vmName )
- continue
-
- if formData.has_key( allVmDom0[vmName][3] ):
- makeVmDom0( vmName )
-
- if formData.has_key( allVmChWAdd[vmName][3] ):
- addVmChW( vmName )
-
- elif formData.has_key( allVmChWDel[vmName][3] ):
- delVmChW( vmName )
-
- elif formData.has_key( allVmSteAdd[vmName][3] ):
- addVmSte( vmName )
-
- elif formData.has_key( allVmSteDel[vmName][3] ):
- delVmSte( vmName )
-
-def modFormTemplate( formTemplate, suffix ):
- formVar = [x for x in formTemplate]
-
- if formVar[2] != '':
- formVar[2] = formVar[2] + suffix
- if formVar[3] != '':
- formVar[3] = formVar[3] + suffix
- if (formVar[0] != 'button') and (formVar[4] != ''):
- formVar[4] = formVar[4] + suffix
-
- return formVar;
-
-def makeName( name, suffix='' ):
- rName = name
- if suffix != '':
- rName = rName + '_' + suffix
-
- return rName
-
-def makeNameAttr( name, suffix='' ):
- return 'name="' + makeName( name, suffix ) + '"'
-
-def makeValue( value, suffix='' ):
- rValue = value
-
- if isinstance( value, list ):
- rValue = '['
- for val in value:
- rValue = rValue + '\'' + val
- if suffix != '':
- rValue = rValue + '_' + suffix
- rValue = rValue + '\','
- rValue = rValue + ']'
-
- else:
- if suffix != '':
- rValue = rValue + '_' + suffix
-
- return rValue
-
-def makeValueAttr( value, suffix='' ):
- return 'value="' + makeValue( value, suffix ) + '"'
-
-def sendHtmlFormVar( formVar, attrs='', rb_select=0 ):
- nameAttr = ''
- valueAttr = ''
- htmlText = ''
-
- if formVar[0] == 'text':
- if formVar[3] != '':
- nameAttr = makeNameAttr( formVar[3] )
- valueAttr = makeValueAttr( formVar[1] )
-
- print '<INPUT type="text"', nameAttr, valueAttr, attrs, '>'
-
- elif formVar[0] == 'list':
- if formVar[3] != '':
- nameAttr = makeNameAttr( formVar[3] )
-
- print '<SELECT', nameAttr, attrs, '>'
- for option in formVar[1]:
- print '<OPTION>' + option + '</OPTION>'
- print '</SELECT>'
-
- elif formVar[0] == 'button':
- if formVar[3] != '':
- nameAttr = makeNameAttr( formVar[3] )
- if formVar[4] != '':
- valueAttr = makeValueAttr( formVar[4] )
-
- print '<INPUT type="submit"', nameAttr, valueAttr, attrs, '>'
-
- elif formVar[0] == 'radiobutton':
- if formVar[3] != '':
- nameAttr = makeNameAttr( formVar[3] )
- valueAttr = makeValueAttr( formVar[4][rb_select] )
- htmlText = formVar[5][rb_select]
- if formVar[4][rb_select] == formVar[1]:
- checked = 'checked'
- else:
- checked = ''
-
- print '<INPUT type="radio"', nameAttr, valueAttr,
attrs, checked, '>', htmlText
-
- elif formVar[0] == 'radiobutton-all':
- if formVar[3] != '':
- nameAttr = makeNameAttr( formVar[3] )
- buttonVals = formVar[4]
- for i, buttonVal in enumerate( buttonVals ):
- htmlText = ''
- addAttrs = ''
- checked = ''
-
- valueAttr = makeValueAttr( buttonVal )
- if formVar[5] != '':
- htmlText = formVar[5][i]
- if attrs != '':
- addAttrs = attrs[i]
- if buttonVal == formVar[1]:
- checked = 'checked'
-
- print '<INPUT type="radio"', nameAttr,
valueAttr, addAttrs, checked, '>', htmlText
-
- if ( formVar[2] != '' ) and ( rb_select == 0 ):
- nameAttr = makeNameAttr( formVar[2] )
- valueAttr = makeValueAttr( formVar[1] )
- print '<INPUT type="hidden"', nameAttr, valueAttr, '>'
-
-def sendHtmlHeaders( ):
- # HTML headers
- print 'Content-Type: text/html'
- print
-
-def sendPolicyLabelHtml( ):
- global xmlError, xmlIncomplete, xmlMessages, formXmlGen
- global formVmNameDom0, formSteTypes, formChWallTypes
-
- print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"'
- print ' "http://www.w3.org/TR/html4/loose.dtd">'
-
- print '<HTML>'
-
- sendHtmlHead( )
-
- print '<BODY>'
-
- # An input XML file was specified that had errors, output the
- # error information
- if xmlError == 1:
- print '<P>'
- print 'An error has been encountered while processing the input'
- print 'XML file:'
- print '<UL>'
- for msg in xmlMessages:
- print '<LI>'
- print msg
- print '</UL>'
- print '</BODY>'
- print '</HTML>'
- return
-
- # When attempting to generate the XML output, all required data was not
- # present, output the error information
- if xmlIncomplete == 1:
- print '<P>'
- print 'An error has been encountered while validating the data'
- print 'required for the output XML file:'
- print '<UL>'
- for msg in xmlMessages:
- print '<LI>'
- print msg
- print '</UL>'
- print '</BODY>'
- print '</HTML>'
- return
-
- print '<CENTER>'
- print '<FORM action="' + os.environ['SCRIPT_NAME'] + '" method="post">'
- print '<TABLE class="container">'
- print ' <COLGROUP>'
- print ' <COL width="100%">'
- print ' </COLGROUP>'
-
- print ' <TR>'
- print ' <TD>'
- sendHtmlFormVar( formDefaultButton, 'class="hidden"' )
- print ' </TD>'
- print ' </TR>'
- print ' <TR>'
- print ' <TD>'
- sendHtmlFormVar( formXmlGen )
- print ' </TD>'
- print ' </TR>'
-
- # Policy Labeling header
- print ' <TR>'
- print ' <TD>'
- sendPLHeaderHtml( )
- print ' </TD>'
- print ' </TR>'
-
- # Separator
- print ' <TR>'
- print ' <TD>'
- print ' <HR>'
- print ' </TD>'
- print ' </TR>'
-
- # Policy Labels (vms)
- print ' <TR>'
- print ' <TD>'
- print ' <TABLE class="full">'
- print ' <TR>'
- print ' <TD width="100%">'
- sendPLSubHtml( )
- print ' </TD>'
- print ' </TR>'
- print ' </TABLE>'
- print ' </TD>'
- print ' </TR>'
-
- print '</TABLE>'
-
- # Send some data that needs to be available across sessions
- sendHtmlFormVar( formVmNameDom0 )
- sendHtmlFormVar( formSteTypes )
- sendHtmlFormVar( formChWallTypes )
-
- print '</FORM>'
- print '</CENTER>'
-
- print '</BODY>'
-
- print '</HTML>'
-
-def sendHtmlHead( ):
- global headTitle
-
- print '<HEAD>'
- print '<STYLE type="text/css">'
- print '<!--'
- print 'BODY {background-color: #EEEEFF;}'
- print 'TABLE.container {width: 90%; border: 1px solid black;
border-collapse: seperate;}'
- print 'TABLE.full {width: 100%; border: 0px solid black;
border-collapse: collapse; border-spacing: 3px;}'
- print 'TABLE.fullbox {width: 100%; border: 0px solid black;
border-collapse: collapse; border-spacing: 3px;}'
- print 'THEAD {font-weight: bold; font-size: larger;}'
- print 'TD {border: 0px solid black; vertical-align: top;}'
- print 'TD.heading {border: 0px solid black; vertical-align: top;
font-weight: bold; font-size: larger;}'
- print 'TD.subheading {border: 0px solid black; vertical-align: top;
font-size: smaller;}'
- print 'TD.fullbox {border: 1px solid black; vertical-align: top;}'
- print 'SELECT.full {width: 100%;}'
- print 'INPUT.full {width: 100%;}'
- print 'INPUT.link {cursor: pointer; background-color: #EEEEFF;
border: 0px; text-decoration: underline; color: blue;}'
- print 'INPUT.hidden {visibility: hidden; width: 1px; height: 1px;}'
- print ':link {color: blue;}'
- print ':visited {color: red;}'
- print '-->'
- print '</STYLE>'
- print '<TITLE>', headTitle, '</TITLE>'
- print '</HEAD>'
-
-def sendPLHeaderHtml( ):
- global formPolicyLabelName, formPolicyLabelDate
- global formPolicyUrl, formPolicyRef
- global formPolicyLabelUpdate
-
- # Policy Labeling header definition
- print '<TABLE class="full">'
- print ' <COLGROUP>'
- print ' <COL width="20%">'
- print ' <COL width="80%">'
- print ' </COLGROUP>'
- print ' <TR>'
- print ' <TD class="heading" align="center" colspan="2">Policy
Labeling Information</TD>'
- print ' </TR>'
- print ' <TR>'
- print ' <TD align="right">Name:</TD>'
- print ' <TD align="left">'
- sendHtmlFormVar( formPolicyLabelName, 'class="full"' )
- print ' </TD>'
- print ' </TR>'
- print ' <TR>'
- print ' <TD align="right">Date:</TD>'
- print ' <TD align="left">'
- sendHtmlFormVar( formPolicyLabelDate, 'class="full"' )
- print ' </TD>'
- print ' </TR>'
- print ' <TR>'
- print ' <TD align="right">Policy URL:</TD>'
- print ' <TD align="left">'
- sendHtmlFormVar( formPolicyUrl, 'class="full"' )
- print ' </TD>'
- print ' </TR>'
- print ' <TR>'
- print ' <TD align="right">Policy Reference:</TD>'
- print ' <TD align="left">'
- sendHtmlFormVar( formPolicyRef, 'class="full"' )
- print ' </TD>'
- print ' </TR>'
- print ' <TR>'
- print ' <TD align="center" colspan="2">'
- sendHtmlFormVar( formPolicyLabelUpdate )
- print ' </TD>'
- print ' </TR>'
- print ' <TR>'
- print ' <TD align="center" colspan="2" class="subheading">'
- print ' (The Policy Labeling Information is updated whenever an
action is performed'
- print ' or it can be updated separately using the "Update"
button)'
- print ' </TD>'
- print ' </TR>'
- print '</TABLE>'
-
-def sendPLSubHtml( ):
- global formVmNames, formVmDel, formVmName, formVmAdd
- global allVmDel, allVmDom0
- global allVmChWs, allVmChWDel, allVmChW, allVmChWAdd
- global allVmStes, allVmSteDel, allVmSte, allVmSteAdd
- global formSteTypes, formChWallTypes
-
- print '<TABLE class="full">'
- print ' <COLGROUP>'
- print ' <COL width="100%">'
- print ' </COLGROUP>'
-
- # Virtual Machines...
- print ' <TR>'
- print ' <TD>'
- print ' <TABLE class="full">'
- print ' <COLGROUP>'
- print ' <COL width="10%">'
- print ' <COL width="40%">'
- print ' <COL width="50%">'
- print ' </COLGROUP>'
- print ' <TR>'
- print ' <TD class="heading" align="center" colspan="3">Virtual
Machine Classes</TD>'
- print ' </TR>'
- print ' <TR>'
- print ' <TD colspan="2">'
- sendHtmlFormVar( formVmName, 'class="full"' )
- sendHtmlFormVar( formVmNames )
- print ' </TD>'
- print ' <TD> </TD>'
- print ' </TR>'
- print ' <TR>'
- print ' <TD>'
- sendHtmlFormVar( formVmAdd, 'class="full"' )
- print ' </TD>'
- print ' <TD colspan="2">'
- print ' Create a new VM class with the above name'
- print ' </TD>'
- print ' </TR>'
- print ' </TABLE>'
- print ' </TD>'
- print ' </TR>'
- if len( formVmNames[1] ) > 0:
- print ' <TR>'
- print ' <TD colspan="1">'
- print ' '
- print ' </TD>'
- print ' </TR>'
- print ' <TR>'
- print ' <TD>'
- print ' <TABLE class="fullbox">'
- print ' <COLGROUP>'
- print ' <COL width="10%">'
- print ' <COL width="40%">'
- print ' <COL width="50%">'
- print ' </COLGROUP>'
- print ' <THEAD>'
- print ' <TR>'
- print ' <TD class="fullbox">Dom 0?</TD>'
- print ' <TD class="fullbox">Name</TD>'
- print ' <TD class="fullbox">Actions</TD>'
- print ' </TR>'
- print ' </THEAD>'
- for i, vmName in enumerate( formVmNames[1] ):
- print ' <TR>'
- print ' <TD class="fullbox">'
- if formVmNameDom0[1] == vmName:
- print 'Yes'
- else:
- print ' '
- print ' </TD>'
- print ' <TD class="fullbox">' + vmName +
'</TD>'
- print ' <TD class="fullbox">'
- print ' <A href="#' + vmName + '">Edit</A>'
- formVar = allVmDel[vmName]
- sendHtmlFormVar( formVar, 'class="link"' )
- formVar = allVmDom0[vmName]
- sendHtmlFormVar( formVar, 'class="link"' )
- print ' </TD>'
- print ' </TR>'
- print ' </TABLE>'
- print ' </TD>'
- print ' </TR>'
- for vmName in formVmNames[1]:
- print ' <TR>'
- print ' <TD>'
- print ' <HR>'
- print ' </TD>'
- print ' </TR>'
- print ' <TR>'
- print ' <TD>'
- print ' <TABLE class="full">'
- print ' <COLGROUP>'
- print ' <COL width="10%">'
- print ' <COL width="39%">'
- print ' <COL width="2%">'
- print ' <COL width="10%">'
- print ' <COL width="39%">'
- print ' </COLGROUP>'
- print ' <TR>'
- print ' <TD colspan="5" align="center"
class="heading">'
- print ' <A name="' + vmName + '">Virtual
Machine Class: ' + vmName + '</A>'
- print ' </TD>'
- print ' </TR>'
- print ' <TR>'
- print ' <TD colspan="2" align="center">Simple
Type Enforcement Types</TD>'
- print ' <TD> </TD>'
- print ' <TD colspan="2" align="center">Chinese
Wall Types</TD>'
- print ' </TR>'
- print ' <TR>'
- print ' <TD colspan="2">'
- formVar = allVmStes[vmName];
- sendHtmlFormVar( formVar, 'class="full" size="4"
multiple"' )
- print ' </TD>'
- print ' <TD> </TD>'
- print ' <TD colspan="2">'
- formVar = allVmChWs[vmName];
- sendHtmlFormVar( formVar, 'class="full" size="4"
multiple"' )
- print ' </TD>'
- print ' </TR>'
- print ' <TR>'
- print ' <TD>'
- formVar = allVmSteDel[vmName];
- sendHtmlFormVar( formVar, 'class="full"' )
- print ' </TD>'
- print ' <TD>'
- print ' Delete the type(s) selected above'
- print ' </TD>'
- print ' <TD> </TD>'
- print ' <TD>'
- formVar = allVmChWDel[vmName];
- sendHtmlFormVar( formVar, 'class="full"' )
- print ' </TD>'
- print ' <TD>'
- print ' Delete the type(s) selected above'
- print ' </TD>'
- print ' </TR>'
- print ' <TR>'
- print ' <TD colspan="2">'
- stSet = Set( formSteTypes[1] )
- vmSet = Set( allVmStes[vmName][1] )
- formVar = allVmSte[vmName]
- formVar[1] = []
- for steType in stSet.difference( vmSet ):
- formVar[1].append( steType )
- formVar[1].sort( )
- sendHtmlFormVar( formVar, 'class="full" size="2"
multiple"' )
- print ' </TD>'
- print ' <TD> </TD>'
- print ' <TD colspan="2">'
- ctSet = Set( formChWallTypes[1] )
- vmSet = Set( allVmChWs[vmName][1] )
- formVar = allVmChW[vmName]
- formVar[1] = []
- for chwallType in ctSet.difference( vmSet ):
- formVar[1].append( chwallType )
- formVar[1].sort( )
- sendHtmlFormVar( formVar, 'class="full" size="2"
multiple"' )
- print ' </TD>'
- print ' </TR>'
- print ' <TR>'
- print ' <TD>'
- formVar = allVmSteAdd[vmName];
- sendHtmlFormVar( formVar, 'class="full"' )
- print ' </TD>'
- print ' <TD>'
- print ' Add the type(s) selected above'
- print ' </TD>'
- print ' <TD> </TD>'
- print ' <TD>'
- formVar = allVmChWAdd[vmName];
- sendHtmlFormVar( formVar, 'class="full"' )
- print ' </TD>'
- print ' <TD>'
- print ' Add the type(s) selected above'
- print ' </TD>'
- print ' </TR>'
- print ' </TABLE>'
- print ' </TD>'
- print ' </TR>'
-
- print '</TABLE>'
-
-def sendPLObjHtml( ):
-
- # Resources...
- print '<TABLE class="full">'
- print ' <COLGROUP>'
- print ' <COL width="60%">'
- print ' <COL width="20%">'
- print ' <COL width="20%">'
- print ' </COLGROUP>'
-
- print ' <TR>'
- print ' <TD align="center" colspan="3"
class="heading">Resources</TD>'
- print ' </TR>'
- print ' <TR>'
- print ' <TD colspan="2">'
- #sendHtmlFormVar( formVmNames, 'class="full" size="4" multiple"' )
- print ' </TD>'
- print ' <TD>'
- #sendHtmlFormVar( formVmDel, 'class="full"' )
- print ' </TD>'
- print ' </TR>'
- print ' <TR>'
- print ' <TD colspan="2">'
- #sendHtmlFormVar( formVmName, 'class="full"' )
- print ' </TD>'
- print ' <TD>'
- #sendHtmlFormVar( formVmAdd, 'class="full"' )
- print ' </TD>'
- print ' </TR>'
- print '</TABLE>'
-
-def checkXmlData( ):
- global xmlIncomplete
-
- # Validate the Policy Label Header requirements
- if ( len( formPolicyLabelName[1] ) == 0 ) or \
- ( len( formPolicyLabelDate[1] ) == 0 ) or \
- ( len( formPolicyUrl[1] ) == 0 ) or \
- ( len( formPolicyRef[1] ) == 0 ):
- msg = ''
- msg = msg + 'The XML policy label schema requires that
the Policy '
- msg = msg + 'Labeling Information Name, Date, Policy
URL and '
- msg = msg + 'Policy Reference fields all have values.'
- formatXmlGenError( msg )
-
-def sendXmlHeaders( ):
- # HTML headers
- print 'Content-Type: text/xml'
- print 'Content-Disposition: attachment;
filename=security_label_template.xml'
- print
-
-def sendPolicyLabelXml( ):
- print '<?xml version="1.0"?>'
-
- print '<SecurityLabelTemplate xmlns="http://www.ibm.com"'
- print '
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'
- print ' xsi:schemaLocation="http://www.ibm.com
security_policy.xsd">'
-
- # Policy Labeling header
- sendPLHeaderXml( )
-
- # Policy Labels (subjects and objects)
- sendPLSubXml( )
- #sendPLObjXml( )
-
- print '</SecurityLabelTemplate>'
-
-def sendPLHeaderXml( ):
- global formPolicyLabelName, formPolicyLabelDate
- global formPolicyUrl, formPolicyRef
-
- # Policy Labeling header definition
- print '<LabelHeader>'
- print ' <Name>' + formPolicyLabelName[1] + '</Name>'
- print ' <Date>' + formPolicyLabelDate[1] + '</Date>'
- print ' <PolicyName>'
- print ' <Url>' + formPolicyUrl[1] + '</Url>'
- print ' <Reference>' + formPolicyRef[1] + '</Reference>'
- print ' </PolicyName>'
- print '</LabelHeader>'
-
-def sendPLSubXml( ):
- global formVmNames, allVmChWs, allVmStes
-
- # Virtual machines...
- if len( formVmNames[1] ) == 0:
- return
-
- print '<SubjectLabels bootstrap="' + formVmNameDom0[1] + '">'
- for vmName in formVmNames[1]:
- print ' <VirtualMachineLabel>'
- print ' <Name>' + vmName + '</Name>'
- formVar = allVmStes[vmName]
- if len( formVar[1] ) > 0:
- print ' <SimpleTypeEnforcementTypes>'
- for ste in formVar[1]:
- print ' <Type>' + ste + '</Type>'
- print ' </SimpleTypeEnforcementTypes>'
-
- formVar = allVmChWs[vmName]
- if len( formVar[1] ) > 0:
- print ' <ChineseWallTypes>'
- for chw in formVar[1]:
- print ' <Type>' + chw + '</Type>'
- print ' </ChineseWallTypes>'
-
- print ' </VirtualMachineLabel>'
-
- print '</SubjectLabels>'
-
-
-# Set up initial HTML variables
-headTitle = 'Xen Policy Labeling Generation'
-
-# Form variables
-# The format of these variables is as follows:
-# [ p0, p1, p2, p3, p4, p5 ]
-# p0 = input type
-# p1 = the current value of the variable
-# p2 = the hidden input name attribute
-# p3 = the name attribute
-# p4 = the value attribute
-# p5 = text to associate with the tag
-formPolicyLabelName = [ 'text',
- '',
- 'h_policyLabelName',
- 'i_policyLabelName',
- '',
- '',
- ]
-formPolicyLabelDate = [ 'text',
- getCurrentTime( ),
- 'h_policyLabelDate',
- 'i_policyLabelDate',
- '',
- '',
- ]
-formPolicyUrl = [ 'text',
- '',
- 'h_policyUrl',
- 'i_policyUrl',
- '',
- '',
- ]
-formPolicyRef = [ 'text',
- '',
- 'h_policyRef',
- 'i_policyRef',
- '',
- '',
- ]
-formPolicyLabelUpdate = [ 'button',
- '',
- '',
- 'i_PolicyLabelUpdate',
- 'Update',
- '',
- ]
-
-formVmNames = [ '',
- [],
- 'h_vmNames',
- '',
- '',
- '',
- ]
-formVmDel = [ 'button',
- '',
- '',
- 'i_vmDel',
- 'Delete',
- '',
- ]
-formVmName = [ 'text',
- '',
- '',
- 'i_vmName',
- '',
- '',
- ]
-formVmAdd = [ 'button',
- '',
- '',
- 'i_vmAdd',
- 'New',
- '',
- ]
-
-formVmNameDom0 = [ '',
- '',
- 'h_vmDom0',
- '',
- '',
- '',
- ]
-
-formXmlGen = [ 'button',
- '',
- '',
- 'i_xmlGen',
- 'Generate XML',
- '',
- ]
-
-formDefaultButton = [ 'button',
- '',
- '',
- 'i_defaultButton',
- '.',
- '',
- ]
-
-formSteTypes = [ '',
- [],
- 'h_steTypes',
- '',
- '',
- '',
- ]
-formChWallTypes = [ '',
- [],
- 'h_chwallTypes',
- '',
- '',
- '',
- ]
-
-# This is a set of templates used for each virtual machine
-# Each virtual machine is initially assigned these templates,
-# then each form attribute value is changed to append
-# "_virtual-machine-name" for uniqueness.
-templateVmDel = [ 'button',
- '',
- '',
- 'i_vmDel',
- 'Delete',
- '',
- ]
-templateVmDom0 = [ 'button',
- '',
- '',
- 'i_vmDom0',
- 'SetDom0',
- '',
- ]
-allVmDel = {};
-allVmDom0 = {};
-
-templateVmChWs = [ 'list',
- [],
- 'h_vmChWs',
- 'i_vmChWs',
- '',
- '',
- ]
-templateVmChWDel = [ 'button',
- '',
- '',
- 'i_vmChWDel',
- 'Delete',
- '',
- ]
-templateVmChW = [ 'list',
- [],
- '',
- 'i_vmChW',
- '',
- '',
- ]
-templateVmChWAdd = [ 'button',
- '',
- '',
- 'i_vmChWAdd',
- 'Add',
- '',
- ]
-allVmChWs = {};
-allVmChWDel = {};
-allVmChW = {};
-allVmChWAdd = {};
-
-templateVmStes = [ 'list',
- [],
- 'h_vmStes',
- 'i_vmStes',
- '',
- '',
- ]
-templateVmSteDel = [ 'button',
- '',
- '',
- 'i_vmSteDel',
- 'Delete',
- '',
- ]
-templateVmSte = [ 'list',
- [],
- '',
- 'i_vmSte',
- '',
- '',
- ]
-templateVmSteAdd = [ 'button',
- '',
- '',
- 'i_vmSteAdd',
- 'Add',
- '',
- ]
-allVmStes = {};
-allVmSteDel = {};
-allVmSte = {};
-allVmSteAdd = {};
-
-# A list of all form variables used for saving info across requests
-formVariables = [ formPolicyLabelName,
- formPolicyLabelDate,
- formPolicyUrl,
- formPolicyRef,
- formVmNames,
- formVmNameDom0,
- formSteTypes,
- formChWallTypes,
- ]
-
-policyXml = ''
-policyLabelXml = ''
-xmlError = 0
-xmlIncomplete = 0
-xmlMessages = []
-
-
-# Extract any form data
-formData = cgi.FieldStorage( )
-
-# Process the form
-getSavedData( )
-processRequest( )
-
-if formData.has_key( formXmlGen[3] ):
- # Generate and send the XML file
- checkXmlData( )
-
- if xmlIncomplete == 0:
- sendXmlHeaders( )
- sendPolicyLabelXml( )
-
-if (not formData.has_key( formXmlGen[3] )) or (xmlIncomplete == 1 ):
- # Send HTML to continue processing the form
- sendHtmlHeaders( )
- sendPolicyLabelHtml( )
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|