#!/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( '"" 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( '"" 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( '"" tag is missing' ) return None urlNodes = domNode.getElementsByTagName( 'Url' ) if len( urlNodes ) == 0: formatXmlError( '"" 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( '"" tag is missing' ) return None refNodes = domNode.getElementsByTagName( 'Reference' ) if len( refNodes ) == 0: formatXmlError( '"" 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( '"" 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 ): 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 + '"" 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 '' 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] 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 sendPolicyLabelHtml( ): global xmlError, xmlIncomplete, xmlMessages, formXmlGen global formVmNameDom0, formSteTypes, formChWallTypes 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 ' ' print ' ' print ' ' print ' ' # Policy Labeling header print ' ' print ' ' print ' ' # Separator print ' ' print ' ' print ' ' # Policy Labels (vms) print ' ' print ' ' print ' ' print '
' sendHtmlFormVar( formDefaultButton, 'class="hidden"' ) print '
' sendHtmlFormVar( formXmlGen ) print '
' sendPLHeaderHtml( ) print '
' print '
' print '
' print ' ' print ' ' print ' ' print ' ' print '
' sendPLSubHtml( ) print '
' print '
' # Send some data that needs to be available across sessions sendHtmlFormVar( formVmNameDom0 ) sendHtmlFormVar( formSteTypes ) sendHtmlFormVar( formChWallTypes ) print '
' print '
' print '' print '' def sendHtmlHead( ): global headTitle print '' print '' print '', headTitle, '' print '' def sendPLHeaderHtml( ): global formPolicyLabelName, formPolicyLabelDate global formPolicyUrl, formPolicyRef global formPolicyLabelUpdate # Policy Labeling 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 '
Policy Labeling Information
Name:' sendHtmlFormVar( formPolicyLabelName, 'class="full"' ) print '
Date:' sendHtmlFormVar( formPolicyLabelDate, 'class="full"' ) print '
Policy URL:' sendHtmlFormVar( formPolicyUrl, 'class="full"' ) print '
Policy Reference:' sendHtmlFormVar( formPolicyRef, 'class="full"' ) print '
' sendHtmlFormVar( formPolicyLabelUpdate ) print '
' print ' (The Policy Labeling Information is updated whenever an action is performed' print ' or it can be updated separately using the "Update" button)' 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( ): # Resources... print '' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print ' ' print '
Resources
' #sendHtmlFormVar( formVmNames, 'class="full" size="4" multiple"' ) print ' ' #sendHtmlFormVar( formVmDel, 'class="full"' ) print '
' #sendHtmlFormVar( formVmName, 'class="full"' ) print ' ' #sendHtmlFormVar( formVmAdd, 'class="full"' ) print '
' 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 '' print '' # Policy Labeling header sendPLHeaderXml( ) # Policy Labels (subjects and objects) sendPLSubXml( ) #sendPLObjXml( ) print '' def sendPLHeaderXml( ): global formPolicyLabelName, formPolicyLabelDate global formPolicyUrl, formPolicyRef # Policy Labeling header definition print '' print ' ' + formPolicyLabelName[1] + '' print ' ' + formPolicyLabelDate[1] + '' print ' ' print ' ' + formPolicyUrl[1] + '' print ' ' + formPolicyRef[1] + '' 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 '' # 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( )