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