mirror of
https://github.com/jtesta/ssh-audit.git
synced 2024-11-24 19:41:40 +01:00
Added Tox testing for Python 3.11. Fixed flake8 & pylint errors.
This commit is contained in:
parent
e50ac5c84d
commit
32ff04c2cc
2
.github/workflows/tox.yaml
vendored
2
.github/workflows/tox.yaml
vendored
@ -7,7 +7,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
python-version: [3.7, 3.8, 3.9, "3.10"]
|
python-version: [3.7, 3.8, 3.9, "3.10", 3.11]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
@ -35,6 +35,10 @@ from ssh_audit.protocol import Protocol
|
|||||||
from ssh_audit.ssh_socket import SSH_Socket
|
from ssh_audit.ssh_socket import SSH_Socket
|
||||||
|
|
||||||
|
|
||||||
|
class KexDHException(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class KexDH: # pragma: nocover
|
class KexDH: # pragma: nocover
|
||||||
def __init__(self, kex_name: str, hash_alg: str, g: int, p: int) -> None:
|
def __init__(self, kex_name: str, hash_alg: str, g: int, p: int) -> None:
|
||||||
self.__kex_name = kex_name # pylint: disable=unused-private-member
|
self.__kex_name = kex_name # pylint: disable=unused-private-member
|
||||||
@ -79,8 +83,7 @@ class KexDH: # pragma: nocover
|
|||||||
packet_type, payload = s.read_packet(2)
|
packet_type, payload = s.read_packet(2)
|
||||||
|
|
||||||
if packet_type != -1 and packet_type not in [Protocol.MSG_KEXDH_REPLY, Protocol.MSG_KEXDH_GEX_REPLY]: # pylint: disable=no-else-raise
|
if packet_type != -1 and packet_type not in [Protocol.MSG_KEXDH_REPLY, Protocol.MSG_KEXDH_GEX_REPLY]: # pylint: disable=no-else-raise
|
||||||
# TODO: change Exception to something more specific.
|
raise KexDHException('Expected MSG_KEXDH_REPLY (%d) or MSG_KEXDH_GEX_REPLY (%d), but got %d instead.' % (Protocol.MSG_KEXDH_REPLY, Protocol.MSG_KEXDH_GEX_REPLY, packet_type))
|
||||||
raise Exception('Expected MSG_KEXDH_REPLY (%d) or MSG_KEXDH_GEX_REPLY (%d), but got %d instead.' % (Protocol.MSG_KEXDH_REPLY, Protocol.MSG_KEXDH_GEX_REPLY, packet_type))
|
|
||||||
elif packet_type == -1:
|
elif packet_type == -1:
|
||||||
# A connection error occurred. We can't parse anything, so just
|
# A connection error occurred. We can't parse anything, so just
|
||||||
# return. The host key modulus (and perhaps certificate modulus)
|
# return. The host key modulus (and perhaps certificate modulus)
|
||||||
@ -328,8 +331,7 @@ class KexGroupExchange(KexDH):
|
|||||||
|
|
||||||
packet_type, payload = s.read_packet(2)
|
packet_type, payload = s.read_packet(2)
|
||||||
if packet_type not in [Protocol.MSG_KEXDH_GEX_GROUP, Protocol.MSG_DEBUG]:
|
if packet_type not in [Protocol.MSG_KEXDH_GEX_GROUP, Protocol.MSG_DEBUG]:
|
||||||
# TODO: replace with a better exception type.
|
raise KexDHException('Expected MSG_KEXDH_GEX_REPLY (%d), but got %d instead.' % (Protocol.MSG_KEXDH_GEX_REPLY, packet_type))
|
||||||
raise Exception('Expected MSG_KEXDH_GEX_REPLY (%d), but got %d instead.' % (Protocol.MSG_KEXDH_GEX_REPLY, packet_type))
|
|
||||||
|
|
||||||
# Skip any & all MSG_DEBUG messages.
|
# Skip any & all MSG_DEBUG messages.
|
||||||
while packet_type == Protocol.MSG_DEBUG:
|
while packet_type == Protocol.MSG_DEBUG:
|
||||||
|
@ -182,7 +182,7 @@ def output_algorithm(out: OutputBuffer, alg_db: Dict[str, Dict[str, List[List[Op
|
|||||||
if out.verbose:
|
if out.verbose:
|
||||||
f(prefix + alg_name + comment)
|
f(prefix + alg_name + comment)
|
||||||
elif text != '':
|
elif text != '':
|
||||||
comment = (padding + ' `- [' + level + '] ' + text)
|
comment = padding + ' `- [' + level + '] ' + text
|
||||||
f(' ' * len(prefix + alg_name) + comment)
|
f(' ' * len(prefix + alg_name) + comment)
|
||||||
|
|
||||||
return program_retval
|
return program_retval
|
||||||
|
@ -86,7 +86,7 @@ class SSH_Socket(ReadBuf, WriteBuf):
|
|||||||
|
|
||||||
# If the user has a preference for using IPv4 over IPv6 (or vice-versa), then sort the list returned by getaddrinfo() so that the preferred address type comes first.
|
# If the user has a preference for using IPv4 over IPv6 (or vice-versa), then sort the list returned by getaddrinfo() so that the preferred address type comes first.
|
||||||
if len(self.__ip_version_preference) == 2:
|
if len(self.__ip_version_preference) == 2:
|
||||||
r = sorted(r, key=lambda x: x[0], reverse=(self.__ip_version_preference[0] == 6))
|
r = sorted(r, key=lambda x: x[0], reverse=(self.__ip_version_preference[0] == 6)) # pylint: disable=superfluous-parens
|
||||||
for af, socktype, _proto, _canonname, addr in r:
|
for af, socktype, _proto, _canonname, addr in r:
|
||||||
if socktype == socket.SOCK_STREAM:
|
if socktype == socket.SOCK_STREAM:
|
||||||
yield af, addr
|
yield af, addr
|
||||||
|
28
tox.ini
28
tox.ini
@ -1,7 +1,7 @@
|
|||||||
[tox]
|
[tox]
|
||||||
envlist =
|
envlist =
|
||||||
py{py3}-{test,pylint,flake8,vulture}
|
py{py3}-{test,pylint,flake8,vulture}
|
||||||
py{36,37,38,39,310}-{test,mypy,pylint,flake8,vulture}
|
py{37,38,39,310,311}-{test,mypy,pylint,flake8,vulture}
|
||||||
cov
|
cov
|
||||||
skip_missing_interpreters = true
|
skip_missing_interpreters = true
|
||||||
|
|
||||||
@ -9,11 +9,11 @@ skip_missing_interpreters = true
|
|||||||
deps =
|
deps =
|
||||||
test: pytest
|
test: pytest
|
||||||
test,cov: {[testenv:cov]deps}
|
test,cov: {[testenv:cov]deps}
|
||||||
test,py{36,37,38,39,310}-{type,mypy}: colorama
|
test,py{37,38,39,310,311}-{type,mypy}: colorama
|
||||||
py{36,37,38,39,310}-{type,mypy}: {[testenv:mypy]deps}
|
py{37,38,39,310,311}-{type,mypy}: {[testenv:mypy]deps}
|
||||||
py{py3,36,37,38,39,310}-{lint,pylint},lint: {[testenv:pylint]deps}
|
py{py3,37,38,39,310,311}-{lint,pylint},lint: {[testenv:pylint]deps}
|
||||||
py{py3,36,37,38,39,310}-{lint,flake8},lint: {[testenv:flake8]deps}
|
py{py3,37,38,39,310,311}-{lint,flake8},lint: {[testenv:flake8]deps}
|
||||||
py{py3,36,37,38,39,310}-{lint,vulture},lint: {[testenv:vulture]deps}
|
py{py3,37,38,39,310,311}-{lint,vulture},lint: {[testenv:vulture]deps}
|
||||||
setenv =
|
setenv =
|
||||||
SSHAUDIT = {toxinidir}/src
|
SSHAUDIT = {toxinidir}/src
|
||||||
test: COVERAGE_FILE = {toxinidir}/.coverage.{envname}
|
test: COVERAGE_FILE = {toxinidir}/.coverage.{envname}
|
||||||
@ -25,10 +25,10 @@ commands =
|
|||||||
test: coverage combine
|
test: coverage combine
|
||||||
test: coverage report --show-missing
|
test: coverage report --show-missing
|
||||||
test: coverage html -d {toxinidir}/reports/html/coverage.{envname}
|
test: coverage html -d {toxinidir}/reports/html/coverage.{envname}
|
||||||
py{36,37,38,39,310}-{type,mypy}: {[testenv:mypy]commands}
|
py{37,38,39,310,311}-{type,mypy}: {[testenv:mypy]commands}
|
||||||
py{py3,36,37,38,39,310}-{lint,pylint},lint: {[testenv:pylint]commands}
|
py{py3,37,38,39,310,311}-{lint,pylint},lint: {[testenv:pylint]commands}
|
||||||
py{py3,36,37,38,39,310}-{lint,flake8},lint: {[testenv:flake8]commands}
|
py{py3,37,38,39,310,311}-{lint,flake8},lint: {[testenv:flake8]commands}
|
||||||
py{py3,36,37,38,39,310}-{lint,vulture},lint: {[testenv:vulture]commands}
|
py{py3,37,38,39,310,311}-{lint,vulture},lint: {[testenv:vulture]commands}
|
||||||
#ignore_outcome =
|
#ignore_outcome =
|
||||||
# type: true
|
# type: true
|
||||||
# lint: true
|
# lint: true
|
||||||
@ -125,10 +125,10 @@ ignore-long-lines = ^\s*(#\s+type:\s+.*|[A-Z0-9_]+\s+=\s+.*|('.*':\s+)?\[.*\],?|
|
|||||||
max-module-lines = 2500
|
max-module-lines = 2500
|
||||||
|
|
||||||
[flake8]
|
[flake8]
|
||||||
ignore =
|
# E241 = multiple spaces after operator; should be kept for tabular data
|
||||||
E241, # multiple spaces after operator; should be kept for tabular data
|
# E303 = too many blank lines
|
||||||
E303, # too many blank lines
|
# E501 = line too long
|
||||||
E501, # line too long
|
ignore = E241, E303, E501
|
||||||
|
|
||||||
[pytest]
|
[pytest]
|
||||||
junit_family = xunit1
|
junit_family = xunit1
|
||||||
|
Loading…
Reference in New Issue
Block a user