summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuben Pollan <meskio@sindominio.net>2018-04-05 18:54:47 +0200
committerRuben Pollan <meskio@sindominio.net>2018-04-11 16:40:40 +0200
commit513a1c153c7d4a3a0b787a1cb83816c905d191d4 (patch)
treec44464fe33c89feb7caa4d6f6cb38da1a6a759c3
parent22c9d163530a2b2aa0cb1c576b2c7e42d088e8bf (diff)
[feat] add fw_reload to bitmaskctl
Some systems remove firewall rules, is usefull to be able to script the reload of those rules in hooks or other custom systems. - Resolves: #9289
-rw-r--r--src/leap/bitmask/cli/vpn.py3
-rw-r--r--src/leap/bitmask/core/dispatcher.py5
-rw-r--r--src/leap/bitmask/vpn/service.py15
3 files changed, 22 insertions, 1 deletions
diff --git a/src/leap/bitmask/cli/vpn.py b/src/leap/bitmask/cli/vpn.py
index 6917b15d..e1da2823 100644
--- a/src/leap/bitmask/cli/vpn.py
+++ b/src/leap/bitmask/cli/vpn.py
@@ -43,10 +43,11 @@ SUBCOMMANDS:
get_cert Get VPN Certificate from provider
install Install helpers (needs root)
uninstall Uninstall helpers (needs root)
+ fw_reload Reload firewall rules
'''.format(name=command.appname)
- commands = ['stop', 'install', 'uninstall',
+ commands = ['stop', 'install', 'uninstall', 'fw_reload',
'enable', 'disable', 'locations', 'countries']
def start(self, raw_args):
diff --git a/src/leap/bitmask/core/dispatcher.py b/src/leap/bitmask/core/dispatcher.py
index a4b8ce39..5d8c4f68 100644
--- a/src/leap/bitmask/core/dispatcher.py
+++ b/src/leap/bitmask/core/dispatcher.py
@@ -207,6 +207,11 @@ class VPNCmd(SubCommand):
return d
@register_method('dict')
+ def do_FW_RELOAD(self, vpn, *parts):
+ d = vpn.fw_reload()
+ return d
+
+ @register_method('dict')
def do_CHECK(self, vpn, *parts):
try:
provider = parts[2]
diff --git a/src/leap/bitmask/vpn/service.py b/src/leap/bitmask/vpn/service.py
index 4ce573ba..da33e82b 100644
--- a/src/leap/bitmask/vpn/service.py
+++ b/src/leap/bitmask/vpn/service.py
@@ -182,6 +182,21 @@ class VPNService(HookableService):
self.watchdog.stop()
return {'result': 'vpn stopped'}
+ def fw_reload(self):
+ if not self._tunnel:
+ return {'result': 'VPN was not running'}
+
+ if self._firewall.is_up():
+ fw_ok = self._firewall.stop()
+ if not fw_ok:
+ self.log.error('Firewall: error stopping')
+
+ fw_ok = self._firewall.start()
+ if not fw_ok:
+ raise Exception('Could not start firewall')
+
+ return {'result': 'fw reloaded'}
+
def push_status(self):
try:
statusdict = self.do_status()