mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-08-28 20:47:48 +00:00
[#3287] fix bandit warnings
This commit is contained in:
parent
4673e38116
commit
c0acd781c9
@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
# Copyright (C) 2019-2023 Internet Systems Consortium, Inc. ("ISC")
|
# Copyright (C) 2019-2024 Internet Systems Consortium, Inc. ("ISC")
|
||||||
#
|
#
|
||||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
@ -41,7 +41,9 @@ def read_input_files(files):
|
|||||||
except:
|
except:
|
||||||
print('\nError while processing %s\n\n' % f)
|
print('\nError while processing %s\n\n' % f)
|
||||||
raise
|
raise
|
||||||
assert name == descr['name']
|
if name != descr['name']:
|
||||||
|
exit("Expected name == descr['name'], but name is {name} and descr['name'] is {descr['name']}")
|
||||||
|
|
||||||
apis[name] = descr
|
apis[name] = descr
|
||||||
|
|
||||||
return apis
|
return apis
|
||||||
|
43
hammer.py
43
hammer.py
@ -24,22 +24,20 @@ import binascii
|
|||||||
import argparse
|
import argparse
|
||||||
import textwrap
|
import textwrap
|
||||||
import functools
|
import functools
|
||||||
import subprocess
|
|
||||||
import multiprocessing
|
import multiprocessing
|
||||||
import grp
|
import grp
|
||||||
import pwd
|
import pwd
|
||||||
import getpass
|
import getpass
|
||||||
|
|
||||||
try:
|
|
||||||
import urllib.request
|
import urllib.request
|
||||||
except:
|
|
||||||
pass
|
|
||||||
try:
|
|
||||||
from urllib.parse import urljoin
|
from urllib.parse import urljoin
|
||||||
except:
|
|
||||||
from urlparse import urljoin
|
|
||||||
|
|
||||||
import xml.etree.ElementTree as ET
|
# [B404:blacklist] Consider possible security implications associated with subprocess module.
|
||||||
|
import subprocess # nosec B404
|
||||||
|
|
||||||
|
# Issue: [B405:blacklist] Using xml.etree.ElementTree to parse untrusted XML data is known to be vulnerable to XML
|
||||||
|
# attacks. Replace xml.etree.ElementTree with the equivalent defusedxml package, or make sure
|
||||||
|
# defusedxml.defuse_stdlib() is called.
|
||||||
|
import xml.etree.ElementTree as ET # nosec B405
|
||||||
|
|
||||||
|
|
||||||
# SYSTEMS = {
|
# SYSTEMS = {
|
||||||
@ -47,6 +45,8 @@ import xml.etree.ElementTree as ET
|
|||||||
# 'version': True if supported else False,
|
# 'version': True if supported else False,
|
||||||
# ...
|
# ...
|
||||||
# },
|
# },
|
||||||
|
# ...
|
||||||
|
# }
|
||||||
|
|
||||||
SYSTEMS = {
|
SYSTEMS = {
|
||||||
'fedora': {
|
'fedora': {
|
||||||
@ -381,11 +381,13 @@ def execute(cmd, timeout=60, cwd=None, env=None, raise_error=True, dry_run=False
|
|||||||
|
|
||||||
for attempt in range(attempts):
|
for attempt in range(attempts):
|
||||||
if interactive:
|
if interactive:
|
||||||
p = subprocess.Popen(cmd, cwd=cwd, env=env, shell=True)
|
# Issue: [B602:subprocess_popen_with_shell_equals_true] subprocess call with shell=True identified, security issue.
|
||||||
|
p = subprocess.Popen(cmd, cwd=cwd, env=env, shell=True) # nosec B602
|
||||||
exitcode = p.wait()
|
exitcode = p.wait()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
p = subprocess.Popen(cmd, cwd=cwd, env=env, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
# Issue: [B602:subprocess_popen_with_shell_equals_true] subprocess call with shell=True identified, security issue.
|
||||||
|
p = subprocess.Popen(cmd, cwd=cwd, env=env, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) # nosec B602
|
||||||
|
|
||||||
if capture:
|
if capture:
|
||||||
output = ''
|
output = ''
|
||||||
@ -692,7 +694,10 @@ class VagrantEnv(object):
|
|||||||
return {}
|
return {}
|
||||||
url = 'https://app.vagrantup.com/api/v1/box/' + (image_tpl if image_tpl else self.image_tpl)
|
url = 'https://app.vagrantup.com/api/v1/box/' + (image_tpl if image_tpl else self.image_tpl)
|
||||||
try:
|
try:
|
||||||
with urllib.request.urlopen(url) as response:
|
# Issue: [B310:blacklist] Audit url open for permitted schemes.
|
||||||
|
# Allowing use of file:/ or custom schemes is often unexpected.
|
||||||
|
# Reason for nosec: it is clearly a https link.
|
||||||
|
with urllib.request.urlopen(url) as response: # nosec B310
|
||||||
data = response.read()
|
data = response.read()
|
||||||
except:
|
except:
|
||||||
log.exception('ignored exception')
|
log.exception('ignored exception')
|
||||||
@ -897,7 +902,8 @@ class VagrantEnv(object):
|
|||||||
|
|
||||||
if upload:
|
if upload:
|
||||||
repo_url = _get_full_repo_url(repository_url, self.system, self.revision, pkg_version)
|
repo_url = _get_full_repo_url(repository_url, self.system, self.revision, pkg_version)
|
||||||
assert repo_url is not None
|
if repo_url is None:
|
||||||
|
raise ValueError('repo_url is None')
|
||||||
upload_cmd = 'curl -v --netrc -f'
|
upload_cmd = 'curl -v --netrc -f'
|
||||||
|
|
||||||
if self.system in ['ubuntu', 'debian']:
|
if self.system in ['ubuntu', 'debian']:
|
||||||
@ -2414,7 +2420,8 @@ def _build_native_pkg(system, revision, features, tarball_path, env, check_times
|
|||||||
env = _prepare_ccache_if_needed(system, ccache_dir, env)
|
env = _prepare_ccache_if_needed(system, ccache_dir, env)
|
||||||
|
|
||||||
repo_url = _get_full_repo_url(repository_url, system, revision, pkg_version)
|
repo_url = _get_full_repo_url(repository_url, system, revision, pkg_version)
|
||||||
assert repo_url is not None
|
if repo_url is None:
|
||||||
|
raise ValueError('repo_url is None')
|
||||||
|
|
||||||
if system in ['fedora', 'centos', 'rhel', 'rocky']:
|
if system in ['fedora', 'centos', 'rhel', 'rocky']:
|
||||||
_build_rpm(system, revision, features, tarball_path, env, check_times, dry_run,
|
_build_rpm(system, revision, features, tarball_path, env, check_times, dry_run,
|
||||||
@ -2832,7 +2839,10 @@ def destroy_system(path):
|
|||||||
|
|
||||||
|
|
||||||
def _coin_toss():
|
def _coin_toss():
|
||||||
if random.randint(0, 65535) % 2 == 0:
|
# Issue: [B311:blacklist] Standard pseudo-random generators are not suitable for security/cryptographic
|
||||||
|
# purposes.
|
||||||
|
# Reason for nosec: It is not used in a security context.
|
||||||
|
if random.randint(0, 65535) % 2 == 0: # nosec B311
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@ -2977,7 +2987,8 @@ def upload_to_repo(args, pkgs_dir):
|
|||||||
# NOTE: note the differences (if any) in system/revision vs args.system/revision
|
# NOTE: note the differences (if any) in system/revision vs args.system/revision
|
||||||
system, revision = get_system_revision()
|
system, revision = get_system_revision()
|
||||||
repo_url = _get_full_repo_url(args.repository_url, system, revision, args.pkg_version)
|
repo_url = _get_full_repo_url(args.repository_url, system, revision, args.pkg_version)
|
||||||
assert repo_url is not None
|
if repo_url is None:
|
||||||
|
raise ValueError('repo_url is None')
|
||||||
upload_cmd = 'curl -v --netrc -f'
|
upload_cmd = 'curl -v --netrc -f'
|
||||||
log.info('args.system %s, system = %s', args.system, system)
|
log.info('args.system %s, system = %s', args.system, system)
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright (C) 2017-2021 Internet Systems Consortium, Inc. ("ISC")
|
# Copyright (C) 2017-2024 Internet Systems Consortium, Inc. ("ISC")
|
||||||
#
|
#
|
||||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
@ -20,6 +20,8 @@ def send_to_control_agent(params):
|
|||||||
# First, create the URL
|
# First, create the URL
|
||||||
url = params.scheme + "://" + params.http_host + ":"
|
url = params.scheme + "://" + params.http_host + ":"
|
||||||
url += str(params.http_port) + str(params.path)
|
url += str(params.http_port) + str(params.path)
|
||||||
|
if not url.lower().startswith('http'):
|
||||||
|
raise ValueError(f"url {url} is not an http link")
|
||||||
|
|
||||||
# Now prepare the request (URL, headers and body)
|
# Now prepare the request (URL, headers and body)
|
||||||
req = urllib.request.Request(url=url,
|
req = urllib.request.Request(url=url,
|
||||||
@ -41,7 +43,10 @@ def send_to_control_agent(params):
|
|||||||
ssl_ctx.load_cert_chain(params.cert, params.key)
|
ssl_ctx.load_cert_chain(params.cert, params.key)
|
||||||
|
|
||||||
# Establish connection, send the request.
|
# Establish connection, send the request.
|
||||||
resp = urllib.request.urlopen(req, context=ssl_ctx)
|
# Issue: [B310:blacklist] Audit url open for permitted schemes.
|
||||||
|
# Allowing use of file:/ or custom schemes is often unexpected.
|
||||||
|
# Reason for nosec: url is checked to be http further above.
|
||||||
|
resp = urllib.request.urlopen(req, context=ssl_ctx) # nosec B310
|
||||||
|
|
||||||
# Now get the response details, put it in CAResponse and return it
|
# Now get the response details, put it in CAResponse and return it
|
||||||
result = CAResponse(resp.getcode(), resp.reason,
|
result = CAResponse(resp.getcode(), resp.reason,
|
||||||
|
@ -8,9 +8,11 @@ import difflib
|
|||||||
import glob
|
import glob
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import subprocess
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
# [B404:blacklist] Consider possible security implications associated with subprocess module.
|
||||||
|
import subprocess # nosec B404
|
||||||
|
|
||||||
|
|
||||||
def usage():
|
def usage():
|
||||||
print('''\
|
print('''\
|
||||||
@ -185,7 +187,9 @@ def execute(command):
|
|||||||
'''
|
'''
|
||||||
if 'DEBUG' in os.environ:
|
if 'DEBUG' in os.environ:
|
||||||
print(f'> {command}')
|
print(f'> {command}')
|
||||||
with subprocess.Popen(command, encoding='utf-8', shell=True,
|
# Issue: [B602:subprocess_popen_with_shell_equals_true] subprocess call with shell=True identified, security
|
||||||
|
# issue.
|
||||||
|
with subprocess.Popen(command, encoding='utf-8', shell=True, # nosec B602
|
||||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE) as p:
|
stdout=subprocess.PIPE, stderr=subprocess.PIPE) as p:
|
||||||
output, error = p.communicate()
|
output, error = p.communicate()
|
||||||
if error:
|
if error:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
#
|
#
|
||||||
# Copyright (C) 2012-2015 Internet Systems Consortium, Inc. ("ISC")
|
# Copyright (C) 2012-2024 Internet Systems Consortium, Inc. ("ISC")
|
||||||
#
|
#
|
||||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
@ -24,10 +24,13 @@
|
|||||||
# tomek
|
# tomek
|
||||||
|
|
||||||
import string
|
import string
|
||||||
import subprocess
|
|
||||||
import sys
|
import sys
|
||||||
from optparse import OptionParser
|
from optparse import OptionParser
|
||||||
|
|
||||||
|
# [B404:blacklist] Consider possible security implications associated with subprocess module.
|
||||||
|
import subprocess # nosec B404
|
||||||
|
|
||||||
|
|
||||||
class Branch:
|
class Branch:
|
||||||
MERGED = 1
|
MERGED = 1
|
||||||
NOTMERGED = 2
|
NOTMERGED = 2
|
||||||
@ -42,7 +45,7 @@ def branch_list_get(verbose):
|
|||||||
if all changes on that branch are also on master. """
|
if all changes on that branch are also on master. """
|
||||||
|
|
||||||
# call git branch -r (list of remote branches)
|
# call git branch -r (list of remote branches)
|
||||||
txt_list = subprocess.check_output(["git", "branch", "-r"])
|
txt_list = check_output(["git", "branch", "-r"])
|
||||||
|
|
||||||
txt_list = txt_list.split(b"\n")
|
txt_list = txt_list.split(b"\n")
|
||||||
|
|
||||||
@ -73,8 +76,9 @@ def branch_list_get(verbose):
|
|||||||
|
|
||||||
# get a diff with changes that are on that branch only
|
# get a diff with changes that are on that branch only
|
||||||
# i.e. all unmerged code.
|
# i.e. all unmerged code.
|
||||||
|
# Issue: [B603:subprocess_without_shell_equals_true] subprocess call - check for execution of untrusted input.
|
||||||
cmd = ["git", "diff", "master..." + branch_info.name ]
|
cmd = ["git", "diff", "master..." + branch_info.name ]
|
||||||
diff = subprocess.check_output(cmd)
|
diff = check_output(cmd)
|
||||||
if len(diff) == 0:
|
if len(diff) == 0:
|
||||||
# No diff? Then all changes from that branch are on master as well.
|
# No diff? Then all changes from that branch are on master as well.
|
||||||
branch_info.status = Branch.MERGED
|
branch_info.status = Branch.MERGED
|
||||||
@ -84,7 +88,8 @@ def branch_list_get(verbose):
|
|||||||
# %ai = date, %ae = author e-mail, %an = author name
|
# %ai = date, %ae = author e-mail, %an = author name
|
||||||
cmd = [ "git" , "log", "-n", "1", "--pretty=\"%ai,%ae,%an\"",
|
cmd = [ "git" , "log", "-n", "1", "--pretty=\"%ai,%ae,%an\"",
|
||||||
branch_info.name ]
|
branch_info.name ]
|
||||||
offender = subprocess.check_output(cmd)
|
# Issue: [B603:subprocess_without_shell_equals_true] subprocess call - check for execution of untrusted input.
|
||||||
|
offender = check_output(cmd)
|
||||||
offender = offender.strip(b"\n\"")
|
offender = offender.strip(b"\n\"")
|
||||||
|
|
||||||
# comment out this 2 lines to disable obfuscation
|
# comment out this 2 lines to disable obfuscation
|
||||||
@ -146,6 +151,11 @@ def branch_print(branches, csv, print_merged, print_notmerged, print_stats):
|
|||||||
print("#Not merged: %d" % notmerged)
|
print("#Not merged: %d" % notmerged)
|
||||||
|
|
||||||
|
|
||||||
|
def check_output(cmd):
|
||||||
|
# Issue: [B603:subprocess_without_shell_equals_true] subprocess call - check for execution of untrusted input.
|
||||||
|
return subprocess.check_output(cmd) # nosec B603
|
||||||
|
|
||||||
|
|
||||||
def parse_args(args=sys.argv[1:], Parser=OptionParser):
|
def parse_args(args=sys.argv[1:], Parser=OptionParser):
|
||||||
|
|
||||||
parser = Parser(description="This script prints out merged and/or unmerged"
|
parser = Parser(description="This script prints out merged and/or unmerged"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user