qubes.VMShell service, used by qvm-run, expects the command on the first input line. Previously, when --localcmd was used, the command wasn't written anywhere and the local command was connected directly to qubes.VMShell service. And the first line of its output was interpreted as a command. Fix this by starting the local command separately, after sending the command to qubes.VMShell service. While at it, unify handling shell command and service calls in the process. vm.run_service(..., localcmd= ) isn't that useful in general case, because for qubes.VMShell the caller first need to send the command before starting local process. Since the qvm-run tool needs to implement manual starting localcmd anyway, don't use localcmd= run_service's argument at all to unify calling methods. There is slight behavior change: previously localcmd was started only after establishing service connection (for example only if qrexec policy allows), now it is started in all the cases. Fixes QubesOS/qubes-issues#4040 |
||
|---|---|---|
| ci | ||
| debian | ||
| doc | ||
| etc | ||
| qubesadmin | ||
| rpm_spec | ||
| test-packages | ||
| .gitignore | ||
| .pylintrc | ||
| .travis.yml | ||
| LICENSE | ||
| Makefile | ||
| Makefile.builder | ||
| README.md | ||
| run-tests | ||
| setup.py | ||
| version | ||
This is client side implementation of Qubes Admin API. See https://www.qubes-os.org/doc/admin-api/ for protocol specification.
Compatibility
Most of the API modules are compatible with Python >= 2.7. Very few parts require Python >= 3.4:
- tools (
qvm-*) - qubesadmin.events module (for asyncio module)
Parts not compatible with Python < 3.4, are not installed in such environment.