Repository : http://git.fedorahosted.org/cgit/firewalld-recode.git
On branch : master
commit 84e98f3a1cc56e4c4a95b8032faecf224fba86a1 Author: Daniel Kopecek dkopecek@redhat.com Date: Tue Oct 7 10:26:24 2014 +0200
Implemented the getZoneSettings DBus method
src/Daemon/DBus/getZoneSettings.cpp | 83 +++++++++++++++++++++++++++++++++- 1 files changed, 80 insertions(+), 3 deletions(-)
diff --git a/src/Daemon/DBus/getZoneSettings.cpp b/src/Daemon/DBus/getZoneSettings.cpp index ef616b0..f976bb2 100644 --- a/src/Daemon/DBus/getZoneSettings.cpp +++ b/src/Daemon/DBus/getZoneSettings.cpp @@ -24,10 +24,87 @@ namespace firewalld { FIREWALLD_DBUS_METHOD(getZoneSettings) { - result.setTypeSignature("(sssbsasa(ss)asba(ssss)asasas)"); + result.setTypeSignature("((sssbsasa(ss)asba(ssss)asasas))");
- UString zone; - parameters.get(0, zone); + UString zone_identifier; + parameters.get(0, zone_identifier); + + try { + Pointer<Zone> zone = lookupZone(zone_identifier); + + result << zone->version(); + result << zone->name(); + result << zone->description(); + result << false; + result << zone->target(); + + UStringVector services; + for (auto const& map_entry : zone->getServices()) { + services.push_back(map_entry.first); + } + result << services; + + DBusResultBuilder& port_array = result.addBuilder("a(ss)"); + int port_index = 0; + for (auto const& map_entry : zone->getPorts(Port::Protocol::TCP)) { + Pointer<const Port> port = map_entry.second; + port_array[port_index] << UString(port->range().toString()); + port_array[port_index] << UString("tcp"); + ++port_index; + } + for (auto const& map_entry : zone->getPorts(Port::Protocol::UDP)) { + Pointer<const Port> port = map_entry.second; + port_array[port_index] << UString(port->range().toString()); + port_array[port_index] << UString("udp"); + ++port_index; + } + + UStringVector icmp_blocks; + for (auto const& map_entry : zone->getICMPBlocks()) { + icmp_blocks.push_back(map_entry.first); + } + result << icmp_blocks; + result << zone->queryMasquerade(); + + DBusResultBuilder& forward_array = result.addBuilder("a(ssss)"); + int forward_index = 0; + for (auto const& map_entry : zone->getForwardPorts()) { + Pointer<const PortForward> port_forward = map_entry.second; + forward_array[forward_index] << UString(port_forward->sourcePort()->range().toString()); + switch(port_forward->protocol()) { + case Port::Protocol::TCP: + forward_array[forward_index] << UString("tcp"); + break; + case Port::Protocol::UDP: + forward_array[forward_index] << UString("udp"); + break; + default: + throw FirewallError("INVALID_ZONE", "Ambiguous port protocol"); + } + forward_array[forward_index] << UString(port_forward->destinationPort()->range().toString()); + forward_array[forward_index] << port_forward->destinationAddress(); + ++forward_index; + } + + UStringVector interfaces; + for (auto const& map_entry : zone->getInterfaces()) { + interfaces.push_back(map_entry.first); + } + result << interfaces; + + UStringVector sources; + for (auto const& map_entry : zone->getSources()) { + sources.push_back(map_entry.first); + } + result << sources; + + // TODO: Implement rich rules + UStringVector rich_rules; + result << rich_rules; + + } catch(const FirewallError& ex) { + result = DBusError(ex); + }
return; }