dissect.database 1.2.dev8__tar.gz → 1.2.dev10__tar.gz

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.
Files changed (229) hide show
  1. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/PKG-INFO +1 -1
  2. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/database.py +6 -6
  3. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/ntds.py +17 -3
  4. dissect_database-1.2.dev10/dissect/database/ese/ntds/objects/attributeschema.py +28 -0
  5. dissect_database-1.2.dev10/dissect/database/ese/ntds/objects/c_dnsnode.py +109 -0
  6. dissect_database-1.2.dev10/dissect/database/ese/ntds/objects/c_dnsnode.pyi +146 -0
  7. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/certificationauthority.py +5 -0
  8. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/computer.py +15 -0
  9. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/configuration.py +5 -0
  10. dissect_database-1.2.dev10/dissect/database/ese/ntds/objects/crossref.py +27 -0
  11. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/crossrefcontainer.py +5 -0
  12. dissect_database-1.2.dev10/dissect/database/ese/ntds/objects/dnsnode.py +443 -0
  13. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/domaindns.py +5 -0
  14. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/group.py +10 -0
  15. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/grouppolicycontainer.py +5 -0
  16. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/ntdsdsa.py +5 -0
  17. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/object.py +36 -10
  18. dissect_database-1.2.dev10/dissect/database/ese/ntds/objects/organizationalperson.py +33 -0
  19. dissect_database-1.2.dev10/dissect/database/ese/ntds/objects/organizationalunit.py +51 -0
  20. dissect_database-1.2.dev10/dissect/database/ese/ntds/objects/person.py +23 -0
  21. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/pkienrollmentservice.py +5 -0
  22. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/server.py +5 -0
  23. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/site.py +16 -1
  24. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/top.py +5 -0
  25. dissect_database-1.2.dev10/dissect/database/ese/ntds/objects/trusteddomain.py +49 -0
  26. dissect_database-1.2.dev10/dissect/database/ese/ntds/objects/user.py +141 -0
  27. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/schema.py +3 -3
  28. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/util.py +106 -33
  29. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect.database.egg-info/PKG-INFO +1 -1
  30. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect.database.egg-info/SOURCES.txt +4 -0
  31. dissect_database-1.2.dev10/tests/ese/ntds/objects/test_dnsnode.py +260 -0
  32. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/ese/ntds/test_ntds.py +96 -1
  33. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/ese/ntds/test_pek.py +2 -2
  34. dissect_database-1.2.dev10/tests/sqlite3/__init__.py +0 -0
  35. dissect_database-1.2.dev8/dissect/database/ese/ntds/objects/attributeschema.py +0 -13
  36. dissect_database-1.2.dev8/dissect/database/ese/ntds/objects/crossref.py +0 -13
  37. dissect_database-1.2.dev8/dissect/database/ese/ntds/objects/dnsnode.py +0 -13
  38. dissect_database-1.2.dev8/dissect/database/ese/ntds/objects/organizationalperson.py +0 -18
  39. dissect_database-1.2.dev8/dissect/database/ese/ntds/objects/organizationalunit.py +0 -26
  40. dissect_database-1.2.dev8/dissect/database/ese/ntds/objects/person.py +0 -13
  41. dissect_database-1.2.dev8/dissect/database/ese/ntds/objects/trusteddomain.py +0 -13
  42. dissect_database-1.2.dev8/dissect/database/ese/ntds/objects/user.py +0 -74
  43. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/.git-blame-ignore-revs +0 -0
  44. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/COPYRIGHT +0 -0
  45. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/LICENSE +0 -0
  46. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/MANIFEST.in +0 -0
  47. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/README.md +0 -0
  48. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/__init__.py +0 -0
  49. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/bsd/__init__.py +0 -0
  50. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/bsd/c_db.py +0 -0
  51. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/bsd/c_db.pyi +0 -0
  52. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/bsd/db.py +0 -0
  53. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/bsd/tools/__init__.py +0 -0
  54. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/bsd/tools/c_rpm.py +0 -0
  55. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/bsd/tools/c_rpm.pyi +0 -0
  56. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/bsd/tools/rpm.py +0 -0
  57. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/__init__.py +0 -0
  58. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/c_ese.py +0 -0
  59. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/c_ese.pyi +0 -0
  60. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/compression.py +0 -0
  61. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/cursor.py +0 -0
  62. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ese.py +0 -0
  63. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/exception.py +0 -0
  64. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/index.py +0 -0
  65. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/lcmapstring.py +0 -0
  66. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/__init__.py +0 -0
  67. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/c_ds.py +0 -0
  68. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/c_ds.pyi +0 -0
  69. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/c_pek.py +0 -0
  70. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/c_pek.pyi +0 -0
  71. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/c_sd.py +0 -0
  72. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/c_sd.pyi +0 -0
  73. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/__init__.py +0 -0
  74. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/applicationsettings.py +0 -0
  75. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/builtindomain.py +0 -0
  76. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/classschema.py +0 -0
  77. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/classstore.py +0 -0
  78. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/container.py +0 -0
  79. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/controlaccessright.py +0 -0
  80. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/crldistributionpoint.py +0 -0
  81. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/dfsconfiguration.py +0 -0
  82. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/displayspecifier.py +0 -0
  83. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/dmd.py +0 -0
  84. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/dnszone.py +0 -0
  85. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/domain.py +0 -0
  86. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/domainpolicy.py +0 -0
  87. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/dsuisettings.py +0 -0
  88. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/filelinktracking.py +0 -0
  89. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/foreignsecurityprincipal.py +0 -0
  90. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/infrastructureupdate.py +0 -0
  91. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/intersitetransport.py +0 -0
  92. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/intersitetransportcontainer.py +0 -0
  93. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/ipsecbase.py +0 -0
  94. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/ipsecfilter.py +0 -0
  95. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/ipsecisakmppolicy.py +0 -0
  96. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/ipsecnegotiationpolicy.py +0 -0
  97. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/ipsecnfa.py +0 -0
  98. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/ipsecpolicy.py +0 -0
  99. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/leaf.py +0 -0
  100. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/linktrackobjectmovetable.py +0 -0
  101. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/linktrackvolumetable.py +0 -0
  102. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/locality.py +0 -0
  103. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/lostandfound.py +0 -0
  104. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msauthz_centralaccesspolicies.py +0 -0
  105. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msauthz_centralaccessrules.py +0 -0
  106. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msdfsr_content.py +0 -0
  107. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msdfsr_contentset.py +0 -0
  108. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msdfsr_globalsettings.py +0 -0
  109. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msdfsr_localsettings.py +0 -0
  110. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msdfsr_member.py +0 -0
  111. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msdfsr_replicationgroup.py +0 -0
  112. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msdfsr_subscriber.py +0 -0
  113. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msdfsr_subscription.py +0 -0
  114. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msdfsr_topology.py +0 -0
  115. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msdns_serversettings.py +0 -0
  116. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msds_authnpolicies.py +0 -0
  117. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msds_authnpolicysilos.py +0 -0
  118. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msds_claimstransformationpolicies.py +0 -0
  119. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msds_claimtype.py +0 -0
  120. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msds_claimtypepropertybase.py +0 -0
  121. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msds_claimtypes.py +0 -0
  122. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msds_optionalfeature.py +0 -0
  123. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msds_passwordsettingscontainer.py +0 -0
  124. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msds_quotacontainer.py +0 -0
  125. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msds_resourceproperties.py +0 -0
  126. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msds_resourceproperty.py +0 -0
  127. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msds_resourcepropertylist.py +0 -0
  128. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msds_shadowprincipalcontainer.py +0 -0
  129. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msds_valuetype.py +0 -0
  130. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msfve_recoveryinformation.py +0 -0
  131. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msimaging_psps.py +0 -0
  132. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/mskds_provserverconfiguration.py +0 -0
  133. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msmqenterprisesettings.py +0 -0
  134. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/mspki_enterpriseoid.py +0 -0
  135. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/mspki_privatekeyrecoveryagent.py +0 -0
  136. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/msspp_activationobjectscontainer.py +0 -0
  137. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/mstpm_informationobjectscontainer.py +0 -0
  138. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/ntdsconnection.py +0 -0
  139. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/ntdsservice.py +0 -0
  140. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/ntdssitesettings.py +0 -0
  141. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/ntfrssettings.py +0 -0
  142. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/physicallocation.py +0 -0
  143. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/pkicertificatetemplate.py +0 -0
  144. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/querypolicy.py +0 -0
  145. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/ridmanager.py +0 -0
  146. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/ridset.py +0 -0
  147. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/rpccontainer.py +0 -0
  148. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/rrasadministrationdictionary.py +0 -0
  149. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/samserver.py +0 -0
  150. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/secret.py +0 -0
  151. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/securityobject.py +0 -0
  152. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/serverscontainer.py +0 -0
  153. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/sitelink.py +0 -0
  154. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/sitescontainer.py +0 -0
  155. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/subnetcontainer.py +0 -0
  156. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/objects/subschema.py +0 -0
  157. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/pek.py +0 -0
  158. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/query.py +0 -0
  159. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/sd.py +0 -0
  160. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/tools/__init__.py +0 -0
  161. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/ntds/tools/ntds.py +0 -0
  162. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/page.py +0 -0
  163. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/record.py +0 -0
  164. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/sorting_table.py +0 -0
  165. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/table.py +0 -0
  166. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/tools/__init__.py +0 -0
  167. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/tools/certlog.py +0 -0
  168. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/tools/impacket.py +0 -0
  169. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/tools/sru.py +0 -0
  170. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/tools/ual.py +0 -0
  171. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/ese/util.py +0 -0
  172. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/exception.py +0 -0
  173. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/sqlite3/__init__.py +0 -0
  174. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/sqlite3/c_sqlite3.py +0 -0
  175. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/sqlite3/c_sqlite3.pyi +0 -0
  176. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/sqlite3/encryption/__init__.py +0 -0
  177. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/sqlite3/encryption/sqlcipher/__init__.py +0 -0
  178. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/sqlite3/encryption/sqlcipher/exception.py +0 -0
  179. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/sqlite3/encryption/sqlcipher/sqlcipher.py +0 -0
  180. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/sqlite3/exception.py +0 -0
  181. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/sqlite3/sqlite3.py +0 -0
  182. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/sqlite3/util.py +0 -0
  183. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect/database/sqlite3/wal.py +0 -0
  184. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect.database.egg-info/dependency_links.txt +0 -0
  185. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect.database.egg-info/entry_points.txt +0 -0
  186. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect.database.egg-info/requires.txt +0 -0
  187. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/dissect.database.egg-info/top_level.txt +0 -0
  188. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/pyproject.toml +0 -0
  189. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/setup.cfg +0 -0
  190. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/__init__.py +0 -0
  191. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/_docs/Makefile +0 -0
  192. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/_docs/conf.py +0 -0
  193. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/_docs/index.rst +0 -0
  194. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/_tools/sqlite3/__init__.py +0 -0
  195. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/_tools/sqlite3/generate_sqlite.py +0 -0
  196. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/_util.py +0 -0
  197. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/bsd/__init__.py +0 -0
  198. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/bsd/conftest.py +0 -0
  199. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/bsd/test_db.py +0 -0
  200. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/bsd/test_rpm.py +0 -0
  201. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/conftest.py +0 -0
  202. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/ese/__init__.py +0 -0
  203. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/ese/conftest.py +0 -0
  204. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/ese/ntds/__init__.py +0 -0
  205. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/ese/ntds/conftest.py +0 -0
  206. {dissect_database-1.2.dev8/tests/ese/tools → dissect_database-1.2.dev10/tests/ese/ntds/objects}/__init__.py +0 -0
  207. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/ese/ntds/test_benchmark.py +0 -0
  208. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/ese/ntds/test_query.py +0 -0
  209. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/ese/ntds/test_schema.py +0 -0
  210. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/ese/ntds/test_sd.py +0 -0
  211. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/ese/ntds/test_util.py +0 -0
  212. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/ese/test_cursor.py +0 -0
  213. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/ese/test_ese.py +0 -0
  214. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/ese/test_index.py +0 -0
  215. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/ese/test_page.py +0 -0
  216. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/ese/test_record.py +0 -0
  217. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/ese/test_table.py +0 -0
  218. {dissect_database-1.2.dev8/tests/sqlite3 → dissect_database-1.2.dev10/tests/ese/tools}/__init__.py +0 -0
  219. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/ese/tools/test_certlog.py +0 -0
  220. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/ese/tools/test_sru.py +0 -0
  221. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/ese/tools/test_ual.py +0 -0
  222. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/sqlite3/conftest.py +0 -0
  223. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/sqlite3/test_default_values.py +0 -0
  224. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/sqlite3/test_row.py +0 -0
  225. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/sqlite3/test_sqlcipher.py +0 -0
  226. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/sqlite3/test_sqlite3.py +0 -0
  227. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/sqlite3/test_util.py +0 -0
  228. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tests/sqlite3/test_wal.py +0 -0
  229. {dissect_database-1.2.dev8 → dissect_database-1.2.dev10}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dissect.database
3
- Version: 1.2.dev8
3
+ Version: 1.2.dev10
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
@@ -11,7 +11,7 @@ from dissect.database.ese.ntds.pek import PEK
11
11
  from dissect.database.ese.ntds.query import Query
12
12
  from dissect.database.ese.ntds.schema import Schema
13
13
  from dissect.database.ese.ntds.sd import SecurityDescriptor
14
- from dissect.database.ese.ntds.util import DN, DatabaseFlags, SearchFlags, encode_value
14
+ from dissect.database.ese.ntds.util import DN, DatabaseFlag, SearchFlag, encode_value
15
15
 
16
16
  if TYPE_CHECKING:
17
17
  from collections.abc import Iterator
@@ -44,14 +44,14 @@ class Database:
44
44
  self.data._make_dn.cache_clear()
45
45
 
46
46
  @cached_property
47
- def flags(self) -> DatabaseFlags | None:
47
+ def flags(self) -> DatabaseFlag | None:
48
48
  """Return the database flags."""
49
49
  if self.hiddeninfo is None:
50
50
  return None
51
51
 
52
- result = DatabaseFlags(0)
52
+ result = DatabaseFlag(0)
53
53
  flags = self.hiddeninfo.get("flags_col")
54
- for idx, member in enumerate(DatabaseFlags.__members__.values()):
54
+ for idx, member in enumerate(DatabaseFlag.__members__.values()):
55
55
  if flags[idx] == ord(b"1"):
56
56
  result = member if result is None else result | member
57
57
 
@@ -256,9 +256,9 @@ class DataTable:
256
256
  if schema.search_flags is None:
257
257
  raise ValueError(f"Attribute is not indexed: {attribute!r}")
258
258
 
259
- if SearchFlags.Indexed in schema.search_flags:
259
+ if SearchFlag.Indexed in schema.search_flags:
260
260
  name = f"INDEX_{schema.id:08x}"
261
- elif SearchFlags.TupleIndexed in schema.search_flags:
261
+ elif SearchFlag.TupleIndexed in schema.search_flags:
262
262
  name = f"INDEX_T_{schema.id:08x}"
263
263
  else:
264
264
  # TODO add ContainerIndexed
@@ -11,6 +11,7 @@ if TYPE_CHECKING:
11
11
 
12
12
  from dissect.database.ese.ntds.objects import (
13
13
  Computer,
14
+ DnsNode,
14
15
  DomainDNS,
15
16
  Group,
16
17
  GroupPolicyContainer,
@@ -20,6 +21,7 @@ if TYPE_CHECKING:
20
21
  TrustedDomain,
21
22
  User,
22
23
  )
24
+ from dissect.database.ese.ntds.objects.organizationalunit import OrganizationalUnit
23
25
  from dissect.database.ese.ntds.pek import PEK
24
26
 
25
27
 
@@ -83,11 +85,11 @@ class NTDS:
83
85
 
84
86
  def groups(self) -> Iterator[Group]:
85
87
  """Get all group objects from the database."""
86
- yield from self.search(objectCategory="group")
88
+ yield from self.search(objectClass="group")
87
89
 
88
90
  def servers(self) -> Iterator[Server]:
89
91
  """Get all server objects from the database."""
90
- yield from self.search(objectCategory="server")
92
+ yield from self.search(objectClass="server")
91
93
 
92
94
  def users(self) -> Iterator[User]:
93
95
  """Get all user objects from the database."""
@@ -95,7 +97,11 @@ class NTDS:
95
97
 
96
98
  def computers(self) -> Iterator[Computer]:
97
99
  """Get all computer objects from the database."""
98
- yield from self.search(objectCategory="computer")
100
+ yield from self.search(objectClass="computer")
101
+
102
+ def domains(self) -> Iterator[DomainDNS]:
103
+ """Get all domain objects from the database."""
104
+ yield from self.search(objectClass="domainDNS")
99
105
 
100
106
  def trusts(self) -> Iterator[TrustedDomain]:
101
107
  """Get all trust objects from the database."""
@@ -105,10 +111,18 @@ class NTDS:
105
111
  """Get all group policy objects (GPO) objects from the database."""
106
112
  yield from self.search(objectClass="groupPolicyContainer")
107
113
 
114
+ def organizational_units(self) -> Iterator[OrganizationalUnit]:
115
+ """Get all organizational unit (OU) objects from the database."""
116
+ yield from self.search(objectClass="organizationalUnit")
117
+
108
118
  def secrets(self) -> Iterator[Secret]:
109
119
  """Get all secret objects from the database."""
110
120
  yield from self.search(objectClass="secret")
111
121
 
122
+ def dns_nodes(self) -> Iterator[DnsNode]:
123
+ """Get all DnsNode objects from the database."""
124
+ yield from self.search(objectClass="dnsNode")
125
+
112
126
  def backup_keys(self) -> Iterator[BackupKey]:
113
127
  """Get all DPAPI backup keys from the database."""
114
128
  if not self.pek.unlocked:
@@ -0,0 +1,28 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING, ClassVar
4
+
5
+ from dissect.database.ese.ntds.objects.top import Top
6
+ from dissect.database.ese.ntds.util import SearchFlag, SystemFlagAttribute
7
+
8
+ if TYPE_CHECKING:
9
+ from dissect.database.ese.ntds.objects.object import DecoderMap
10
+
11
+
12
+ class AttributeSchema(Top):
13
+ """Represents an attribute schema object in the Active Directory.
14
+
15
+ References:
16
+ - https://learn.microsoft.com/en-us/windows/win32/adschema/c-attributeschema
17
+ """
18
+
19
+ __object_class__ = "attributeSchema"
20
+ __decoders__: ClassVar[DecoderMap] = {
21
+ "searchFlags": lambda db, value: SearchFlag(value),
22
+ "systemFlags": lambda db, value: SystemFlagAttribute(value),
23
+ }
24
+
25
+ @property
26
+ def search_flags(self) -> SearchFlag | None:
27
+ """Return the searchFlags of this attribute schema."""
28
+ return self.get("searchFlags")
@@ -0,0 +1,109 @@
1
+ from __future__ import annotations
2
+
3
+ from dissect.cstruct import cstruct
4
+
5
+ dns_record_def = """
6
+
7
+ // https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dnsp/39b03b89-2264-4063-8198-d62f62a6441a
8
+ enum DNS_RECORD_TYPE : WORD {
9
+ ZERO = 0x0000, // An empty record type ([RFC1034] section 3.6 and [RFC1035] section 3.2.2).
10
+ A = 0x0001, // An A record type, used for storing an IP address ([RFC1035] section 3.2.2).
11
+ NS = 0x0002, // An authoritative name-server
12
+ // record type ([RFC1034] section 3.6 and [RFC1035] section 3.2.2).
13
+ MD = 0x0003, // A mail-destination record type ([RFC1035] section 3.2.2).
14
+ MF = 0x0004, // A mail forwarder record type ([RFC1035] section 3.2.2).
15
+ CNAME = 0x0005, // A record type that contains the canonical name of a DNS alias ([RFC1035] section 3.2.2).
16
+ SOA = 0x0006, // A Start of Authority (SOA) record type ([RFC1035] section 3.2.2).
17
+ MB = 0x0007, // A mailbox record type ([RFC1035] section 3.2.2).
18
+ MG = 0x0008, // A mail group member record type ([RFC1035] section 3.2.2).
19
+ MR = 0x0009, // A mail-rename record type ([RFC1035] section 3.2.2).
20
+ NULL = 0x000A, // A record type for completion queries ([RFC1035] section 3.2.2).
21
+ WKS = 0x000B, // A record type for a well-known service ([RFC1035] section 3.2.2).
22
+ PTR = 0x000C, // A record type containing FQDN pointer ([RFC1035] section 3.2.2).
23
+ HINFO = 0x000D, // A host information record type ([RFC1035] section 3.2.2).
24
+ MINFO = 0x000E, // A mailbox or mailing list information record type ([RFC1035] section 3.2.2).
25
+ MX = 0x000F, // A mail-exchanger record type ([RFC1035] section 3.2.2).
26
+ TXT = 0x0010, // A record type containing a text string ([RFC1035] section 3.2.2).
27
+ RP = 0x0011, // A responsible-person record type [RFC1183].
28
+ AFSDB = 0x0012, // A record type containing AFS database location [RFC1183].
29
+ X25 = 0x0013, // An X25 PSDN address record type [RFC1183].
30
+ ISDN = 0x0014, // An ISDN address record type [RFC1183].
31
+ RT = 0x0015, // A route through record type [RFC1183].
32
+ SIG = 0x0018, // A cryptographic public key signature record type [RFC2931].
33
+ KEY = 0x0019, // A record type containing public key used in DNSSEC [RFC2535].
34
+ AAAA = 0x001C, // An IPv6 address record type [RFC3596].
35
+ LOC = 0x001D, // A location information record type [RFC1876].
36
+ NXT = 0x001E, // A next-domain record type [RFC2065].
37
+ SRV = 0x0021, // A server selection record type [RFC2782].
38
+ ATMA = 0x0022, // An Asynchronous Transfer Mode (ATM) address record type [ATMA].
39
+ NAPTR = 0x0023, // An NAPTR record type [RFC2915].
40
+ DNAME = 0x0027, // A DNAME record type [RFC2672].
41
+ DS = 0x002B, // A DS record type [RFC4034].
42
+ RRSIG = 0x002E, // An RRSIG record type [RFC4034].
43
+ NSEC = 0x002F, // An NSEC record type [RFC4034].
44
+ DNSKEY = 0x0030, // A DNSKEY record type [RFC4034].
45
+ DHCID = 0x0031, // A DHCID record type [RFC4701].
46
+ NSEC3 = 0x0032, // An NSEC3 record type [RFC5155].
47
+ NSEC3PARAM = 0x0033, // An NSEC3PARAM record type [RFC5155].
48
+ TLSA = 0x0034, // A TLSA record type [RFC6698].
49
+ ALL = 0x00FF, // A query-only type requesting all records [RFC1035].
50
+ WINS = 0xFF01, // A record type containing Windows Internet Name Service (WINS)
51
+ // forward lookup data [MS-WINSRADNS_TYPE_WINSR].
52
+ WINSR = 0xFF02 // A record type containing WINS reverse lookup data [MS-WINSRA].
53
+ };
54
+
55
+ // https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dnsp/6912b338-5472-4f59-b912-0edb536b6ed8
56
+ typedef struct DNS_RECORD_HEADER {
57
+ WORD DataLength;
58
+ DNS_RECORD_TYPE Type;
59
+ BYTE Version; // Must be 0x05
60
+ BYTE Rank;
61
+ WORD Flags; // Must be 0x00
62
+ DWORD Serial;
63
+ DWORD TtlSeconds; // Big Endian
64
+ DWORD Reserved; // MUST be 0x00000000.
65
+ DWORD TimeStamp;
66
+ CHAR Data[DataLength];
67
+ };
68
+
69
+ // https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dnsp/3fd41adc-c69e-407b-979e-721251403132
70
+ // MS docs indicate that structure is 4 byte aligned, and that the string MUST NOT be null-terminated.
71
+ // But observed reality is a null terminated string (null char not counted in NameLength)
72
+ typedef struct DNS_RPC_NAME{
73
+ BYTE NameLength;
74
+ CHAR dnsName[NameLength];
75
+ };
76
+
77
+ // https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dnsp/db37cab7-f121-43ba-81c5-ca0e198d4b9a
78
+ typedef struct DNS_RPC_RECORD_SRV {
79
+ WORD Priority;
80
+ WORD Weight;
81
+ WORD Port;
82
+ DNS_RPC_NAME nameTarget;
83
+ };
84
+
85
+ // https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dnsp/f647d391-6614-4c3e-b38b-4df971590eb6
86
+ typedef struct DNS_RPC_RECORD_NAME_PREFERENCE {
87
+ WORD Preference;
88
+ DNS_RPC_NAME nameExchange;
89
+ };
90
+
91
+ // https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dnsp/dcd3ec16-d6bf-4bb4-9128-6172f9e5f066
92
+ typedef struct DNS_RPC_RECORD_SOA {
93
+ DWORD Serial;
94
+ DWORD Refresh;
95
+ DWORD Retry;
96
+ DWORD Expire;
97
+ DWORD MinimumTtl;
98
+ DNS_RPC_NAME namePrimaryServer;
99
+ BYTE _pad;
100
+ DNS_RPC_NAME ZoneAdministratorEmail;
101
+ };
102
+
103
+ // https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dnsp/def7736a-dd09-4b4a-b8d6-6a702a7ecde0
104
+ typedef struct DNS_RPC_RECORD_TS {
105
+ QWORD EntombedTime;
106
+ };
107
+ """
108
+ c_dns_record = cstruct(dns_record_def)
109
+ DNS_RECORD_TYPE = c_dns_record.DNS_RECORD_TYPE
@@ -0,0 +1,146 @@
1
+ # Generated by cstruct-stubgen
2
+ from typing import BinaryIO, Literal, TypeAlias, overload
3
+
4
+ import dissect.cstruct as __cs__
5
+
6
+ class _c_dns_record(__cs__.cstruct):
7
+ class DNS_RECORD_TYPE(__cs__.Enum):
8
+ ZERO = ...
9
+ A = ...
10
+ NS = ...
11
+ MD = ...
12
+ MF = ...
13
+ CNAME = ...
14
+ SOA = ...
15
+ MB = ...
16
+ MG = ...
17
+ MR = ...
18
+ NULL = ...
19
+ WKS = ...
20
+ PTR = ...
21
+ HINFO = ...
22
+ MINFO = ...
23
+ MX = ...
24
+ TXT = ...
25
+ RP = ...
26
+ AFSDB = ...
27
+ X25 = ...
28
+ ISDN = ...
29
+ RT = ...
30
+ SIG = ...
31
+ KEY = ...
32
+ AAAA = ...
33
+ LOC = ...
34
+ NXT = ...
35
+ SRV = ...
36
+ ATMA = ...
37
+ NAPTR = ...
38
+ DNAME = ...
39
+ DS = ...
40
+ RRSIG = ...
41
+ NSEC = ...
42
+ DNSKEY = ...
43
+ DHCID = ...
44
+ NSEC3 = ...
45
+ NSEC3PARAM = ...
46
+ TLSA = ...
47
+ ALL = ...
48
+ WINS = ...
49
+ WINSR = ...
50
+
51
+ class DNS_RECORD_HEADER(__cs__.Structure):
52
+ DataLength: _c_dns_record.uint16
53
+ Type: _c_dns_record.DNS_RECORD_TYPE
54
+ Version: _c_dns_record.uint8
55
+ Rank: _c_dns_record.uint8
56
+ Flags: _c_dns_record.uint16
57
+ Serial: _c_dns_record.uint32
58
+ TtlSeconds: _c_dns_record.uint32
59
+ Reserved: _c_dns_record.uint32
60
+ TimeStamp: _c_dns_record.uint32
61
+ Data: __cs__.CharArray
62
+ @overload
63
+ def __init__(
64
+ self,
65
+ DataLength: _c_dns_record.uint16 | None = ...,
66
+ Type: _c_dns_record.DNS_RECORD_TYPE | None = ...,
67
+ Version: _c_dns_record.uint8 | None = ...,
68
+ Rank: _c_dns_record.uint8 | None = ...,
69
+ Flags: _c_dns_record.uint16 | None = ...,
70
+ Serial: _c_dns_record.uint32 | None = ...,
71
+ TtlSeconds: _c_dns_record.uint32 | None = ...,
72
+ Reserved: _c_dns_record.uint32 | None = ...,
73
+ TimeStamp: _c_dns_record.uint32 | None = ...,
74
+ Data: __cs__.CharArray | None = ...,
75
+ ): ...
76
+ @overload
77
+ def __init__(self, fh: bytes | memoryview | bytearray | BinaryIO, /): ...
78
+
79
+ class DNS_RPC_NAME(__cs__.Structure):
80
+ NameLength: _c_dns_record.uint8
81
+ dnsName: __cs__.CharArray
82
+ @overload
83
+ def __init__(self, NameLength: _c_dns_record.uint8 | None = ..., dnsName: __cs__.CharArray | None = ...): ...
84
+ @overload
85
+ def __init__(self, fh: bytes | memoryview | bytearray | BinaryIO, /): ...
86
+
87
+ class DNS_RPC_RECORD_SRV(__cs__.Structure):
88
+ Priority: _c_dns_record.uint16
89
+ Weight: _c_dns_record.uint16
90
+ Port: _c_dns_record.uint16
91
+ nameTarget: _c_dns_record.DNS_RPC_NAME
92
+ @overload
93
+ def __init__(
94
+ self,
95
+ Priority: _c_dns_record.uint16 | None = ...,
96
+ Weight: _c_dns_record.uint16 | None = ...,
97
+ Port: _c_dns_record.uint16 | None = ...,
98
+ nameTarget: _c_dns_record.DNS_RPC_NAME | None = ...,
99
+ ): ...
100
+ @overload
101
+ def __init__(self, fh: bytes | memoryview | bytearray | BinaryIO, /): ...
102
+
103
+ class DNS_RPC_RECORD_NAME_PREFERENCE(__cs__.Structure):
104
+ Preference: _c_dns_record.uint16
105
+ nameExchange: _c_dns_record.DNS_RPC_NAME
106
+ @overload
107
+ def __init__(
108
+ self, Preference: _c_dns_record.uint16 | None = ..., nameExchange: _c_dns_record.DNS_RPC_NAME | None = ...
109
+ ): ...
110
+ @overload
111
+ def __init__(self, fh: bytes | memoryview | bytearray | BinaryIO, /): ...
112
+
113
+ class DNS_RPC_RECORD_SOA(__cs__.Structure):
114
+ Serial: _c_dns_record.uint32
115
+ Refresh: _c_dns_record.uint32
116
+ Retry: _c_dns_record.uint32
117
+ Expire: _c_dns_record.uint32
118
+ MinimumTtl: _c_dns_record.uint32
119
+ namePrimaryServer: _c_dns_record.DNS_RPC_NAME
120
+ _pad: _c_dns_record.uint8
121
+ ZoneAdministratorEmail: _c_dns_record.DNS_RPC_NAME
122
+ @overload
123
+ def __init__(
124
+ self,
125
+ Serial: _c_dns_record.uint32 | None = ...,
126
+ Refresh: _c_dns_record.uint32 | None = ...,
127
+ Retry: _c_dns_record.uint32 | None = ...,
128
+ Expire: _c_dns_record.uint32 | None = ...,
129
+ MinimumTtl: _c_dns_record.uint32 | None = ...,
130
+ namePrimaryServer: _c_dns_record.DNS_RPC_NAME | None = ...,
131
+ _pad: _c_dns_record.uint8 | None = ...,
132
+ ZoneAdministratorEmail: _c_dns_record.DNS_RPC_NAME | None = ...,
133
+ ): ...
134
+ @overload
135
+ def __init__(self, fh: bytes | memoryview | bytearray | BinaryIO, /): ...
136
+
137
+ class DNS_RPC_RECORD_TS(__cs__.Structure):
138
+ EntombedTime: _c_dns_record.uint64
139
+ @overload
140
+ def __init__(self, EntombedTime: _c_dns_record.uint64 | None = ...): ...
141
+ @overload
142
+ def __init__(self, fh: bytes | memoryview | bytearray | BinaryIO, /): ...
143
+
144
+ # Technically `c_dns_record` is an instance of `_c_dns_record`, but then we can't use it in type hints
145
+ c_dns_record: TypeAlias = _c_dns_record
146
+ DNS_RECORD_TYPE: TypeAlias = _c_dns_record.DNS_RECORD_TYPE
@@ -11,3 +11,8 @@ class CertificationAuthority(Top):
11
11
  """
12
12
 
13
13
  __object_class__ = "certificationAuthority"
14
+
15
+ @property
16
+ def dns_host_name(self) -> str | None:
17
+ """Return the dNSHostName of this Certification Authority."""
18
+ return self.get("dNSHostName")
@@ -23,6 +23,21 @@ class Computer(User):
23
23
  def __repr_body__(self) -> str:
24
24
  return f"name={self.name!r}"
25
25
 
26
+ @property
27
+ def dns_host_name(self) -> str | None:
28
+ """Return the dNSHostName of this computer."""
29
+ return self.get("dNSHostName")
30
+
31
+ @property
32
+ def operating_system(self) -> str | None:
33
+ """Return the operatingSystem of this computer."""
34
+ return self.get("operatingSystem")
35
+
36
+ @property
37
+ def operating_system_version(self) -> str | None:
38
+ """Return the operatingSystemVersion of this computer."""
39
+ return self.get("operatingSystemVersion")
40
+
26
41
  def fve_recovery_information(self) -> Iterator[MSFVERecoveryInformation]:
27
42
  """Return the BitLocker recovery information objects associated with this computer."""
28
43
  for child in self.children():
@@ -11,3 +11,8 @@ class Configuration(Top):
11
11
  """
12
12
 
13
13
  __object_class__ = "configuration"
14
+
15
+ @property
16
+ def gp_link(self) -> str | None:
17
+ """Return the group policy link of the configuration."""
18
+ return self.get("gPLink")
@@ -0,0 +1,27 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING, ClassVar
4
+
5
+ from dissect.database.ese.ntds.objects.top import Top
6
+ from dissect.database.ese.ntds.util import SystemFlagCrossRef
7
+
8
+ if TYPE_CHECKING:
9
+ from dissect.database.ese.ntds.objects.object import DecoderMap
10
+
11
+
12
+ class CrossRef(Top):
13
+ """Represents a cross-reference object in the Active Directory.
14
+
15
+ References:
16
+ - https://learn.microsoft.com/en-us/windows/win32/adschema/c-crossref
17
+ """
18
+
19
+ __object_class__ = "crossRef"
20
+ __decoders__: ClassVar[DecoderMap] = {
21
+ "systemFlags": lambda db, value: SystemFlagCrossRef(value),
22
+ }
23
+
24
+ @property
25
+ def behavior_version(self) -> int | None:
26
+ """Return the msDS-Behavior-Version of this cross-reference."""
27
+ return self.get("msDS-Behavior-Version")
@@ -11,3 +11,8 @@ class CrossRefContainer(Top):
11
11
  """
12
12
 
13
13
  __object_class__ = "crossRefContainer"
14
+
15
+ @property
16
+ def behavior_version(self) -> int | None:
17
+ """Return the msDS-Behavior-Version of this cross-reference container."""
18
+ return self.get("msDS-Behavior-Version")