Merge branch 'open_check'
authorAlexander Popov <alex.popov@linux.com>
Sun, 2 Jun 2024 17:37:31 +0000 (20:37 +0300)
committerAlexander Popov <alex.popov@linux.com>
Sun, 2 Jun 2024 17:37:31 +0000 (20:37 +0300)
Refers to #134.

.github/workflows/functional_test.sh
kernel_hardening_checker/__init__.py

index 106320c8447516e22c9fb5b1b551b7711ebbe4db..ca50aafaa733e14ddd333478d84a7e86e516c1f5 100644 (file)
@@ -99,6 +99,19 @@ coverage run -a --branch bin/kernel-hardening-checker -g X86_64 -m show_ok && ex
 
 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
@@ -147,7 +160,6 @@ echo 'some strange line' >> error_sysctls
 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"
index 91742c3923d78973a2d865b05adee609851c4568..5893fab542ddd3e16e1b22a55f86e5e21e1ab258 100644 (file)
@@ -10,6 +10,7 @@ This module performs input/output.
 
 # pylint: disable=missing-function-docstring,line-too-long,too-many-branches,too-many-statements
 
+import os
 import gzip
 import sys
 from argparse import ArgumentParser
@@ -26,9 +27,12 @@ __version__ = '0.6.6'
 
 
 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]:
@@ -165,8 +169,14 @@ def parse_kconfig_file(_mode: StrOrNone, parsed_options: Dict[str, str], fname:
 
 
 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()
@@ -187,6 +197,9 @@ def parse_cmdline_file(mode: StrOrNone, parsed_options: Dict[str, str], fname: s
 
 
 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():