From 0eef896e4c2a751fa4ac874cb52754c668fc380f Mon Sep 17 00:00:00 2001 From: Bob Gendler Date: Tue, 24 May 2022 09:29:40 -0400 Subject: [PATCH] generates oval for specific odv --- scripts/generate_scap.py | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/scripts/generate_scap.py b/scripts/generate_scap.py index ef2e01ec..0fd79df2 100755 --- a/scripts/generate_scap.py +++ b/scripts/generate_scap.py @@ -31,7 +31,10 @@ def create_args(): help="Generate an xccdf file.", action="store_true") parser.add_argument("-o", "--oval", default=None, help="Generate an oval file of the checks.", action="store_true") - + parser.add_argument("-l", "--list_tags", default=None, + help="List the available keyword tags to search for.", action="store_true") + parser.add_argument("-b", "--baseline", default="None", + help="Choose a baseline to generate an xml file for, if none is specified it will generate for every rule found.", action="store") return parser.parse_args() @@ -45,7 +48,7 @@ def generate_scap(all_rules, all_baselines, args): if args.oval: export_as = "oval" - if not any(vars(args).values()): + if args.oval == None and args.xccdf == None: export_as = "scap" version_file = "../VERSION.yaml" @@ -181,6 +184,9 @@ def generate_scap(all_rules, all_baselines, args): loop = 1 if "odv" in og_rule_yaml: loop = len(og_rule_yaml['odv']) + if args.baseline: + loop = 1 + for a in range(0, loop): @@ -189,6 +195,9 @@ def generate_scap(all_rules, all_baselines, args): try: odv_label = list(rule_yaml['odv'].keys())[a] + + if args.baseline: + odv_label = args.baseline if odv_label == "hint": continue @@ -2874,8 +2883,24 @@ def main(): if rule.rule_id not in all_rules_pruned: all_rules_pruned.append(rule.rule_id) + if args.list_tags: + for tag in available_tags(all_rules): + print(tag) + exit(0) + all_baselines = [] + + if args.baseline: + all_baselines = [args.baseline] + for rule in all_rules: + if rule.rule_id not in all_rules_pruned and args.baseline in rule.rule_tags: + all_rules_pruned.append(rule.rule_id) + + if all_baselines == ['None']: + all_baselines = available_tags(all_rules) + for rule in all_rules: + if rule.rule_id not in all_rules_pruned: + all_rules_pruned.append(rule.rule_id) - all_baselines = available_tags(all_rules) generate_scap(all_rules_pruned, all_baselines, args) os.chdir(original_working_directory)