From 27ce27b6e967fca79b99732c76d27b15c8fe2942 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= Date: Sat, 29 Jul 2017 04:41:38 +0200 Subject: [PATCH] backup: improve error reporting about passphrase retrieval QubesOS/qubes-issues#2931 --- qubes/api/admin.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/qubes/api/admin.py b/qubes/api/admin.py index f06381f5..c62c4ea5 100644 --- a/qubes/api/admin.py +++ b/qubes/api/admin.py @@ -27,6 +27,7 @@ import functools import itertools import os import string +import subprocess import libvirt import pkg_resources @@ -1146,8 +1147,16 @@ class QubesAdminAPI(qubes.api.AbstractQubesAPI): except KeyError: raise qubes.exc.QubesException( 'Invalid backup profile - invalid passphrase_vm') - passphrase, _ = yield from passphrase_vm.run_service_for_stdio( - 'qubes.BackupPassphrase+' + self.arg) + try: + passphrase, _ = yield from passphrase_vm.run_service_for_stdio( + 'qubes.BackupPassphrase+' + self.arg) + # make it foolproof against "echo passphrase" implementation + passphrase = passphrase.strip() + assert b'\n' not in passphrase + except subprocess.CalledProcessError: + raise qubes.exc.QubesException( + 'Failed to retrieve passphrase from \'{}\' VM'.format( + passphrase_vm_name)) else: raise qubes.exc.QubesException( 'Invalid backup profile - you need to '