From 1a03e002f70130ced392bcd6993a5487a454d000 Mon Sep 17 00:00:00 2001 From: TheraNinjaCat <236111633+TheraNinjaCat@users.noreply.github.com> Date: Thu, 17 Oct 2024 13:42:39 +1300 Subject: [PATCH] Added a wrapping function for record.get with error handling to return None. Used exclusively with link_deactivetime. --- ntdissector/ntds/ntds.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/ntdissector/ntds/ntds.py b/ntdissector/ntds/ntds.py index 615dae5..08c8daf 100644 --- a/ntdissector/ntds/ntds.py +++ b/ntdissector/ntds/ntds.py @@ -249,6 +249,13 @@ def updateAttributeSchema(aid: int, cn_name: str, ldap_name: str): self.attributeSchema["cn"][cn_name] = self.datatable_columns_mapping.get(aid) self.attributeSchema["ldap"][ldap_name] = self.datatable_columns_mapping.get(aid) + def getRecordValue(record: Record, key: str): + """Wraps the record.get method to silently fail the return value to None for when the table is missing the requested column""" + try: + return record.get(key) + except KeyError: + return None + seen = 0 OCLID_classSchema = 196621 OCLID_attributeSchema = 196622 @@ -271,12 +278,12 @@ def updateAttributeSchema(aid: int, cn_name: str, ldap_name: str): _b_DNT = str(record.get("backlink_DNT")) if _b_DNT not in self.links["to"]: self.links["to"][_b_DNT] = [] - self.links["to"][_b_DNT].append((record.get("link_DNT"), record.get("link_base"), record.get("link_deltime"), record.get("link_deactivetime"), record.get("link_data"))) + self.links["to"][_b_DNT].append((record.get("link_DNT"), record.get("link_base"), record.get("link_deltime"), getRecordValue(record, "link_deactivetime"), record.get("link_data"))) _l_DNT = str(record.get("link_DNT")) if _l_DNT not in self.links["from"]: self.links["from"][_l_DNT] = [] - self.links["from"][_l_DNT].append((record.get("backlink_DNT"), record.get("link_base"), record.get("link_deltime"), record.get("link_deactivetime"), record.get("link_data"))) + self.links["from"][_l_DNT].append((record.get("backlink_DNT"), record.get("link_base"), record.get("link_deltime"), getRecordValue(record, "link_deactivetime"), record.get("link_data"))) logging.debug("Parsing the datatable") for record in self.__datatable.records():