⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 policy.cgi

📁 xen 3.2.2 源码
💻 CGI
📖 第 1 页 / 共 5 页
字号:
#!/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 osimport cgiimport cgitb; cgitb.enable( )import timeimport xml.dom.minidomimport xml.saximport xml.sax.handlerfrom StringIO import StringIOfrom sets import Setdef 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 namedef 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 namedef 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 urldef 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 refdef 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 datedef 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 urldef 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 typesdef 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 domDocdef 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 )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -