firewalld/firewalld-0.2.12-bz951850_4.patch
2013-06-20 14:18:02 +02:00

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