Repository : http://git.fedorahosted.org/cgit/firewalld-recode.git
On branch : master
commit 01a689f13ba047027f0b37f89628750d0e638484 Author: Daniel Kopecek dkopecek@redhat.com Date: Fri Dec 5 11:49:43 2014 +0100
Update DBus methods to use the new internal firewall API
src/Daemon/DBus/getIcmpTypeSettings.cpp | 4 ++-- src/Daemon/DBus/getZoneSettings.cpp | 2 +- src/Daemon/DBus/zone/addForwardPort.cpp | 1 + src/Daemon/DBus/zone/addIcmpBlock.cpp | 1 + src/Daemon/DBus/zone/addInterface.cpp | 2 +- src/Daemon/DBus/zone/addMasquerade.cpp | 1 + src/Daemon/DBus/zone/addPort.cpp | 2 +- src/Daemon/DBus/zone/addRichRule.cpp | 1 + src/Daemon/DBus/zone/addService.cpp | 1 + src/Daemon/DBus/zone/addSource.cpp | 1 + src/Daemon/DBus/zone/changeZoneOfInterface.cpp | 5 +++-- src/Daemon/DBus/zone/changeZoneOfSource.cpp | 5 +++-- src/Daemon/DBus/zone/getForwardPorts.cpp | 2 +- src/Daemon/DBus/zone/getZoneOfInterface.cpp | 3 +-- src/Daemon/DBus/zone/getZoneOfSource.cpp | 3 +-- src/Daemon/DBus/zone/removeForwardPort.cpp | 4 +++- src/Daemon/DBus/zone/removeIcmpBlock.cpp | 4 +++- src/Daemon/DBus/zone/removeInterface.cpp | 1 + src/Daemon/DBus/zone/removeMasquerade.cpp | 1 + src/Daemon/DBus/zone/removePort.cpp | 1 + src/Daemon/DBus/zone/removeRichRule.cpp | 1 + src/Daemon/DBus/zone/removeService.cpp | 1 + src/Daemon/DBus/zone/removeSource.cpp | 1 + src/Daemon/Firewall/Firewall.cpp | 12 ++++++------ src/Daemon/Firewall/Firewall.hpp | 4 ++-- src/Daemon/Firewall/ZoneObject.hpp | 16 ++++++++++++++++ 26 files changed, 56 insertions(+), 24 deletions(-)
diff --git a/src/Daemon/DBus/getIcmpTypeSettings.cpp b/src/Daemon/DBus/getIcmpTypeSettings.cpp index d7d5269..73fa769 100644 --- a/src/Daemon/DBus/getIcmpTypeSettings.cpp +++ b/src/Daemon/DBus/getIcmpTypeSettings.cpp @@ -42,10 +42,10 @@ namespace firewalld
UStringVector destinations;
- if (icmptype->flags().test(ICMPType::Flags::IPv4)) { + if (icmptype->getFlag(ICMPType::Flag::IPv4)) { destinations.push_back("ipv4"); } - if (icmptype->flags().test(ICMPType::Flags::IPv6)) { + if (icmptype->getFlag(ICMPType::Flag::IPv6)) { destinations.push_back("ipv6"); }
diff --git a/src/Daemon/DBus/getZoneSettings.cpp b/src/Daemon/DBus/getZoneSettings.cpp index fa23b9e..d1bbbde 100644 --- a/src/Daemon/DBus/getZoneSettings.cpp +++ b/src/Daemon/DBus/getZoneSettings.cpp @@ -68,7 +68,7 @@ namespace firewalld
DBusResultBuilder& forward_array = result.addBuilder("a(ssss)"); int forward_index = 0; - for (auto const& map_entry : zone->getForwardPorts()) { + for (auto const& map_entry : zone->getPortForwards()) { Pointer<const PortForward> port_forward = map_entry.second; forward_array[forward_index] << UString(port_forward->sourcePort()->range().toString()); switch(port_forward->protocol()) { diff --git a/src/Daemon/DBus/zone/addForwardPort.cpp b/src/Daemon/DBus/zone/addForwardPort.cpp index bd1e185..72a2a4a 100644 --- a/src/Daemon/DBus/zone/addForwardPort.cpp +++ b/src/Daemon/DBus/zone/addForwardPort.cpp @@ -48,6 +48,7 @@ namespace firewalld Pointer<PortForward> port_forward = makePointer<PortForward>(src_port, dst_port, dst_address);
zone->addPortForward(port_forward); + _fw.commit(); result = zone->name(); } catch(const FirewallError& ex) { diff --git a/src/Daemon/DBus/zone/addIcmpBlock.cpp b/src/Daemon/DBus/zone/addIcmpBlock.cpp index 0b68205..6922483 100644 --- a/src/Daemon/DBus/zone/addIcmpBlock.cpp +++ b/src/Daemon/DBus/zone/addIcmpBlock.cpp @@ -44,6 +44,7 @@ namespace firewalld }
zone->addICMPBlock(icmptype); + _fw.commit(); result = zone->name(); } catch(const FirewallError& ex) { diff --git a/src/Daemon/DBus/zone/addInterface.cpp b/src/Daemon/DBus/zone/addInterface.cpp index 577f7fe..78f8966 100644 --- a/src/Daemon/DBus/zone/addInterface.cpp +++ b/src/Daemon/DBus/zone/addInterface.cpp @@ -36,8 +36,8 @@ namespace firewalld Pointer<Interface> interface = makePointer<Interface>(interface_identifier); Pointer<Zone> zone = _fw.getWritableZone(zone_name.empty() ? _fw.getDefaultZoneName() : zone_name); - zone->addInterface(interface); + _fw.commit(); _dbus.broadcastSignal("InterfaceAdded", DBUS_INTERFACE_ZONE, parameters); result = zone->name(); } diff --git a/src/Daemon/DBus/zone/addMasquerade.cpp b/src/Daemon/DBus/zone/addMasquerade.cpp index 316abbf..3eaf453 100644 --- a/src/Daemon/DBus/zone/addMasquerade.cpp +++ b/src/Daemon/DBus/zone/addMasquerade.cpp @@ -36,6 +36,7 @@ namespace firewalld Pointer<Zone> zone = _fw.getWritableZone(zone_name.empty() ? _fw.getDefaultZoneName() : zone_name); zone->setMasquerade(true); + _fw.commit(); result = zone->name(); } catch(const FirewallError& ex) { diff --git a/src/Daemon/DBus/zone/addPort.cpp b/src/Daemon/DBus/zone/addPort.cpp index e515a9d..9a7fb90 100644 --- a/src/Daemon/DBus/zone/addPort.cpp +++ b/src/Daemon/DBus/zone/addPort.cpp @@ -40,8 +40,8 @@ namespace firewalld Pointer<Zone> zone = _fw.getWritableZone(zone_name.empty() ? _fw.getDefaultZoneName() : zone_name); Pointer<Port> port = makePointer<Port>(range_spec, protocol); - port->setZone(zone); zone->addPort(port); + _fw.commit(); _dbus.broadcastSignal("PortAdded", DBUS_INTERFACE_ZONE, parameters); result = zone->name(); } diff --git a/src/Daemon/DBus/zone/addRichRule.cpp b/src/Daemon/DBus/zone/addRichRule.cpp index 87a5704..81ffd88 100644 --- a/src/Daemon/DBus/zone/addRichRule.cpp +++ b/src/Daemon/DBus/zone/addRichRule.cpp @@ -37,6 +37,7 @@ namespace firewalld _fw.getDefaultZoneName() : zone_name); Pointer<RichRule> rich_rule = RichRuleParser::parse(rich_rule_spec); zone->addRichRule(rich_rule); + _fw.commit(); _dbus.broadcastSignal("RichRuleAdded", DBUS_INTERFACE_ZONE, parameters); result = zone->name(); } diff --git a/src/Daemon/DBus/zone/addService.cpp b/src/Daemon/DBus/zone/addService.cpp index 034f61d..d0cac67 100644 --- a/src/Daemon/DBus/zone/addService.cpp +++ b/src/Daemon/DBus/zone/addService.cpp @@ -37,6 +37,7 @@ namespace firewalld _fw.getDefaultZoneName() : zone_name); Pointer<Service> service = makePointer<Service>(service_identifier); zone->addService(service); + _fw.commit(); _dbus.broadcastSignal("ServiceAdded", DBUS_INTERFACE_ZONE, parameters); result = zone->name(); } diff --git a/src/Daemon/DBus/zone/addSource.cpp b/src/Daemon/DBus/zone/addSource.cpp index 47a7cda..5c64575 100644 --- a/src/Daemon/DBus/zone/addSource.cpp +++ b/src/Daemon/DBus/zone/addSource.cpp @@ -37,6 +37,7 @@ namespace firewalld Pointer<Zone> zone = _fw.getWritableZone(zone_name.empty() ? _fw.getDefaultZoneName() : zone_name); zone->addSource(source); + _fw.commit(); _dbus.broadcastSignal("SourceAdded", DBUS_INTERFACE_ZONE, parameters); result = zone->name(); } diff --git a/src/Daemon/DBus/zone/changeZoneOfInterface.cpp b/src/Daemon/DBus/zone/changeZoneOfInterface.cpp index 993ce72..1f9000c 100644 --- a/src/Daemon/DBus/zone/changeZoneOfInterface.cpp +++ b/src/Daemon/DBus/zone/changeZoneOfInterface.cpp @@ -35,8 +35,9 @@ namespace firewalld try { Pointer<Zone> zone_new = _fw.getWritableZone(zone_name.empty() ? _fw.getDefaultZoneName() : zone_name); - Pointer<Interface> interface = _fw.getInterface(interface_identifier); - Pointer<Zone> zone_cur = interface->getZone(); + ZoneObject zone_object = _fw.getInterface(interface_identifier); + Pointer<Zone> zone_cur = zone_object.getZone(); + Pointer<Interface> interface = zone_object.getObjectPtr<Interface>();
zone_cur->removeInterface(interface); zone_new->addInterface(interface); diff --git a/src/Daemon/DBus/zone/changeZoneOfSource.cpp b/src/Daemon/DBus/zone/changeZoneOfSource.cpp index 39de0e1..163c0c7 100644 --- a/src/Daemon/DBus/zone/changeZoneOfSource.cpp +++ b/src/Daemon/DBus/zone/changeZoneOfSource.cpp @@ -34,8 +34,9 @@ namespace firewalld
try { Pointer<Zone> zone_new = _fw.getWritableZone(zone_name); - Pointer<Source> source = _fw.getSource(source_spec); - Pointer<Zone> zone_cur = source->getZone(); + ZoneObject zone_object = _fw.getSource(source_spec); + Pointer<Source> source = zone_object.getObjectPtr<Source>(); + Pointer<Zone> zone_cur = zone_object.getZone();
zone_cur->removeSource(source); zone_new->addSource(source); diff --git a/src/Daemon/DBus/zone/getForwardPorts.cpp b/src/Daemon/DBus/zone/getForwardPorts.cpp index e9587b9..e8abbe6 100644 --- a/src/Daemon/DBus/zone/getForwardPorts.cpp +++ b/src/Daemon/DBus/zone/getForwardPorts.cpp @@ -32,7 +32,7 @@ namespace firewalld
try { Pointer<const Zone> zone = _fw.getZone(zone_name.empty() ? _fw.getDefaultZoneName() : zone_name); - auto port_forwards = zone->getForwardPorts(); + auto port_forwards = zone->getPortForwards(); size_t i = 0;
for (auto const& map_entry : port_forwards) { diff --git a/src/Daemon/DBus/zone/getZoneOfInterface.cpp b/src/Daemon/DBus/zone/getZoneOfInterface.cpp index 5a4daae..3f87d05 100644 --- a/src/Daemon/DBus/zone/getZoneOfInterface.cpp +++ b/src/Daemon/DBus/zone/getZoneOfInterface.cpp @@ -31,8 +31,7 @@ namespace firewalld parameters.get(0, interface_identifier);
try { - Pointer<Interface> interface = _fw.getInterface(interface_identifier); - Pointer<Zone> zone = interface->getZone(); + Pointer<Zone> zone = _fw.getInterface(interface_identifier).getZone(); result = zone->identifier(); } catch(const FirewallError& ex) { diff --git a/src/Daemon/DBus/zone/getZoneOfSource.cpp b/src/Daemon/DBus/zone/getZoneOfSource.cpp index 56a2a7a..89b4cef 100644 --- a/src/Daemon/DBus/zone/getZoneOfSource.cpp +++ b/src/Daemon/DBus/zone/getZoneOfSource.cpp @@ -31,8 +31,7 @@ namespace firewalld parameters.get(0, source_spec);
try { - Pointer<Source> source = _fw.getSource(source_spec); - Pointer<Zone> zone = source->getZone(); + Pointer<Zone> zone = _fw.getSource(source_spec).getZone(); result = zone->identifier(); } catch(const FirewallError& ex) { diff --git a/src/Daemon/DBus/zone/removeForwardPort.cpp b/src/Daemon/DBus/zone/removeForwardPort.cpp index eb8a684..998fc93 100644 --- a/src/Daemon/DBus/zone/removeForwardPort.cpp +++ b/src/Daemon/DBus/zone/removeForwardPort.cpp @@ -45,7 +45,9 @@ namespace firewalld Pointer<Port> dst_port = makePointer<Port>(dst_port_range, protocol); Pointer<PortForward> port_forward = makePointer<PortForward>(src_port, dst_port, dst_address);
- zone->removePortForward(port_forward); + if (zone->removePortForward(port_forward)) { + _fw.commit(); + } result = zone->name(); } catch(const FirewallError& ex) { diff --git a/src/Daemon/DBus/zone/removeIcmpBlock.cpp b/src/Daemon/DBus/zone/removeIcmpBlock.cpp index cdaf380..8a64618 100644 --- a/src/Daemon/DBus/zone/removeIcmpBlock.cpp +++ b/src/Daemon/DBus/zone/removeIcmpBlock.cpp @@ -35,7 +35,9 @@ namespace firewalld try { Pointer<Zone> zone = _fw.getWritableZone(zone_name.empty() ? _fw.getDefaultZoneName() : zone_name); - zone->removeICMPBlock(icmp_type); + if (zone->removeICMPBlock(icmp_type)) { + _fw.commit(); + } result = zone->name(); } catch(const FirewallError& ex) { diff --git a/src/Daemon/DBus/zone/removeInterface.cpp b/src/Daemon/DBus/zone/removeInterface.cpp index eb7d7a9..5cf43f3 100644 --- a/src/Daemon/DBus/zone/removeInterface.cpp +++ b/src/Daemon/DBus/zone/removeInterface.cpp @@ -38,6 +38,7 @@ namespace firewalld _fw.getDefaultZoneName() : zone_name);
if (zone->removeInterface(interface)) { + _fw.commit(); _dbus.broadcastSignal("InterfaceRemoved", DBUS_INTERFACE_ZONE, parameters); }
diff --git a/src/Daemon/DBus/zone/removeMasquerade.cpp b/src/Daemon/DBus/zone/removeMasquerade.cpp index f35a515..760a06f 100644 --- a/src/Daemon/DBus/zone/removeMasquerade.cpp +++ b/src/Daemon/DBus/zone/removeMasquerade.cpp @@ -34,6 +34,7 @@ namespace firewalld Pointer<Zone> zone = _fw.getWritableZone(zone_name.empty() ? _fw.getDefaultZoneName() : zone_name); zone->setMasquerade(false); + _fw.commit(); result = zone->name(); } catch(const FirewallError& ex) { diff --git a/src/Daemon/DBus/zone/removePort.cpp b/src/Daemon/DBus/zone/removePort.cpp index f629ef6..11d115a 100644 --- a/src/Daemon/DBus/zone/removePort.cpp +++ b/src/Daemon/DBus/zone/removePort.cpp @@ -40,6 +40,7 @@ namespace firewalld Pointer<Port> port = makePointer<Port>(range_spec, protocol);
if (zone->removePort(port)) { + _fw.commit(); _dbus.broadcastSignal("PortRemoved", DBUS_INTERFACE_ZONE, parameters); }
diff --git a/src/Daemon/DBus/zone/removeRichRule.cpp b/src/Daemon/DBus/zone/removeRichRule.cpp index 161d24e..bc53def 100644 --- a/src/Daemon/DBus/zone/removeRichRule.cpp +++ b/src/Daemon/DBus/zone/removeRichRule.cpp @@ -38,6 +38,7 @@ namespace firewalld Pointer<RichRule> rich_rule = RichRuleParser::parse(rich_rule_spec);
if (zone->removeRichRule(rich_rule)) { + _fw.commit(); _dbus.broadcastSignal("RichRuleRemoved", DBUS_INTERFACE_ZONE, parameters); }
diff --git a/src/Daemon/DBus/zone/removeService.cpp b/src/Daemon/DBus/zone/removeService.cpp index f2a0d70..462955e 100644 --- a/src/Daemon/DBus/zone/removeService.cpp +++ b/src/Daemon/DBus/zone/removeService.cpp @@ -38,6 +38,7 @@ namespace firewalld Pointer<Service> service = makePointer<Service>(service_identifier);
if (zone->removeService(service)) { + _fw.commit(); _dbus.broadcastSignal("ServiceRemoved", DBUS_INTERFACE_ZONE, parameters); }
diff --git a/src/Daemon/DBus/zone/removeSource.cpp b/src/Daemon/DBus/zone/removeSource.cpp index ce1841e..d366924 100644 --- a/src/Daemon/DBus/zone/removeSource.cpp +++ b/src/Daemon/DBus/zone/removeSource.cpp @@ -39,6 +39,7 @@ namespace firewalld if (zone->removeSource(source)) { // Send the signal only if we actualy removed // something. + _fw.commit(); _dbus.broadcastSignal("SourceRemoved", DBUS_INTERFACE_ZONE, parameters); }
diff --git a/src/Daemon/Firewall/Firewall.cpp b/src/Daemon/Firewall/Firewall.cpp index 4bf9f86..cb08679 100644 --- a/src/Daemon/Firewall/Firewall.cpp +++ b/src/Daemon/Firewall/Firewall.cpp @@ -205,28 +205,28 @@ namespace firewalld return zone; }
- Pointer<Source> Firewall::getSource(const UString& source_spec) const + ZoneObject Firewall::getSource(const UString& source_spec) const { for (auto& map_entry : _zone_map) { Pointer<Zone> zone = map_entry.second; Pointer<Source> source = zone->getSource(source_spec); if (source) { - return source; + return ZoneObject(zone, source); } } - return nullptr; + throw FirewallError("UNKNOWN_SOURCE", "Source " + source_spec + " not found"); }
- Pointer<Interface> Firewall::getInterface(const UString& interface_identifier) const + ZoneObject Firewall::getInterface(const UString& interface_identifier) const { for (auto& map_entry : _zone_map) { Pointer<Zone> zone = map_entry.second; Pointer<Interface> interface = zone->getInterface(interface_identifier); if (interface) { - return interface; + return ZoneObject(zone, interface); } } - return nullptr; + throw FirewallError("UNKNOWN_INTERFACE", "Interface " + interface_identifier + " not found"); }
const UString& Firewall::getDefaultZoneName() const diff --git a/src/Daemon/Firewall/Firewall.hpp b/src/Daemon/Firewall/Firewall.hpp index 426daca..b7ac1b6 100644 --- a/src/Daemon/Firewall/Firewall.hpp +++ b/src/Daemon/Firewall/Firewall.hpp @@ -85,8 +85,8 @@ namespace firewalld */ Pointer<Zone> getWritableZone(const UString& name, bool without_transaction = false);
- Pointer<Source> getSource(const UString& source_spec) const; - Pointer<Interface> getInterface(const UString& interface_identifier) const; + ZoneObject getSource(const UString& source_spec) const; + ZoneObject getInterface(const UString& interface_identifier) const;
const UString& getDefaultZoneName() const; bool setDefaultZoneName(const UString& name); diff --git a/src/Daemon/Firewall/ZoneObject.hpp b/src/Daemon/Firewall/ZoneObject.hpp index 569f81f..f7e7c02 100644 --- a/src/Daemon/Firewall/ZoneObject.hpp +++ b/src/Daemon/Firewall/ZoneObject.hpp @@ -42,6 +42,16 @@ namespace firewalld _object = zone_object._object; }
+ ZoneObject() + : FirewallObject("ZoneObject") + { + } + + operator bool() const + { + return _zone != nullptr; + } + Pointer<Zone> getZone() const { return _zone; @@ -58,6 +68,12 @@ namespace firewalld return *std::static_pointer_cast<const T>(_object); }
+ template<class T> + Pointer<T> getObjectPtr() const + { + return std::static_pointer_cast<T>(_object); + } + private: Pointer<Zone> _zone; Pointer<FirewallObject> _object;