dissect.database 1.2.dev3__tar.gz → 1.2.dev5__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 (216) hide show
  1. dissect_database-1.2.dev5/.git-blame-ignore-revs +6 -0
  2. {dissect_database-1.2.dev3/dissect.database.egg-info → dissect_database-1.2.dev5}/PKG-INFO +1 -1
  3. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ese.py +3 -1
  4. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/lcmapstring.py +1 -0
  5. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/object.py +2 -1
  6. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/user.py +2 -1
  7. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/schema.py +0 -1
  8. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/table.py +2 -1
  9. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/tools/sru.py +2 -1
  10. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/tools/ual.py +8 -3
  11. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/sqlite3/encryption/sqlcipher/sqlcipher.py +0 -3
  12. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/sqlite3/sqlite3.py +7 -7
  13. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/sqlite3/util.py +0 -1
  14. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5/dissect.database.egg-info}/PKG-INFO +1 -1
  15. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect.database.egg-info/SOURCES.txt +1 -0
  16. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/pyproject.toml +20 -2
  17. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/_docs/conf.py +2 -0
  18. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/ese/test_cursor.py +2 -0
  19. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/ese/test_page.py +2 -0
  20. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/ese/test_record.py +0 -1
  21. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/ese/test_table.py +2 -0
  22. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/sqlite3/test_sqlcipher.py +0 -2
  23. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/sqlite3/test_sqlite3.py +0 -1
  24. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/sqlite3/test_wal.py +0 -1
  25. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/COPYRIGHT +0 -0
  26. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/LICENSE +0 -0
  27. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/MANIFEST.in +0 -0
  28. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/README.md +0 -0
  29. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/__init__.py +0 -0
  30. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/bsd/__init__.py +0 -0
  31. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/bsd/c_db.py +0 -0
  32. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/bsd/c_db.pyi +0 -0
  33. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/bsd/db.py +0 -0
  34. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/bsd/tools/__init__.py +0 -0
  35. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/bsd/tools/c_rpm.py +0 -0
  36. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/bsd/tools/c_rpm.pyi +0 -0
  37. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/bsd/tools/rpm.py +0 -0
  38. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/__init__.py +0 -0
  39. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/c_ese.py +0 -0
  40. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/c_ese.pyi +0 -0
  41. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/compression.py +0 -0
  42. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/cursor.py +0 -0
  43. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/exception.py +0 -0
  44. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/index.py +0 -0
  45. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/__init__.py +0 -0
  46. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/c_ds.py +0 -0
  47. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/c_ds.pyi +0 -0
  48. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/c_pek.py +0 -0
  49. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/c_pek.pyi +0 -0
  50. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/c_sd.py +0 -0
  51. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/c_sd.pyi +0 -0
  52. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/database.py +0 -0
  53. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/ntds.py +0 -0
  54. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/__init__.py +0 -0
  55. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/applicationsettings.py +0 -0
  56. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/attributeschema.py +0 -0
  57. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/builtindomain.py +0 -0
  58. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/certificationauthority.py +0 -0
  59. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/classschema.py +0 -0
  60. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/classstore.py +0 -0
  61. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/computer.py +0 -0
  62. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/configuration.py +0 -0
  63. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/container.py +0 -0
  64. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/controlaccessright.py +0 -0
  65. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/crldistributionpoint.py +0 -0
  66. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/crossref.py +0 -0
  67. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/crossrefcontainer.py +0 -0
  68. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/dfsconfiguration.py +0 -0
  69. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/displayspecifier.py +0 -0
  70. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/dmd.py +0 -0
  71. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/dnsnode.py +0 -0
  72. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/dnszone.py +0 -0
  73. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/domain.py +0 -0
  74. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/domaindns.py +0 -0
  75. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/domainpolicy.py +0 -0
  76. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/dsuisettings.py +0 -0
  77. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/filelinktracking.py +0 -0
  78. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/foreignsecurityprincipal.py +0 -0
  79. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/group.py +0 -0
  80. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/grouppolicycontainer.py +0 -0
  81. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/infrastructureupdate.py +0 -0
  82. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/intersitetransport.py +0 -0
  83. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/intersitetransportcontainer.py +0 -0
  84. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/ipsecbase.py +0 -0
  85. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/ipsecfilter.py +0 -0
  86. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/ipsecisakmppolicy.py +0 -0
  87. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/ipsecnegotiationpolicy.py +0 -0
  88. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/ipsecnfa.py +0 -0
  89. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/ipsecpolicy.py +0 -0
  90. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/leaf.py +0 -0
  91. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/linktrackobjectmovetable.py +0 -0
  92. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/linktrackvolumetable.py +0 -0
  93. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/locality.py +0 -0
  94. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/lostandfound.py +0 -0
  95. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msauthz_centralaccesspolicies.py +0 -0
  96. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msauthz_centralaccessrules.py +0 -0
  97. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msdfsr_content.py +0 -0
  98. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msdfsr_contentset.py +0 -0
  99. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msdfsr_globalsettings.py +0 -0
  100. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msdfsr_localsettings.py +0 -0
  101. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msdfsr_member.py +0 -0
  102. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msdfsr_replicationgroup.py +0 -0
  103. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msdfsr_subscriber.py +0 -0
  104. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msdfsr_subscription.py +0 -0
  105. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msdfsr_topology.py +0 -0
  106. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msdns_serversettings.py +0 -0
  107. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msds_authnpolicies.py +0 -0
  108. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msds_authnpolicysilos.py +0 -0
  109. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msds_claimstransformationpolicies.py +0 -0
  110. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msds_claimtype.py +0 -0
  111. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msds_claimtypepropertybase.py +0 -0
  112. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msds_claimtypes.py +0 -0
  113. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msds_optionalfeature.py +0 -0
  114. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msds_passwordsettingscontainer.py +0 -0
  115. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msds_quotacontainer.py +0 -0
  116. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msds_resourceproperties.py +0 -0
  117. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msds_resourceproperty.py +0 -0
  118. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msds_resourcepropertylist.py +0 -0
  119. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msds_shadowprincipalcontainer.py +0 -0
  120. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msds_valuetype.py +0 -0
  121. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msimaging_psps.py +0 -0
  122. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/mskds_provserverconfiguration.py +0 -0
  123. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msmqenterprisesettings.py +0 -0
  124. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/mspki_enterpriseoid.py +0 -0
  125. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/mspki_privatekeyrecoveryagent.py +0 -0
  126. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/msspp_activationobjectscontainer.py +0 -0
  127. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/mstpm_informationobjectscontainer.py +0 -0
  128. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/ntdsconnection.py +0 -0
  129. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/ntdsdsa.py +0 -0
  130. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/ntdsservice.py +0 -0
  131. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/ntdssitesettings.py +0 -0
  132. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/ntfrssettings.py +0 -0
  133. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/organizationalperson.py +0 -0
  134. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/organizationalunit.py +0 -0
  135. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/person.py +0 -0
  136. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/physicallocation.py +0 -0
  137. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/pkicertificatetemplate.py +0 -0
  138. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/pkienrollmentservice.py +0 -0
  139. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/querypolicy.py +0 -0
  140. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/ridmanager.py +0 -0
  141. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/ridset.py +0 -0
  142. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/rpccontainer.py +0 -0
  143. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/rrasadministrationdictionary.py +0 -0
  144. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/samserver.py +0 -0
  145. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/secret.py +0 -0
  146. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/securityobject.py +0 -0
  147. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/server.py +0 -0
  148. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/serverscontainer.py +0 -0
  149. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/site.py +0 -0
  150. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/sitelink.py +0 -0
  151. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/sitescontainer.py +0 -0
  152. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/subnetcontainer.py +0 -0
  153. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/subschema.py +0 -0
  154. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/top.py +0 -0
  155. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/objects/trusteddomain.py +0 -0
  156. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/pek.py +0 -0
  157. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/query.py +0 -0
  158. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/sd.py +0 -0
  159. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/tools/__init__.py +0 -0
  160. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/tools/ntds.py +0 -0
  161. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/ntds/util.py +0 -0
  162. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/page.py +0 -0
  163. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/record.py +0 -0
  164. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/sorting_table.py +0 -0
  165. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/tools/__init__.py +0 -0
  166. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/tools/certlog.py +0 -0
  167. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/tools/impacket.py +0 -0
  168. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/ese/util.py +0 -0
  169. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/exception.py +0 -0
  170. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/sqlite3/__init__.py +0 -0
  171. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/sqlite3/c_sqlite3.py +0 -0
  172. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/sqlite3/c_sqlite3.pyi +0 -0
  173. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/sqlite3/encryption/__init__.py +0 -0
  174. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/sqlite3/encryption/sqlcipher/__init__.py +0 -0
  175. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/sqlite3/encryption/sqlcipher/exception.py +0 -0
  176. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/sqlite3/exception.py +0 -0
  177. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect/database/sqlite3/wal.py +0 -0
  178. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect.database.egg-info/dependency_links.txt +0 -0
  179. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect.database.egg-info/entry_points.txt +0 -0
  180. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect.database.egg-info/requires.txt +0 -0
  181. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/dissect.database.egg-info/top_level.txt +0 -0
  182. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/setup.cfg +0 -0
  183. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/__init__.py +0 -0
  184. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/_docs/Makefile +0 -0
  185. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/_docs/index.rst +0 -0
  186. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/_tools/sqlite3/__init__.py +0 -0
  187. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/_tools/sqlite3/generate_sqlite.py +0 -0
  188. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/_util.py +0 -0
  189. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/bsd/__init__.py +0 -0
  190. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/bsd/conftest.py +0 -0
  191. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/bsd/test_db.py +0 -0
  192. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/bsd/test_rpm.py +0 -0
  193. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/conftest.py +0 -0
  194. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/ese/__init__.py +0 -0
  195. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/ese/conftest.py +0 -0
  196. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/ese/ntds/__init__.py +0 -0
  197. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/ese/ntds/conftest.py +0 -0
  198. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/ese/ntds/test_benchmark.py +0 -0
  199. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/ese/ntds/test_ntds.py +0 -0
  200. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/ese/ntds/test_pek.py +0 -0
  201. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/ese/ntds/test_query.py +0 -0
  202. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/ese/ntds/test_schema.py +0 -0
  203. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/ese/ntds/test_sd.py +0 -0
  204. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/ese/ntds/test_util.py +0 -0
  205. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/ese/test_ese.py +0 -0
  206. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/ese/test_index.py +0 -0
  207. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/ese/tools/__init__.py +0 -0
  208. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/ese/tools/test_certlog.py +0 -0
  209. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/ese/tools/test_sru.py +0 -0
  210. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/ese/tools/test_ual.py +0 -0
  211. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/sqlite3/__init__.py +0 -0
  212. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/sqlite3/conftest.py +0 -0
  213. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/sqlite3/test_default_values.py +0 -0
  214. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/sqlite3/test_row.py +0 -0
  215. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tests/sqlite3/test_util.py +0 -0
  216. {dissect_database-1.2.dev3 → dissect_database-1.2.dev5}/tox.ini +0 -0
@@ -0,0 +1,6 @@
1
+ # Formatting commits. You can ignore them during git-blame with `--ignore-rev` or `--ignore-revs-file`.
2
+ #
3
+ # $ git config --add 'blame.ignoreRevsFile' '.git-blame-ignore-revs'
4
+ #
5
+ # Add stricter Ruff linting (#49)
6
+ 4c99b30a2a2ee7a108dce15e476e2e77b38ec6b4
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dissect.database
3
- Version: 1.2.dev3
3
+ Version: 1.2.dev5
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
@@ -10,11 +10,13 @@ from typing import TYPE_CHECKING, BinaryIO
10
10
  from dissect.database.ese.c_ese import c_ese, pgnoFDPMSO, ulDAEMagic
11
11
  from dissect.database.ese.exception import InvalidDatabase
12
12
  from dissect.database.ese.page import Page
13
- from dissect.database.ese.table import Catalog, Table
13
+ from dissect.database.ese.table import Catalog
14
14
 
15
15
  if TYPE_CHECKING:
16
16
  from collections.abc import Iterator
17
17
 
18
+ from dissect.database.ese.table import Table
19
+
18
20
 
19
21
  class ESE:
20
22
  """ESE database class.
@@ -1,6 +1,7 @@
1
1
  # Based on Wine source
2
2
  # https://github.com/wine-mirror/wine/blob/master/dlls/kernelbase/locale.c
3
3
  # http://www.flounder.com/localeexplorer.htm
4
+ from __future__ import annotations
4
5
 
5
6
  from enum import IntEnum, IntFlag
6
7
 
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  from functools import cached_property
4
4
  from typing import TYPE_CHECKING, Any, ClassVar
5
5
 
6
- from dissect.database.ese.ntds.util import DN, InstanceType, SystemFlags, decode_value
6
+ from dissect.database.ese.ntds.util import InstanceType, decode_value
7
7
 
8
8
  if TYPE_CHECKING:
9
9
  from collections.abc import Iterator
@@ -11,6 +11,7 @@ if TYPE_CHECKING:
11
11
 
12
12
  from dissect.database.ese.ntds.database import Database
13
13
  from dissect.database.ese.ntds.sd import SecurityDescriptor
14
+ from dissect.database.ese.ntds.util import DN, SystemFlags
14
15
  from dissect.database.ese.record import Record
15
16
 
16
17
 
@@ -3,13 +3,14 @@ from __future__ import annotations
3
3
  from typing import TYPE_CHECKING
4
4
 
5
5
  from dissect.database.ese.ntds.objects.organizationalperson import OrganizationalPerson
6
- from dissect.database.ese.ntds.util import SAMAccountType, UserAccountControl
6
+ from dissect.database.ese.ntds.util import UserAccountControl
7
7
 
8
8
  if TYPE_CHECKING:
9
9
  from collections.abc import Iterator
10
10
 
11
11
  from dissect.database.ese.ntds.objects.group import Group
12
12
  from dissect.database.ese.ntds.objects.object import Object
13
+ from dissect.database.ese.ntds.util import SAMAccountType
13
14
 
14
15
 
15
16
  class User(OrganizationalPerson):
@@ -198,7 +198,6 @@ class Schema:
198
198
  Args:
199
199
  db: The database instance to load the schema from.
200
200
  """
201
-
202
201
  # Load the schema entries from the DMD object
203
202
  # This _should_ have all the attribute and class schema entries
204
203
  # We used to perform an index search on objectClass (ATTc0, INDEX_00000000), but apparently
@@ -14,7 +14,7 @@ from dissect.database.ese.c_ese import (
14
14
  from dissect.database.ese.cursor import RawCursor
15
15
  from dissect.database.ese.index import Index
16
16
  from dissect.database.ese.record import Record
17
- from dissect.database.ese.util import COLUMN_TYPE_MAP, ColumnType, RecordValue
17
+ from dissect.database.ese.util import COLUMN_TYPE_MAP
18
18
 
19
19
  if TYPE_CHECKING:
20
20
  from collections.abc import Iterator
@@ -22,6 +22,7 @@ if TYPE_CHECKING:
22
22
  from dissect.database.ese.cursor import Cursor
23
23
  from dissect.database.ese.ese import ESE
24
24
  from dissect.database.ese.page import Page
25
+ from dissect.database.ese.util import ColumnType, RecordValue
25
26
 
26
27
 
27
28
  class Table:
@@ -9,11 +9,12 @@ from dissect.util.sid import read_sid
9
9
  from dissect.util.ts import oatimestamp, wintimestamp
10
10
 
11
11
  from dissect.database.ese.ese import ESE
12
- from dissect.database.ese.record import Record, serialise_record_column_values
12
+ from dissect.database.ese.record import serialise_record_column_values
13
13
 
14
14
  if TYPE_CHECKING:
15
15
  from collections.abc import Iterator
16
16
 
17
+ from dissect.database.ese.record import Record
17
18
  from dissect.database.ese.table import Table
18
19
  from dissect.database.ese.util import RecordValue
19
20
 
@@ -1,17 +1,22 @@
1
+ from __future__ import annotations
2
+
1
3
  import argparse
2
4
  import datetime
3
5
  import ipaddress
4
6
  import json
5
- from collections.abc import Iterator
6
7
  from pathlib import Path
7
- from typing import BinaryIO
8
+ from typing import TYPE_CHECKING, BinaryIO
8
9
 
9
10
  from dissect.util.ts import wintimestamp
10
11
 
11
12
  from dissect.database.ese.ese import ESE
12
- from dissect.database.ese.table import Table
13
13
  from dissect.database.ese.util import RecordValue
14
14
 
15
+ if TYPE_CHECKING:
16
+ from collections.abc import Iterator
17
+
18
+ from dissect.database.ese.table import Table
19
+
15
20
  UalValue = RecordValue | ipaddress.IPv4Address | ipaddress.IPv6Interface | tuple[datetime.datetime]
16
21
 
17
22
  SKIP_TABLES = [
@@ -178,7 +178,6 @@ class SQLCipherStream(AlignedStream):
178
178
 
179
179
  def _read(self, offset: int, length: int) -> bytes:
180
180
  """Calculates which pages to read from based on the given offset and length. Returns decrypted bytes."""
181
-
182
181
  start_page = offset // self.align
183
182
  num_pages = length // self.align
184
183
  return b"".join(
@@ -191,7 +190,6 @@ class SQLCipherStream(AlignedStream):
191
190
  References:
192
191
  - https://github.com/sqlcipher/sqlcipher-tools/blob/master/decrypt.c
193
192
  """
194
-
195
193
  if page_num < 1:
196
194
  raise ValueError("The first page number is 1")
197
195
 
@@ -294,7 +292,6 @@ class SQLCipher1(SQLCipher):
294
292
 
295
293
  def derive_key(passphrase: bytes, salt: bytes, kdf_iter: int, kdf_algo: str | None) -> bytes:
296
294
  """Derive the database key as SQLCipher would using PBKDF2."""
297
-
298
295
  if not kdf_iter or not kdf_algo:
299
296
  return passphrase
300
297
 
@@ -15,7 +15,7 @@ from dissect.database.sqlite3.exception import (
15
15
  NoCellData,
16
16
  )
17
17
  from dissect.database.sqlite3.util import parse_table_columns_constraints
18
- from dissect.database.sqlite3.wal import WAL, Checkpoint
18
+ from dissect.database.sqlite3.wal import WAL
19
19
 
20
20
  if TYPE_CHECKING:
21
21
  from collections.abc import Iterator
@@ -23,6 +23,8 @@ if TYPE_CHECKING:
23
23
 
24
24
  from typing_extensions import Self
25
25
 
26
+ from dissect.database.sqlite3.wal import Checkpoint
27
+
26
28
  ENCODING = {
27
29
  1: "utf-8",
28
30
  2: "utf-16-le",
@@ -259,7 +261,7 @@ class Column:
259
261
  self.default_value = self._parse_default_value_from_description(description)
260
262
 
261
263
  def _parse_default_value_from_description(self, description: str) -> bool | str | int | float | None:
262
- """Find the default from the description string"""
264
+ """Find the default from the description string."""
263
265
  if "DEFAULT" not in description.upper():
264
266
  return None
265
267
 
@@ -275,14 +277,13 @@ class Column:
275
277
  return [x for x in tokens if x and x != " "]
276
278
 
277
279
  def _get_default_value(self, tokens: list[str]) -> str:
278
- """Retrieve the default from the tokens"""
279
-
280
+ """Retrieve the default from the tokens."""
280
281
  # The +1 is to account for the space after the default
281
282
  value_index = [x.upper() for x in tokens].index("DEFAULT") + 1
282
283
  return tokens[value_index]
283
284
 
284
285
  def _parse_default_value(self, value: str) -> bool | str | int | float | None:
285
- """Parses the default value
286
+ """Parses the default value.
286
287
 
287
288
  The value can hold an expression surrounded by ().
288
289
  This can be a literal, so these values get stripped.
@@ -293,7 +294,7 @@ class Column:
293
294
  return None
294
295
 
295
296
  def _parse_literal(self, value: str) -> bool | str | int | float:
296
- """Tries to convert a literal from a string to any type
297
+ """Tries to convert a literal from a string to any type.
297
298
 
298
299
  CURRENT_(TIME|DATE|TIMESTAMP) isn't being taken into account.
299
300
  """
@@ -385,7 +386,6 @@ class Row:
385
386
  If there are any cell values with unknown column names
386
387
  they get added to the unknown list.
387
388
  """
388
-
389
389
  row_values = {}
390
390
  unknowns = []
391
391
 
@@ -109,7 +109,6 @@ def parse_table_columns_constraints(sql: str) -> tuple[str | None, list[str], li
109
109
 
110
110
  def split_column_def(sql: str, column_def: str) -> tuple[str, str]:
111
111
  """Splits the column definition to name and constraint."""
112
-
113
112
  column_parts = column_def.split(maxsplit=1)
114
113
  if not column_parts:
115
114
  raise InvalidSQL(f"Not a valid CREATE TABLE definition: empty column definition in {sql!r}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dissect.database
3
- Version: 1.2.dev3
3
+ Version: 1.2.dev5
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
@@ -1,3 +1,4 @@
1
+ .git-blame-ignore-revs
1
2
  COPYRIGHT
2
3
  LICENSE
3
4
  MANIFEST.in
@@ -107,7 +107,7 @@ select = [
107
107
  "SLOT",
108
108
  "SIM",
109
109
  "TID",
110
- "TCH",
110
+ "TC",
111
111
  "PTH",
112
112
  "PLC",
113
113
  "TRY",
@@ -115,8 +115,25 @@ select = [
115
115
  "PERF",
116
116
  "FURB",
117
117
  "RUF",
118
+ "D"
118
119
  ]
119
- ignore = ["E203", "B904", "UP024", "ANN002", "ANN003", "ANN204", "ANN401", "SIM105", "TRY003"]
120
+ ignore = [
121
+ "E203", "B904", "UP024", "ANN002", "ANN003", "ANN204", "ANN401", "SIM105", "TRY003", "PLC0415",
122
+ # Ignore some pydocstyle rules for now as they require a larger cleanup
123
+ "D1",
124
+ "D205",
125
+ "D301",
126
+ "D417",
127
+ # Seems bugged: https://github.com/astral-sh/ruff/issues/16824
128
+ "D402",
129
+ ]
130
+ future-annotations = true
131
+
132
+ [tool.ruff.lint.pydocstyle]
133
+ convention = "google"
134
+
135
+ [tool.ruff.lint.flake8-type-checking]
136
+ strict = true
120
137
 
121
138
  [tool.ruff.lint.per-file-ignores]
122
139
  "tests/_docs/**" = ["INP001"]
@@ -125,6 +142,7 @@ ignore = ["E203", "B904", "UP024", "ANN002", "ANN003", "ANN204", "ANN401", "SIM1
125
142
  [tool.ruff.lint.isort]
126
143
  known-first-party = ["dissect.database"]
127
144
  known-third-party = ["dissect"]
145
+ required-imports = ["from __future__ import annotations"]
128
146
 
129
147
  [tool.setuptools.packages.find]
130
148
  include = ["dissect.*"]
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  project = "dissect.database"
2
4
 
3
5
  extensions = [
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  from typing import BinaryIO
2
4
 
3
5
  from dissect.database.ese.ese import ESE
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  from unittest.mock import Mock
2
4
 
3
5
  from dissect.database.ese.c_ese import c_ese
@@ -71,7 +71,6 @@ def test_parse_value_encoding(windows_search_db: BinaryIO) -> None:
71
71
  Resources:
72
72
  - https://github.com/fox-it/dissect.esedb/pull/48
73
73
  """
74
-
75
74
  db = ESE(windows_search_db)
76
75
  table = db.table("SystemIndex_PropertyStore")
77
76
 
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  from unittest.mock import MagicMock
2
4
 
3
5
  from dissect.database.ese.table import Table
@@ -61,7 +61,6 @@ def _assert_sqlite_db(sqlite: SQLite3) -> None:
61
61
  )
62
62
  def test_decrypt_community(cipher: Callable, path_str: str, kwargs: dict) -> None:
63
63
  """Test if we can parse a SQLCipher (4.5.6 community) encrypted database."""
64
-
65
64
  path = absolute_path("_data/sqlite3/encryption/sqlcipher/" + path_str)
66
65
 
67
66
  with pytest.raises(SQLCipherError, match="Decryption of SQLCipher database failed"):
@@ -79,7 +78,6 @@ def test_decrypt_community(cipher: Callable, path_str: str, kwargs: dict) -> Non
79
78
 
80
79
  def test_decrypt_community_plaintext_header() -> None:
81
80
  """Test if we can parse and decrypt a SQLCipher 4.5.6 database with a 32-byte plaintext header."""
82
-
83
81
  path = absolute_path("_data/sqlite3/encryption/sqlcipher/aes256_hmac_sha512_kdf_256000_plain_header.sqlite")
84
82
  salt = bytes.fromhex("01010101010101010101010101010101")
85
83
 
@@ -121,7 +121,6 @@ def test_cell_overflow_reserved_page_size_regression() -> None:
121
121
  >>> con.commit()
122
122
  ... con.close()
123
123
  """
124
-
125
124
  db = sqlite3.SQLite3(absolute_path("_data/sqlite3/overflow.db"))
126
125
  assert db.header.reserved_size == 32
127
126
  assert db.header.page_size == 4096
@@ -186,7 +186,6 @@ def test_wal_page_count() -> None:
186
186
  >>> con.commit()
187
187
  # Copy page_count.db* files before closing
188
188
  """
189
-
190
189
  db = sqlite3.SQLite3(absolute_path("_data/sqlite3/page_count.db"))
191
190
  table = db.table("t1")
192
191
  assert table.sql == "CREATE TABLE t1 (a, b)"