dissect.database 1.1.dev14__tar.gz → 1.1.dev15__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.1.dev14/dissect.database.egg-info → dissect_database-1.1.dev15}/PKG-INFO +1 -1
  2. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/sqlite3/encryption/sqlcipher/sqlcipher.py +1 -1
  3. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/sqlite3/sqlite3.py +6 -3
  4. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/sqlite3/wal.py +1 -0
  5. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15/dissect.database.egg-info}/PKG-INFO +1 -1
  6. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/sqlite3/test_wal.py +37 -0
  7. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/COPYRIGHT +0 -0
  8. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/LICENSE +0 -0
  9. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/MANIFEST.in +0 -0
  10. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/README.md +0 -0
  11. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/__init__.py +0 -0
  12. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/bsd/__init__.py +0 -0
  13. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/bsd/c_db.py +0 -0
  14. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/bsd/c_db.pyi +0 -0
  15. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/bsd/db.py +0 -0
  16. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/bsd/tools/__init__.py +0 -0
  17. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/bsd/tools/c_rpm.py +0 -0
  18. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/bsd/tools/c_rpm.pyi +0 -0
  19. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/bsd/tools/rpm.py +0 -0
  20. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/__init__.py +0 -0
  21. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/btree.py +0 -0
  22. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/c_ese.py +0 -0
  23. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/c_ese.pyi +0 -0
  24. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/compression.py +0 -0
  25. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/cursor.py +0 -0
  26. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ese.py +0 -0
  27. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/exception.py +0 -0
  28. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/index.py +0 -0
  29. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/lcmapstring.py +0 -0
  30. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/__init__.py +0 -0
  31. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/c_ds.py +0 -0
  32. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/c_ds.pyi +0 -0
  33. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/c_pek.py +0 -0
  34. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/c_pek.pyi +0 -0
  35. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/c_sd.py +0 -0
  36. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/c_sd.pyi +0 -0
  37. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/database.py +0 -0
  38. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/ntds.py +0 -0
  39. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/__init__.py +0 -0
  40. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/applicationsettings.py +0 -0
  41. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/attributeschema.py +0 -0
  42. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/builtindomain.py +0 -0
  43. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/certificationauthority.py +0 -0
  44. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/classschema.py +0 -0
  45. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/classstore.py +0 -0
  46. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/computer.py +0 -0
  47. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/configuration.py +0 -0
  48. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/container.py +0 -0
  49. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/controlaccessright.py +0 -0
  50. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/crldistributionpoint.py +0 -0
  51. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/crossref.py +0 -0
  52. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/crossrefcontainer.py +0 -0
  53. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/dfsconfiguration.py +0 -0
  54. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/displayspecifier.py +0 -0
  55. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/dmd.py +0 -0
  56. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/dnsnode.py +0 -0
  57. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/dnszone.py +0 -0
  58. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/domain.py +0 -0
  59. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/domaindns.py +0 -0
  60. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/domainpolicy.py +0 -0
  61. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/dsuisettings.py +0 -0
  62. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/filelinktracking.py +0 -0
  63. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/foreignsecurityprincipal.py +0 -0
  64. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/group.py +0 -0
  65. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/grouppolicycontainer.py +0 -0
  66. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/infrastructureupdate.py +0 -0
  67. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/intersitetransport.py +0 -0
  68. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/intersitetransportcontainer.py +0 -0
  69. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/ipsecbase.py +0 -0
  70. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/ipsecfilter.py +0 -0
  71. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/ipsecisakmppolicy.py +0 -0
  72. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/ipsecnegotiationpolicy.py +0 -0
  73. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/ipsecnfa.py +0 -0
  74. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/ipsecpolicy.py +0 -0
  75. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/leaf.py +0 -0
  76. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/linktrackobjectmovetable.py +0 -0
  77. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/linktrackvolumetable.py +0 -0
  78. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/locality.py +0 -0
  79. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/lostandfound.py +0 -0
  80. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msauthz_centralaccesspolicies.py +0 -0
  81. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msauthz_centralaccessrules.py +0 -0
  82. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msdfsr_content.py +0 -0
  83. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msdfsr_contentset.py +0 -0
  84. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msdfsr_globalsettings.py +0 -0
  85. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msdfsr_localsettings.py +0 -0
  86. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msdfsr_member.py +0 -0
  87. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msdfsr_replicationgroup.py +0 -0
  88. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msdfsr_subscriber.py +0 -0
  89. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msdfsr_subscription.py +0 -0
  90. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msdfsr_topology.py +0 -0
  91. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msdns_serversettings.py +0 -0
  92. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msds_authnpolicies.py +0 -0
  93. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msds_authnpolicysilos.py +0 -0
  94. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msds_claimstransformationpolicies.py +0 -0
  95. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msds_claimtype.py +0 -0
  96. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msds_claimtypepropertybase.py +0 -0
  97. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msds_claimtypes.py +0 -0
  98. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msds_optionalfeature.py +0 -0
  99. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msds_passwordsettingscontainer.py +0 -0
  100. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msds_quotacontainer.py +0 -0
  101. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msds_resourceproperties.py +0 -0
  102. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msds_resourceproperty.py +0 -0
  103. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msds_resourcepropertylist.py +0 -0
  104. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msds_shadowprincipalcontainer.py +0 -0
  105. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msds_valuetype.py +0 -0
  106. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msimaging_psps.py +0 -0
  107. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/mskds_provserverconfiguration.py +0 -0
  108. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msmqenterprisesettings.py +0 -0
  109. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/mspki_enterpriseoid.py +0 -0
  110. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/mspki_privatekeyrecoveryagent.py +0 -0
  111. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/msspp_activationobjectscontainer.py +0 -0
  112. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/mstpm_informationobjectscontainer.py +0 -0
  113. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/ntdsconnection.py +0 -0
  114. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/ntdsdsa.py +0 -0
  115. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/ntdsservice.py +0 -0
  116. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/ntdssitesettings.py +0 -0
  117. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/ntfrssettings.py +0 -0
  118. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/object.py +0 -0
  119. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/organizationalperson.py +0 -0
  120. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/organizationalunit.py +0 -0
  121. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/person.py +0 -0
  122. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/physicallocation.py +0 -0
  123. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/pkicertificatetemplate.py +0 -0
  124. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/pkienrollmentservice.py +0 -0
  125. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/querypolicy.py +0 -0
  126. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/ridmanager.py +0 -0
  127. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/ridset.py +0 -0
  128. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/rpccontainer.py +0 -0
  129. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/rrasadministrationdictionary.py +0 -0
  130. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/samserver.py +0 -0
  131. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/secret.py +0 -0
  132. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/securityobject.py +0 -0
  133. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/server.py +0 -0
  134. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/serverscontainer.py +0 -0
  135. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/site.py +0 -0
  136. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/sitelink.py +0 -0
  137. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/sitescontainer.py +0 -0
  138. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/subnetcontainer.py +0 -0
  139. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/subschema.py +0 -0
  140. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/top.py +0 -0
  141. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/trusteddomain.py +0 -0
  142. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/objects/user.py +0 -0
  143. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/pek.py +0 -0
  144. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/query.py +0 -0
  145. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/schema.py +0 -0
  146. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/sd.py +0 -0
  147. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/tools/__init__.py +0 -0
  148. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/tools/ntds.py +0 -0
  149. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/ntds/util.py +0 -0
  150. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/page.py +0 -0
  151. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/record.py +0 -0
  152. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/sorting_table.py +0 -0
  153. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/table.py +0 -0
  154. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/tools/__init__.py +0 -0
  155. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/tools/certlog.py +0 -0
  156. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/tools/impacket.py +0 -0
  157. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/tools/sru.py +0 -0
  158. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/tools/ual.py +0 -0
  159. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/ese/util.py +0 -0
  160. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/exception.py +0 -0
  161. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/sqlite3/__init__.py +0 -0
  162. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/sqlite3/c_sqlite3.py +0 -0
  163. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/sqlite3/c_sqlite3.pyi +0 -0
  164. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/sqlite3/encryption/__init__.py +0 -0
  165. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/sqlite3/encryption/sqlcipher/__init__.py +0 -0
  166. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/sqlite3/encryption/sqlcipher/exception.py +0 -0
  167. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/sqlite3/exception.py +0 -0
  168. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect/database/sqlite3/util.py +0 -0
  169. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect.database.egg-info/SOURCES.txt +0 -0
  170. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect.database.egg-info/dependency_links.txt +0 -0
  171. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect.database.egg-info/entry_points.txt +0 -0
  172. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect.database.egg-info/requires.txt +0 -0
  173. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/dissect.database.egg-info/top_level.txt +0 -0
  174. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/pyproject.toml +0 -0
  175. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/setup.cfg +0 -0
  176. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/__init__.py +0 -0
  177. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/_docs/Makefile +0 -0
  178. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/_docs/conf.py +0 -0
  179. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/_docs/index.rst +0 -0
  180. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/_tools/sqlite3/__init__.py +0 -0
  181. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/_tools/sqlite3/generate_sqlite.py +0 -0
  182. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/_util.py +0 -0
  183. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/bsd/__init__.py +0 -0
  184. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/bsd/conftest.py +0 -0
  185. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/bsd/test_db.py +0 -0
  186. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/bsd/test_rpm.py +0 -0
  187. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/conftest.py +0 -0
  188. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/ese/__init__.py +0 -0
  189. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/ese/conftest.py +0 -0
  190. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/ese/ntds/__init__.py +0 -0
  191. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/ese/ntds/conftest.py +0 -0
  192. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/ese/ntds/test_benchmark.py +0 -0
  193. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/ese/ntds/test_ntds.py +0 -0
  194. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/ese/ntds/test_pek.py +0 -0
  195. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/ese/ntds/test_query.py +0 -0
  196. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/ese/ntds/test_schema.py +0 -0
  197. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/ese/ntds/test_sd.py +0 -0
  198. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/ese/ntds/test_util.py +0 -0
  199. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/ese/test_cursor.py +0 -0
  200. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/ese/test_ese.py +0 -0
  201. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/ese/test_index.py +0 -0
  202. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/ese/test_page.py +0 -0
  203. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/ese/test_record.py +0 -0
  204. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/ese/test_table.py +0 -0
  205. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/ese/tools/__init__.py +0 -0
  206. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/ese/tools/test_certlog.py +0 -0
  207. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/ese/tools/test_sru.py +0 -0
  208. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/ese/tools/test_ual.py +0 -0
  209. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/sqlite3/__init__.py +0 -0
  210. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/sqlite3/conftest.py +0 -0
  211. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/sqlite3/test_default_values.py +0 -0
  212. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/sqlite3/test_row.py +0 -0
  213. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/sqlite3/test_sqlcipher.py +0 -0
  214. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/sqlite3/test_sqlite3.py +0 -0
  215. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tests/sqlite3/test_util.py +0 -0
  216. {dissect_database-1.1.dev14 → dissect_database-1.1.dev15}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dissect.database
3
- Version: 1.1.dev14
3
+ Version: 1.1.dev15
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
@@ -150,7 +150,7 @@ class SQLCipher(SQLite3):
150
150
  f"fh={self.cipher_path or self.cipher_fh} "
151
151
  f"wal={self.wal} "
152
152
  f"checkpoint={bool(self.checkpoint)} "
153
- f"pages={self.header.page_count}>"
153
+ f"pages={self.page_count}>"
154
154
  )
155
155
 
156
156
  def close(self) -> None:
@@ -129,10 +129,13 @@ class SQLite3:
129
129
  else:
130
130
  self.checkpoint = checkpoint
131
131
 
132
+ # Determine the highest page count we have encountered while parsing the SQLite3 header and optionally WAL.
133
+ self.page_count = max(self.header.page_count, self.wal.highest_page_num) if self.wal else self.header.page_count
134
+
132
135
  self.page = lru_cache(256)(self.page)
133
136
 
134
137
  def __repr__(self) -> str:
135
- return f"<SQLite3 path={self.path!s} fh={self.fh!s} wal={self.wal!s} checkpoint={bool(self.checkpoint)!r} pages={self.header.page_count!r}>" # noqa: E501
138
+ return f"<SQLite3 path={self.path} fh={self.fh} wal={self.wal} checkpoint={bool(self.checkpoint)} pages={self.page_count}>" # noqa: E501
136
139
 
137
140
  def __enter__(self) -> Self:
138
141
  """Return ``self`` upon entering the runtime context."""
@@ -202,7 +205,7 @@ class SQLite3:
202
205
  """
203
206
  # Only throw an out of bounds exception if the header contains a page_count.
204
207
  # Some old versions of SQLite3 do not set/update the page_count correctly.
205
- if (num < 1 or num > self.header.page_count) and self.header.page_count > 0:
208
+ if (num < 1 or num > self.page_count) and self.page_count > 0:
206
209
  raise InvalidPageNumber("Page number exceeds boundaries")
207
210
 
208
211
  data = None
@@ -235,7 +238,7 @@ class SQLite3:
235
238
  return Page(self, num)
236
239
 
237
240
  def pages(self) -> Iterator[Page]:
238
- for i in range(self.header.page_count):
241
+ for i in range(self.page_count):
239
242
  yield self.page(i + 1)
240
243
 
241
244
  def cells(self) -> Iterator[Cell]:
@@ -39,6 +39,7 @@ class WAL:
39
39
  raise InvalidDatabase("Invalid WAL header magic")
40
40
 
41
41
  self.checksum_endian = "<" if self.header.magic == WAL_HEADER_MAGIC_LE else ">"
42
+ self.highest_page_num = max(fr.page_number for commit in self.commits for fr in commit.frames if fr.valid)
42
43
 
43
44
  self.frame = lru_cache(1024)(self.frame)
44
45
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dissect.database
3
- Version: 1.1.dev14
3
+ Version: 1.1.dev15
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
@@ -5,6 +5,7 @@ from typing import TYPE_CHECKING
5
5
  import pytest
6
6
 
7
7
  from dissect.database.sqlite3 import sqlite3
8
+ from tests._util import absolute_path
8
9
 
9
10
  if TYPE_CHECKING:
10
11
  from pathlib import Path
@@ -162,3 +163,39 @@ def _assert_checkpoint_3(s: sqlite3.SQLite3) -> None:
162
163
  assert rows[9].id == 11
163
164
  assert rows[9].name == "second checkpoint"
164
165
  assert rows[9].value == 101
166
+
167
+
168
+ def test_wal_page_count() -> None:
169
+ """Test if we count the page numbers in the SQLite3 and WAL correctly.
170
+
171
+ Test data generated using:
172
+
173
+ $ sqlite3 tests/_data/sqlite3/page_count.db
174
+ SQLite version 3.45.1 2024-01-30 16:01:20
175
+ Enter ".help" for usage hints.
176
+ sqlite> PRAGMA journal_mode = WAL;
177
+ wal
178
+ sqlite> CREATE TABLE t1 (a, b);
179
+ sqlite> .quit # commits wal
180
+
181
+ $ python
182
+ >>> import sqlite3
183
+ >>> con = sqlite3.connect("tests/_data/sqlite3/page_count.db")
184
+ ... cur = con.cursor()
185
+ >>> cur.execute("INSERT INTO t1 VALUES (1, ?)", ("A" * 8192,))
186
+ >>> con.commit()
187
+ # Copy page_count.db* files before closing
188
+ """
189
+
190
+ db = sqlite3.SQLite3(absolute_path("_data/sqlite3/page_count.db"))
191
+ table = db.table("t1")
192
+ assert table.sql == "CREATE TABLE t1 (a, b)"
193
+
194
+ row = next(table.rows())
195
+ assert row.a == 1
196
+ assert row.b == "A" * 8192
197
+
198
+ assert db.wal
199
+ assert db.wal.highest_page_num == 4
200
+ assert db.header.page_count == 2
201
+ assert db.page_count == 4