[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] Revert 10521, 10526 and 10527. This completes reversion of ACM modifications to xm.
# HG changeset patch # User kfraser@xxxxxxxxxxxxxxxxxxxxxxx # Node ID 9dbcf482f60035aa024ec41569dba3715848b2b8 # Parent 53f552ad404234c457fdd62560c9e8b0ea976674 Revert 10521, 10526 and 10527. This completes reversion of ACM modifications to xm. Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx> --- tools/python/xen/xm/dry-run.py | 95 ------------------ tools/python/xen/xm/getlabel.py | 134 -------------------------- tools/python/xen/xm/resources.py | 70 ------------- tools/python/xen/xm/rmlabel.py | 134 -------------------------- tools/python/xen/util/security.py | 102 -------------------- tools/python/xen/xend/server/blkif.py | 12 -- tools/python/xen/xm/addlabel.py | 171 +++++++--------------------------- tools/python/xen/xm/create.py | 59 ----------- tools/python/xen/xm/main.py | 28 ----- 9 files changed, 44 insertions(+), 761 deletions(-) diff -r 53f552ad4042 -r 9dbcf482f600 tools/python/xen/util/security.py --- a/tools/python/xen/util/security.py Fri Jun 30 13:25:43 2006 +0100 +++ b/tools/python/xen/util/security.py Fri Jun 30 13:33:20 2006 +0100 @@ -14,7 +14,6 @@ #============================================================================ # Copyright (C) 2006 International Business Machines Corp. # Author: Reiner Sailer -# Author: Bryan D. Payne <bdpayne@xxxxxxxxxx> #============================================================================ import commands @@ -22,14 +21,11 @@ import sys, os, string, re import sys, os, string, re import traceback import shutil -#from xml.marshal import generic from xen.lowlevel import acm from xen.xend import sxp -from xen.xend.XendLogging import log #global directories and tools for security management policy_dir_prefix = "/etc/xen/acm-security/policies" -res_label_filename = policy_dir_prefix + "/resource_labels" boot_filename = "/boot/grub/menu.lst" xensec_xml2bin = "/usr/sbin/xensec_xml2bin" xensec_tool = "/usr/sbin/xensec_tool" @@ -534,101 +530,3 @@ def list_labels(policy_name, condition): if label not in labels: labels.append(label) return labels - - -def get_res_label(resource): - """Returns resource label information (label, policy) if it exists. - Otherwise returns null label and policy. - """ - def default_res_label(): - ssidref = NULL_SSIDREF - if on(): - label = ssidref2label(ssidref) - else: - label = None - return (label, 'NULL') - - (label, policy) = default_res_label() - - # load the resource label file - configfile = res_label_filename - if not os.path.isfile(configfile): - log.info("Resource label file not found.") - return default_res_label() -# -# Commented out pending replacement for xml.marshal.generic -# -# fd = open(configfile, "rb") -# res_label_cache = generic.load(fd) -# fd.close() - -# # find the resource information -# if res_label_cache.has_key(resource): -# (policy, label) = res_label_cache[resource] - - return (label, policy) - - -def get_res_security_details(resource): - """Returns the (label, ssidref, policy) associated with a given - resource from the global resource label file. - """ - def default_security_details(): - ssidref = NULL_SSIDREF - if on(): - label = ssidref2label(ssidref) - else: - label = None - policy = active_policy - return (label, ssidref, policy) - - (label, ssidref, policy) = default_security_details() - - # find the entry associated with this resource - (label, policy) = get_res_label(resource) - if policy == 'NULL': - log.info("Resource label for "+resource+" not in file, using DEFAULT.") - return default_security_details() - - # is this resource label for the running policy? - if policy == active_policy: - ssidref = label2ssidref(label, policy, 'res') - else: - log.info("Resource label not for active policy, using DEFAULT.") - return default_security_details() - - return (label, ssidref, policy) - - -def res_security_check(resource, domain_label): - """Checks if the given resource can be used by the given domain - label. Returns 1 if the resource can be used, otherwise 0. - """ - rtnval = 1 - - # if security is on, ask the hypervisor for a decision - if on(): - (label, ssidref, policy) = get_res_security_details(resource) - domac = ['access_control'] - domac.append(['policy', active_policy]) - domac.append(['label', domain_label]) - domac.append(['type', 'dom']) - decision = get_decision(domac, ['ssidref', str(ssidref)]) - - # provide descriptive error messages - if decision == 'DENIED': - if label == ssidref2label(NULL_SSIDREF): - raise ACMError("Resource '"+resource+"' is not labeled") - rtnval = 0 - else: - raise ACMError("Permission denied for resource '"+resource+"' because label '"+label+"' is not allowed") - rtnval = 0 - - # security is off, make sure resource isn't labeled - else: - (label, policy) = get_res_label(resource) - if policy != 'NULL': - raise ACMError("Security is off, but '"+resource+"' is labeled") - rtnval = 0 - - return rtnval diff -r 53f552ad4042 -r 9dbcf482f600 tools/python/xen/xend/server/blkif.py --- a/tools/python/xen/xend/server/blkif.py Fri Jun 30 13:25:43 2006 +0100 +++ b/tools/python/xen/xend/server/blkif.py Fri Jun 30 13:33:20 2006 +0100 @@ -21,7 +21,6 @@ import string import string from xen.util import blkif -from xen.util import security from xen.xend import sxp from xen.xend.XendError import VmError @@ -41,22 +40,15 @@ class BlkifController(DevController): def getDeviceDetails(self, config): """@see DevController.getDeviceDetails""" - uname = sxp.child_value(config, 'uname') dev = sxp.child_value(config, 'dev') - (typ, params) = string.split(uname, ':', 1) + (typ, params) = string.split(sxp.child_value(config, 'uname'), ':', 1) back = { 'dev' : dev, 'type' : typ, 'params' : params, 'mode' : sxp.child_value(config, 'mode', 'r') - } - - if security.on(): - (label, ssidref, policy) = security.get_res_security_details(uname) - back.update({'acm_label' : label, - 'acm_ssidref': str(ssidref), - 'acm_policy' : policy}) + } if 'ioemu:' in dev: (dummy, dev1) = string.split(dev, ':', 1) diff -r 53f552ad4042 -r 9dbcf482f600 tools/python/xen/xm/addlabel.py --- a/tools/python/xen/xm/addlabel.py Fri Jun 30 13:25:43 2006 +0100 +++ b/tools/python/xen/xm/addlabel.py Fri Jun 30 13:33:20 2006 +0100 @@ -14,156 +14,61 @@ #============================================================================ # Copyright (C) 2006 International Business Machines Corp. # Author: Reiner Sailer <sailer@xxxxxxxxxx> -# Author: Bryan D. Payne <bdpayne@xxxxxxxxxx> #============================================================================ -"""Labeling a domain configuration file or a resoruce. +"""Labeling a domain configuration file. """ import sys, os -import string import traceback -#from xml.marshal import generic -from xen.util import security + + +from xen.util.security import ACMError, err, active_policy, label2ssidref, on, access_control_re + def usage(): - print "\nUsage: xm addlabel <label> dom <configfile> [<policy>]" - print " xm addlabel <label> res <resource> [<policy>]\n" - print " This program adds an acm_label entry into the 'configfile'" - print " for a domain or to the global resource label file for a" - print " resource. It derives the policy from the running hypervisor" - print " if it is not given (optional parameter). If a label already" - print " exists for the given domain or resource, then addlabel fails.\n" - security.err("Usage") + print "\nUsage: xm addlabel <configfile> <label> [<policy>]\n" + print " This program adds an acm_label entry into the 'configfile'." + print " It derives the policy from the running hypervisor if it" + print " is not given (optional parameter). If the configfile is" + print " already labeled, then addlabel fails.\n" + err("Usage") -def validate_config_file(configfile): - """Performs a simple sanity check on the configuration file passed on - the command line. We basically just want to make sure that it's - not a domain image file so we check for a few configuration values - and then we are satisfied. Returned 1 on success, otherwise 0. - """ - # read in the config file - globs = {} - locs = {} + +def main(argv): try: - execfile(configfile, globs, locs) - except: - print "Invalid configuration file." - return 0 + policyref = None + if len(argv) not in [3,4]: + usage() + configfile = argv[1] + label = argv[2] - # sanity check on the data from the file - count = 0 - required = ['kernel', 'memory', 'name'] - for (k, v) in locs.items(): - if k in required: - count += 1 - if count != 3: - print "Invalid configuration file." - return 0 - else: - return 1 + if len(argv) == 4: + policyref = argv[3] + elif on(): + policyref = active_policy + else: + err("No active policy. Policy must be specified in command line.") + #sanity checks: make sure this label can be instantiated later on + ssidref = label2ssidref(label, policyref, 'dom') -def add_resource_label(label, resource, policyref): - """Adds a resource label to the global resource label file. - """ - try: - # sanity check: make sure this label can be instantiated later on - ssidref = security.label2ssidref(label, policyref, 'res') + new_label = "access_control = ['policy=%s,label=%s']\n" % (policyref, label) + if not os.path.isfile(configfile): + err("Configuration file \'" + configfile + "\' not found.") + config_fd = open(configfile, "ra+") + for line in config_fd: + if not access_control_re.match(line): + continue + config_fd.close() + err("Config file \'" + configfile + "\' is already labeled.") + config_fd.write(new_label) + config_fd.close() - # sanity check on resource name - (type, file) = resource.split(":") - if type == "phy": - file = "/dev/" + file - if not os.path.exists(file): - print "Invalid resource '"+resource+"'" - return - - # see if this resource is already in the file - file = security.res_label_filename - if not os.path.isfile(file): - print "Resource file not found, creating new file at:" - print "%s" % (file) - fd = open(file, "w") - fd.close(); - access_control = {} - else: - fd = open(file, "rb") -# access_control = generic.load(fd) - fd.close() - - if access_control.has_key(resource): - security.err("This resource is already labeled.") - - # write the data to file - new_entry = { resource : tuple([policyref, label]) } - access_control.update(new_entry) - fd = open(file, "wb") -# generic.dump(access_control, fd) - fd.close() - - except security.ACMError: + except ACMError: pass except: traceback.print_exc(limit=1) -def add_domain_label(label, configfile, policyref): - try: - # sanity checks: make sure this label can be instantiated later on - ssidref = security.label2ssidref(label, policyref, 'dom') - - new_label = "access_control = ['policy=%s,label=%s']\n" % (policyref, label) - if not os.path.isfile(configfile): - security.err("Configuration file \'" + configfile + "\' not found.") - config_fd = open(configfile, "ra+") - for line in config_fd: - if not security.access_control_re.match(line): - continue - config_fd.close() - security.err("Config file \'" + configfile + "\' is already labeled.") - config_fd.write(new_label) - config_fd.close() - - except security.ACMError: - pass - except: - traceback.print_exc(limit=1) - -def main (argv): - try: - policyref = None - if len(argv) not in [4,5]: - usage() - label = argv[1] - - if len(argv) == 5: - policyref = argv[4] - elif security.on(): - policyref = security.active_policy - else: - security.err("No active policy. Policy must be specified in command line.") - - if argv[2].lower() == "dom": - configfile = argv[3] - if configfile[0] != '/': - for prefix in [".", "/etc/xen"]: - configfile = prefix + "/" + configfile - if os.path.isfile(configfile): - fd = open(configfile, "rb") - break - if not validate_config_file(configfile): - usage() - else: - add_domain_label(label, configfile, policyref) - elif argv[2].lower() == "res": - resource = argv[3] - add_resource_label(label, resource, policyref) - else: - usage() - - except security.ACMError: - pass - except: - traceback.print_exc(limit=1) if __name__ == '__main__': main(sys.argv) diff -r 53f552ad4042 -r 9dbcf482f600 tools/python/xen/xm/create.py --- a/tools/python/xen/xm/create.py Fri Jun 30 13:25:43 2006 +0100 +++ b/tools/python/xen/xm/create.py Fri Jun 30 13:33:20 2006 +0100 @@ -985,56 +985,6 @@ def parseCommandLine(argv): return (gopts, config) -def config_security_check(config, verbose): - """Checks each resource listed in the config to see if the active - policy will permit creation of a new domain using the config. - Returns 1 if the config passes all tests, otherwise 0. - """ - answer = 1 - - # get the domain acm_label - domain_label = None - domain_policy = None - for x in sxp.children(config): - if sxp.name(x) == 'security': - domain_label = sxp.child_value(sxp.name(sxp.child0(x)), 'label') - domain_policy = sxp.child_value(sxp.name(sxp.child0(x)), 'policy') - - # if no domain label, use default - if not domain_label and security.on(): - domain_label = security.ssidref2label(security.NULL_SSIDREF) - domain_policy = 'NULL' - elif not domain_label: - domain_label = "" - domain_policy = 'NULL' - - if verbose: - print "Checking resources:" - - # build a list of all resources in the config file - resources = [] - for x in sxp.children(config): - if sxp.name(x) == 'device': - if sxp.name(sxp.child0(x)) == 'vbd': - resources.append(sxp.child_value(sxp.child0(x), 'uname')) - - # perform a security check on each resource - for resource in resources: - try: - security.res_security_check(resource, domain_label) - if verbose: - print " %s: PERMITTED" % (resource) - - except security.ACMError: - print " %s: DENIED" % (resource) - (res_label, res_policy) = security.get_res_label(resource) - print " --> res:"+res_label+" ("+res_policy+")" - print " --> dom:"+domain_label+" ("+domain_policy+")" - answer = 0 - - return answer - - def main(argv): try: (opts, config) = parseCommandLine(argv) @@ -1047,12 +997,9 @@ def main(argv): if opts.vals.dryrun: PrettyPrint.prettyprint(config) else: - if not config_security_check(config, verbose=0): - err("Resource access violation") - else: - dom = make_domain(opts, config) - if opts.vals.console_autoconnect: - console.execConsole(dom) + dom = make_domain(opts, config) + if opts.vals.console_autoconnect: + console.execConsole(dom) if __name__ == '__main__': main(sys.argv) diff -r 53f552ad4042 -r 9dbcf482f600 tools/python/xen/xm/main.py --- a/tools/python/xen/xm/main.py Fri Jun 30 13:25:43 2006 +0100 +++ b/tools/python/xen/xm/main.py Fri Jun 30 13:33:20 2006 +0100 @@ -30,7 +30,6 @@ import warnings import warnings warnings.filterwarnings('ignore', category=FutureWarning) import xmlrpclib -import traceback import xen.xend.XendProtocol @@ -120,11 +119,7 @@ vnet_create_help = "vnet-create <config> vnet_create_help = "vnet-create <config> create a vnet from a config file" vnet_delete_help = "vnet-delete <vnetid> delete a vnet" vtpm_list_help = "vtpm-list <DomId> [--long] list virtual TPM devices" -addlabel_help = "addlabel <label> dom <configfile> Add security label to domain\n <label> res <resource> or resource" -rmlabel_help = "rmlabel dom <configfile> Remove security label from domain\n res <resource> or resource" -getlabel_help = "getlabel dom <configfile> Show security label for domain\n res <resource> or resource" -dry_run_help = "dry-run <configfile> Tests if domain can access its resources" -resources_help = "resources Show info for each labeled resource" +addlabel_help = "addlabel <ConfigFile> <label> Add security label to ConfigFile" cfgbootpolicy_help = "cfgbootpolicy <policy> Add policy to boot configuration " dumppolicy_help = "dumppolicy Print hypervisor ACM state information" loadpolicy_help = "loadpolicy <policy> Load binary policy into hypervisor" @@ -208,10 +203,6 @@ acm_commands = [ acm_commands = [ "labels", "addlabel", - "rmlabel", - "getlabel", - "dry-run", - "resources", "makepolicy", "loadpolicy", "cfgbootpolicy", @@ -1000,19 +991,6 @@ def xm_block_attach(args): ['mode', args[3]]] if len(args) == 5: vbd.append(['backend', args[4]]) - - # verify that policy permits attaching this resource - try: - dominfo = server.xend.domain(dom) - domid = sxp.child_value(dominfo, 'domid') - (tmp1, label, tmp2, tmp3) = security.get_ssid(domid) - security.res_security_check(args[1], label) - except security.ACMError, e: - print e.value - sys.exit(1) - except: - traceback.print_exc(limit=1) - sys.exit(1) server.xend.domain.device_create(dom, vbd) @@ -1146,10 +1124,6 @@ subcommands = [ 'shutdown', 'labels', 'addlabel', - 'rmlabel', - 'getlabel', - 'dry-run', - 'resources', 'cfgbootpolicy', 'makepolicy', 'loadpolicy', diff -r 53f552ad4042 -r 9dbcf482f600 tools/python/xen/xm/dry-run.py --- a/tools/python/xen/xm/dry-run.py Fri Jun 30 13:25:43 2006 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -#============================================================================ -# This library is free software; you can redistribute it and/or -# modify it under the terms of version 2.1 of the GNU Lesser General Public -# License as published by the Free Software Foundation. -# -# This library 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -#============================================================================ -# Copyright (C) 2006 International Business Machines Corp. -# Author: Bryan D. Payne <bdpayne@xxxxxxxxxx> -#============================================================================ - -"""Tests the security settings for a domain and its resources. -""" -from xen.util import security -from xen.xm import create -from xen.xend import sxp - -def usage(): - print "\nUsage: xm dry-run <configfile>\n" - print "This program checks each resource listed in the configfile" - print "to see if the domain created by the configfile can access" - print "the resources. The status of each resource is listed" - print "individually along with the final security decision.\n" - - -def check_domain_label(config): - """All that we need to check here is that the domain label exists and - is not null when security is on. Other error conditions are - handled when the config file is parsed. - """ - answer = 0 - secon = 0 - default_label = security.ssidref2label(security.NULL_SSIDREF) - if security.on(): - secon = 1 - - # get the domain acm_label - dom_label = None - dom_name = None - for x in sxp.children(config): - if sxp.name(x) == 'security': - dom_label = sxp.child_value(sxp.name(sxp.child0(x)), 'label') - if sxp.name(x) == 'name': - dom_name = sxp.child0(x) - - # sanity check on domain label - print "Checking domain:" - if (not secon) and (not dom_label): - print " %s: PERMITTED" % (dom_name) - answer = 1 - elif (secon) and (dom_label) and (dom_label != default_label): - print " %s: PERMITTED" % (dom_name) - answer = 1 - else: - print " %s: DENIED" % (dom_name) - if not secon: - print " --> Security off, but domain labeled" - else: - print " --> Domain not labeled" - answer = 0 - - return answer - - -def main (argv): - if len(argv) != 2: - usage() - return - - try: - passed = 0 - (opts, config) = create.parseCommandLine(argv) - if check_domain_label(config): - if create.config_security_check(config, verbose=1): - passed = 1 - else: - print "Checking resources: (skipped)" - - if passed: - print "Dry Run: PASSED" - else: - print "Dry Run: FAILED" - except security.ACMError: - pass - - -if __name__ == '__main__': - main(sys.argv) diff -r 53f552ad4042 -r 9dbcf482f600 tools/python/xen/xm/getlabel.py --- a/tools/python/xen/xm/getlabel.py Fri Jun 30 13:25:43 2006 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,134 +0,0 @@ -#============================================================================ -# This library is free software; you can redistribute it and/or -# modify it under the terms of version 2.1 of the GNU Lesser General Public -# License as published by the Free Software Foundation. -# -# This library 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -#============================================================================ -# Copyright (C) 2006 International Business Machines Corp. -# Author: Bryan D. Payne <bdpayne@xxxxxxxxxx> -#============================================================================ - -"""Show the label for a domain or resoruce. -""" -import sys, os, re -import string -import traceback -#from xml.marshal import generic -from xen.util import security - -def usage(): - print "\nUsage: xm getlabel dom <configfile>" - print " xm getlabel res <resource>\n" - print " This program shows the label for a domain or resource.\n" - - -def get_resource_label(resource): - """Gets the resource label - """ - try: - # read in the resource file - file = security.res_label_filename - if os.path.isfile(file): - fd = open(file, "rb") -# access_control = generic.load(fd) - fd.close() - else: - print "Resource label file not found" - return - - # get the entry and print label - if access_control.has_key(resource): - policy = access_control[resource][0] - label = access_control[resource][1] - print "policy="+policy+",label="+label - else: - print "Resource not labeled" - return - - except security.ACMError: - pass - except: - traceback.print_exc(limit=1) - - -def get_domain_label(configfile): - try: - # open the domain config file - fd = None - file = None - if configfile[0] == '/': - fd = open(configfile, "rb") - else: - for prefix in [".", "/etc/xen"]: - file = prefix + "/" + configfile - if os.path.isfile(file): - fd = open(file, "rb") - break - if not fd: - print "Configuration file '"+configfile+"' not found." - return - - # read in the domain config file, finding the label line - ac_entry_re = re.compile("^access_control\s*=.*", re.IGNORECASE) - ac_exit_re = re.compile(".*'\].*") - acline = "" - record = 0 - for line in fd.readlines(): - if ac_entry_re.match(line): - record = 1 - if record: - acline = acline + line - if record and ac_exit_re.match(line): - record = 0 - fd.close() - - # send error message if we didn't find anything - if acline == "": - print "Label does not exist in domain configuration file." - return - - # print out the label - (title, data) = acline.split("=", 1) - data = data.strip() - data = data.lstrip("[\'") - data = data.rstrip("\']") - (p, l) = data.split(",") - print data - - except security.ACMError: - pass - except: - traceback.print_exc(limit=1) - - -def main (argv): - try: - if len(argv) != 3: - usage() - return - - if argv[1].lower() == "dom": - configfile = argv[2] - get_domain_label(configfile) - elif argv[1].lower() == "res": - resource = argv[2] - get_resource_label(resource) - else: - usage() - - except security.ACMError: - traceback.print_exc(limit=1) - - -if __name__ == '__main__': - main(sys.argv) - - diff -r 53f552ad4042 -r 9dbcf482f600 tools/python/xen/xm/resources.py --- a/tools/python/xen/xm/resources.py Fri Jun 30 13:25:43 2006 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ -#============================================================================ -# This library is free software; you can redistribute it and/or -# modify it under the terms of version 2.1 of the GNU Lesser General Public -# License as published by the Free Software Foundation. -# -# This library 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -#============================================================================ -# Copyright (C) 2006 International Business Machines Corp. -# Author: Bryan D. Payne <bdpayne@xxxxxxxxxx> -#============================================================================ - -"""List the resource label information from the global resource label file -""" -import sys, os -import string -import traceback -#from xml.marshal import generic -from xen.util import security - -def usage(): - print "\nUsage: xm resource\n" - print " This program lists information for each resource in the" - print " global resource label file\n" - - -def print_resource_data(access_control): - """Prints out a resource dictionary to stdout - """ - for resource in access_control: - (policy, label) = access_control[resource] - print resource - print " policy: "+policy - print " label: "+label - - -def get_resource_data(): - """Returns the resource dictionary. - """ - file = security.res_label_filename - if not os.path.isfile(file): - security.err("Resource file not found.") - - fd = open(file, "rb") -# access_control = generic.load(fd) - fd.close() - return access_control - - -def main (argv): - try: - access_control = get_resource_data() - print_resource_data(access_control) - - except security.ACMError: - pass - except: - traceback.print_exc(limit=1) - - -if __name__ == '__main__': - main(sys.argv) - - diff -r 53f552ad4042 -r 9dbcf482f600 tools/python/xen/xm/rmlabel.py --- a/tools/python/xen/xm/rmlabel.py Fri Jun 30 13:25:43 2006 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,134 +0,0 @@ -#============================================================================ -# This library is free software; you can redistribute it and/or -# modify it under the terms of version 2.1 of the GNU Lesser General Public -# License as published by the Free Software Foundation. -# -# This library 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -#============================================================================ -# Copyright (C) 2006 International Business Machines Corp. -# Author: Bryan D. Payne <bdpayne@xxxxxxxxxx> -#============================================================================ - -"""Remove a label from a domain configuration file or a resoruce. -""" -import sys, os, re -import string -import traceback -#from xml.marshal import generic -from xen.util import security - -def usage(): - print "\nUsage: xm rmlabel dom <configfile>" - print " xm rmlabel res <resource>\n" - print " This program removes an acm_label entry from the 'configfile'" - print " for a domain or from the global resource label file for a" - print " resource. If the label does not exist for the given domain or" - print " resource, then rmlabel fails.\n" - - -def rm_resource_label(resource): - """Removes a resource label from the global resource label file. - """ - try: - # read in the resource file - file = security.res_label_filename - if os.path.isfile(file): - fd = open(file, "rb") -# access_control = generic.load(fd) - fd.close() - else: - security.err("Resource file not found, cannot remove label!") - - # remove the entry and update file - if access_control.has_key(resource): - del access_control[resource] - fd = open(file, "wb") -# generic.dump(access_control, fd) - fd.close() - else: - security.err("Label does not exist in resource label file.") - - except security.ACMError: - pass - except: - traceback.print_exc(limit=1) - - -def rm_domain_label(configfile): - try: - # open the domain config file - fd = None - file = None - if configfile[0] == '/': - fd = open(configfile, "rb") - else: - for prefix in [".", "/etc/xen"]: - file = prefix + "/" + configfile - if os.path.isfile(file): - fd = open(file, "rb") - break - if not fd: - security.err("Configuration file '"+configfile+"' not found.") - - # read in the domain config file, removing label - ac_entry_re = re.compile("^access_control\s*=.*", re.IGNORECASE) - ac_exit_re = re.compile(".*'\].*") - file_contents = "" - comment = 0 - removed = 0 - for line in fd.readlines(): - if ac_entry_re.match(line): - comment = 1 - if comment: - removed = 1 - line = "#"+line - if comment and ac_exit_re.match(line): - comment = 0 - file_contents = file_contents + line - fd.close() - - # send error message if we didn't find anything to remove - if not removed: - security.err("Label does not exist in domain configuration file.") - - # write the data back out to the file - fd = open(file, "wb") - fd.writelines(file_contents) - fd.close() - - except security.ACMError: - pass - except: - traceback.print_exc(limit=1) - - -def main (argv): - try: - if len(argv) != 3: - usage() - return - - if argv[1].lower() == "dom": - configfile = argv[2] - rm_domain_label(configfile) - elif argv[1].lower() == "res": - resource = argv[2] - rm_resource_label(resource) - else: - usage() - - except security.ACMError: - traceback.print_exc(limit=1) - - -if __name__ == '__main__': - main(sys.argv) - - _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |