Linux ip-172-26-7-228 5.4.0-1103-aws #111~18.04.1-Ubuntu SMP Tue May 23 20:04:10 UTC 2023 x86_64
Your IP : 18.119.117.122
Current Path : /usr/sbin/ |
| Current File : //usr/sbin/ufw |
#! /usr/bin/python3
#
# ufw: front-end for Linux firewalling (cli)
#
# Copyright 2008-2015 Canonical Ltd.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 3,
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
from __future__ import print_function
import os
import re
import sys
import warnings
import ufw.frontend
from ufw.common import UFWError
from ufw.util import error, warn, msg, _findpath
import gettext
kwargs = {}
if sys.version_info[0] < 3:
# In Python 2, ensure that the _() that gets installed into built-ins
# always returns unicodes. This matches the default behavior under Python
# 3, although that keyword argument is not present in the Python 3 API.
kwargs['unicode'] = True
gettext.install(ufw.common.programName, **kwargs)
version = "0.35"
# relocate root and data directories if specified
args = []
rootdir = None
datadir = None
for i in sys.argv:
if i.startswith('--rootdir='):
if len(i.split('=')) == 2:
rootdir = i.split('=')[1]
else:
error('--rootdir is empty')
elif i.startswith('--datadir='):
if len(i.split('=')) == 2:
datadir = i.split('=')[1]
else:
error('--datadir is empty')
else:
args.append(i)
# Internationalization
gettext.bindtextdomain(ufw.common.programName, \
os.path.join(_findpath(ufw.common.trans_dir, rootdir),
'messages'))
gettext.textdomain(ufw.common.programName)
try:
# BAW: I'm not sure why both this and the .install() above is here, but
# let's roll with it for now. This is the Python 2 version, which ensures
# we get unicodes.
_ = gettext.ugettext
except AttributeError:
# Python 3 always returns unicodes.
_ = gettext.gettext
if sys.version_info[0] < 2 or \
(sys.version_info[0] == 2 and sys.version_info[1] < 6):
msg(ufw.common.programName + _(": Need at least python 2.6)\n"), \
sys.stderr)
sys.exit(1)
def clean_warning(message, category, filename, lineno, file=None, line=""):
warn(message)
if __name__ == "__main__":
warnings.showwarning = clean_warning
app_action = False
pr = None
# Remember, will have to take --force into account if we use it with 'app'
idx = 1
if len(args) > 1 and args[1].lower() == "--dry-run":
idx += 1
if len(args) > idx and args[idx].lower() == "app":
app_action = True
try:
pr = ufw.frontend.parse_command(args)
except ValueError:
msg(ufw.frontend.get_command_help())
sys.exit(1)
except UFWError as e:
error(e.value)
except Exception:
raise
if pr.action == "help" or pr.action == "--help":
msg(ufw.frontend.get_command_help())
sys.exit(0)
elif pr.action == "version" or pr.action == "--version":
msg(ufw.common.programName + " " + version)
msg("Copyright 2008-2015 Canonical Ltd.")
sys.exit(0)
try:
ui = ufw.frontend.UFWFrontend(pr.dryrun, rootdir=rootdir,
datadir=datadir)
except UFWError as e:
error(e.value)
except Exception:
raise
res = ""
try:
if app_action and 'type' in pr.data and pr.data['type'] == 'app':
res = ui.do_application_action(pr.action, pr.data['name'])
else:
bailout = False
if pr.action == "enable" and not pr.force and \
not ui.continue_under_ssh():
res = _("Aborted")
bailout = True
if not bailout:
if 'rule' in pr.data:
res = ui.do_action(pr.action, pr.data['rule'], \
pr.data['iptype'], pr.force)
else:
res = ui.do_action(pr.action, "", "", pr.force)
if res != "":
msg(res)
except UFWError as e:
error(e.value)
except Exception:
raise
sys.exit(0)
|