Origin: r795, r796 Description: move netfilter capabilities checking into initcaps(), and call initcaps() only when we need it. Bug-Ubuntu: https://launchpad.net/bugs/1044361 Upstream-Status: Inappropriate [ not author ] Signed-off-by: Joe MacDonald Index: ufw-0.33/src/backend_iptables.py =================================================================== --- ufw-0.33.orig/src/backend_iptables.py 2012-09-23 09:58:34.000000000 -0500 +++ ufw-0.33/src/backend_iptables.py 2012-09-23 09:58:36.000000000 -0500 @@ -160,6 +160,9 @@ out += "> " + _("Checking raw ip6tables\n") return out + # Initialize the capabilities database + self.initcaps() + args = ['-n', '-v', '-x', '-L'] items = [] items6 = [] @@ -470,6 +473,9 @@ if self.dryrun: return False + # Initialize the capabilities database + self.initcaps() + prefix = "ufw" exe = self.iptables if v6: @@ -684,6 +690,9 @@ except Exception: raise + # Initialize the capabilities database + self.initcaps() + chain_prefix = "ufw" rules = self.rules if v6: @@ -830,6 +839,10 @@ * updating user rules file * reloading the user rules file if rule is modified ''' + + # Initialize the capabilities database + self.initcaps() + rstr = "" if rule.v6: @@ -1073,6 +1086,9 @@ if self.dryrun: return + # Initialize the capabilities database + self.initcaps() + rules_t = [] try: rules_t = self._get_logging_rules(level) Index: ufw-0.33/src/backend.py =================================================================== --- ufw-0.33.orig/src/backend.py 2012-09-23 09:58:34.000000000 -0500 +++ ufw-0.33/src/backend.py 2012-09-23 09:59:03.000000000 -0500 @@ -21,7 +21,7 @@ import stat import sys import ufw.util -from ufw.util import warn, debug +from ufw.util import error, warn, debug from ufw.common import UFWError, config_dir, iptables_dir, UFWRule import ufw.applications @@ -68,6 +68,17 @@ err_msg = _("Couldn't determine iptables version") raise UFWError(err_msg) + # Initialize via initcaps only when we need it (LP: #1044361) + self.caps = None + + def initcaps(self): + '''Initialize the capabilities database. This needs to be called + before accessing the database.''' + + # Only initialize if not initialized already + if self.caps != None: + return + self.caps = {} self.caps['limit'] = {} @@ -78,14 +89,20 @@ # Try to get capabilities from the running system if root if self.do_checks and os.getuid() == 0 and not self.dryrun: # v4 - nf_caps = ufw.util.get_netfilter_capabilities(self.iptables) + try: + nf_caps = ufw.util.get_netfilter_capabilities(self.iptables) + except OSError as e: + error("initcaps\n%s" % e) if 'recent-set' in nf_caps and 'recent-update' in nf_caps: self.caps['limit']['4'] = True else: self.caps['limit']['4'] = False # v6 - nf_caps = ufw.util.get_netfilter_capabilities(self.ip6tables) + try: + nf_caps = ufw.util.get_netfilter_capabilities(self.ip6tables) + except OSError as e: + error("initcaps\n%s" % e) if 'recent-set' in nf_caps and 'recent-update' in nf_caps: self.caps['limit']['6'] = True else: