e8e14f3fad
Get rid of ugly embedding username into commandline. This will make much easier avoid hardcoding username in dom0 code. Currently dom0 is free of hardcoded "user" username ("root" still is used).
50 lines
1.3 KiB
Python
Executable File
50 lines
1.3 KiB
Python
Executable File
#!/usr/bin/python
|
|
|
|
##
|
|
## This script is for dom0
|
|
## The syntax is modelled after "xl block-attach"
|
|
## FIXME: should be modelled after block-detach instead
|
|
##
|
|
|
|
import sys
|
|
import os
|
|
import xen.lowlevel.xl
|
|
|
|
# parse command line
|
|
if (len(sys.argv)<4) or (len(sys.argv)>5):
|
|
print 'usage: xl-qvm-usb-detach.py <frontendvm-xid> <backendvm-device> <frontendvm-device> [<backendvm-xid>]'
|
|
sys.exit(1)
|
|
|
|
frontendvm_xid=sys.argv[1]
|
|
backendvm_device=sys.argv[2]
|
|
|
|
frontend=sys.argv[3].split('-')
|
|
if len(frontend)!=2:
|
|
print 'Error: frontendvm-device must be in <controller>-<port> format'
|
|
sys.exit(1)
|
|
(controller, port)=frontend
|
|
|
|
if len(sys.argv)>4:
|
|
backendvm_xid=int(sys.argv[4])
|
|
backendvm_name=xen.lowlevel.xl.ctx().domid_to_name(backendvm_xid)
|
|
else:
|
|
backendvm_xid=0
|
|
|
|
cmd = "/usr/lib/qubes/vusb-ctl.py unbind '%s'" % backendvm_device
|
|
if backendvm_xid == 0:
|
|
os.system("sudo %s" % cmd)
|
|
else:
|
|
from qubes.qubes import QubesVmCollection
|
|
qvm_collection = QubesVmCollection()
|
|
qvm_collection.lock_db_for_reading()
|
|
qvm_collection.load()
|
|
qvm_collection.unlock_db()
|
|
|
|
# launch
|
|
qvm_collection.get_vm_by_name(backendvm_name).run(cmd, user="root")
|
|
|
|
# FIXME: command injection
|
|
os.system("xenstore-write /local/domain/%s/backend/vusb/%s/%s/port/%s ''"
|
|
% (backendvm_xid, frontendvm_xid, controller, port))
|
|
|