diff --git a/prowler/lib/check/check.py b/prowler/lib/check/check.py index 135f503f..a945dabf 100644 --- a/prowler/lib/check/check.py +++ b/prowler/lib/check/check.py @@ -22,7 +22,7 @@ try: except KeyError: from prowler.lib.outputs.outputs import report except Exception: - sys.exit() + sys.exit(1) from prowler.lib.utils.utils import open_file, parse_json_file from prowler.providers.common.models import Audit_Metadata @@ -198,7 +198,7 @@ def print_checks( logger.critical( f"Check {error} was not found for the {provider.upper()} provider" ) - sys.exit() + sys.exit(1) print( f"\nThere are {Fore.YELLOW}{len(check_list)}{Style.RESET_ALL} available checks.\n" @@ -252,10 +252,10 @@ def recover_checks_from_provider(provider: str, service: str = None) -> list[tup checks.append(check_info) except ModuleNotFoundError: logger.critical(f"Service {service} was not found for the {provider} provider.") - sys.exit() + sys.exit(1) except Exception as e: logger.critical(f"{e.__class__.__name__}[{e.__traceback__.tb_lineno}]: {e}") - sys.exit() + sys.exit(1) else: return checks @@ -354,7 +354,7 @@ def execute_checks( logger.critical( f"Check '{check_name}' was not found for the {provider.upper()} provider" ) - sys.exit() + sys.exit(1) except Exception as error: logger.error( f"{check_name} - {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" @@ -397,7 +397,7 @@ def execute_checks( f"Check '{check_name}' was not found for the {provider.upper()} provider" ) bar.title = f"-> {Fore.RED}Scan was aborted!{Style.RESET_ALL}" - sys.exit() + sys.exit(1) except Exception as error: logger.error( f"{check_name} - {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" diff --git a/prowler/lib/check/compliance.py b/prowler/lib/check/compliance.py index 95e0aa8a..3ea62ee6 100644 --- a/prowler/lib/check/compliance.py +++ b/prowler/lib/check/compliance.py @@ -43,4 +43,4 @@ def update_checks_metadata_with_compliance( return bulk_checks_metadata except Exception as e: logger.critical(f"{e.__class__.__name__}[{e.__traceback__.tb_lineno}] -- {e}") - sys.exit() + sys.exit(1) diff --git a/prowler/lib/check/compliance_models.py b/prowler/lib/check/compliance_models.py index bd49dcfe..0de36aca 100644 --- a/prowler/lib/check/compliance_models.py +++ b/prowler/lib/check/compliance_models.py @@ -70,6 +70,6 @@ def load_compliance_framework( logger.critical( f"Compliance Framework Specification from {compliance_specification_file} is not valid: {error}" ) - sys.exit() + sys.exit(1) else: return compliance_framework diff --git a/prowler/lib/check/models.py b/prowler/lib/check/models.py index 4907b986..55ca80a2 100644 --- a/prowler/lib/check/models.py +++ b/prowler/lib/check/models.py @@ -136,6 +136,6 @@ def load_check_metadata(metadata_file: str) -> Check_Metadata_Model: check_metadata = Check_Metadata_Model.parse_file(metadata_file) except ValidationError as error: logger.critical(f"Metadata from {metadata_file} is not valid: {error}") - sys.exit() + sys.exit(1) else: return check_metadata diff --git a/prowler/lib/outputs/compliance.py b/prowler/lib/outputs/compliance.py index 45a67967..7f20335c 100644 --- a/prowler/lib/outputs/compliance.py +++ b/prowler/lib/outputs/compliance.py @@ -325,4 +325,4 @@ def display_compliance_table( logger.critical( f"{error.__class__.__name__}:{error.__traceback__.tb_lineno} -- {error}" ) - sys.exit() + sys.exit(1) diff --git a/prowler/lib/outputs/html.py b/prowler/lib/outputs/html.py index 4634ca4f..d6680861 100644 --- a/prowler/lib/outputs/html.py +++ b/prowler/lib/outputs/html.py @@ -261,7 +261,7 @@ def fill_html_overview_statistics(stats, output_filename, output_directory): logger.critical( f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}] -- {error}" ) - sys.exit() + sys.exit(1) def add_html_footer(output_filename, output_directory): @@ -364,4 +364,4 @@ def add_html_footer(output_filename, output_directory): logger.critical( f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}] -- {error}" ) - sys.exit() + sys.exit(1) diff --git a/prowler/lib/outputs/json.py b/prowler/lib/outputs/json.py index 76656014..a667462d 100644 --- a/prowler/lib/outputs/json.py +++ b/prowler/lib/outputs/json.py @@ -80,4 +80,4 @@ def close_json(output_filename, output_directory, mode): logger.critical( f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}] -- {error}" ) - sys.exit() + sys.exit(1) diff --git a/prowler/lib/outputs/models.py b/prowler/lib/outputs/models.py index 88faae70..7a78cf3a 100644 --- a/prowler/lib/outputs/models.py +++ b/prowler/lib/outputs/models.py @@ -246,7 +246,7 @@ def generate_provider_output_json(provider: str, finding, audit_info, mode: str, logger.critical( f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" ) - sys.exit() + sys.exit(1) else: return finding_output diff --git a/prowler/lib/outputs/outputs.py b/prowler/lib/outputs/outputs.py index 009c5dbc..97ae705b 100644 --- a/prowler/lib/outputs/outputs.py +++ b/prowler/lib/outputs/outputs.py @@ -208,7 +208,7 @@ def send_to_s3_bucket( logger.critical( f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}] -- {error}" ) - sys.exit() + sys.exit(1) def extract_findings_statistics(findings: list) -> dict: diff --git a/prowler/lib/outputs/summary_table.py b/prowler/lib/outputs/summary_table.py index 7a93b1b9..f503f621 100644 --- a/prowler/lib/outputs/summary_table.py +++ b/prowler/lib/outputs/summary_table.py @@ -120,7 +120,7 @@ def display_summary_table( logger.critical( f"{error.__class__.__name__}:{error.__traceback__.tb_lineno} -- {error}" ) - sys.exit() + sys.exit(1) def add_service_to_table(findings_table, current): diff --git a/prowler/lib/utils/utils.py b/prowler/lib/utils/utils.py index 65fa9cde..f6323e8a 100644 --- a/prowler/lib/utils/utils.py +++ b/prowler/lib/utils/utils.py @@ -15,7 +15,7 @@ def open_file(input_file: str, mode: str = "r") -> TextIOWrapper: logger.critical( f"{input_file}: {e.__class__.__name__}[{e.__traceback__.tb_lineno}]" ) - sys.exit() + sys.exit(1) else: return f @@ -28,7 +28,7 @@ def parse_json_file(input_file: TextIOWrapper) -> Any: logger.critical( f"{input_file.name}: {e.__class__.__name__}[{e.__traceback__.tb_lineno}]" ) - sys.exit() + sys.exit(1) else: return json_file @@ -41,7 +41,7 @@ def file_exists(filename: str): logger.critical( f"{exists_filename.name}: {e.__class__.__name__}[{e.__traceback__.tb_lineno}]" ) - sys.exit() + sys.exit(1) else: return exists_filename diff --git a/prowler/providers/aws/aws_provider.py b/prowler/providers/aws/aws_provider.py index 820b56b6..581ad82d 100644 --- a/prowler/providers/aws/aws_provider.py +++ b/prowler/providers/aws/aws_provider.py @@ -54,7 +54,7 @@ class AWS_Provider: return session.Session(profile_name=audit_info.profile) except Exception as error: logger.critical(f"{error.__class__.__name__} -- {error}") - sys.exit() + sys.exit(1) # Refresh credentials method using assume role # This method is called "adding ()" to the name, so it cannot accept arguments @@ -97,7 +97,7 @@ def assume_role(session: session.Session, assumed_role_info: AWS_Assume_Role) -> ) except Exception as error: logger.critical(f"{error.__class__.__name__} -- {error}") - sys.exit() + sys.exit(1) else: return assumed_credentials diff --git a/prowler/providers/aws/lib/allowlist/allowlist.py b/prowler/providers/aws/lib/allowlist/allowlist.py index 298bc82d..2f134163 100644 --- a/prowler/providers/aws/lib/allowlist/allowlist.py +++ b/prowler/providers/aws/lib/allowlist/allowlist.py @@ -78,13 +78,13 @@ def parse_allowlist_file(audit_info, allowlist_file): logger.critical( f"{error.__class__.__name__} -- Allowlist YAML is malformed - {error}[{error.__traceback__.tb_lineno}]" ) - sys.exit() + sys.exit(1) return allowlist except Exception as error: logger.critical( f"{error.__class__.__name__} -- {error}[{error.__traceback__.tb_lineno}]" ) - sys.exit() + sys.exit(1) def is_allowlisted(allowlist, audited_account, check, region, resource): @@ -106,7 +106,7 @@ def is_allowlisted(allowlist, audited_account, check, region, resource): logger.critical( f"{error.__class__.__name__} -- {error}[{error.__traceback__.tb_lineno}]" ) - sys.exit() + sys.exit(1) def is_allowlisted_in_check(allowlist, audited_account, check, region, resource): @@ -129,7 +129,7 @@ def is_allowlisted_in_check(allowlist, audited_account, check, region, resource) logger.critical( f"{error.__class__.__name__} -- {error}[{error.__traceback__.tb_lineno}]" ) - sys.exit() + sys.exit(1) def is_allowlisted_in_region(allowlist, audited_account, check, region, resource): @@ -158,4 +158,4 @@ def is_allowlisted_in_region(allowlist, audited_account, check, region, resource logger.critical( f"{error.__class__.__name__} -- {error}[{error.__traceback__.tb_lineno}]" ) - sys.exit() + sys.exit(1) diff --git a/prowler/providers/azure/azure_provider.py b/prowler/providers/azure/azure_provider.py index a0509e78..a64cd1a7 100644 --- a/prowler/providers/azure/azure_provider.py +++ b/prowler/providers/azure/azure_provider.py @@ -57,7 +57,7 @@ class Azure_Provider: logger.critical( f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}] -- {error}" ) - sys.exit() + sys.exit(1) else: credentials = InteractiveBrowserCredential() @@ -72,7 +72,7 @@ class Azure_Provider: logger.critical( f"Azure provider: Missing environment variable {env_var} needed to autenticate against Azure" ) - sys.exit() + sys.exit(1) def __set_identity_info__( self, @@ -170,7 +170,7 @@ class Azure_Provider: logger.critical( f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}] -- {error}" ) - sys.exit() + sys.exit(1) return identity diff --git a/prowler/providers/common/audit_info.py b/prowler/providers/common/audit_info.py index 7dd35bba..7f318b48 100644 --- a/prowler/providers/common/audit_info.py +++ b/prowler/providers/common/audit_info.py @@ -32,7 +32,7 @@ class Audit_Info: caller_identity = validate_credentials_client.get_caller_identity() except Exception as error: logger.critical(f"{error.__class__.__name__} -- {error}") - sys.exit() + sys.exit(1) else: return caller_identity @@ -79,7 +79,7 @@ Caller Identity ARN: {Fore.YELLOW}[{audit_info.audited_identity_arn}]{Style.RESE ) except Exception as error: logger.critical(f"{error.__class__.__name__} -- {error}") - sys.exit() + sys.exit(1) else: # Convert Tags dictionary to String account_details_tags = "" @@ -162,7 +162,7 @@ Caller Identity ARN: {Fore.YELLOW}[{audit_info.audited_identity_arn}]{Style.RESE except Exception as error: logger.critical(f"{error.__class__.__name__} -- {error}") - sys.exit() + sys.exit(1) else: logger.info( @@ -195,7 +195,7 @@ Caller Identity ARN: {Fore.YELLOW}[{audit_info.audited_identity_arn}]{Style.RESE except Exception as error: logger.critical(f"{error.__class__.__name__} -- {error}") - sys.exit() + sys.exit(1) else: logger.info( @@ -299,7 +299,7 @@ def set_provider_audit_info(provider: str, arguments: dict): logger.critical( f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" ) - sys.exit() + sys.exit(1) else: return provider_audit_info @@ -332,6 +332,6 @@ def get_tagged_resources(input_resource_tags: list, current_audit_info: AWS_Audi logger.critical( f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" ) - sys.exit() + sys.exit(1) else: return tagged_resources diff --git a/prowler/providers/common/outputs.py b/prowler/providers/common/outputs.py index a5621668..49b4cee5 100644 --- a/prowler/providers/common/outputs.py +++ b/prowler/providers/common/outputs.py @@ -24,7 +24,7 @@ def set_provider_output_options( logger.critical( f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" ) - sys.exit() + sys.exit(1) else: return provider_output_options