dissect.database 1.2.dev7__py3-none-any.whl → 1.2.dev8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -68,6 +68,7 @@ from dissect.database.ese.ntds.objects.msds_resourceproperty import MSDSResource
68
68
  from dissect.database.ese.ntds.objects.msds_resourcepropertylist import MSDSResourcePropertyList
69
69
  from dissect.database.ese.ntds.objects.msds_shadowprincipalcontainer import MSDSShadowPrincipalContainer
70
70
  from dissect.database.ese.ntds.objects.msds_valuetype import MSDSValueType
71
+ from dissect.database.ese.ntds.objects.msfve_recoveryinformation import MSFVERecoveryInformation
71
72
  from dissect.database.ese.ntds.objects.msimaging_psps import MSImagingPSPs
72
73
  from dissect.database.ese.ntds.objects.mskds_provserverconfiguration import MSKDSProvServerConfiguration
73
74
  from dissect.database.ese.ntds.objects.msmqenterprisesettings import MSMQEnterpriseSettings
@@ -174,6 +175,7 @@ __all__ = [
174
175
  "MSDSResourcePropertyList",
175
176
  "MSDSShadowPrincipalContainer",
176
177
  "MSDSValueType",
178
+ "MSFVERecoveryInformation",
177
179
  "MSImagingPSPs",
178
180
  "MSKDSProvServerConfiguration",
179
181
  "MSMQEnterpriseSettings",
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from typing import TYPE_CHECKING
4
4
 
5
+ from dissect.database.ese.ntds.objects.msfve_recoveryinformation import MSFVERecoveryInformation
5
6
  from dissect.database.ese.ntds.objects.user import User
6
7
 
7
8
  if TYPE_CHECKING:
@@ -22,6 +23,12 @@ class Computer(User):
22
23
  def __repr_body__(self) -> str:
23
24
  return f"name={self.name!r}"
24
25
 
26
+ def fve_recovery_information(self) -> Iterator[MSFVERecoveryInformation]:
27
+ """Return the BitLocker recovery information objects associated with this computer."""
28
+ for child in self.children():
29
+ if isinstance(child, MSFVERecoveryInformation):
30
+ yield child
31
+
25
32
  def managed_by(self) -> Iterator[Object]:
26
33
  """Return the objects that manage this computer."""
27
34
  self._assert_local()
@@ -0,0 +1,45 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+ from uuid import UUID
5
+
6
+ from dissect.database.ese.ntds.objects.top import Top
7
+
8
+ if TYPE_CHECKING:
9
+ from dissect.database.ese.ntds.objects import Computer
10
+
11
+
12
+ class MSFVERecoveryInformation(Top):
13
+ """Represents a msFVE-RecoveryInformation object in the Active Directory.
14
+
15
+ References:
16
+ - https://learn.microsoft.com/en-us/windows/win32/adschema/c-msfve-recoveryinformation
17
+ """
18
+
19
+ __object_class__ = "msFVE-RecoveryInformation"
20
+
21
+ @property
22
+ def volume_guid(self) -> UUID:
23
+ """Return the volume GUID associated with this recovery information."""
24
+ return UUID(bytes_le=self.get("msFVE-VolumeGuid"))
25
+
26
+ @property
27
+ def recovery_guid(self) -> UUID:
28
+ """Return the recovery GUID associated with this recovery information."""
29
+ return UUID(bytes_le=self.get("msFVE-RecoveryGuid"))
30
+
31
+ @property
32
+ def recovery_password(self) -> str | None:
33
+ """Return the recovery password associated with this recovery information."""
34
+ return self.get("msFVE-RecoveryPassword")
35
+
36
+ @property
37
+ def key_package(self) -> bytes | None:
38
+ """Return the key package associated with this recovery information, if any."""
39
+ return self.get("msFVE-KeyPackage")
40
+
41
+ def computer(self) -> Computer:
42
+ """Return the computer object associated with this recovery information."""
43
+ if (parent := self.parent()) is None:
44
+ raise ValueError("msFVE-RecoveryInformation object has no parent computer")
45
+ return parent
@@ -57,6 +57,11 @@ class Object:
57
57
  def __getattr__(self, name: str) -> Any:
58
58
  return self.get(name)
59
59
 
60
+ def __eq__(self, other: object) -> bool:
61
+ if not isinstance(other, Object):
62
+ return NotImplemented
63
+ return self.record == other.record
64
+
60
65
  @classmethod
61
66
  def from_record(cls, db: Database, record: Record) -> Object:
62
67
  """Create an Object instance from a database record.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dissect.database
3
- Version: 1.2.dev7
3
+ Version: 1.2.dev8
4
4
  Summary: A Dissect module implementing parsers for various database formats, including Berkeley DB, Microsofts Extensible Storage Engine (ESE) and SQLite3
5
5
  Author-email: Dissect Team <dissect@fox-it.com>
6
6
  License-Expression: Apache-2.0
@@ -36,14 +36,14 @@ dissect/database/ese/ntds/query.py,sha256=pDLLCVdrCRNq3ripvMDiyxXoFWsVJLwwsRMplR
36
36
  dissect/database/ese/ntds/schema.py,sha256=xxVL--RRBM8-IP12L86hrz-EEGLqXKAXpQZyOT_Vhn0,16644
37
37
  dissect/database/ese/ntds/sd.py,sha256=Y-oYnJPcLMDB_4X8TLEGtt-n_nC4HLA0WqIS8qYAwAs,5995
38
38
  dissect/database/ese/ntds/util.py,sha256=nuY7NRSlr5V5Jz2NIOEhe3hbzPjFLVQnprXa3swSl_M,18856
39
- dissect/database/ese/ntds/objects/__init__.py,sha256=3lI4f0SwILAY4zJRDVtJpe9YaxKspR-1kHXnhpw91e4,10739
39
+ dissect/database/ese/ntds/objects/__init__.py,sha256=LpZ9nHGxmuhVPQkD-qwh-OwFM1T4OzjcklAcEF2Zmrs,10868
40
40
  dissect/database/ese/ntds/objects/applicationsettings.py,sha256=j7UzmF8yxm3LR2lLnmGb7vFvUhYokCUOdhJXnk9xxzE,358
41
41
  dissect/database/ese/ntds/objects/attributeschema.py,sha256=0e_s5N5mnybxuufOEjGIVWlyuJkSgplz9LuIsaS2S38,342
42
42
  dissect/database/ese/ntds/objects/builtindomain.py,sha256=KEo-YQl-r748Hnkod21qej2qsLGj7jM4vt6nbufMPWQ,334
43
43
  dissect/database/ese/ntds/objects/certificationauthority.py,sha256=oqmPYlz5SYUv7RfTNCKZ3F233v3K7lBtxDDz_g_R1GU,365
44
44
  dissect/database/ese/ntds/objects/classschema.py,sha256=Hrpfgl_mR6ciHL7qya63mvzsrouFIy4BJVHU5wJm_Hg,1544
45
45
  dissect/database/ese/ntds/objects/classstore.py,sha256=VqWGm4ZqonQQGnFE67AyGGUYuTLdBmPQzZ34X-fRG5M,321
46
- dissect/database/ese/ntds/objects/computer.py,sha256=Gb5QYo43DvJslvF3TNovhhexm9QuDX4a8ZYXtSCStm0,739
46
+ dissect/database/ese/ntds/objects/computer.py,sha256=QstBJ59mxsepGBLW_EJBwOe4gCGHDz5ZJoSknD6TQlY,1136
47
47
  dissect/database/ese/ntds/objects/configuration.py,sha256=AMjJBr4yCDITulk3LhVMhZBEOUYf6ApzibwxiLO79sU,332
48
48
  dissect/database/ese/ntds/objects/container.py,sha256=fYtFfWHpcr_4wMN0_vfN9pRx2UXt26Fw31c4FOH9uEQ,316
49
49
  dissect/database/ese/ntds/objects/controlaccessright.py,sha256=Xh0hYp7rOQ2oZEA2hOALY_uGZNAxkiuhzhrgK1pLM2U,354
@@ -103,6 +103,7 @@ dissect/database/ese/ntds/objects/msds_resourceproperty.py,sha256=pEhSpJDx2fxOQI
103
103
  dissect/database/ese/ntds/objects/msds_resourcepropertylist.py,sha256=WnI2ivTbrGcO3i0u5ABXc9f0Us6H5xiUpEK7R_PHYes,377
104
104
  dissect/database/ese/ntds/objects/msds_shadowprincipalcontainer.py,sha256=lRw-taqKDB_os-EALtm_xJvzEOazJ5ZzWnXY9ouQmko,411
105
105
  dissect/database/ese/ntds/objects/msds_valuetype.py,sha256=uSv4TT525pywtB-JcawECqeSPOsOZvSz1JcbDGQmTMM,331
106
+ dissect/database/ese/ntds/objects/msfve_recoveryinformation.py,sha256=X5t7DlYAE6USjig5hIavzfHc0-3fg37qLSV415iECPQ,1562
106
107
  dissect/database/ese/ntds/objects/msimaging_psps.py,sha256=q-PdCY6I25xobOOEsllzxkX1NZRjnpgvCPlkk6PTclQ,336
107
108
  dissect/database/ese/ntds/objects/mskds_provserverconfiguration.py,sha256=JGqYnTyObQZ1l0l_nILa1e6-hv0towg6LiI93AE17xs,393
108
109
  dissect/database/ese/ntds/objects/msmqenterprisesettings.py,sha256=VUeQBGr_ycFGfH6XWvJvllrjoEY1nqy32P0_KhGHN2o,366
@@ -115,7 +116,7 @@ dissect/database/ese/ntds/objects/ntdsdsa.py,sha256=pES4m9UCqxDI6sOQUjyp3Uc0alHN
115
116
  dissect/database/ese/ntds/objects/ntdsservice.py,sha256=mTdpd2tzm8OOiGm6rJN35_dyeWtvzPYI_rVDBZz0gNc,326
116
117
  dissect/database/ese/ntds/objects/ntdssitesettings.py,sha256=VNlke-Vgxjh0fzd5o2X-4fwCBrkEI1coR4oto5OenPo,709
117
118
  dissect/database/ese/ntds/objects/ntfrssettings.py,sha256=PwIKT6t_zRxfdacWuvzMfq_mIhj_wyIhHzORNcF2eOU,745
118
- dissect/database/ese/ntds/objects/object.py,sha256=MQpHca7ev0oGsEC03DYbGptJUoVNK9sDIMBmUDjrDms,9997
119
+ dissect/database/ese/ntds/objects/object.py,sha256=gYxjaivNCr0WfjrAAIqS1SmSR2zF2_ROR0g2Cip-3gg,10162
119
120
  dissect/database/ese/ntds/objects/organizationalperson.py,sha256=X4QHT9AeGU7mDtIPlZbkhs1v2ZCPEarehFyn5EFszdY,559
120
121
  dissect/database/ese/ntds/objects/organizationalunit.py,sha256=H_VHrUgN92cXgGoV3ngiV4HjSaDndSUkQSjcNmb7WFs,715
121
122
  dissect/database/ese/ntds/objects/person.py,sha256=s67VHtsyN5t8icU9adPTLGcrIMH14yrEY1VqUqSw3Do,304
@@ -158,10 +159,10 @@ dissect/database/sqlite3/encryption/__init__.py,sha256=kJdFWXD9Z_O_QipC-_A9dlVfR
158
159
  dissect/database/sqlite3/encryption/sqlcipher/__init__.py,sha256=kJdFWXD9Z_O_QipC-_A9dlVfR6AOPSOoT8WBhpFbSsE,238
159
160
  dissect/database/sqlite3/encryption/sqlcipher/exception.py,sha256=GKNtzcnAKlWkvjLluruA8LfzCwjRRWubibbH8WM9l2o,121
160
161
  dissect/database/sqlite3/encryption/sqlcipher/sqlcipher.py,sha256=y_oJRKZqoJBeOQaBbniesZKm1sVTFvXZ466rJYZj2xE,11217
161
- dissect_database-1.2.dev7.dist-info/licenses/COPYRIGHT,sha256=pFH-OBYz6Xj23UB0Odz5IhoTR8nsTbJQNlCRV_wMaiE,317
162
- dissect_database-1.2.dev7.dist-info/licenses/LICENSE,sha256=PhUqiw6jAh2KbBdVRPBq_hfAvfcTBin7nZ3CK7NQbTM,11341
163
- dissect_database-1.2.dev7.dist-info/METADATA,sha256=sHAOCCznUzKRwrx21qX2wt81eYmUmZ7_E78gmdUTPJA,5540
164
- dissect_database-1.2.dev7.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
165
- dissect_database-1.2.dev7.dist-info/entry_points.txt,sha256=ZVVKj3Nzjkgm1kBXGWyGNVUJzTbmVgivv9lgFcuLkpk,343
166
- dissect_database-1.2.dev7.dist-info/top_level.txt,sha256=Mn-CQzEYsAbkxrUI0TnplHuXnGVKzxpDw_po_sXpvv4,8
167
- dissect_database-1.2.dev7.dist-info/RECORD,,
162
+ dissect_database-1.2.dev8.dist-info/licenses/COPYRIGHT,sha256=pFH-OBYz6Xj23UB0Odz5IhoTR8nsTbJQNlCRV_wMaiE,317
163
+ dissect_database-1.2.dev8.dist-info/licenses/LICENSE,sha256=PhUqiw6jAh2KbBdVRPBq_hfAvfcTBin7nZ3CK7NQbTM,11341
164
+ dissect_database-1.2.dev8.dist-info/METADATA,sha256=hGEpclu4s8U1QSHYtlzFE6-use8kBW1cwjqvDDjnDkY,5540
165
+ dissect_database-1.2.dev8.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
166
+ dissect_database-1.2.dev8.dist-info/entry_points.txt,sha256=ZVVKj3Nzjkgm1kBXGWyGNVUJzTbmVgivv9lgFcuLkpk,343
167
+ dissect_database-1.2.dev8.dist-info/top_level.txt,sha256=Mn-CQzEYsAbkxrUI0TnplHuXnGVKzxpDw_po_sXpvv4,8
168
+ dissect_database-1.2.dev8.dist-info/RECORD,,