Repository :
http://git.fedorahosted.org/cgit/firewalld-recode.git
On branch : master
---------------------------------------------------------------
commit 01a689f13ba047027f0b37f89628750d0e638484
Author: Daniel Kopecek <dkopecek(a)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;