diff --git a/dom0/qvm-tools/qvm-service b/dom0/qvm-tools/qvm-service new file mode 100755 index 00000000..6dbb8a6c --- /dev/null +++ b/dom0/qvm-tools/qvm-service @@ -0,0 +1,97 @@ +#!/usr/bin/python +# +# The Qubes OS Project, http://www.qubes-os.org +# +# Copyright (C) 2012 Marek Marczykowski +# +# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# + +from qubes.qubes import QubesVmCollection +from optparse import OptionParser; +import subprocess +import sys +import re + +def do_list(vm): + max_len = 0 + for s in vm.services.keys(): + max_len = max(max_len, len(s)) + fmt="{{0:<{0}}}: {{1}}".format(max_len) + + for s in vm.services.keys(): + print fmt.format (s, "Enabled" if vm.services[s] else "Disabled") + + +def main(): + usage = "usage: %prog [action] [service]\n" + parser = OptionParser (usage) + parser.add_option ("-l", "--list", dest="do_list", action="store_true", default=True, + help="List services (default action)") + parser.add_option ("-e", "--enable", dest="set_enable", action="store_true", default=False, + help="Enable service") + parser.add_option ("-d", "--disable", dest="set_disable", action="store_true", default=False, + help="Disable service") + parser.add_option ("-D", "--default", dest="set_default", action="store_true", default=False, + help="Reset service to its default state (remove from the list)") + + (options, args) = parser.parse_args () + if (len (args) < 1): + parser.error ("You must specify VM name!") + vmname = args[0] + args = args[1:] + + if options.set_enable or options.set_disable or options.set_default: + if (len(args) < 1): + parser.error("You must specify service name!") + options.do_list = False + + qvm_collection = QubesVmCollection() + if options.do_list: + qvm_collection.lock_db_for_reading() + qvm_collection.load() + qvm_collection.unlock_db() + else: + qvm_collection.lock_db_for_writing() + qvm_collection.load() + + vm = qvm_collection.get_vm_by_name(vmname) + if vm is None: + print >> sys.stderr, "A VM with the name '{0}' does not exist in the system.".format(vmname) + exit(1) + + changed = False + if options.do_list: + do_list(vm) + elif options.set_enable: + vm.services[args[0]] = True + changed = True + elif options.set_disable: + vm.services[args[0]] = False + changed = True + elif options.set_default: + if vm.services.has_key(args[0]): + vm.services.pop(args[0]) + changed = True + + if changed: + qvm_collection.save() + + if not options.do_list: + qvm_collection.unlock_db() + + +main()