mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 18:21:39 +01:00
Subsequent patches will follow in the coming weeks that will enable Xen ACM to control assignment of resources (e.g., block devices and networking) to virtual machines based on resource labels and the active security policy. Signed-off-by: Bryan D. Payne <bdpayne@us.ibm.com> Signed-off-by: Reiner Sailer <sailer@us.ibm.com>
2376 lines
62 KiB
Python
2376 lines
62 KiB
Python
#!/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( '"<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 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:
|
|
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( '"<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 ):
|
|
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 + '"<PolicyHeader>" 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 "<SimpleTypeEnforcement>" 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 "<ChineseWall>" 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 "<ChineseWall>" 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 "<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:
|
|
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 + '<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]
|
|
|
|
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 '<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]
|
|
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 '<INPUT type="radio"', nameAttr, valueAttr, addAttrs, checked, '>', htmlText, '<BR>'
|
|
|
|
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 sendPolicyHtml( ):
|
|
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">'
|
|
|
|
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>'
|
|
print ' <TABLE>'
|
|
print ' <TR>'
|
|
print ' <TD>'
|
|
sendHtmlFormVar( formDefaultButton, 'class="hidden"' )
|
|
print ' </TD>'
|
|
print ' </TR>'
|
|
print ' <TR>'
|
|
print ' <TD>'
|
|
sendHtmlFormVar( formXmlGen )
|
|
print ' </TD>'
|
|
print ' </TR>'
|
|
print ' </TABLE>'
|
|
print ' </TD>'
|
|
print ' </TR>'
|
|
|
|
# Policy header
|
|
print ' <TR>'
|
|
print ' <TD>'
|
|
sendPHeaderHtml( )
|
|
print ' </TD>'
|
|
print ' </TR>'
|
|
|
|
# Separator
|
|
print ' <TR><TD><HR></TD></TR>'
|
|
|
|
# Policy (types)
|
|
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>'
|
|
sendPSteHtml( )
|
|
print ' </TD>'
|
|
print ' <TD> </TD>'
|
|
print ' <TD>'
|
|
sendPChWallHtml( )
|
|
print ' </TD>'
|
|
print ' </TR>'
|
|
print ' </TABLE>'
|
|
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>'
|
|
|
|
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 sendPHeaderHtml( ):
|
|
global formPolicyName, formPolicyUrl, formPolicyRef, formPolicyDate, formPolicyNSUrl
|
|
global formPolicyOrder, formPolicyUpdate
|
|
|
|
# Policy header definition
|
|
print '<TABLE class="full">'
|
|
print ' <COLGROUP>'
|
|
print ' <COL width="20%">'
|
|
print ' <COL width="80%">'
|
|
print ' </COLGROUP>'
|
|
print ' <TR>'
|
|
print ' <TD align="center" colspan="2" class="heading">Policy Information</TD>'
|
|
print ' </TR>'
|
|
print ' <TR>'
|
|
print ' <TD align="right">Name:</TD>'
|
|
print ' <TD align="left">'
|
|
sendHtmlFormVar( formPolicyName, 'class="full"' )
|
|
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>'
|
|
print ' <TD align="right">Primary Policy:</TD>'
|
|
print ' <TD align="left">'
|
|
sendHtmlFormVar( formPolicyOrder )
|
|
print ' </TD>'
|
|
print ' </TR>'
|
|
print ' <TR>'
|
|
print ' <TD align="center" colspan="2">'
|
|
sendHtmlFormVar( formPolicyUpdate )
|
|
print ' </TD>'
|
|
print ' </TR>'
|
|
print ' <TR>'
|
|
print ' <TD align="center" colspan="2" class="subheading">'
|
|
print ' (The Policy 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 sendPSteHtml( ):
|
|
global formSteTypes, formSteDel, formSteType, formSteAdd
|
|
|
|
# Simple Type Enforcement...
|
|
print '<TABLE class="full">'
|
|
print ' <COLGROUP>'
|
|
print ' <COL width="20%">'
|
|
print ' <COL width="80%">'
|
|
print ' </COLGROUP>'
|
|
print ' <TR>'
|
|
print ' <TD align="center" colspan="2" class="heading">Simple Type Enforcement Types</TD>'
|
|
print ' </TR>'
|
|
print ' <TR>'
|
|
print ' <TD colspan="2">'
|
|
sendHtmlFormVar( formSteTypes, 'class="full" size="4" multiple' )
|
|
print ' </TD>'
|
|
print ' </TR>'
|
|
print ' <TR>'
|
|
print ' <TD>'
|
|
sendHtmlFormVar( formSteDel, 'class="full"' )
|
|
print ' </TD>'
|
|
print ' <TD>'
|
|
print ' Delete the type(s) selected above'
|
|
print ' </TD>'
|
|
print ' </TR>'
|
|
print ' <TR>'
|
|
print ' <TD colspan="2">'
|
|
sendHtmlFormVar( formSteType, 'class="full"' )
|
|
print ' </TD>'
|
|
print ' </TR>'
|
|
print ' <TR>'
|
|
print ' <TD>'
|
|
sendHtmlFormVar( formSteAdd, 'class="full"' )
|
|
print ' </TD>'
|
|
print ' <TD>'
|
|
print ' Create a new type with the above name'
|
|
print ' </TD>'
|
|
print ' </TR>'
|
|
print '</TABLE>'
|
|
|
|
def sendPChWallHtml( ):
|
|
global formChWallTypes, formChWallDel, formChWallType, formChWallAdd
|
|
global formCSNames, formCSName, formCSAdd, allCSDel
|
|
global allCSMTypes, allCSMDel, allCSMType, allCSMAdd
|
|
|
|
# Chinese Wall...
|
|
print '<TABLE class="full">'
|
|
print ' <COLGROUP>'
|
|
print ' <COL width="20%">'
|
|
print ' <COL width="80%">'
|
|
print ' </COLGROUP>'
|
|
print ' <TR>'
|
|
print ' <TD align="center" colspan="2" class="heading">Chinese Wall Types</TD>'
|
|
print ' </TR>'
|
|
print ' <TR>'
|
|
print ' <TD colspan="2">'
|
|
sendHtmlFormVar( formChWallTypes, 'class="full" size="4" multiple' )
|
|
print ' </TD>'
|
|
print ' </TR>'
|
|
print ' <TR>'
|
|
print ' <TD>'
|
|
sendHtmlFormVar( formChWallDel, 'class="full"' )
|
|
print ' </TD>'
|
|
print ' <TD>'
|
|
print ' Delete the type(s) selected above'
|
|
print ' </TD>'
|
|
print ' </TR>'
|
|
print ' <TR>'
|
|
print ' <TD colspan="2">'
|
|
sendHtmlFormVar( formChWallType, 'class="full"' )
|
|
print ' </TD>'
|
|
print ' </TR>'
|
|
print ' <TR>'
|
|
print ' <TD>'
|
|
sendHtmlFormVar( formChWallAdd, 'class="full"' )
|
|
print ' </TD>'
|
|
print ' <TD>'
|
|
print ' Create a new type with the above name'
|
|
print ' </TD>'
|
|
print ' </TR>'
|
|
|
|
# Chinese Wall Conflict Sets...
|
|
print ' <TR>'
|
|
print ' <TD colspan="2">'
|
|
print ' <TABLE class="full">'
|
|
print ' <COLGROUP>'
|
|
print ' <COL width="20%">'
|
|
print ' <COL width="30%">'
|
|
print ' <COL width="50%">'
|
|
print ' </COLGROUP>'
|
|
print ' <THEAD>'
|
|
print ' <TR>'
|
|
print ' <TD align="center" colspan="3"><HR></TD>'
|
|
print ' </TR>'
|
|
print ' <TR>'
|
|
print ' <TD align="center" colspan="3">Chinese Wall Conflict Sets</TD>'
|
|
print ' </TR>'
|
|
print ' </THEAD>'
|
|
print ' <TR>'
|
|
print ' <TD colspan="3">'
|
|
sendHtmlFormVar( formCSName, 'class="full"' )
|
|
sendHtmlFormVar( formCSNames )
|
|
print ' </TD>'
|
|
print ' </TR>'
|
|
print ' <TR>'
|
|
print ' <TD>'
|
|
sendHtmlFormVar( formCSAdd, 'class="full"' )
|
|
print ' </TD>'
|
|
print ' <TD colspan="2">'
|
|
print ' Create a new conflict set with the above name'
|
|
print ' </TD>'
|
|
print ' </TR>'
|
|
print ' </TABLE>'
|
|
print ' </TD>'
|
|
print ' </TR>'
|
|
if len( formCSNames[1] ) > 0:
|
|
print ' <TR>'
|
|
print ' <TD colspan="2">'
|
|
print ' '
|
|
print ' </TD>'
|
|
print ' </TR>'
|
|
print ' <TR>'
|
|
print ' <TD colspan="2">'
|
|
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, csName in enumerate( formCSNames[1] ):
|
|
print ' <TR>'
|
|
print ' <TD class="fullbox">' + csName + '</TD>'
|
|
print ' <TD class="fullbox">'
|
|
print ' <A href="#' + csName + '">Edit</A>'
|
|
formVar = allCSDel[csName]
|
|
sendHtmlFormVar( formVar, 'class="link"' )
|
|
print ' </TD>'
|
|
print ' </TABLE>'
|
|
print ' </TD>'
|
|
print ' </TR>'
|
|
for csName in formCSNames[1]:
|
|
print ' <TR><TD colspan="2"><HR></TD></TR>'
|
|
print ' <TR>'
|
|
print ' <TD align="center" colspan="2" class="heading"><A name="' + csName + '">Conflict Set: ' + csName + '</A></TD>'
|
|
print ' </TR>'
|
|
print ' <TR>'
|
|
print ' <TD colspan="2">'
|
|
formVar = allCSMTypes[csName];
|
|
sendHtmlFormVar( formVar, 'class="full" size="4" multiple"' )
|
|
print ' </TD>'
|
|
print ' </TR>'
|
|
print ' <TR>'
|
|
print ' <TD>'
|
|
formVar = allCSMDel[csName]
|
|
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">'
|
|
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 ' </TD>'
|
|
print ' </TR>'
|
|
print ' <TR>'
|
|
print ' <TD>'
|
|
formVar = allCSMAdd[csName]
|
|
sendHtmlFormVar( formVar, 'class="full"' )
|
|
print ' </TD>'
|
|
print ' <TD>'
|
|
print ' Add the type(s) selected above'
|
|
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( ):
|
|
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 ):
|
|
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 '<?xml version="1.0"?>'
|
|
|
|
print '<SecurityPolicyDefinition 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 header
|
|
sendPHeaderXml( )
|
|
|
|
# Policy (types)
|
|
sendPSteXml( )
|
|
sendPChWallXml( )
|
|
|
|
# Policy Labels (subjects and objects)
|
|
print '<SecurityLabelTemplate>'
|
|
sendPLSubXml( )
|
|
sendPLObjXml( )
|
|
print '</SecurityLabelTemplate>'
|
|
print '</SecurityPolicyDefinition>'
|
|
|
|
def sendPHeaderXml( ):
|
|
global formPolicyName, formPolicyUrl, formPolicyRef, formPolicyDate, formPolicyNSUrl
|
|
|
|
# Policy header definition
|
|
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>'
|
|
if len( formPolicyNSUrl[1] ) > 0:
|
|
print ' <NameSpaceUrl>' + formPolicyNSUrl[1] + '</NameSpaceUrl>'
|
|
print '</PolicyHeader>'
|
|
|
|
def sendPSteXml( ):
|
|
global formPolicyOrder, formSteTypes
|
|
|
|
# Simple Type Enforcement...
|
|
if len( formSteTypes[1] ) == 0:
|
|
return
|
|
|
|
if formPolicyOrder[1] == 'v_Ste':
|
|
print '<SimpleTypeEnforcement priority="PrimaryPolicyComponent">'
|
|
else:
|
|
print '<SimpleTypeEnforcement>'
|
|
|
|
print ' <SimpleTypeEnforcementTypes>'
|
|
for steType in formSteTypes[1]:
|
|
print ' <Type>' + steType + '</Type>'
|
|
print ' </SimpleTypeEnforcementTypes>'
|
|
|
|
print '</SimpleTypeEnforcement>'
|
|
|
|
def sendPChWallXml( ):
|
|
global formPolicyOrder, formChWallTypes
|
|
global formCSNames, allCSMTypes
|
|
|
|
# Chinese Wall...
|
|
if len( formChWallTypes[1] ) == 0:
|
|
return
|
|
|
|
if formPolicyOrder[1] == 'v_ChWall':
|
|
print '<ChineseWall priority="PrimaryPolicyComponent">'
|
|
else:
|
|
print '<ChineseWall>'
|
|
|
|
print ' <ChineseWallTypes>'
|
|
for chWallType in formChWallTypes[1]:
|
|
print ' <Type>' + chWallType + '</Type>'
|
|
print ' </ChineseWallTypes>'
|
|
|
|
# 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
|
|
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( )
|