Blame SOURCES/firewalld-0.6.1-firewall.core.fw_nm-identify-the-connections-by-uuid.patch

89e515
From 0ce07e30014a8ee6b2a8a4909c313f207d9c9b31 Mon Sep 17 00:00:00 2001
89e515
From: Lubomir Rintel <lkundrak@v3.sk>
89e515
Date: Mon, 16 Jul 2018 17:43:04 +0200
89e515
Subject: [PATCH 2/3] firewall.core.fw_nm: identify the connections by uuid
89e515
89e515
...as opposed by id. Uuid is guarranteed to be uniquie, while the id is
89e515
provided merely for convenience without any guarrantees.
89e515
89e515
(cherry picked from commit 624039964bd16e5e0e8ffb73e708d3d0c40e89d3)
89e515
---
89e515
 src/firewall-applet        | 38 ++++++++++++++++++++------------------
89e515
 src/firewall-config        | 45 +++++++++++++++++++++++++--------------------
89e515
 src/firewall/core/fw_nm.py | 16 ++++++++--------
89e515
 3 files changed, 53 insertions(+), 46 deletions(-)
89e515
89e515
diff --git a/src/firewall-applet b/src/firewall-applet
89e515
index 3dc149c32755..86aaccab9f88 100755
89e515
--- a/src/firewall-applet
89e515
+++ b/src/firewall-applet
89e515
@@ -155,11 +155,12 @@ class ZoneInterfaceEditor(QtGui.QDialog):
89e515
 # ZoneConnectionEditor ########################################################
89e515
 
89e515
 class ZoneConnectionEditor(ZoneInterfaceEditor):
89e515
-    def __init__(self, fw, connection, zone):
89e515
+    def __init__(self, fw, connection, connection_name, zone):
89e515
         self.fw = fw
89e515
         self.connection = connection
89e515
+        self.connection_name = connection_name
89e515
         self.zone = None
89e515
-        self.title = _("Select zone for connection '%s'") % self.connection
89e515
+        self.title = _("Select zone for connection '%s'") % self.connection_name
89e515
 
89e515
         QtGui.QDialog.__init__(self)
89e515
         self.create_ui(zone)
89e515
@@ -168,12 +169,12 @@ class ZoneConnectionEditor(ZoneInterfaceEditor):
89e515
         # apply changes
89e515
         try:
89e515
             nm_set_zone_of_connection(self.get_zone(), self.connection)
89e515
-        except Exception as msg:
89e515
-            text = _("Failed to set zone {zone} for connection {connection}")
89e515
+        except Exception:
89e515
+            text = _("Failed to set zone {zone} for connection {connection_name}")
89e515
             QtGui.QMessageBox.warning(None, fromUTF8(escape(self.title)),
89e515
                                       escape(text.format(
89e515
                                           zone=self.get_zone(),
89e515
-                                          connection=self.connection)))
89e515
+                                          connection_name=self.connection_name)))
89e515
         self.hide()
89e515
 
89e515
 # ZoneSourceEditor ############################################################
89e515
@@ -428,7 +429,7 @@ class TrayApplet(QtGui.QSystemTrayIcon):
89e515
 
89e515
         self.active_zones = { }
89e515
         self.connections = { }
89e515
-        self.connections_uuid = { }
89e515
+        self.connections_name = { }
89e515
         self.default_zone = None
89e515
         self.zone_connection_editors = { }
89e515
         self.zone_interface_editors = { }
89e515
@@ -666,30 +667,31 @@ class TrayApplet(QtGui.QSystemTrayIcon):
89e515
         # NM controlled connections
89e515
         for interface in self.connections:
89e515
             connection = self.connections[interface]
89e515
-            if connection not in self.connections_uuid:
89e515
-                uuid = None
89e515
+            if connection not in self.connections_name:
89e515
+                connection_name = None
89e515
             else:
89e515
-                uuid = self.connections_uuid[connection]
89e515
+                connection_name = self.connections_name[connection]
89e515
             zone = nm_get_zone_of_connection(connection)
89e515
-            connections[connection] = [ zone, uuid ]
89e515
+            connections[connection] = [ zone, connection_name ]
89e515
 
89e515
         binding = _("{entry} (Zone: {zone})")
89e515
 
89e515
         # add NM controlled bindings
89e515
         for connection in sorted(connections):
89e515
             zone = connections[connection][0]
89e515
+            connection_name = connections[connection][1]
89e515
             if zone == "":
89e515
                 _binding = _("{entry} (Default Zone: {default_zone})")
89e515
                 action = QtGui.QAction(
89e515
                     fromUTF8(escape(
89e515
                         _binding.format(default_zone=self.default_zone,
89e515
-                                        entry=connection))), self)
89e515
+                                        entry=connection_name))), self)
89e515
             else:
89e515
                 action = QtGui.QAction(
89e515
                     fromUTF8(escape(binding.format(zone=zone,
89e515
-                                                   entry=connection))), self)
89e515
+                                                   entry=connection_name))), self)
89e515
             action.triggered.connect(functools.partial(
89e515
-                self.zone_connection_editor, connection, zone))
89e515
+                self.zone_connection_editor, connection, connection_name, zone))
89e515
             self.left_menu.addAction(action)
89e515
 
89e515
         # add interfaces entry
89e515
@@ -729,13 +731,13 @@ class TrayApplet(QtGui.QSystemTrayIcon):
89e515
         editor.raise_()
89e515
         editor.show()
89e515
 
89e515
-    def zone_connection_editor(self, connection, zone):
89e515
+    def zone_connection_editor(self, connection, connection_name, zone):
89e515
         if connection in self.zone_connection_editors:
89e515
             self.zone_connection_editors[connection].set_zone(zone)
89e515
             self.zone_connection_editors[connection].show()
89e515
             return self.zone_connection_editors[connection].raise_()
89e515
 
89e515
-        editor = ZoneConnectionEditor(self.fw, connection, zone)
89e515
+        editor = ZoneConnectionEditor(self.fw, connection, connection_name, zone)
89e515
         self.zone_connection_editors[connection] = editor
89e515
         editor.show()
89e515
         editor.raise_()
89e515
@@ -755,15 +757,15 @@ class TrayApplet(QtGui.QSystemTrayIcon):
89e515
 
89e515
     def nm_signal_receiver(self, *args, **kwargs):
89e515
         self.connections.clear()
89e515
-        self.connections_uuid.clear()
89e515
+        self.connections_name.clear()
89e515
 
89e515
         # do not use NMClient could result in python core dump
89e515
 
89e515
         if nm_is_imported():
89e515
             text = _("Failed to get connections from NetworkManager")
89e515
             try:
89e515
-                nm_get_connections(self.connections, self.connections_uuid)
89e515
-            except Exception as msg:
89e515
+                nm_get_connections(self.connections, self.connections_name)
89e515
+            except Exception:
89e515
                 self.notify(escape(text), urgency=Notify.Urgency.CRITICAL)
89e515
                 if text not in self.tooltip_messages:
89e515
                     self.tooltip_messages.append(text)
89e515
diff --git a/src/firewall-config b/src/firewall-config
89e515
index 02bffabf457c..223c0ff6d27d 100755
89e515
--- a/src/firewall-config
89e515
+++ b/src/firewall-config
89e515
@@ -1368,7 +1368,7 @@ class FirewallConfig(object):
89e515
         # connect
89e515
 
89e515
         self.connections = { }
89e515
-        self.connections_uuid = { }
89e515
+        self.connections_name = { }
89e515
 
89e515
         if nm_is_imported():
89e515
             self.fw.bus.add_signal_receiver(
89e515
@@ -1428,11 +1428,11 @@ class FirewallConfig(object):
89e515
             self.fw.changeZoneOfInterface(editor.get_zone(), interface)
89e515
         del self.zone_interface_editors[interface]
89e515
 
89e515
-    def change_zone_connection_editor(self, item, connection, zone):
89e515
+    def change_zone_connection_editor(self, item, connection, connection_name, zone):
89e515
         if connection in self.zone_connection_editors:
89e515
             return self.zone_connection_editors[connection].present()
89e515
 
89e515
-        editor = ZoneConnectionEditor(self.fw, connection, zone)
89e515
+        editor = ZoneConnectionEditor(self.fw, connection, connection_name, zone)
89e515
         editor.set_icon(self.icon)
89e515
         editor.set_position(Gtk.WindowPosition.CENTER_ON_PARENT)
89e515
         editor.set_transient_for(self.mainWindow)
89e515
@@ -1557,14 +1557,14 @@ class FirewallConfig(object):
89e515
         self.update_active_zones()
89e515
 
89e515
         self.connections.clear()
89e515
-        self.connections_uuid.clear()
89e515
+        self.connections_name.clear()
89e515
 
89e515
         # do not use NMClient could result in python core dump
89e515
 
89e515
         if nm_is_imported():
89e515
             try:
89e515
-                nm_get_connections(self.connections, self.connections_uuid)
89e515
-            except Exception as msg:
89e515
+                nm_get_connections(self.connections, self.connections_name)
89e515
+            except Exception:
89e515
                 text = _("Failed to get connections from NetworkManager")
89e515
                 self._warning(text)
89e515
 
89e515
@@ -1572,12 +1572,14 @@ class FirewallConfig(object):
89e515
         while iter:
89e515
             interface = self.interfaceStore.get_value(iter, 0)
89e515
             if interface in self.connections:
89e515
-                zone = nm_get_zone_of_connection(self.connections[interface])
89e515
+                connection = self.connections[interface]
89e515
+                connection_name = self.connections_name[connection]
89e515
+                zone = nm_get_zone_of_connection(connection)
89e515
                 if zone == "":
89e515
                     comment = self.default_zone_used_by_label % \
89e515
-                              self.connections[interface]
89e515
+                              connection_name
89e515
                 else:
89e515
-                    comment = self.used_by_label % self.connections[interface]
89e515
+                    comment = self.used_by_label % connection_name
89e515
                 self.interfaceStore.set_value(iter, 1, comment)
89e515
             iter = self.interfaceStore.iter_next(iter)
89e515
         self.change_interface_selection_cb(self.interfaceView.get_selection())
89e515
@@ -2427,37 +2429,38 @@ class FirewallConfig(object):
89e515
         # add NM controlled entries
89e515
         for connection in sorted(connections):
89e515
             [ zone, _interfaces ] = connections[connection]
89e515
+            connection_name = self.connections_name[connection]
89e515
 
89e515
             item = Gtk.MenuItem.new()
89e515
             hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=6)
89e515
             label = Gtk.Label()
89e515
             if zone == "":
89e515
                 label.set_markup("%s (%s)\n<small>%s: %s</small>" % \
89e515
-                                 (connection, ",".join(_interfaces),
89e515
+                                 (connection_name, ",".join(_interfaces),
89e515
                                   escape(_("Default Zone")), self.default_zone))
89e515
             else:
89e515
                 label.set_markup("%s (%s)\n<small>%s: %s</small>" % \
89e515
-                                 (connection, ",".join(_interfaces),
89e515
+                                 (connection_name, ",".join(_interfaces),
89e515
                                   escape(_("Zone")), zone))
89e515
             label.set_alignment(0, 0.5)
89e515
             label.set_padding(12, 0)
89e515
             hbox.pack_start(label, True, True, 0)
89e515
             item.add(hbox)
89e515
-            item.connect("activate", self.change_zone_connection_editor, connection, zone)
89e515
+            item.connect("activate", self.change_zone_connection_editor, connection, connection_name, zone)
89e515
             self.left_menu.append(item)
89e515
 
89e515
             if zone == "":
89e515
                 self.bindingsStore.append(
89e515
                     self.connectionsIter,
89e515
                     [ "%s (%s)\n<small>%s</small>" % (
89e515
-                        connection, ",".join(_interfaces),
89e515
+                        connection_name, ",".join(_interfaces),
89e515
                         _("Default Zone: %s") % self.default_zone),
89e515
                       connection, zone ])
89e515
             else:
89e515
                 self.bindingsStore.append(
89e515
                     self.connectionsIter,
89e515
                     [ "%s (%s)\n<small>%s</small>" % (
89e515
-                        connection, ",".join(_interfaces),
89e515
+                        connection_name, ",".join(_interfaces),
89e515
                         _("Zone: %s") % zone),
89e515
                       connection, zone ])
89e515
 
89e515
@@ -2683,7 +2686,7 @@ class FirewallConfig(object):
89e515
         zone = self.bindingsStore.get_value(iter, 2)
89e515
 
89e515
         if self.bindingsStore.get_value(parent_iter, 0) == _("Connections"):
89e515
-            self.change_zone_connection_editor(None, item, zone)
89e515
+            self.change_zone_connection_editor(None, item, self.connections_name[item], zone)
89e515
         elif self.bindingsStore.get_value(parent_iter, 0) == _("Interfaces"):
89e515
             self.change_zone_interface_editor(None, item, zone)
89e515
         elif self.bindingsStore.get_value(parent_iter, 0) == _("Sources"):
89e515
@@ -3894,9 +3897,10 @@ class FirewallConfig(object):
89e515
         interface = self.interfaceStore.get_value(iter, 0)
89e515
         if interface in self.connections:
89e515
             connection = self.connections[interface]
89e515
+            connection_name = self.connections_name[connection]
89e515
             if selected_zone == self.default_zone:
89e515
                 selected_zone = nm_get_zone_of_connection(connection)
89e515
-            editor = ZoneConnectionEditor(self.fw, connection, selected_zone)
89e515
+            editor = ZoneConnectionEditor(self.fw, connection, connection_name, selected_zone)
89e515
             editor.set_icon(self.icon)
89e515
             editor.set_position(Gtk.WindowPosition.CENTER_ON_PARENT)
89e515
             editor.set_transient_for(self.mainWindow)
89e515
@@ -3905,9 +3909,9 @@ class FirewallConfig(object):
89e515
                 result = editor.run()
89e515
             except Exception:
89e515
                 text = _("Failed to set zone {zone} "
89e515
-                         "for connection {connection}")
89e515
+                         "for connection {connection_name}")
89e515
                 self._warning(text.format(zone=editor.get_zone(),
89e515
-                                          connection=editor.connection))
89e515
+                                          connection_name=editor.connection_name))
89e515
             editor.hide()
89e515
         else:
89e515
             self.add_edit_interface(False)
89e515
@@ -8115,11 +8119,12 @@ class ZoneInterfaceEditor(Gtk.Dialog):
89e515
         self.fw.changeZoneOfInterface(self.get_zone(), self.interface)
89e515
 
89e515
 class ZoneConnectionEditor(ZoneInterfaceEditor):
89e515
-    def __init__(self, fw, connection, zone):
89e515
+    def __init__(self, fw, connection, connection_name, zone):
89e515
         self.fw = fw
89e515
         self.connection = connection
89e515
+        self.connection_name = connection_name
89e515
         self.zone = None
89e515
-        self.title = _("Select zone for connection '%s'") % self.connection
89e515
+        self.title = _("Select zone for connection '%s'") % self.connection_name
89e515
 
89e515
         Gtk.Dialog.__init__(self, self.title)
89e515
         self.create_ui(zone)
89e515
diff --git a/src/firewall/core/fw_nm.py b/src/firewall/core/fw_nm.py
89e515
index 76901cee2adf..d21cc25feb8b 100644
89e515
--- a/src/firewall/core/fw_nm.py
89e515
+++ b/src/firewall/core/fw_nm.py
89e515
@@ -73,7 +73,7 @@ def nm_get_zone_of_connection(connection):
89e515
     """
89e515
     check_nm_imported()
89e515
 
89e515
-    con = nm_get_client().get_connection_by_id(connection)
89e515
+    con = nm_get_client().get_connection_by_uuid(connection)
89e515
     if con is None:
89e515
         return False
89e515
 
89e515
@@ -94,7 +94,7 @@ def nm_set_zone_of_connection(zone, connection):
89e515
     """
89e515
     check_nm_imported()
89e515
 
89e515
-    con = nm_get_client().get_connection_by_id(connection)
89e515
+    con = nm_get_client().get_connection_by_uuid(connection)
89e515
     if con is None:
89e515
         return False
89e515
 
89e515
@@ -107,14 +107,14 @@ def nm_set_zone_of_connection(zone, connection):
89e515
     setting_con.set_property("zone", zone)
89e515
     return con.commit_changes(True, None)
89e515
 
89e515
-def nm_get_connections(connections, connections_uuid):
89e515
+def nm_get_connections(connections, connections_name):
89e515
     """Get active connections from NM
89e515
     @param connections return dict
89e515
-    @param connections_uuid return dict
89e515
+    @param connections_name return dict
89e515
     """
89e515
 
89e515
     connections.clear()
89e515
-    connections_uuid.clear()
89e515
+    connections_name.clear()
89e515
 
89e515
     check_nm_imported()
89e515
 
89e515
@@ -129,9 +129,9 @@ def nm_get_connections(connections, connections_uuid):
89e515
         uuid = active_con.get_uuid()
89e515
         devices = active_con.get_devices()
89e515
 
89e515
-        connections_uuid[name] = uuid
89e515
+        connections_name[uuid] = name
89e515
         for dev in devices:
89e515
-            connections[dev.get_iface()] = name
89e515
+            connections[dev.get_iface()] = uuid
89e515
 
89e515
 def nm_get_connection_of_interface(interface):
89e515
     """Get connection from NM that is using the interface
89e515
@@ -148,7 +148,7 @@ def nm_get_connection_of_interface(interface):
89e515
     if active_con is None:
89e515
         return None
89e515
 
89e515
-    return active_con.get_id()
89e515
+    return active_con.get_uuid()
89e515
 
89e515
 def nm_get_bus_name():
89e515
     if not _nm_imported:
89e515
-- 
89e515
2.16.3
89e515