cp kernel_hardening_checker/config_files/distros/fedora_34.config ./test.config
+echo ">>>>> no kconfig file <<<<<"
+coverage run -a --branch bin/kernel-hardening-checker -c ./nosuchfile && exit 1
+
+echo ">>>>> no cmdline file <<<<<"
+coverage run -a --branch bin/kernel-hardening-checker -c ./test.config -l ./nosuchfile && exit 1
+
+echo ">>>>> empty cmdline file <<<<<"
+touch ./empty_file
+coverage run -a --branch bin/kernel-hardening-checker -c ./test.config -l ./empty_file && exit 1
+
+echo ">>>>> no sysctl file <<<<<"
+coverage run -a --branch bin/kernel-hardening-checker -s ./nosuchfile && exit 1
+
echo ">>>>> no kernel version <<<<<"
sed '3d' test.config > error.config
coverage run -a --branch bin/kernel-hardening-checker -c error.config && exit 1
coverage run -a --branch bin/kernel-hardening-checker -c test.config -s error_sysctls && exit 1
echo ">>>>> invalid sysctl file <<<<<"
-touch empty_file
coverage run -a --branch bin/kernel-hardening-checker -c test.config -s empty_file && exit 1
echo "The end of the functional tests"
# pylint: disable=missing-function-docstring,line-too-long,too-many-branches,too-many-statements
+import os
import gzip
import sys
from argparse import ArgumentParser
def _open(file: str) -> TextIO:
- if file.endswith('.gz'):
- return gzip.open(file, 'rt', encoding='utf-8')
- return open(file, 'rt', encoding='utf-8')
+ try:
+ if file.endswith('.gz'):
+ return gzip.open(file, 'rt', encoding='utf-8')
+ return open(file, 'rt', encoding='utf-8')
+ except FileNotFoundError:
+ sys.exit(f'[!] ERROR: unable to open {file}, are you sure it exists?')
def detect_arch(fname: str, archs: List[str]) -> Tuple[StrOrNone, str]:
def parse_cmdline_file(mode: StrOrNone, parsed_options: Dict[str, str], fname: str) -> None:
+ if not os.path.isfile(fname):
+ sys.exit(f'[!] ERROR: unable to open {fname}, are you sure it exists?')
+
with open(fname, 'r', encoding='utf-8') as f:
line = f.readline()
+ if not line:
+ sys.exit(f'[!] ERROR: empty "{fname}"')
+
opts = line.split()
line = f.readline()
def parse_sysctl_file(mode: StrOrNone, parsed_options: Dict[str, str], fname: str) -> None:
+ if not os.path.isfile(fname):
+ sys.exit(f'[!] ERROR: unable to open {fname}, are you sure it exists?')
+
with open(fname, 'r', encoding='utf-8') as f:
sysctl_pattern = re.compile(r"[a-zA-Z0-9/\._-]+ =.*$")
for line in f.readlines():