X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=kconfig_hardened_check%2F__init__.py;fp=kconfig_hardened_check%2F__init__.py;h=5092742fcc4e5392fd01d38b3dc87faee30d0d91;hb=b96571d38d1401b61cdfd4c0836ac6bfff51e099;hp=02d02818d893fc082309f141ec2a6e1ea3374739;hpb=79beb2daa162429dfc71ccff8be88ce6ab7295e6;p=kconfig-hardened-check.git diff --git a/kconfig_hardened_check/__init__.py b/kconfig_hardened_check/__init__.py index 02d0281..5092742 100644 --- a/kconfig_hardened_check/__init__.py +++ b/kconfig_hardened_check/__init__.py @@ -81,6 +81,7 @@ import re import json from .__about__ import __version__ +TYPES_OF_CHECKS = ('kconfig', 'version') class OptCheck: def __init__(self, reason, decision, name, expected): @@ -693,27 +694,37 @@ def print_checklist(mode, checklist, with_results): print('[+] Config check is finished: \'OK\' - {}{} / \'FAIL\' - {}{}'.format(ok_count, ok_suppressed, fail_count, fail_suppressed)) -def populate_opt_with_data(opt, parsed_options, kernel_version): +def populate_simple_opt_with_data(opt, data, data_type): + if hasattr(opt, 'opts'): + sys.exit('[!] ERROR: unexpected ComplexOptCheck {}: {}'.format(opt.name, vars(opt))) + if data_type not in TYPES_OF_CHECKS: + sys.exit('[!] ERROR: invalid data type "{}"'.format(data_type)) + if data_type != opt.type: + return + if data_type == 'kconfig': + opt.state = data.get(opt.name, None) + elif data_type == 'version': + opt.ver = data + + +def populate_opt_with_data(opt, data, data_type): if hasattr(opt, 'opts'): - # prepare ComplexOptCheck for o in opt.opts: if hasattr(o, 'opts'): - # Recursion for nested ComplexOptChecks - populate_opt_with_data(o, parsed_options, kernel_version) - if hasattr(o, 'state'): - o.state = parsed_options.get(o.name, None) - if hasattr(o, 'ver'): - o.ver = kernel_version + # Recursion for nested ComplexOptCheck objects + populate_opt_with_data(o, data, data_type) + else: + populate_simple_opt_with_data(o, data, data_type) else: - # prepare simple check, opt.state is mandatory + # The 'state' is mandatory for simple checks if not hasattr(opt, 'state'): sys.exit('[!] ERROR: bad simple check {}'.format(vars(opt))) - opt.state = parsed_options.get(opt.name, None) + populate_simple_opt_with_data(opt, data, data_type) -def populate_with_data(checklist, parsed_options, kernel_version): +def populate_with_data(checklist, data, data_type): for opt in checklist: - populate_opt_with_data(opt, parsed_options, kernel_version) + populate_opt_with_data(opt, data, data_type) def perform_checks(checklist): @@ -796,7 +807,8 @@ def main(): # populate the checklist with the parsed kconfig data parsed_kconfig_options = OrderedDict() parse_kconfig_file(parsed_kconfig_options, args.config) - populate_with_data(config_checklist, parsed_kconfig_options, kernel_version) + populate_with_data(config_checklist, parsed_kconfig_options, 'kconfig') + populate_with_data(config_checklist, kernel_version, 'version') # now everything is ready for performing the checks perform_checks(config_checklist)