#!/usr/bin/python # # The Initial Developer of the Original Code is International # Business Machines Corporation. Portions created by IBM # 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 # 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 global formVariables, formCSNames, formVmNames, formResNames global allCSMTypes, allVmChWs, allVmStes, allResStes # Process the XML upload policy file if formData.has_key( 'i_policy' ): dataList = formData.getlist( 'i_policy' ) if len( dataList ) > 0: policyXml = dataList[0] # 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 "Conflict Sets" # so update the list of form variables to include # each conflict set (hidden input variable) for csName in formCSNames[1]: newCS( csName ) if formData.has_key( allCSMTypes[csName][2] ): dataList = formData.getlist( allCSMTypes[csName][2] ) 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( ) ) def getName( domNode ): nameNodes = domNode.getElementsByTagName( 'Name' ) if len( nameNodes ) == 0: formatXmlError( '"" 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 getPolicyName( domNode ): nameNodes = domNode.getElementsByTagName( 'PolicyName' ) if len( nameNodes ) == 0: formatXmlError( '"" 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: return '' date = '' for childNode in dateNodes[0].childNodes: if childNode.nodeType == xml.dom.Node.TEXT_NODE: 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' ) if len( steNodes ) == 0: if missingIsError == 1: formatXmlError( '"" 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( '"" tag is missing' ) return None else: return [] return getTypes( chwNodes[0] ) def getTypes( domNode ): types = [] domNodes = domNode.getElementsByTagName( 'Type' ) if len( domNodes ) == 0: formatXmlError( '"" 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 "" 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 += '
' + cgi.escape( xmlLine.rstrip( ) )

		if colNum != -1:
			errLine = ''
			for i in range( colNum ):
				errLine = errLine + '-'

			addMsg += '\n' + errLine + '^'

		addMsg += '
' xmlMessages.append( addMsg ) def formatXmlGenError( msg ): global xmlMessages, xmlIncomplete xmlIncomplete = 1 xmlMessages.append( cgi.escape( msg ) ) def parseXml( xmlInput ): 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 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: msg = '' msg = msg + '"" tag is missing.\n' msg = msg + 'Please validate the Policy file used.' formatXmlError( msg ) return pName = getPolicyName( domHeaders[0] ) if pName == None: msg = '' msg = msg + 'Error processing the Policy header information.\n' msg = msg + 'Please validate the Policy file used.' formatXmlError( msg ) return 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: if domStes[0].hasAttribute( 'priority' ): if domStes[0].getAttribute( 'priority' ) != 'PrimaryPolicyComponent': msg = '' msg = msg + 'Error processing the "" tag.\n' msg = msg + 'The "priority" attribute value is not valid.\n' msg = msg + 'Please validate the Policy file used.' formatXmlError( msg ) return pOrder = 'v_Ste' steTypes = getSteTypes( domStes[0], 1 ) if steTypes == None: msg = '' msg = msg + 'Error processing the SimpleTypeEnforcement types.\n' msg = msg + 'Please validate the Policy file used.' formatXmlError( msg ) return formSteTypes[1] = steTypes # Process the ChineseWalls and Conflict Sets domChWalls = domRoot.getElementsByTagName( 'ChineseWall' ) if len( domChWalls ) > 0: if domChWalls[0].hasAttribute( 'priority' ): if domChWalls[0].getAttribute( 'priority' ) != 'PrimaryPolicyComponent': msg = '' msg = msg + 'Error processing the "" tag.\n' msg = msg + 'The "priority" attribute value is not valid.\n' msg = msg + 'Please validate the Policy file used.' formatXmlError( msg ) return if pOrder != '': msg = '' msg = msg + 'Error processing the "" tag.\n' msg = msg + 'The "priority" attribute has been previously specified.\n' msg = msg + 'Please validate the Policy file used.' formatXmlError( msg ) return pOrder = 'v_ChWall' chwTypes = getChWTypes( domChWalls[0], 1 ) if chwTypes == None: msg = '' msg = msg + 'Error processing the ChineseWall types.\n' msg = msg + 'Please validate the Policy file used.' formatXmlError( msg ) return formChWallTypes[1] = chwTypes csNodes = domChWalls[0].getElementsByTagName( 'ConflictSets' ) if csNodes and (len( csNodes ) > 0): cNodes = csNodes[0].getElementsByTagName( 'Conflict' ) if not cNodes or len( cNodes ) == 0: msg = '' msg = msg + 'Required "" 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: 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 else: if (len( domStes ) > 0) or (len( domChWalls ) > 0): msg = '' msg = msg + 'The "priority" attribute has not been specified.\n' msg = msg + 'It must be specified on one of the access control types.\n' 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 + ' 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] 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 removeDups( curList ): newList = [] curSet = Set( curList ) for x in curSet: newList.append( x ) newList.sort( ) return newList def newCS( csName, addToList = 0 ): global formCSNames global templateCSDel, allCSDel global templateCSMTypes, templateCSMDel, templateCSMType, templateCSMAdd global allCSMTypes, allCSMDel, allCSMType, allCSMAdd csSuffix = '_' + csName # 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( csName ) > 0) and (not allCSMTypes.has_key( csName )): allCSDel[csName] = modFormTemplate( templateCSDel, csSuffix ) allCSMTypes[csName] = modFormTemplate( templateCSMTypes, csSuffix ) allCSMDel[csName] = modFormTemplate( templateCSMDel, csSuffix ) allCSMType[csName] = modFormTemplate( templateCSMType, csSuffix ) allCSMAdd[csName] = modFormTemplate( templateCSMAdd, csSuffix ) if addToList == 1: 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, 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 def addSteType( ): global formData, formSteType, formSteTypes if (formData.has_key( formDefaultButton[3] )) or (formData.has_key( formSteAdd[3] )): if formData.has_key( formSteType[3] ): type = formData[formSteType[3]].value type = type.strip( ) if len( type ) > 0: formSteTypes[1].append( type ) formSteTypes[1] = removeDups( formSteTypes[1] ) def delSteType( ): global formData, formSteTypes if formData.has_key( formSteTypes[3] ): typeList = formData.getlist( formSteTypes[3] ) for type in typeList: type = type.strip( ) formSteTypes[1].remove( type ) def addChWallType( ): global formData, formChWallType, formChWallTypes if (formData.has_key( formDefaultButton[3] )) or (formData.has_key( formChWallAdd[3] )): if formData.has_key( formChWallType[3] ): type = formData[formChWallType[3]].value type = type.strip( ) if len( type ) > 0: formChWallTypes[1].append( type ) formChWallTypes[1] = removeDups( formChWallTypes[1] ) def delChWallType( ): global formData, formChWallTypes if formData.has_key( formChWallTypes[3] ): typeList = formData.getlist( formChWallTypes[3] ) for type in typeList: type = type.strip( ) formChWallTypes[1].remove( type ) def addCS( ): global formData, formCSNames if (formData.has_key( formDefaultButton[3] )) or (formData.has_key( formCSAdd[3] )): if formData.has_key( formCSName[3] ): csName = formData[formCSName[3]].value csName = csName.strip( ) newCS( csName, 1 ) def delCS( csName ): global formData, formCSNames, allCSDel global allCSMTypes, allCSMDel, allCSMType, allCSMAdd csName = csName.strip( ) formCSNames[1].remove( csName ) del allCSDel[csName] del allCSMTypes[csName] del allCSMDel[csName] del allCSMType[csName] del allCSMAdd[csName] def addCSMember( csName ): global formData, allCSMType, allCSMTypes formVar = allCSMType[csName] if formData.has_key( formVar[3] ): csmList = formData.getlist( formVar[3] ) formVar = allCSMTypes[csName] for csm in csmList: csm = csm.strip( ) formVar[1].append( csm ) formVar[1] = removeDups( formVar[1] ) def delCSMember( csName ): global formData, allCSMTypes formVar = allCSMTypes[csName] if formData.has_key( formVar[3] ): csmList = formData.getlist( formVar[3] ) for csm in csmList: 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 global formSteAdd, formSteDel 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( ) # Allow the updating of the header information whenever # an action is performed updateInfo( ) # 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( ) elif formData.has_key( formChWallDel[3] ): delChWallType( ) else: for csName in formCSNames[1]: if formData.has_key( allCSDel[csName][3] ): delCS( csName ) continue if formData.has_key( allCSMAdd[csName][3] ): addCSMember( csName ) 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 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 '' elif formVar[0] == 'list': if formVar[3] != '': nameAttr = makeNameAttr( formVar[3] ) print '' for option in formVar[1]: print '' print '' elif formVar[0] == 'button': if formVar[3] != '': nameAttr = makeNameAttr( formVar[3] ) if formVar[4] != '': valueAttr = makeValueAttr( formVar[4] ) print '' 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 '', htmlText elif formVar[0] == 'radiobutton-all': if formVar[3] != '': nameAttr = makeNameAttr( formVar[3] ) buttonVals = formVar[4] buttonTexts = formVar[5] 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 '', htmlText, '
' if ( formVar[2] != '' ) and ( rb_select == 0 ): nameAttr = makeNameAttr( formVar[2] ) valueAttr = makeValueAttr( formVar[1] ) print '' def sendHtmlHeaders( ): # HTML headers print 'Content-Type: text/html' print def sendPolicyHtml( ): global xmlError, xmlIncomplete, xmlMessages global formDefaultButton, formXmlGen global formVmNameDom0 print '' print '' sendHtmlHead( ) print '' # An input XML file was specified that had errors, output the # error information if xmlError == 1: print '

' print 'An error has been encountered while processing the input ' print 'XML file:' print '

    ' for msg in xmlMessages: print '
  • ' print msg print '
' print '' print '' return # When attempting to generate the XML output, all required data was not # present, output the error information if xmlIncomplete == 1: print '

' print 'An error has been encountered while validating the data' print 'required for the output XML file:' print '

    ' for msg in xmlMessages: print '
  • ' print msg print '
' print '' print '' return print '
' print '
' print '' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' # Policy header print ' ' print ' ' print ' ' # Separator print ' ' # Policy (types) print ' ' print ' ' print ' ' # Separator print ' ' print ' ' print ' ' # Policy Labels (vms) print ' ' print ' ' print ' ' # Separator print ' ' print ' ' print ' ' # Policy Labels (resources) print ' ' print ' ' print ' ' print '
' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print '
' sendHtmlFormVar( formDefaultButton, 'class="hidden"' ) print '
' sendHtmlFormVar( formXmlGen ) print '
' print '
' sendPHeaderHtml( ) print '

' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print '
' sendPSteHtml( ) print '  ' sendPChWallHtml( ) print '
' print '
' print '
' print '
' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print '
' sendPLSubHtml( ) print '
' print '
' print '
' print '
' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print '
' sendPLObjHtml( ) print '
' print '
' # Send some data that needs to be available across sessions sendHtmlFormVar( formVmNameDom0 ) print '
' print '
' print '' print '' def sendHtmlHead( ): global headTitle print '' print '' print '', headTitle, '' print '' def sendPHeaderHtml( ): global formPolicyName, formPolicyUrl, formPolicyRef, formPolicyDate, formPolicyNSUrl global formPolicyOrder, formPolicyUpdate # Policy header definition print '' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print '
Policy Information
Name:' sendHtmlFormVar( formPolicyName, 'class="full"' ) print '
Url:' sendHtmlFormVar( formPolicyUrl, 'class="full"' ) print '
Reference:' sendHtmlFormVar( formPolicyRef, 'class="full"' ) print '
Date:' sendHtmlFormVar( formPolicyDate, 'class="full"' ) print '
NameSpace URL:' sendHtmlFormVar( formPolicyNSUrl, 'class="full"' ) print '
Primary Policy:' sendHtmlFormVar( formPolicyOrder ) print '
' sendHtmlFormVar( formPolicyUpdate ) print '
' print ' (The Policy Information is updated whenever an action is performed' print ' or it can be updated separately using the "Update" button)' print '
' def sendPSteHtml( ): global formSteTypes, formSteDel, formSteType, formSteAdd # Simple Type Enforcement... print '' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print '
Simple Type Enforcement Types
' sendHtmlFormVar( formSteTypes, 'class="full" size="4" multiple' ) print '
' sendHtmlFormVar( formSteDel, 'class="full"' ) print ' ' print ' Delete the type(s) selected above' print '
' sendHtmlFormVar( formSteType, 'class="full"' ) print '
' sendHtmlFormVar( formSteAdd, 'class="full"' ) print ' ' print ' Create a new type with the above name' print '
' def sendPChWallHtml( ): global formChWallTypes, formChWallDel, formChWallType, formChWallAdd global formCSNames, formCSName, formCSAdd, allCSDel global allCSMTypes, allCSMDel, allCSMType, allCSMAdd # Chinese Wall... print '' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' # Chinese Wall Conflict Sets... print ' ' print ' ' print ' ' if len( formCSNames[1] ) > 0: print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' for csName in formCSNames[1]: print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print '
Chinese Wall Types
' sendHtmlFormVar( formChWallTypes, 'class="full" size="4" multiple' ) print '
' sendHtmlFormVar( formChWallDel, 'class="full"' ) print ' ' print ' Delete the type(s) selected above' print '
' sendHtmlFormVar( formChWallType, 'class="full"' ) print '
' sendHtmlFormVar( formChWallAdd, 'class="full"' ) print ' ' print ' Create a new type with the above name' print '
' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print '

Chinese Wall Conflict Sets
' sendHtmlFormVar( formCSName, 'class="full"' ) sendHtmlFormVar( formCSNames ) print '
' sendHtmlFormVar( formCSAdd, 'class="full"' ) print ' ' print ' Create a new conflict set with the above name' print '
' print '
' print '  ' print '
' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' for i, csName in enumerate( formCSNames[1] ): print ' ' print ' ' print ' ' print '
NameActions
' + csName + '' print ' Edit' formVar = allCSDel[csName] sendHtmlFormVar( formVar, 'class="link"' ) print '
' print '

Conflict Set: ' + csName + '
' formVar = allCSMTypes[csName]; sendHtmlFormVar( formVar, 'class="full" size="4" multiple"' ) print '
' formVar = allCSMDel[csName] sendHtmlFormVar( formVar, 'class="full"' ) print ' ' print ' Delete the type(s) selected above' print '
' ctSet = Set( formChWallTypes[1] ) csSet = Set( allCSMTypes[csName][1] ) formVar = allCSMType[csName] formVar[1] = [] for chwallType in ctSet.difference( csSet ): formVar[1].append( chwallType ) formVar[1].sort( ) sendHtmlFormVar( formVar, 'class="full" size="2" multiple' ) print '
' formVar = allCSMAdd[csName] sendHtmlFormVar( formVar, 'class="full"' ) print ' ' print ' Add the type(s) selected above' print '
' def sendPLSubHtml( ): global formVmNames, formVmDel, formVmName, formVmAdd global allVmDel, allVmDom0 global allVmChWs, allVmChWDel, allVmChW, allVmChWAdd global allVmStes, allVmSteDel, allVmSte, allVmSteAdd global formSteTypes, formChWallTypes print '' print ' ' print ' ' print ' ' # Virtual Machines... print ' ' print ' ' print ' ' if len( formVmNames[1] ) > 0: print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' for vmName in formVmNames[1]: print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print '
' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print '
Virtual Machine Classes
' sendHtmlFormVar( formVmName, 'class="full"' ) sendHtmlFormVar( formVmNames ) print '  
' sendHtmlFormVar( formVmAdd, 'class="full"' ) print ' ' print ' Create a new VM class with the above name' print '
' print '
' print '  ' print '
' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' for i, vmName in enumerate( formVmNames[1] ): print ' ' print ' ' print ' ' print ' ' print ' ' print '
Dom 0?NameActions
' if formVmNameDom0[1] == vmName: print 'Yes' else: print ' ' print ' ' + vmName + '' print ' Edit' formVar = allVmDel[vmName] sendHtmlFormVar( formVar, 'class="link"' ) formVar = allVmDom0[vmName] sendHtmlFormVar( formVar, 'class="link"' ) print '
' print '
' print '
' print '
' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print '
' print ' Virtual Machine Class: ' + vmName + '' print '
Simple Type Enforcement Types Chinese Wall Types
' formVar = allVmStes[vmName]; sendHtmlFormVar( formVar, 'class="full" size="4" multiple"' ) print '  ' formVar = allVmChWs[vmName]; sendHtmlFormVar( formVar, 'class="full" size="4" multiple"' ) print '
' formVar = allVmSteDel[vmName]; sendHtmlFormVar( formVar, 'class="full"' ) print ' ' print ' Delete the type(s) selected above' print '  ' formVar = allVmChWDel[vmName]; sendHtmlFormVar( formVar, 'class="full"' ) print ' ' print ' Delete the type(s) selected above' print '
' 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 '  ' 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 '
' formVar = allVmSteAdd[vmName]; sendHtmlFormVar( formVar, 'class="full"' ) print ' ' print ' Add the type(s) selected above' print '  ' formVar = allVmChWAdd[vmName]; sendHtmlFormVar( formVar, 'class="full"' ) print ' ' print ' Add the type(s) selected above' print '
' print '
' def sendPLObjHtml( ): global formResNames, formResDel, formResName, formResAdd global allResDel global allResStes, allResSteDel, allResSte, allResSteAdd global formSteTypes, formChWallTypes print '' print ' ' print ' ' print ' ' # Resources... print ' ' print ' ' print ' ' if len( formResNames[1] ) > 0: print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' for resName in formResNames[1]: print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print '
' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print '
Resource Classes
' sendHtmlFormVar( formResName, 'class="full"' ) sendHtmlFormVar( formResNames ) print '  
' sendHtmlFormVar( formResAdd, 'class="full"' ) print ' ' print ' Create a new Resource class with the above name' print '
' print '
' print '  ' print '
' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' for i, resName in enumerate( formResNames[1] ): print ' ' print ' ' print ' ' print ' ' print '
NameActions
' + resName + '' print ' Edit' formVar = allResDel[resName] sendHtmlFormVar( formVar, 'class="link"' ) print '
' print '
' print '
' print '
' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print '
' print ' Resource Class: ' + resName + '' print '
Simple Type Enforcement Types
' formVar = allResStes[resName]; sendHtmlFormVar( formVar, 'class="full" size="4" multiple"' ) print '
' formVar = allResSteDel[resName]; sendHtmlFormVar( formVar, 'class="full"' ) print ' ' print ' Delete the type(s) selected above' print '
' 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 '
' formVar = allResSteAdd[resName]; sendHtmlFormVar( formVar, 'class="full"' ) print ' ' print ' Add the type(s) selected above' print '
' print '
' def checkXmlData( ): global xmlIncomplete global formPolicyName, formPolicyOrder global formChWallTypes, formSteTypes, formCSNames # Validate the Policy Header requirements 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: msg = '' msg = msg + 'You have specified the primary policy to be ' msg = msg + 'Chinese Wall but have not created any Chinese ' msg = msg + 'Wall types. Please create some Chinese Wall ' msg = msg + 'types or change the primary policy.' formatXmlGenError( msg ) if formPolicyOrder[1] == 'v_Ste': if len( formSteTypes[1] ) == 0: msg = '' msg = msg + 'You have specified the primary policy to be ' msg = msg + 'Simple Type Enforcement but have not created ' msg = msg + 'any Simple Type Enforcement types. Please create ' msg = msg + 'some Simple Type Enforcement types or change the ' msg = msg + 'primary policy.' formatXmlGenError( msg ) def sendXmlHeaders( ): # HTML headers print 'Content-Type: text/xml' print 'Content-Disposition: attachment; filename=security_policy.xml' print def sendPolicyXml( ): print '' print '' # Policy header sendPHeaderXml( ) # Policy (types) sendPSteXml( ) sendPChWallXml( ) # Policy Labels (subjects and objects) print '' sendPLSubXml( ) sendPLObjXml( ) print '' print '' def sendPHeaderXml( ): global formPolicyName, formPolicyUrl, formPolicyRef, formPolicyDate, formPolicyNSUrl # Policy header definition print '' print ' ' + formPolicyName[1] + '' print ' 1.0' if len( formPolicyUrl[1] ) > 0: print ' ' + formPolicyUrl[1] + '' if len( formPolicyRef[1] ) > 0: print ' ' + formPolicyRef[1] + '' if len( formPolicyDate[1] ) > 0: print ' ' + formPolicyDate[1] + '' if len( formPolicyNSUrl[1] ) > 0: print ' ' + formPolicyNSUrl[1] + '' print '' def sendPSteXml( ): global formPolicyOrder, formSteTypes # Simple Type Enforcement... if len( formSteTypes[1] ) == 0: return if formPolicyOrder[1] == 'v_Ste': print '' else: print '' print ' ' for steType in formSteTypes[1]: print ' ' + steType + '' print ' ' print '' def sendPChWallXml( ): global formPolicyOrder, formChWallTypes global formCSNames, allCSMTypes # Chinese Wall... if len( formChWallTypes[1] ) == 0: return if formPolicyOrder[1] == 'v_ChWall': print '' else: print '' print ' ' for chWallType in formChWallTypes[1]: print ' ' + chWallType + '' print ' ' # Chinese Wall Conflict Sets (if any) ... if len( formCSNames[1] ) > 0: print ' ' for cs in formCSNames[1]: formVar = allCSMTypes[cs] if len( formVar[1] ) == 0: continue print ' ' for csm in formVar[1]: print ' ' + csm + '' print ' ' print ' ' print '' def sendPLSubXml( ): global formVmNames, allVmChWs, allVmStes # Virtual machines... if len( formVmNames[1] ) == 0: return print ' ' for vmName in formVmNames[1]: print ' ' print ' ' + vmName + '' formVar = allVmStes[vmName] if len( formVar[1] ) > 0: print ' ' for ste in formVar[1]: print ' ' + ste + '' print ' ' formVar = allVmChWs[vmName] if len( formVar[1] ) > 0: print ' ' for chw in formVar[1]: print ' ' + chw + '' print ' ' print ' ' print ' ' def sendPLObjXml( ): global formResNames, allResStes # Resources... if len( formResNames[1] ) == 0: return print ' ' for resName in formResNames[1]: print ' ' print ' ' + resName + '' formVar = allResStes[resName] if len( formVar[1] ) > 0: print ' ' for ste in formVar[1]: print ' ' + ste + '' print ' ' print ' ' print ' ' # Set up initial HTML variables headTitle = 'Xen Policy 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 formPolicyName = [ 'text', '', 'h_policyName', 'i_policyName', '', '', ] formPolicyUrl = [ 'text', '', 'h_policyUrl', 'i_policyUrl', '', '', ] formPolicyRef = [ 'text', '', 'h_policyRef', 'i_policyRef', '', '', ] formPolicyDate = [ 'text', getCurrentTime( ), 'h_policyDate', 'i_policyDate', '', '', ] formPolicyNSUrl = [ 'text', '', 'h_policyNSUrl', 'i_policyNSUrl', '', '', ] formPolicyOrder = [ 'radiobutton-all', 'v_ChWall', 'h_policyOrder', 'i_policyOrder', [ 'v_Ste', 'v_ChWall' ], [ 'Simple Type Enforcement', 'Chinese Wall' ], ] formPolicyUpdate = [ 'button', '', '', 'i_PolicyUpdate', 'Update', '', ] formSteTypes = [ 'list', [], 'h_steTypes', 'i_steTypes', '', '', ] formSteDel = [ 'button', '', '', 'i_steDel', 'Delete', '', ] formSteType = [ 'text', '', '', 'i_steType', '', '', ] formSteAdd = [ 'button', '', '', 'i_steAdd', 'New', '', ] formChWallTypes = [ 'list', [], 'h_chwallTypes', 'i_chwallTypes', '', '', ] formChWallDel = [ 'button', '', '', 'i_chwallDel', 'Delete', '', ] formChWallType = [ 'text', '', '', 'i_chwallType', '', '', ] formChWallAdd = [ 'button', '', '', 'i_chwallAdd', 'New', '', ] formCSNames = [ '', [], 'h_csNames', '', '', '', ] formCSName = [ 'text', '', '', 'i_csName', '', '', ] formCSAdd = [ 'button', '', '', 'i_csAdd', 'New', '', ] formXmlGen = [ 'button', '', '', 'i_xmlGen', 'Generate XML', '', ] formDefaultButton = [ 'button', '', '', 'i_defaultButton', '.', '', ] # This is a set of templates used for each conflict set # Each conflict set is initially assigned these templates, # then each form attribute value is changed to append # "_conflict-set-name" for uniqueness templateCSDel = [ 'button', '', '', 'i_csDel', 'Delete', '', ] allCSDel = {}; templateCSMTypes = [ 'list', [], 'h_csmTypes', 'i_csmTypes', '', '', ] templateCSMDel = [ 'button', '', '', 'i_csmDel', 'Delete', '', ] templateCSMType = [ 'list', [], '', 'i_csmType', '', '', ] templateCSMAdd = [ 'button', '', '', 'i_csmAdd', 'Add', '', ] allCSMTypes = {}; allCSMDel = {}; 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 = '' 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( ) sendPolicyXml( ) if (not formData.has_key( formXmlGen[3] )) or (xmlIncomplete == 1 ): # Send HTML to continue processing the form sendHtmlHeaders( ) sendPolicyHtml( )