Skip to content

Commit a5da230

Browse files
committed
q-dev: filter out not allowed arguments during detach
1 parent a5086b6 commit a5da230

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

qubesadmin/tools/qvm_device.py

+19-4
Original file line numberDiff line numberDiff line change
@@ -232,12 +232,27 @@ def detach_device(args):
232232
subcommand.
233233
"""
234234
vm = args.domains[0]
235-
if args.device:
236-
device = args.device
237-
# ignore device id, detach any device
238-
device.device_id = '*'
235+
device = args.device
236+
if device and device.port_id != '*':
239237
assignment = DeviceAssignment(device)
238+
239+
try:
240+
actual_dev = assignment.device
241+
except ProtocolError as exc:
242+
raise qubesadmin.exc.QubesException(str(exc))
243+
244+
if not assignment.matches(actual_dev):
245+
raise qubesadmin.exc.QubesException(
246+
f"{device} is not attached.")
247+
240248
vm.devices[args.devclass].detach(assignment)
249+
elif args.device:
250+
assignment = DeviceAssignment(device)
251+
for ass in (vm.devices[args.devclass].get_attached_devices()):
252+
if assignment.matches(ass.device):
253+
vm.devices[args.devclass].detach(ass)
254+
else:
255+
raise qubesadmin.exc.QubesException(f"{device} is not attached.")
241256
else:
242257
for ass in (vm.devices[args.devclass].get_attached_devices()):
243258
vm.devices[args.devclass].detach(ass)

0 commit comments

Comments
 (0)