205 lines
7.2 KiB
Diff
205 lines
7.2 KiB
Diff
From 0b27075acee06de9033d02800ee185984f38b076 Mon Sep 17 00:00:00 2001
|
|
From: Jiri Popelka <jpopelka@redhat.com>
|
|
Date: Thu, 18 Apr 2013 16:48:00 +0200
|
|
Subject: [PATCH] client.handle_exceptions(): do not loop forever
|
|
|
|
The loop has been there probably to be able to retry
|
|
("Retry" button in firewall-config's error dialog)
|
|
last function call in case of exception.
|
|
In fact in most cases the next try results
|
|
in the same exception so it's useless to offer such
|
|
option at all.
|
|
|
|
Moreover up to now the handler has had only
|
|
2 possibilities: quit the program or
|
|
repeat (forever) the last call.
|
|
|
|
With this patch we can in the handler for example
|
|
ignore the exception and continue the program.
|
|
---
|
|
src/firewall-config | 59 ++++++++++++++++----------------------------------
|
|
src/firewall/client.py | 36 +++++++++++++++---------------
|
|
2 files changed, 37 insertions(+), 58 deletions(-)
|
|
|
|
diff --git a/src/firewall-config b/src/firewall-config
|
|
index 0d0218c..e502a59 100755
|
|
--- a/src/firewall-config
|
|
+++ b/src/firewall-config
|
|
@@ -444,7 +444,7 @@ class FirewallConfig(object):
|
|
|
|
# firewall client
|
|
|
|
- client.exception_handler = self._error
|
|
+ client.exception_handler = self._exception_handler
|
|
self.fw = client.FirewallClient(wait=1)
|
|
|
|
self.fw.connect("connection-changed", self.connection_changed)
|
|
@@ -514,7 +514,7 @@ class FirewallConfig(object):
|
|
def _error(self, msg):
|
|
if self._dialog("<b>"+_("Error")+"</b>",
|
|
message_type=Gtk.MessageType.ERROR, msg=msg,
|
|
- buttons=((_("Retry"), 0),("gtk-quit", 1))) == 1:
|
|
+ buttons=(("gtk-ok", 0),("gtk-quit", 1))) == 1:
|
|
self.onQuit()
|
|
|
|
def connection_changed(self):
|
|
@@ -770,13 +770,17 @@ class FirewallConfig(object):
|
|
def conf_zone_updated_cb(self, zone):
|
|
self.onChangeZone()
|
|
|
|
- def _check_name_exception(self, exception_message, name):
|
|
+ def _exception_handler(self, exception_message):
|
|
if "INVALID_NAME" in exception_message:
|
|
- self._warning(_("Invalid name: %s " % name))
|
|
+ msg = exception_message.replace("INVALID_NAME", _("Invalid name"))
|
|
+ self._warning(msg)
|
|
elif "NAME_CONFLICT" in exception_message:
|
|
- self._warning(_("Name '%s' already exists" % name))
|
|
+ msg = exception_message.replace("NAME_CONFLICT", _("Name already exists"))
|
|
+ self._warning(msg)
|
|
+ elif "NO_DEFAULTS" in exception_message:
|
|
+ pass
|
|
else:
|
|
- self._warning(exception_message)
|
|
+ self._error(exception_message)
|
|
|
|
def combobox_select_text(self, combobox, value):
|
|
model = combobox.get_model()
|
|
@@ -1020,12 +1024,8 @@ class FirewallConfig(object):
|
|
return
|
|
active_zone = self.get_active_zone()
|
|
zone = self.fw.config().getZoneByName(active_zone)
|
|
- try:
|
|
- zone.loadDefaults()
|
|
- self.onChangeZone()
|
|
- except DBusException:
|
|
- # no default settings
|
|
- pass
|
|
+ zone.loadDefaults()
|
|
+ self.onChangeZone()
|
|
|
|
def onZoneBaseDialogChanged(self, *args):
|
|
self.zoneBaseDialogOkButton.set_sensitive(True)
|
|
@@ -1155,11 +1155,7 @@ class FirewallConfig(object):
|
|
return
|
|
zone.rename(name)
|
|
else:
|
|
- try:
|
|
- self.fw.config().addZone(name, settings)
|
|
- except DBusException as e:
|
|
- self._check_name_exception(e.get_dbus_message(), name)
|
|
- return
|
|
+ self.fw.config().addZone(name, settings)
|
|
|
|
self.load_zones()
|
|
#TODO: change active zone
|
|
@@ -1782,12 +1778,7 @@ class FirewallConfig(object):
|
|
return
|
|
service.rename(name)
|
|
else:
|
|
- try:
|
|
- self.fw.config().addService(name, settings)
|
|
- except DBusException as e:
|
|
- self._check_name_exception(e.get_dbus_message(), name)
|
|
- return
|
|
-
|
|
+ self.fw.config().addService(name, settings)
|
|
|
|
self.load_services()
|
|
#TODO: change active service
|
|
@@ -1796,12 +1787,8 @@ class FirewallConfig(object):
|
|
def onServiceDialogLoadDefaultsService(self, *args):
|
|
active_service = self.get_active_service()
|
|
service = self.fw.config().getServiceByName(active_service)
|
|
- try:
|
|
- service.loadDefaults()
|
|
- self.onChangeService()
|
|
- except DBusException:
|
|
- # no default settings
|
|
- pass
|
|
+ service.loadDefaults()
|
|
+ self.onChangeService()
|
|
|
|
def onServiceDialogAddModule(self, *args):
|
|
self.add_edit_module(True)
|
|
@@ -2131,11 +2118,7 @@ class FirewallConfig(object):
|
|
return
|
|
icmp.rename(name)
|
|
else:
|
|
- try:
|
|
- self.fw.config().addIcmpType(name, settings)
|
|
- except DBusException as e:
|
|
- self._check_name_exception(e.get_dbus_message(), name)
|
|
- return
|
|
+ self.fw.config().addIcmpType(name, settings)
|
|
|
|
self.load_icmps()
|
|
#TODO: change active icmp
|
|
@@ -2144,12 +2127,8 @@ class FirewallConfig(object):
|
|
def onIcmpDialogLoadDefaultsIcmp(self, *args):
|
|
active_icmp = self.get_active_icmp()
|
|
icmp = self.fw.config().getIcmpTypeByName(active_icmp)
|
|
- try:
|
|
- icmp.loadDefaults()
|
|
- self.onChangeIcmp()
|
|
- except DBusException:
|
|
- # no default settings
|
|
- pass
|
|
+ icmp.loadDefaults()
|
|
+ self.onChangeIcmp()
|
|
|
|
def icmp_dialog_dest_ipv4_check_cb(self, *args):
|
|
active_icmp = self.get_active_icmp()
|
|
diff --git a/src/firewall/client.py b/src/firewall/client.py
|
|
index 9d9dd4a..75664b0 100644
|
|
--- a/src/firewall/client.py
|
|
+++ b/src/firewall/client.py
|
|
@@ -40,26 +40,26 @@ exception_handler = None
|
|
def handle_exceptions(func, *args, **kwargs):
|
|
"""Decorator to handle exceptions
|
|
"""
|
|
- while 1:
|
|
- try:
|
|
- return func(*args, **kwargs)
|
|
- except dbus.exceptions.DBusException as e:
|
|
- dbus_message = e.get_dbus_message()
|
|
- dbus_name = e.get_dbus_name()
|
|
- if not exception_handler:
|
|
- raise
|
|
- if "NotAuthorizedException" in dbus_name:
|
|
- exception_handler(_("Authorization failed."))
|
|
- else:
|
|
- if dbus_message:
|
|
- exception_handler(dbus_message)
|
|
- else:
|
|
- exception_handler(str(e))
|
|
- except Exception as e:
|
|
- if not exception_handler:
|
|
- raise
|
|
+ #while 1:
|
|
+ try:
|
|
+ return func(*args, **kwargs)
|
|
+ except dbus.exceptions.DBusException as e:
|
|
+ dbus_message = e.get_dbus_message()
|
|
+ dbus_name = e.get_dbus_name()
|
|
+ if not exception_handler:
|
|
+ raise
|
|
+ if "NotAuthorizedException" in dbus_name:
|
|
+ exception_handler(_("Authorization failed."))
|
|
+ else:
|
|
+ if dbus_message:
|
|
+ exception_handler(dbus_message)
|
|
else:
|
|
exception_handler(str(e))
|
|
+ except Exception as e:
|
|
+ if not exception_handler:
|
|
+ raise
|
|
+ else:
|
|
+ exception_handler(str(e))
|
|
|
|
# zone config setings
|
|
|
|
--
|
|
1.8.2.1
|
|
|