|
18 | 18 | from macaron.config.target_config import TARGET_CONFIG_SCHEMA |
19 | 19 | from macaron.output_reporter.reporter import HTMLReporter, JSONReporter, PolicyReporter |
20 | 20 | from macaron.parsers.yaml.loader import YamlLoader |
21 | | -from macaron.policy_engine.policy_engine import run_policy_engine |
| 21 | +from macaron.policy_engine.policy_engine import run_policy_engine, show_prelude |
22 | 22 | from macaron.slsa_analyzer.analyzer import Analyzer |
23 | 23 |
|
24 | 24 | logger: logging.Logger = logging.getLogger(__name__) |
@@ -95,18 +95,25 @@ def verify_policy(verify_policy_args: argparse.Namespace) -> int: |
95 | 95 | logger.critical("The database file does not exist.") |
96 | 96 | return os.EX_OSFILE |
97 | 97 |
|
98 | | - if not os.path.isfile(verify_policy_args.file): |
99 | | - logger.critical('The policy file "%s" does not exist.', verify_policy_args.file) |
100 | | - return os.EX_OSFILE |
| 98 | + if verify_policy_args.show_prelude: |
| 99 | + show_prelude(verify_policy_args.database) |
| 100 | + return os.EX_OK |
| 101 | + |
| 102 | + if verify_policy_args.file: |
| 103 | + if not os.path.isfile(verify_policy_args.file): |
| 104 | + logger.critical('The policy file "%s" does not exist.', verify_policy_args.file) |
| 105 | + return os.EX_OSFILE |
| 106 | + |
| 107 | + result = run_policy_engine(verify_policy_args.database, verify_policy_args.file) |
| 108 | + policy_reporter = PolicyReporter() |
| 109 | + policy_reporter.generate(global_config.output_path, result) |
101 | 110 |
|
102 | | - result = run_policy_engine(verify_policy_args.database, verify_policy_args.show_prelude, verify_policy_args.file) |
103 | | - policy_reporter = PolicyReporter() |
104 | | - policy_reporter.generate(global_config.output_path, result) |
| 111 | + if ("failed_policies" in result) and any(result["failed_policies"]): |
| 112 | + return os.EX_DATAERR |
105 | 113 |
|
106 | | - if ("failed_policies" in result) and any(result["failed_policies"]): |
107 | | - return os.EX_DATAERR |
| 114 | + return os.EX_OK |
108 | 115 |
|
109 | | - return os.EX_OK |
| 116 | + return os.EX_USAGE |
110 | 117 |
|
111 | 118 |
|
112 | 119 | def perform_action(action_args: argparse.Namespace) -> None: |
@@ -264,10 +271,11 @@ def main(argv: list[str] | None = None) -> None: |
264 | 271 |
|
265 | 272 | # Verify the Datalog policy. |
266 | 273 | vp_parser = sub_parser.add_parser(name="verify-policy") |
| 274 | + vp_group = vp_parser.add_mutually_exclusive_group(required=True) |
267 | 275 |
|
268 | 276 | vp_parser.add_argument("-d", "--database", required=True, type=str, help="Path to the database.") |
269 | | - vp_parser.add_argument("-f", "--file", required=True, type=str, help="Path to the Datalog policy.") |
270 | | - vp_parser.add_argument("-s", "--show-prelude", required=False, action="store_true", help="Show policy prelude.") |
| 277 | + vp_group.add_argument("-f", "--file", type=str, help="Path to the Datalog policy.") |
| 278 | + vp_group.add_argument("-s", "--show-prelude", action="store_true", help="Show policy prelude.") |
271 | 279 |
|
272 | 280 | args = main_parser.parse_args(argv) |
273 | 281 |
|
|
0 commit comments