usb_attach: improve error reporting
- specifically report when qubes-usb-proxy package is not installed - include sanitized stderr output in error message
This commit is contained in:
parent
da74d75e6b
commit
69e792d82c
@ -51,6 +51,9 @@ BLKSIZE = 512
|
|||||||
AVAILABLE_FRONTENDS = ['xvd'+c for c in
|
AVAILABLE_FRONTENDS = ['xvd'+c for c in
|
||||||
string.lowercase[8:]+string.lowercase[:8]]
|
string.lowercase[8:]+string.lowercase[:8]]
|
||||||
|
|
||||||
|
class USBProxyNotInstalled(QubesException):
|
||||||
|
pass
|
||||||
|
|
||||||
def mbytes_to_kmg(size):
|
def mbytes_to_kmg(size):
|
||||||
if size > 1024:
|
if size > 1024:
|
||||||
return "%d GiB" % (size/1024)
|
return "%d GiB" % (size/1024)
|
||||||
@ -620,9 +623,14 @@ def usb_attach(qvmc, vm, device, auto_detach=False, wait=True):
|
|||||||
p = vm.run_service('qubes.USBAttach', passio_popen=True, user='root')
|
p = vm.run_service('qubes.USBAttach', passio_popen=True, user='root')
|
||||||
(stdout, stderr) = p.communicate(
|
(stdout, stderr) = p.communicate(
|
||||||
'{} {}\n'.format(device['vm'].name, device['device']))
|
'{} {}\n'.format(device['vm'].name, device['device']))
|
||||||
if p.returncode != 0:
|
if p.returncode == 127:
|
||||||
|
raise USBProxyNotInstalled(
|
||||||
|
"qubes-usb-proxy not installed in the VM")
|
||||||
|
elif p.returncode != 0:
|
||||||
# TODO: sanitize and include stdout
|
# TODO: sanitize and include stdout
|
||||||
raise QubesException('Device attach failed')
|
sanitized_stderr = ''.join([c for c in stderr if ord(c) >= 0x20])
|
||||||
|
raise QubesException('Device attach failed: {}'.format(
|
||||||
|
sanitized_stderr))
|
||||||
finally:
|
finally:
|
||||||
# FIXME: there is a race condition here - some other process might
|
# FIXME: there is a race condition here - some other process might
|
||||||
# modify the file in the meantime. This may result in unexpected
|
# modify the file in the meantime. This may result in unexpected
|
||||||
|
Loading…
Reference in New Issue
Block a user