Skip to content

Commit 7b0ce78

Browse files
fix: remove return statements from finally blocks (#10102)
Co-authored-by: Pepe Fagoaga <[email protected]>
1 parent 0a11ca4 commit 7b0ce78

File tree

6 files changed

+52
-70
lines changed

6 files changed

+52
-70
lines changed

prowler/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ All notable changes to the **Prowler SDK** are documented in this file.
1717

1818
- Minimum Python version from 3.9 to 3.10 and updated classifiers to reflect supported versions (3.10, 3.11, 3.12) [(#10464)](https://github.com/prowler-cloud/prowler/pull/10464)
1919

20+
### 🐞 Fixed
21+
22+
- `return` statements in `finally` blocks replaced across IAM, Organizations, GCP provider, and custom checks metadata to stop silently swallowing exceptions [(#10102)](https://github.com/prowler-cloud/prowler/pull/10102)
23+
2024
---
2125

2226
## [5.22.1] (Prowler UNRELEASED)

prowler/lib/check/custom_checks_metadata.py

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -112,24 +112,22 @@ def update_checks_metadata(bulk_checks_metadata, custom_checks_metadata):
112112

113113
def update_check_metadata(check_metadata, custom_metadata):
114114
"""update_check_metadata updates the check_metadata fields present in the custom_metadata and returns the updated version of the check_metadata. If some field is not present or valid the check_metadata is returned with the original fields."""
115-
try:
116-
if custom_metadata:
117-
for attribute in custom_metadata:
118-
if attribute == "Remediation":
119-
for remediation_attribute in custom_metadata[attribute]:
120-
update_check_metadata_remediation(
121-
check_metadata,
122-
custom_metadata,
123-
attribute,
124-
remediation_attribute,
125-
)
126-
else:
127-
try:
128-
setattr(check_metadata, attribute, custom_metadata[attribute])
129-
except ValueError:
130-
pass
131-
finally:
132-
return check_metadata
115+
if custom_metadata:
116+
for attribute in custom_metadata:
117+
if attribute == "Remediation":
118+
for remediation_attribute in custom_metadata[attribute]:
119+
update_check_metadata_remediation(
120+
check_metadata,
121+
custom_metadata,
122+
attribute,
123+
remediation_attribute,
124+
)
125+
else:
126+
try:
127+
setattr(check_metadata, attribute, custom_metadata[attribute])
128+
except ValueError:
129+
pass
130+
return check_metadata
133131

134132

135133
def update_check_metadata_remediation(

prowler/providers/aws/services/iam/iam_service.py

Lines changed: 25 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ def _get_client(self):
112112

113113
def _get_roles(self):
114114
logger.info("IAM - List Roles...")
115+
roles = []
115116
try:
116-
roles = []
117117
get_roles_paginator = self.client.get_paginator("list_roles")
118118
for page in get_roles_paginator.paginate():
119119
for role in page["Roles"]:
@@ -142,8 +142,7 @@ def _get_roles(self):
142142
logger.error(
143143
f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
144144
)
145-
finally:
146-
return roles
145+
return roles
147146

148147
def _get_credential_report(self):
149148
logger.info("IAM - Get Credential Report...")
@@ -175,13 +174,12 @@ def _get_credential_report(self):
175174
logger.error(
176175
f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
177176
)
178-
finally:
179-
return credential_list
177+
return credential_list
180178

181179
def _get_groups(self):
182180
logger.info("IAM - Get Groups...")
181+
groups = []
183182
try:
184-
groups = []
185183
get_groups_paginator = self.client.get_paginator("list_groups")
186184
for page in get_groups_paginator.paginate():
187185
for group in page["Groups"]:
@@ -194,25 +192,23 @@ def _get_groups(self):
194192
logger.error(
195193
f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
196194
)
197-
finally:
198-
return groups
195+
return groups
199196

200197
def _get_account_summary(self):
201198
logger.info("IAM - Get Account Summary...")
199+
account_summary = None
202200
try:
203201
account_summary = self.client.get_account_summary()
204202
except Exception as error:
205203
logger.error(
206204
f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
207205
)
208-
account_summary = None
209-
finally:
210-
return account_summary
206+
return account_summary
211207

212208
def _get_password_policy(self):
213209
logger.info("IAM - Get Password Policy...")
210+
stored_password_policy = None
214211
try:
215-
stored_password_policy = None
216212
password_policy = self.client.get_account_password_policy()[
217213
"PasswordPolicy"
218214
]
@@ -274,14 +270,13 @@ def _get_password_policy(self):
274270
f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
275271
)
276272

277-
finally:
278-
return stored_password_policy
273+
return stored_password_policy
279274

280275
def _get_users(self):
281276
logger.info("IAM - Get Users...")
277+
users = []
282278
try:
283279
get_users_paginator = self.client.get_paginator("list_users")
284-
users = []
285280
for page in get_users_paginator.paginate():
286281
for user in page["Users"]:
287282
if not self.audit_resources or (
@@ -311,13 +306,12 @@ def _get_users(self):
311306
logger.error(
312307
f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
313308
)
314-
finally:
315-
return users
309+
return users
316310

317311
def _list_virtual_mfa_devices(self):
318312
logger.info("IAM - List Virtual MFA Devices...")
313+
mfa_devices = []
319314
try:
320-
mfa_devices = []
321315
list_virtual_mfa_devices_paginator = self.client.get_paginator(
322316
"list_virtual_mfa_devices"
323317
)
@@ -329,8 +323,7 @@ def _list_virtual_mfa_devices(self):
329323
logger.error(
330324
f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
331325
)
332-
finally:
333-
return mfa_devices
326+
return mfa_devices
334327

335328
def _list_attached_group_policies(self):
336329
logger.info("IAM - List Attached Group Policies...")
@@ -677,12 +670,11 @@ def _list_inline_role_policies(self):
677670

678671
def _list_entities_role_for_policy(self, policy_arn):
679672
logger.info("IAM - List Entities Role For Policy...")
673+
roles = []
680674
try:
681-
roles = []
682675
roles = self.client.list_entities_for_policy(
683676
PolicyArn=policy_arn, EntityFilter="Role"
684677
)["PolicyRoles"]
685-
return roles
686678
except ClientError as error:
687679
if error.response["Error"]["Code"] == "AccessDenied":
688680
logger.error(
@@ -697,18 +689,16 @@ def _list_entities_role_for_policy(self, policy_arn):
697689
logger.error(
698690
f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
699691
)
700-
finally:
701-
return roles
692+
return roles
702693

703694
def _list_entities_for_policy(self, policy_arn):
704695
logger.info("IAM - List Entities For Policy...")
696+
entities = {
697+
"Users": [],
698+
"Groups": [],
699+
"Roles": [],
700+
}
705701
try:
706-
entities = {
707-
"Users": [],
708-
"Groups": [],
709-
"Roles": [],
710-
}
711-
712702
paginator = self.client.get_paginator("list_entities_for_policy")
713703
for response in paginator.paginate(PolicyArn=policy_arn):
714704
entities["Users"].extend(
@@ -720,7 +710,6 @@ def _list_entities_for_policy(self, policy_arn):
720710
entities["Roles"].extend(
721711
role["RoleName"] for role in response.get("PolicyRoles", [])
722712
)
723-
return entities
724713
except ClientError as error:
725714
if error.response["Error"]["Code"] == "AccessDenied":
726715
logger.error(
@@ -735,13 +724,12 @@ def _list_entities_for_policy(self, policy_arn):
735724
logger.error(
736725
f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
737726
)
738-
finally:
739-
return entities
727+
return entities
740728

741729
def _list_policies(self, scope):
742730
logger.info("IAM - List Policies...")
731+
policies = {}
743732
try:
744-
policies = {}
745733
list_policies_paginator = self.client.get_paginator("list_policies")
746734
for page in list_policies_paginator.paginate(
747735
Scope=scope, OnlyAttached=False if scope == "Local" else True
@@ -762,8 +750,7 @@ def _list_policies(self, scope):
762750
logger.error(
763751
f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
764752
)
765-
finally:
766-
return policies
753+
return policies
767754

768755
def _list_policies_version(self, policies):
769756
logger.info("IAM - List Policies Version...")
@@ -817,8 +804,8 @@ def _list_saml_providers(self):
817804

818805
def _list_server_certificates(self) -> list:
819806
logger.info("IAM - List Server Certificates...")
807+
server_certificates = []
820808
try:
821-
server_certificates = []
822809
for certificate in self.client.list_server_certificates()[
823810
"ServerCertificateMetadataList"
824811
]:
@@ -837,8 +824,7 @@ def _list_server_certificates(self) -> list:
837824
logger.error(
838825
f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
839826
)
840-
finally:
841-
return server_certificates
827+
return server_certificates
842828

843829
def _list_tags(self, resource: any):
844830
logger.info("IAM - List Tags...")

prowler/providers/aws/services/iam/iam_user_two_active_access_key/iam_user_two_active_access_key.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55

66
class iam_user_two_active_access_key(Check):
77
def execute(self) -> Check_Report_AWS:
8+
findings = []
89
try:
9-
findings = []
1010
response = iam_client.credential_report
1111
for user in response:
1212
report = Check_Report_AWS(metadata=self.metadata(), resource=user)
@@ -34,5 +34,4 @@ def execute(self) -> Check_Report_AWS:
3434
findings.append(report)
3535
except Exception as error:
3636
logger.error(f"{error.__class__.__name__} -- {error}")
37-
finally:
38-
return findings
37+
return findings

prowler/providers/aws/services/organizations/organizations_service.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,9 @@ def _describe_organization(self):
8080

8181
def _list_policies(self):
8282
logger.info("Organizations - List policies...")
83-
83+
policies = {}
8484
try:
8585
list_policies_paginator = self.client.get_paginator("list_policies")
86-
policies = {}
8786
for policy_type in AVAILABLE_ORGANIZATIONS_POLICIES:
8887
logger.info(
8988
"Organizations - List policies... - Type: %s",
@@ -122,8 +121,7 @@ def _list_policies(self):
122121
f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
123122
)
124123

125-
finally:
126-
return policies
124+
return policies
127125

128126
def _describe_policy(self, policy_id) -> dict:
129127
logger.info("Organizations - Describe policy: %s ...", policy_id)
@@ -192,8 +190,7 @@ def _list_delegated_administrators(self):
192190
f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
193191
)
194192

195-
finally:
196-
return self.delegated_administrators
193+
return self.delegated_administrators
197194

198195

199196
class Policy(BaseModel):

prowler/providers/gcp/gcp_provider.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -626,9 +626,8 @@ def get_projects(
626626
Usage:
627627
>>> GcpProvider.get_projects(credentials=credentials, organization_id=organization_id)
628628
"""
629+
projects = {}
629630
try:
630-
projects = {}
631-
632631
if organization_id:
633632
try:
634633
# Initialize Cloud Asset Inventory API for recursive project retrieval
@@ -803,8 +802,7 @@ def get_projects(
803802
logger.critical(
804803
f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
805804
)
806-
finally:
807-
return projects
805+
return projects
808806

809807
def update_projects_with_organizations(self):
810808
"""

0 commit comments

Comments
 (0)