From 1018b394a9d1d75dcf06fdad90747de09bd50382 Mon Sep 17 00:00:00 2001 From: Eugene Zamriy Date: Tue, 17 Oct 2023 22:34:26 +0300 Subject: [PATCH] Fixes relative paths handling issues --- rpm-ima-inspector.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/rpm-ima-inspector.py b/rpm-ima-inspector.py index eb954ee..73dfe73 100755 --- a/rpm-ima-inspector.py +++ b/rpm-ima-inspector.py @@ -220,10 +220,23 @@ class TapProducer: counter = staticmethod(counter) +def normalize_path(path: str) -> str: + """ + Returns an absolute path with all variables expanded. + + Args: + path: path to be normalized. + + Returns: + Normalized path. + """ + return os.path.abspath(os.path.expanduser(os.path.expandvars(path))) + + def main(): arg_parser = init_arg_parser() args = arg_parser.parse_args() - rpm_file = args.rpm_file + rpm_file = normalize_path(args.rpm_file) tap = TapProducer() # step = 'load public IMA certificate' @@ -247,7 +260,7 @@ def main(): failed = False with unpack_rpm_to_tmp(rpm_file) as rpm_dir: for rel_path, sig_hdr in ima_sigs: - file_path = os.path.join(rpm_dir, rel_path) + file_path = os.path.join(rpm_dir, os.path.relpath(rel_path, '/')) if not os.path.isfile(file_path) or os.path.islink(file_path): tap.skipped(f'{rel_path} is not a regular file') continue