From b20e40b6cf584b69f2f7f0341b2538c279085781 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= Date: Sun, 11 Oct 2015 01:55:46 +0200 Subject: [PATCH] qrexec: fallback to kdialog if zenity is not installed Fixes QubesOS/qubes-issues#1277 (cherry picked from commit c8ce468c7f92ea87295caa39752bc77cc492ea91) --- qrexec/qrexec-policy | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/qrexec/qrexec-policy b/qrexec/qrexec-policy index 137c9fc..b900b72 100755 --- a/qrexec/qrexec-policy +++ b/qrexec/qrexec-policy @@ -144,10 +144,25 @@ def add_always_allow(domain, target, service_name, options): f.write("".join(lines)) f.close() +def info_dialog(msg_type, text): + if msg_type not in ['info', 'warning', 'error']: + raise ValueError("Invalid msg_type value") + try: + subprocess.call(["/usr/bin/zenity", "--{}".format(msg_type), "--text", + text]) + except OSError: + kdialog_msg_type = { + 'info': 'msgbox', + 'warning': 'sorry', + 'error': 'error' + }[msg_type] + subprocess.call(["/usr/bin/kdialog", "--{}".format(kdialog_msg_type), + text]) + def policy_editor(domain, target, service_name): text = "No policy definition found for " + service_name + " action. " text+= "Please create a policy file in Dom0 in " + POLICY_FILE_DIR + "/" + service_name - subprocess.call(["/usr/bin/zenity", "--info", "--text", text]) + info_dialog("warning", text) def main(): usage = "usage: %prog [options] " @@ -173,7 +188,7 @@ def main(): print >> sys.stderr, "Rpc failed (unknown domain):", domain, target, service_name text = "Domain '%s' doesn't exist (service %s called by domain %s)." % ( target, service_name, domain) - subprocess.call(["/usr/bin/zenity", "--error", "--text", text]) + info_dialog("error", text) exit(1) policy_list=read_policy_file(service_name)