That have deprecated /etc/sysconfig/iptables file.

Signed-off-by: Cleber Rosa <[email protected]>
---
 contrib/firewalld_add_service      | 124 +++++++++++++++++++++++++++++++++++++
 contrib/install-autotest-server.sh |  22 ++++++-
 2 files changed, 144 insertions(+), 2 deletions(-)
 create mode 100755 contrib/firewalld_add_service

diff --git a/contrib/firewalld_add_service b/contrib/firewalld_add_service
new file mode 100755
index 0000000..4be42f6
--- /dev/null
+++ b/contrib/firewalld_add_service
@@ -0,0 +1,124 @@
+#!/usr/bin/env python
+
+"""
+This tool adds a service to firewalld's permanent configuration
+
+We don't expect this tool be run, and thus firewalld to be present on a system
+that does not have quite recent software, such as Python 2.7
+"""
+
+import os
+import sys
+import logging
+import argparse
+import commands
+import xml.etree.ElementTree
+
+
+DEFAULT_ZONE_SRC_BASE_PATH = '/usr/lib/firewalld/zones'
+DEFAULT_ZONE_DST_BASE_PATH = '/etc/firewalld/zones'
+
+
+class ArgumentParser(argparse.ArgumentParser):
+    def __init__(self):
+        super(ArgumentParser, self).__init__(
+            description=("This tool adds a service to firewalld's permanent "
+                         "configuration"))
+
+        self.add_argument('-z', '--zone', default=self._get_default_zone(),
+                          help='Zone name, using default path')
+
+        self.add_argument('-s', '--service', default='http',
+                          help='Service name, default is "http"')
+
+
+    def _get_default_zone(self):
+        try:
+            s, o = commands.getstatusoutput('firewall-cmd --get-default-zone')
+            if s != 0:
+                return ''
+            else:
+                return o
+        except:
+            return ''
+
+
+class App(object):
+    def __init__(self):
+        self.argument_parser = ArgumentParser()
+        self.parsed_arguments = None
+
+
+    def get_src_file_from_zone(self, zone):
+        zone_filename = "%s.xml" % zone
+        return os.path.join(DEFAULT_ZONE_SRC_BASE_PATH,
+                            zone_filename)
+
+
+    def get_dst_file_from_zone(self, zone):
+        zone_filename = "%s.xml" % zone
+        return os.path.join(DEFAULT_ZONE_DST_BASE_PATH,
+                            zone_filename)
+
+
+    def is_service_enabled(self, path, service):
+        if not os.path.exists(path):
+            return False
+
+        tree = xml.etree.ElementTree.parse(path)
+        root = tree.getroot()
+
+        for child in root:
+            if child.tag == 'service':
+                if child.attrib['name'] == service:
+                    return True
+
+        return False
+
+
+    def add_service(self, zone, service):
+        src_file_path = self.get_src_file_from_zone(zone)
+        if not os.path.exists(src_file_path):
+            logging.error('Could not find default zone file: %s',
+                          src_file_path)
+            raise SystemExit
+
+        src_tree = xml.etree.ElementTree.parse(src_file_path)
+        src_root = src_tree.getroot()
+        dst_file_path = self.get_dst_file_from_zone(zone)
+
+        if self.is_service_enabled(dst_file_path, service):
+            return True
+
+        attrib = {'name': service}
+        new_service = xml.etree.ElementTree.SubElement(src_root,
+                                                       'service',
+                                                       attrib)
+        src_tree.write(dst_file_path)
+
+        # Now, double check the write was successfull
+        return self.is_service_enabled(dst_file_path, service)
+
+
+    def run(self):
+        self.parsed_arguments = self.argument_parser.parse_args()
+
+        if not self.parsed_arguments.zone:
+            logging.error("A zone name is a required argument")
+            raise SystemExit
+
+        if not self.parsed_arguments.service:
+            logging.error("A service name is a required argument")
+            raise SystemExit
+
+        result = self.add_service(self.parsed_arguments.zone,
+                                  self.parsed_arguments.service)
+        if result:
+            raise SystemExit(0)
+        else:
+            raise SystemExit(-1)
+
+
+if __name__ == '__main__':
+    app = App()
+    app.run()
diff --git a/contrib/install-autotest-server.sh 
b/contrib/install-autotest-server.sh
index 34fa313..0e64511 100755
--- a/contrib/install-autotest-server.sh
+++ b/contrib/install-autotest-server.sh
@@ -476,8 +476,15 @@ else
 fi
 }
 
-setup_firewall() {
-[ -f /etc/sysconfig/iptables ] || return;
+setup_firewall_firewalld() {
+    echo "Opening firewall for http traffic" >> $LOG
+    echo "Opening firewall for http traffic"
+
+    $ATHOME/contrib/firewalld_add_service -s http
+    firewall-cmd --reload
+}
+
+setup_firewall_iptables() {
 if [ "$(grep -- '--dport 80 -j ACCEPT' /etc/sysconfig/iptables)" = "" ]
 then
     echo "Opening firewall for http traffic" >> $LOG
@@ -500,6 +507,17 @@ then
 fi
 }
 
+setup_firewall() {
+if [ -f /etc/sysconfig/iptables ]
+then
+   setup_firewall_iptables
+elif [ -x /usr/bin/firewall-cmd ]
+then
+   setup_firewall_firewalld
+fi
+}
+
+
 print_install_status() {
 if [ -x /etc/init.d/autotest ]
 then
-- 
1.7.11.7

_______________________________________________
Autotest-kernel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/autotest-kernel

Reply via email to