From f4fc92030974fe38204a7883eeb2df52310435bd Mon Sep 17 00:00:00 2001 From: Haalstra Date: Fri, 5 Jul 2024 13:15:23 +0200 Subject: [PATCH 1/3] Add caching to Secure lookup --- dissect/ntfs/secure.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dissect/ntfs/secure.py b/dissect/ntfs/secure.py index 26eb86b..7827898 100644 --- a/dissect/ntfs/secure.py +++ b/dissect/ntfs/secure.py @@ -2,6 +2,7 @@ import io from typing import BinaryIO, Iterator +from functools import lru_cache from uuid import UUID from dissect.util.sid import read_sid @@ -25,6 +26,8 @@ def __init__(self, record: MftRecord = None, sds: BinaryIO = None): self.sds = None self.sii = None + self.lookup = lru_cache(4096)(self.lookup) + if record: self.sds = record.open("$SDS") self.sii = record.index("$SII") From 895cd38cd000ff56284ece3038ce2471e50c3a6a Mon Sep 17 00:00:00 2001 From: Haalstra Date: Fri, 5 Jul 2024 14:06:27 +0200 Subject: [PATCH 2/3] Added caching for __iter_entries, fixed linting --- dissect/ntfs/secure.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/dissect/ntfs/secure.py b/dissect/ntfs/secure.py index 7827898..cc0dd68 100644 --- a/dissect/ntfs/secure.py +++ b/dissect/ntfs/secure.py @@ -1,8 +1,8 @@ from __future__ import annotations import io -from typing import BinaryIO, Iterator from functools import lru_cache +from typing import BinaryIO, Iterator from uuid import UUID from dissect.util.sid import read_sid @@ -26,8 +26,6 @@ def __init__(self, record: MftRecord = None, sds: BinaryIO = None): self.sds = None self.sii = None - self.lookup = lru_cache(4096)(self.lookup) - if record: self.sds = record.open("$SDS") self.sii = record.index("$SII") @@ -41,6 +39,9 @@ def __init__(self, record: MftRecord = None, sds: BinaryIO = None): if not hasattr(self.sds, "size"): self.sds.size = self.sds.seek(0, io.SEEK_END) + self.lookup = lru_cache(4096)(self.lookup) + self._iter_entries = lru_cache(4096)(self._iter_entries) + def _iter_entries(self, offset: int = 0) -> Iterator[c_ntfs._SECURITY_DESCRIPTOR_HEADER]: """Iterate over all SDS entries, optionally starting from a specific offset. From 321a8ff8b37168f6a7313c20fb32920e69c15137 Mon Sep 17 00:00:00 2001 From: Haalstra Date: Fri, 5 Jul 2024 14:12:04 +0200 Subject: [PATCH 3/3] Removed generator caching --- dissect/ntfs/secure.py | 1 - 1 file changed, 1 deletion(-) diff --git a/dissect/ntfs/secure.py b/dissect/ntfs/secure.py index cc0dd68..380186e 100644 --- a/dissect/ntfs/secure.py +++ b/dissect/ntfs/secure.py @@ -40,7 +40,6 @@ def __init__(self, record: MftRecord = None, sds: BinaryIO = None): self.sds.size = self.sds.seek(0, io.SEEK_END) self.lookup = lru_cache(4096)(self.lookup) - self._iter_entries = lru_cache(4096)(self._iter_entries) def _iter_entries(self, offset: int = 0) -> Iterator[c_ntfs._SECURITY_DESCRIPTOR_HEADER]: """Iterate over all SDS entries, optionally starting from a specific offset.