dissect.target 3.25.dev0__tar.gz → 3.25.dev1__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 (803) hide show
  1. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/PKG-INFO +1 -1
  2. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystem.py +145 -67
  3. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/ad1.py +14 -10
  4. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/btrfs.py +21 -23
  5. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/cb.py +22 -13
  6. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/config.py +16 -10
  7. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/cramfs.py +18 -13
  8. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/dir.py +18 -8
  9. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/exfat.py +17 -16
  10. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/extfs.py +21 -25
  11. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/fat.py +19 -15
  12. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/ffs.py +21 -19
  13. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/itunes.py +5 -6
  14. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/jffs.py +16 -15
  15. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/nfs.py +15 -11
  16. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/ntfs.py +88 -35
  17. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/qnxfs.py +16 -14
  18. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/smb.py +27 -14
  19. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/squashfs.py +20 -19
  20. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/tar.py +2 -6
  21. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/vbk.py +23 -13
  22. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/vmfs.py +35 -26
  23. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/xfs.py +21 -26
  24. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/zip.py +5 -16
  25. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/compat/path_310.py +6 -7
  26. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/compat/path_311.py +6 -7
  27. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/compat/path_312.py +6 -7
  28. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/compat/path_313.py +6 -7
  29. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/compat/path_common.py +1 -1
  30. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/fsutil.py +13 -13
  31. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/filesystem/unix/capability.py +1 -1
  32. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/filesystem/walkfs.py +0 -1
  33. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/tools/diff.py +5 -4
  34. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect.target.egg-info/PKG-INFO +1 -1
  35. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/filesystems/test_cb.py +2 -2
  36. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/filesystems/test_exfat.py +0 -23
  37. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/filesystems/test_smb.py +1 -1
  38. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/helpers/test_fsutil.py +32 -2
  39. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/browser/test_chrome.py +9 -10
  40. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/browser/test_edge.py +7 -9
  41. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/.git-blame-ignore-revs +0 -0
  42. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/.vscode/launch.json +0 -0
  43. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/COPYRIGHT +0 -0
  44. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/LICENSE +0 -0
  45. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/MANIFEST.in +0 -0
  46. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/README.md +0 -0
  47. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/__init__.py +0 -0
  48. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/container.py +0 -0
  49. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/containers/__init__.py +0 -0
  50. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/containers/asdf.py +0 -0
  51. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/containers/asif.py +0 -0
  52. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/containers/ewf.py +0 -0
  53. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/containers/fortifw.py +0 -0
  54. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/containers/hdd.py +0 -0
  55. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/containers/hds.py +0 -0
  56. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/containers/qcow2.py +0 -0
  57. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/containers/raw.py +0 -0
  58. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/containers/split.py +0 -0
  59. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/containers/vdi.py +0 -0
  60. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/containers/vhd.py +0 -0
  61. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/containers/vhdx.py +0 -0
  62. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/containers/vmdk.py +0 -0
  63. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/exceptions.py +0 -0
  64. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/__init__.py +0 -0
  65. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/cpio.py +0 -0
  66. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/overlay.py +0 -0
  67. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/filesystems/vmtar.py +0 -0
  68. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/__init__.py +0 -0
  69. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/cache.py +0 -0
  70. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/compat/__init__.py +0 -0
  71. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/config.py +0 -0
  72. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/configutil.py +0 -0
  73. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/cyber.py +0 -0
  74. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/data/windowsZones.xml +0 -0
  75. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/descriptor_extensions.py +0 -0
  76. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/docs.py +0 -0
  77. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/hashutil.py +0 -0
  78. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/keychain.py +0 -0
  79. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/lazy.py +0 -0
  80. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/loaderutil.py +0 -0
  81. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/localeutil.py +0 -0
  82. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/logging.py +0 -0
  83. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/mount.py +0 -0
  84. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/mui.py +0 -0
  85. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/network.py +0 -0
  86. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/nfs/__init__.py +0 -0
  87. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/nfs/client/__init__.py +0 -0
  88. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/nfs/client/mount.py +0 -0
  89. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/nfs/client/nfs.py +0 -0
  90. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/nfs/nfs3.py +0 -0
  91. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/nfs/serializer.py +0 -0
  92. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/polypath.py +0 -0
  93. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/protobuf.py +0 -0
  94. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/record.py +0 -0
  95. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/record_modifier.py +0 -0
  96. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/regex/__init__.py +0 -0
  97. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/regex/ipaddress.py +0 -0
  98. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/regutil.py +0 -0
  99. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/scrape.py +0 -0
  100. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/shell_application_ids.py +0 -0
  101. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/shell_folder_ids.py +0 -0
  102. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/sunrpc/__init__.py +0 -0
  103. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/sunrpc/client.py +0 -0
  104. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/sunrpc/serializer.py +0 -0
  105. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/sunrpc/sunrpc.py +0 -0
  106. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/helpers/utils.py +0 -0
  107. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loader.py +0 -0
  108. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/__init__.py +0 -0
  109. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/ab.py +0 -0
  110. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/acquire.py +0 -0
  111. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/asdf.py +0 -0
  112. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/cb.py +0 -0
  113. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/cellebrite.py +0 -0
  114. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/containerimage.py +0 -0
  115. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/cyber.py +0 -0
  116. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/dir.py +0 -0
  117. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/direct.py +0 -0
  118. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/hyperv.py +0 -0
  119. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/itunes.py +0 -0
  120. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/kape.py +0 -0
  121. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/libvirt.py +0 -0
  122. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/local.py +0 -0
  123. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/log.py +0 -0
  124. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/mqtt.py +0 -0
  125. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/multiraw.py +0 -0
  126. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/ova.py +0 -0
  127. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/overlay.py +0 -0
  128. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/overlay2.py +0 -0
  129. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/ovf.py +0 -0
  130. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/phobos.py +0 -0
  131. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/profile.py +0 -0
  132. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/proxmox.py +0 -0
  133. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/pvm.py +0 -0
  134. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/pvs.py +0 -0
  135. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/raw.py +0 -0
  136. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/remote.py +0 -0
  137. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/res.py +0 -0
  138. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/smb.py +0 -0
  139. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/tanium.py +0 -0
  140. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/tar.py +0 -0
  141. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/target.py +0 -0
  142. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/uac.py +0 -0
  143. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/utm.py +0 -0
  144. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/vb.py +0 -0
  145. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/vbk.py +0 -0
  146. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/vbox.py +0 -0
  147. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/velociraptor.py +0 -0
  148. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/vma.py +0 -0
  149. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/vmwarevm.py +0 -0
  150. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/vmx.py +0 -0
  151. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/xva.py +0 -0
  152. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/loaders/zip.py +0 -0
  153. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugin.py +0 -0
  154. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/__init__.py +0 -0
  155. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/__init__.py +0 -0
  156. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/av/__init__.py +0 -0
  157. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/av/mcafee.py +0 -0
  158. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/av/sophos.py +0 -0
  159. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/av/symantec.py +0 -0
  160. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/av/trendmicro.py +0 -0
  161. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/browser/__init__.py +0 -0
  162. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/browser/brave.py +0 -0
  163. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/browser/browser.py +0 -0
  164. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/browser/chrome.py +0 -0
  165. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/browser/chromium.py +0 -0
  166. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/browser/edge.py +0 -0
  167. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/browser/firefox.py +0 -0
  168. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/browser/iexplore.py +0 -0
  169. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/chat/__init__.py +0 -0
  170. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/chat/chat.py +0 -0
  171. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/chat/msn.py +0 -0
  172. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/container/__init__.py +0 -0
  173. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/container/container.py +0 -0
  174. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/container/docker.py +0 -0
  175. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/container/podman.py +0 -0
  176. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/editor/__init__.py +0 -0
  177. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/editor/editor.py +0 -0
  178. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/editor/windowsnotepad.py +0 -0
  179. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/edr/__init__.py +0 -0
  180. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/edr/acquire.py +0 -0
  181. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/edr/velociraptor.py +0 -0
  182. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/other/__init__.py +0 -0
  183. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/other/env.py +0 -0
  184. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/productivity/__init__.py +0 -0
  185. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/productivity/msoffice.py +0 -0
  186. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/productivity/sevenzip.py +0 -0
  187. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/productivity/winrar.py +0 -0
  188. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/remoteaccess/__init__.py +0 -0
  189. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/remoteaccess/anydesk.py +0 -0
  190. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/remoteaccess/remoteaccess.py +0 -0
  191. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/remoteaccess/rustdesk.py +0 -0
  192. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/remoteaccess/splashtop.py +0 -0
  193. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/remoteaccess/teamviewer.py +0 -0
  194. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/shell/__init__.py +0 -0
  195. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/shell/powershell.py +0 -0
  196. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/shell/wget.py +0 -0
  197. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/ssh/__init__.py +0 -0
  198. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/ssh/openssh.py +0 -0
  199. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/ssh/opensshd.py +0 -0
  200. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/ssh/putty.py +0 -0
  201. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/ssh/ssh.py +0 -0
  202. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/virtualization/__init__.py +0 -0
  203. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/virtualization/vmware_workstation.py +0 -0
  204. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/vpn/__init__.py +0 -0
  205. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/vpn/openvpn.py +0 -0
  206. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/vpn/wireguard.py +0 -0
  207. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/webhosting/__init__.py +0 -0
  208. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/webhosting/cpanel.py +0 -0
  209. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/webserver/__init__.py +0 -0
  210. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/webserver/apache.py +0 -0
  211. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/webserver/caddy.py +0 -0
  212. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/webserver/citrix.py +0 -0
  213. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/webserver/iis.py +0 -0
  214. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/webserver/nginx.py +0 -0
  215. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/apps/webserver/webserver.py +0 -0
  216. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/child/__init__.py +0 -0
  217. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/child/colima.py +0 -0
  218. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/child/docker.py +0 -0
  219. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/child/esxi.py +0 -0
  220. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/child/hyperv.py +0 -0
  221. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/child/lima.py +0 -0
  222. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/child/parallels.py +0 -0
  223. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/child/podman.py +0 -0
  224. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/child/proxmox.py +0 -0
  225. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/child/qemu.py +0 -0
  226. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/child/virtualbox.py +0 -0
  227. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/child/virtuozzo.py +0 -0
  228. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/child/vmware_workstation.py +0 -0
  229. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/child/wsl.py +0 -0
  230. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/filesystem/__init__.py +0 -0
  231. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/filesystem/icat.py +0 -0
  232. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/filesystem/ntfs/__init__.py +0 -0
  233. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/filesystem/ntfs/mft.py +0 -0
  234. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/filesystem/ntfs/mft_timeline.py +0 -0
  235. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/filesystem/ntfs/usnjrnl.py +0 -0
  236. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/filesystem/ntfs/utils.py +0 -0
  237. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/filesystem/resolver.py +0 -0
  238. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/filesystem/unix/__init__.py +0 -0
  239. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/filesystem/unix/suid.py +0 -0
  240. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/filesystem/yara.py +0 -0
  241. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/general/__init__.py +0 -0
  242. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/general/config.py +0 -0
  243. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/general/example.py +0 -0
  244. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/general/loaders.py +0 -0
  245. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/general/osinfo.py +0 -0
  246. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/general/plugins.py +0 -0
  247. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/general/users.py +0 -0
  248. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/__init__.py +0 -0
  249. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/default/__init__.py +0 -0
  250. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/default/_os.py +0 -0
  251. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/default/datetime.py +0 -0
  252. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/default/locale.py +0 -0
  253. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/default/network.py +0 -0
  254. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/__init__.py +0 -0
  255. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/_os.py +0 -0
  256. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/applications.py +0 -0
  257. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/bsd/__init__.py +0 -0
  258. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/bsd/_os.py +0 -0
  259. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/bsd/citrix/__init__.py +0 -0
  260. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/bsd/citrix/_os.py +0 -0
  261. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/bsd/citrix/history.py +0 -0
  262. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/bsd/darwin/__init__.py +0 -0
  263. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/bsd/darwin/_os.py +0 -0
  264. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/bsd/darwin/ios/__init__.py +0 -0
  265. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/bsd/darwin/ios/_os.py +0 -0
  266. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/bsd/darwin/ios/applications.py +0 -0
  267. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/bsd/darwin/ios/generic.py +0 -0
  268. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/bsd/darwin/ios/locale.py +0 -0
  269. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/bsd/darwin/macos/__init__.py +0 -0
  270. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/bsd/darwin/macos/_os.py +0 -0
  271. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/bsd/darwin/macos/network.py +0 -0
  272. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/bsd/darwin/macos/user.py +0 -0
  273. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/bsd/freebsd/__init__.py +0 -0
  274. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/bsd/freebsd/_os.py +0 -0
  275. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/bsd/openbsd/__init__.py +0 -0
  276. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/bsd/openbsd/_os.py +0 -0
  277. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/cronjobs.py +0 -0
  278. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/datetime.py +0 -0
  279. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/esxi/__init__.py +0 -0
  280. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/esxi/_os.py +0 -0
  281. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/etc/__init__.py +0 -0
  282. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/etc/etc.py +0 -0
  283. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/generic.py +0 -0
  284. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/history.py +0 -0
  285. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/__init__.py +0 -0
  286. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/_os.py +0 -0
  287. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/android/__init__.py +0 -0
  288. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/android/_os.py +0 -0
  289. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/cmdline.py +0 -0
  290. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/debian/__init__.py +0 -0
  291. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/debian/_os.py +0 -0
  292. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/debian/apt.py +0 -0
  293. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/debian/dpkg.py +0 -0
  294. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/debian/proxmox/__init__.py +0 -0
  295. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/debian/proxmox/_os.py +0 -0
  296. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/debian/proxmox/vm.py +0 -0
  297. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/debian/snap.py +0 -0
  298. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/debian/vyos/__init__.py +0 -0
  299. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/debian/vyos/_os.py +0 -0
  300. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/environ.py +0 -0
  301. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/fortios/__init__.py +0 -0
  302. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/fortios/_keys.py +0 -0
  303. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/fortios/_os.py +0 -0
  304. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/fortios/generic.py +0 -0
  305. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/fortios/locale.py +0 -0
  306. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/iptables.py +0 -0
  307. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/modules.py +0 -0
  308. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/netstat.py +0 -0
  309. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/network.py +0 -0
  310. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/network_managers.py +0 -0
  311. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/proc.py +0 -0
  312. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/processes.py +0 -0
  313. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/recentlyused.py +0 -0
  314. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/redhat/__init__.py +0 -0
  315. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/redhat/_os.py +0 -0
  316. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/redhat/yum.py +0 -0
  317. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/services.py +0 -0
  318. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/sockets.py +0 -0
  319. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/suse/__init__.py +0 -0
  320. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/suse/_os.py +0 -0
  321. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/linux/suse/zypper.py +0 -0
  322. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/locale.py +0 -0
  323. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/locate/__init__.py +0 -0
  324. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/locate/gnulocate.py +0 -0
  325. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/locate/locate.py +0 -0
  326. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/locate/mlocate.py +0 -0
  327. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/locate/plocate.py +0 -0
  328. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/log/__init__.py +0 -0
  329. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/log/atop.py +0 -0
  330. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/log/audit.py +0 -0
  331. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/log/auth.py +0 -0
  332. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/log/helpers.py +0 -0
  333. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/log/journal.py +0 -0
  334. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/log/lastlog.py +0 -0
  335. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/log/messages.py +0 -0
  336. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/log/utmp.py +0 -0
  337. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/packagemanager.py +0 -0
  338. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/shadow.py +0 -0
  339. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/unix/trash.py +0 -0
  340. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/__init__.py +0 -0
  341. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/_os.py +0 -0
  342. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/activitiescache.py +0 -0
  343. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/adpolicy.py +0 -0
  344. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/amcache.py +0 -0
  345. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/cam.py +0 -0
  346. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/catroot.py +0 -0
  347. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/cim.py +0 -0
  348. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/clfs.py +0 -0
  349. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/credential/__init__.py +0 -0
  350. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/credential/credhist.py +0 -0
  351. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/credential/lsa.py +0 -0
  352. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/credential/sam.py +0 -0
  353. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/datetime.py +0 -0
  354. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/defender/__init__.py +0 -0
  355. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/defender/_plugin.py +0 -0
  356. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/defender/mplog.py +0 -0
  357. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/defender/quarantine.py +0 -0
  358. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/dpapi/__init__.py +0 -0
  359. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/dpapi/blob.py +0 -0
  360. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/dpapi/crypto.py +0 -0
  361. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/dpapi/dpapi.py +0 -0
  362. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/dpapi/keyprovider/__init__.py +0 -0
  363. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/dpapi/keyprovider/credhist.py +0 -0
  364. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/dpapi/keyprovider/defaultpassword/__init__.py +0 -0
  365. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/dpapi/keyprovider/defaultpassword/defaultpassword.py +0 -0
  366. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/dpapi/keyprovider/defaultpassword/lsa.py +0 -0
  367. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/dpapi/keyprovider/defaultpassword/winlogon.py +0 -0
  368. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/dpapi/keyprovider/empty.py +0 -0
  369. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/dpapi/keyprovider/keychain.py +0 -0
  370. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/dpapi/keyprovider/keyprovider.py +0 -0
  371. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/dpapi/master_key.py +0 -0
  372. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/env.py +0 -0
  373. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/everything/__init__.py +0 -0
  374. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/everything/_plugin.py +0 -0
  375. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/everything/parser.py +0 -0
  376. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/exchange/__init__.py +0 -0
  377. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/exchange/exchange.py +0 -0
  378. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/firewall.py +0 -0
  379. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/generic.py +0 -0
  380. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/jumplist.py +0 -0
  381. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/lnk.py +0 -0
  382. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/locale.py +0 -0
  383. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/log/__init__.py +0 -0
  384. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/log/amcache.py +0 -0
  385. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/log/etl.py +0 -0
  386. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/log/evt.py +0 -0
  387. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/log/evtx.py +0 -0
  388. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/log/mssql.py +0 -0
  389. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/log/pfro.py +0 -0
  390. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/log/schedlgu.py +0 -0
  391. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/network.py +0 -0
  392. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/notifications.py +0 -0
  393. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/prefetch.py +0 -0
  394. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/productkey.py +0 -0
  395. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/rdpcache.py +0 -0
  396. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/recyclebin.py +0 -0
  397. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/regf/__init__.py +0 -0
  398. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/regf/applications.py +0 -0
  399. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/regf/appxdebugkeys.py +0 -0
  400. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/regf/auditpol.py +0 -0
  401. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/regf/bam.py +0 -0
  402. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/regf/cit.py +0 -0
  403. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/regf/clsid.py +0 -0
  404. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/regf/mru.py +0 -0
  405. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/regf/muicache.py +0 -0
  406. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/regf/nethist.py +0 -0
  407. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/regf/recentfilecache.py +0 -0
  408. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/regf/regf.py +0 -0
  409. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/regf/runkeys.py +0 -0
  410. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/regf/shellbags.py +0 -0
  411. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/regf/shimcache.py +0 -0
  412. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/regf/trusteddocs.py +0 -0
  413. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/regf/usb.py +0 -0
  414. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/regf/userassist.py +0 -0
  415. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/registry.py +0 -0
  416. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/search.py +0 -0
  417. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/services.py +0 -0
  418. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/sru.py +0 -0
  419. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/startupinfo.py +0 -0
  420. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/syscache.py +0 -0
  421. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/tasks/__init__.py +0 -0
  422. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/tasks/_plugin.py +0 -0
  423. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/tasks/job.py +0 -0
  424. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/tasks/records.py +0 -0
  425. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/tasks/xml.py +0 -0
  426. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/thumbcache.py +0 -0
  427. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/ual.py +0 -0
  428. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/wer.py +0 -0
  429. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/os/windows/wua_history.py +0 -0
  430. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/scrape/__init__.py +0 -0
  431. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/scrape/qfind.py +0 -0
  432. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/plugins/scrape/scrape.py +0 -0
  433. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/target.py +0 -0
  434. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/tools/__init__.py +0 -0
  435. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/tools/autocompletion/target_bash_completion.sh +0 -0
  436. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/tools/build_pluginlist.py +0 -0
  437. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/tools/dd.py +0 -0
  438. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/tools/dump.py +0 -0
  439. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/tools/fs.py +0 -0
  440. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/tools/info.py +0 -0
  441. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/tools/mount.py +0 -0
  442. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/tools/qfind.py +0 -0
  443. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/tools/query.py +0 -0
  444. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/tools/reg.py +0 -0
  445. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/tools/shell.py +0 -0
  446. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/tools/utils/__init__.py +0 -0
  447. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/tools/utils/cli.py +0 -0
  448. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/tools/utils/fs.py +0 -0
  449. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/tools/utils/logging.py +0 -0
  450. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/tools/utils/report.py +0 -0
  451. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/tools/yara.py +0 -0
  452. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/volume.py +0 -0
  453. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/volumes/__init__.py +0 -0
  454. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/volumes/bde.py +0 -0
  455. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/volumes/ddf.py +0 -0
  456. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/volumes/disk.py +0 -0
  457. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/volumes/luks.py +0 -0
  458. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/volumes/lvm.py +0 -0
  459. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/volumes/md.py +0 -0
  460. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect/target/volumes/vmfs.py +0 -0
  461. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect.target.egg-info/SOURCES.txt +0 -0
  462. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect.target.egg-info/dependency_links.txt +0 -0
  463. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect.target.egg-info/entry_points.txt +0 -0
  464. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect.target.egg-info/requires.txt +0 -0
  465. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/dissect.target.egg-info/top_level.txt +0 -0
  466. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/pyproject.toml +0 -0
  467. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/setup.cfg +0 -0
  468. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/__init__.py +0 -0
  469. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/_docs/Makefile +0 -0
  470. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/_docs/conf.py +0 -0
  471. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/_docs/index.rst +0 -0
  472. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/_utils.py +0 -0
  473. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/conftest.py +0 -0
  474. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/containers/__init__.py +0 -0
  475. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/containers/test_fortifw.py +0 -0
  476. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/containers/test_split.py +0 -0
  477. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/filesystems/__init__.py +0 -0
  478. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/filesystems/test_btrfs.py +0 -0
  479. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/filesystems/test_config.py +0 -0
  480. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/filesystems/test_cpio.py +0 -0
  481. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/filesystems/test_cramfs.py +0 -0
  482. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/filesystems/test_dir.py +0 -0
  483. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/filesystems/test_extfs.py +0 -0
  484. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/filesystems/test_fat.py +0 -0
  485. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/filesystems/test_ffs.py +0 -0
  486. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/filesystems/test_jffs2.py +0 -0
  487. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/filesystems/test_nfs.py +0 -0
  488. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/filesystems/test_ntfs.py +0 -0
  489. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/filesystems/test_overlay.py +0 -0
  490. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/filesystems/test_qnxfs.py +0 -0
  491. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/filesystems/test_squashfs.py +0 -0
  492. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/filesystems/test_tar.py +0 -0
  493. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/filesystems/test_vmtar.py +0 -0
  494. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/filesystems/test_xfs.py +0 -0
  495. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/filesystems/test_zip.py +0 -0
  496. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/helpers/__init__.py +0 -0
  497. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/helpers/sunrpc/__init__.py +0 -0
  498. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/helpers/sunrpc/test_client.py +0 -0
  499. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/helpers/test_cache.py +0 -0
  500. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/helpers/test_config.py +0 -0
  501. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/helpers/test_configutil.py +0 -0
  502. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/helpers/test_docs.py +0 -0
  503. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/helpers/test_hashutil.py +0 -0
  504. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/helpers/test_keychain.py +0 -0
  505. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/helpers/test_lazy.py +0 -0
  506. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/helpers/test_loaderutil.py +0 -0
  507. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/helpers/test_localeutil.py +0 -0
  508. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/helpers/test_modifier.py +0 -0
  509. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/helpers/test_network.py +0 -0
  510. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/helpers/test_protobuf.py +0 -0
  511. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/helpers/test_record.py +0 -0
  512. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/helpers/test_regex.py +0 -0
  513. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/helpers/test_regutil.py +0 -0
  514. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/helpers/test_scrape.py +0 -0
  515. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/helpers/test_utils.py +0 -0
  516. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/__init__.py +0 -0
  517. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_ab.py +0 -0
  518. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_acquire.py +0 -0
  519. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_asdf.py +0 -0
  520. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_cb.py +0 -0
  521. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_cellebrite.py +0 -0
  522. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_containerimage.py +0 -0
  523. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_cyber.py +0 -0
  524. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_dir.py +0 -0
  525. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_hyperv.py +0 -0
  526. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_itunes.py +0 -0
  527. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_kape.py +0 -0
  528. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_libvirt.py +0 -0
  529. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_local.py +0 -0
  530. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_log.py +0 -0
  531. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_mqtt.py +0 -0
  532. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_multiraw.py +0 -0
  533. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_ova.py +0 -0
  534. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_overlay.py +0 -0
  535. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_overlay2.py +0 -0
  536. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_ovf.py +0 -0
  537. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_phobos.py +0 -0
  538. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_pvm.py +0 -0
  539. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_pvs.py +0 -0
  540. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_remote.py +0 -0
  541. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_smb.py +0 -0
  542. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_tanium.py +0 -0
  543. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_tar.py +0 -0
  544. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_uac.py +0 -0
  545. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_utm.py +0 -0
  546. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_vbk.py +0 -0
  547. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_vbox.py +0 -0
  548. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_velociraptor.py +0 -0
  549. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_vma.py +0 -0
  550. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_vmwarevm.py +0 -0
  551. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/loaders/test_vmx.py +0 -0
  552. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/__init__.py +0 -0
  553. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/__init__.py +0 -0
  554. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/av/__init__.py +0 -0
  555. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/av/test_mcafee.py +0 -0
  556. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/av/test_sophos.py +0 -0
  557. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/av/test_symantec.py +0 -0
  558. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/av/test_trendmicro.py +0 -0
  559. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/browser/__init__.py +0 -0
  560. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/browser/test_brave.py +0 -0
  561. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/browser/test_chromium.py +0 -0
  562. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/browser/test_firefox.py +0 -0
  563. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/browser/test_iexplore.py +0 -0
  564. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/chat/__init__.py +0 -0
  565. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/chat/test_msn.py +0 -0
  566. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/container/__init__.py +0 -0
  567. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/container/test_docker.py +0 -0
  568. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/container/test_podman.py +0 -0
  569. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/editor/__init__.py +0 -0
  570. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/editor/test_windowsnotepad.py +0 -0
  571. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/edr/__init__.py +0 -0
  572. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/edr/test_acquire.py +0 -0
  573. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/edr/test_velociraptor.py +0 -0
  574. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/other/__init__.py +0 -0
  575. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/other/test_envfile.py +0 -0
  576. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/productivity/__init__.py +0 -0
  577. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/productivity/test_msoffice.py +0 -0
  578. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/productivity/test_sevenzip.py +0 -0
  579. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/productivity/test_winrar.py +0 -0
  580. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/remoteaccess/__init__.py +0 -0
  581. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/remoteaccess/test_anydesk.py +0 -0
  582. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/remoteaccess/test_rustdesk.py +0 -0
  583. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/remoteaccess/test_splashtop.py +0 -0
  584. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/remoteaccess/test_teamviewer.py +0 -0
  585. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/shell/__init__.py +0 -0
  586. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/shell/test_powershell.py +0 -0
  587. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/shell/test_wget.py +0 -0
  588. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/ssh/__init__.py +0 -0
  589. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/ssh/test_openssh.py +0 -0
  590. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/ssh/test_opensshd.py +0 -0
  591. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/ssh/test_putty.py +0 -0
  592. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/virtualization/__init__.py +0 -0
  593. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/virtualization/test_vmware_workstation.py +0 -0
  594. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/vpn/__init__.py +0 -0
  595. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/vpn/test_openvpn.py +0 -0
  596. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/vpn/test_wireguard.py +0 -0
  597. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/webhosting/__init__.py +0 -0
  598. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/webhosting/test_cpanel.py +0 -0
  599. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/webserver/__init__.py +0 -0
  600. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/webserver/test_apache.py +0 -0
  601. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/webserver/test_caddy.py +0 -0
  602. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/webserver/test_citrix.py +0 -0
  603. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/webserver/test_iis.py +0 -0
  604. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/webserver/test_nginx.py +0 -0
  605. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/apps/webserver/test_webserver.py +0 -0
  606. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/child/__init__.py +0 -0
  607. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/child/test_colima.py +0 -0
  608. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/child/test_docker.py +0 -0
  609. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/child/test_esxi.py +0 -0
  610. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/child/test_hyperv.py +0 -0
  611. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/child/test_lima.py +0 -0
  612. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/child/test_parallels.py +0 -0
  613. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/child/test_podman.py +0 -0
  614. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/child/test_proxmox.py +0 -0
  615. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/child/test_qemu.py +0 -0
  616. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/child/test_virtualbox.py +0 -0
  617. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/child/test_virtuozzo.py +0 -0
  618. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/child/test_vmware_workstation.py +0 -0
  619. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/child/test_wsl.py +0 -0
  620. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/filesystem/__init__.py +0 -0
  621. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/filesystem/ntfs/__init__.py +0 -0
  622. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/filesystem/ntfs/test_mft.py +0 -0
  623. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/filesystem/ntfs/test_usnjrnl.py +0 -0
  624. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/filesystem/test_icat.py +0 -0
  625. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/filesystem/test_resolver.py +0 -0
  626. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/filesystem/test_walkfs.py +0 -0
  627. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/filesystem/test_yara.py +0 -0
  628. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/filesystem/unix/__init__.py +0 -0
  629. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/filesystem/unix/test_capability.py +0 -0
  630. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/filesystem/unix/test_suid.py +0 -0
  631. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/general/__init__.py +0 -0
  632. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/general/test_config.py +0 -0
  633. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/general/test_default.py +0 -0
  634. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/general/test_network.py +0 -0
  635. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/general/test_plugins.py +0 -0
  636. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/general/test_users.py +0 -0
  637. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/__init__.py +0 -0
  638. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/__init__.py +0 -0
  639. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/bsd/__init__.py +0 -0
  640. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/bsd/citrix/__init__.py +0 -0
  641. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/bsd/citrix/test__os.py +0 -0
  642. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/bsd/citrix/test_history.py +0 -0
  643. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/bsd/darwin/__init__.py +0 -0
  644. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/bsd/darwin/ios/__init__.py +0 -0
  645. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/bsd/darwin/ios/test__os.py +0 -0
  646. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/bsd/darwin/macos/__init__.py +0 -0
  647. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/bsd/darwin/macos/test__os.py +0 -0
  648. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/bsd/darwin/macos/test_network.py +0 -0
  649. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/bsd/darwin/macos/test_user.py +0 -0
  650. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/bsd/freebsd/__init__.py +0 -0
  651. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/bsd/freebsd/test__os.py +0 -0
  652. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/bsd/openbsd/__init__.py +0 -0
  653. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/bsd/openbsd/test__os.py +0 -0
  654. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/bsd/osx/__init__.py +0 -0
  655. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/esxi/__init__.py +0 -0
  656. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/esxi/test__os.py +0 -0
  657. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/__init__.py +0 -0
  658. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/android/__init__.py +0 -0
  659. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/android/test__os.py +0 -0
  660. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/debian/__init__.py +0 -0
  661. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/debian/proxmox/__init__.py +0 -0
  662. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/debian/proxmox/test__os.py +0 -0
  663. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/debian/test_apt.py +0 -0
  664. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/debian/test_dpkg.py +0 -0
  665. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/debian/test_snap.py +0 -0
  666. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/fortios/__init__.py +0 -0
  667. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/fortios/test__os.py +0 -0
  668. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/fortios/test_keys.py +0 -0
  669. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/redhat/__init__.py +0 -0
  670. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/redhat/test__os.py +0 -0
  671. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/redhat/test_yum.py +0 -0
  672. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/suse/__init__.py +0 -0
  673. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/suse/test_zypper.py +0 -0
  674. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/test__os.py +0 -0
  675. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/test_cmdline.py +0 -0
  676. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/test_environ.py +0 -0
  677. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/test_iptables.py +0 -0
  678. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/test_modules.py +0 -0
  679. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/test_netstat.py +0 -0
  680. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/test_network.py +0 -0
  681. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/test_proc.py +0 -0
  682. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/test_processes.py +0 -0
  683. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/test_recentlyused.py +0 -0
  684. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/test_services.py +0 -0
  685. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/linux/test_sockets.py +0 -0
  686. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/locate/__init__.py +0 -0
  687. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/locate/test_gnulocate.py +0 -0
  688. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/locate/test_mlocate.py +0 -0
  689. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/locate/test_plocate.py +0 -0
  690. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/log/__init__.py +0 -0
  691. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/log/test_atop.py +0 -0
  692. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/log/test_audit.py +0 -0
  693. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/log/test_auth.py +0 -0
  694. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/log/test_helpers.py +0 -0
  695. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/log/test_journal.py +0 -0
  696. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/log/test_lastlog.py +0 -0
  697. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/log/test_messages.py +0 -0
  698. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/log/test_utmp.py +0 -0
  699. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/test__os.py +0 -0
  700. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/test_applications.py +0 -0
  701. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/test_cronjobs.py +0 -0
  702. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/test_generic.py +0 -0
  703. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/test_history.py +0 -0
  704. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/test_ips.py +0 -0
  705. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/test_locale.py +0 -0
  706. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/test_packagemanager.py +0 -0
  707. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/test_shadow.py +0 -0
  708. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/test_trash.py +0 -0
  709. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/test_users.py +0 -0
  710. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/unix/test_version.py +0 -0
  711. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/__init__.py +0 -0
  712. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/credential/__init__.py +0 -0
  713. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/credential/test_credhist.py +0 -0
  714. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/credential/test_lsa.py +0 -0
  715. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/credential/test_sam.py +0 -0
  716. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/dpapi/__init__.py +0 -0
  717. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/dpapi/keyprovider/__init__.py +0 -0
  718. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/dpapi/keyprovider/test_empty.py +0 -0
  719. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/dpapi/keyprovider/test_keychain.py +0 -0
  720. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/dpapi/keyprovider/test_winlogon.py +0 -0
  721. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/dpapi/test_dpapi.py +0 -0
  722. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/log/__init__.py +0 -0
  723. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/log/test_etl.py +0 -0
  724. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/log/test_evt.py +0 -0
  725. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/log/test_evtx.py +0 -0
  726. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/log/test_mssql.py +0 -0
  727. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/log/test_schedlgu.py +0 -0
  728. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/regf/__init__.py +0 -0
  729. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/regf/test_applications.py +0 -0
  730. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/regf/test_appxdebugkeys.py +0 -0
  731. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/regf/test_cit.py +0 -0
  732. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/regf/test_clsid.py +0 -0
  733. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/regf/test_muicache.py +0 -0
  734. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/regf/test_shellbags.py +0 -0
  735. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/regf/test_trusteddocs.py +0 -0
  736. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/regf/test_usb.py +0 -0
  737. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/regf/test_userassist.py +0 -0
  738. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test__os.py +0 -0
  739. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_activitiescache.py +0 -0
  740. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_adpolicy.py +0 -0
  741. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_amcache.py +0 -0
  742. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_cam.py +0 -0
  743. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_catroot.py +0 -0
  744. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_cim.py +0 -0
  745. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_clfs.py +0 -0
  746. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_datetime.py +0 -0
  747. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_defender.py +0 -0
  748. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_env.py +0 -0
  749. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_everything.py +0 -0
  750. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_firewall.py +0 -0
  751. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_generic.py +0 -0
  752. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_jumplist.py +0 -0
  753. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_lnk.py +0 -0
  754. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_locale.py +0 -0
  755. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_mru.py +0 -0
  756. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_network.py +0 -0
  757. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_notifications.py +0 -0
  758. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_prefetch.py +0 -0
  759. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_productkey.py +0 -0
  760. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_rdpcache.py +0 -0
  761. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_recyclebin.py +0 -0
  762. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_registry.py +0 -0
  763. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_search.py +0 -0
  764. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_shimcache.py +0 -0
  765. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_sru.py +0 -0
  766. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_syscache.py +0 -0
  767. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_tasks.py +0 -0
  768. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_thumbcache.py +0 -0
  769. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_ual.py +0 -0
  770. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_wer.py +0 -0
  771. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/os/windows/test_wua_history.py +0 -0
  772. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/scrape/__init__.py +0 -0
  773. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/scrape/test_qfind.py +0 -0
  774. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/plugins/scrape/test_scrape.py +0 -0
  775. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/test_container.py +0 -0
  776. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/test_exceptions.py +0 -0
  777. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/test_filesystem.py +0 -0
  778. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/test_loader.py +0 -0
  779. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/test_plugin.py +0 -0
  780. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/test_target.py +0 -0
  781. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/test_tests.py +0 -0
  782. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/test_volume.py +0 -0
  783. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/tools/__init__.py +0 -0
  784. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/tools/conftest.py +0 -0
  785. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/tools/test_build_pluginlist.py +0 -0
  786. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/tools/test_diff.py +0 -0
  787. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/tools/test_dump.py +0 -0
  788. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/tools/test_fs.py +0 -0
  789. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/tools/test_info.py +0 -0
  790. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/tools/test_mount.py +0 -0
  791. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/tools/test_qfind.py +0 -0
  792. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/tools/test_query.py +0 -0
  793. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/tools/test_reg.py +0 -0
  794. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/tools/test_shell.py +0 -0
  795. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/tools/test_yara.py +0 -0
  796. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/tools/utils/__init__.py +0 -0
  797. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/tools/utils/test_cli.py +0 -0
  798. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/tools/utils/test_fs.py +0 -0
  799. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/tools/utils/test_report.py +0 -0
  800. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/volumes/__init__.py +0 -0
  801. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/volumes/test_bde.py +0 -0
  802. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tests/volumes/test_md.py +0 -0
  803. {dissect_target-3.25.dev0 → dissect_target-3.25.dev1}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dissect.target
3
- Version: 3.25.dev0
3
+ Version: 3.25.dev1
4
4
  Summary: This module ties all other Dissect modules together, it provides a programming API and command line tools which allow easy access to various data sources inside disk images or file collections (a.k.a. targets)
5
5
  Author-email: Dissect Team <dissect@fox-it.com>
6
6
  License-Expression: AGPL-3.0-or-later
@@ -6,6 +6,7 @@ import os
6
6
  import pathlib
7
7
  import stat
8
8
  from collections import defaultdict
9
+ from functools import cache
9
10
  from typing import TYPE_CHECKING, Any, BinaryIO, Final
10
11
 
11
12
  from dissect.target.exceptions import (
@@ -24,6 +25,8 @@ TarFilesystem = import_lazy("dissect.target.filesystems.tar").TarFilesystem
24
25
  if TYPE_CHECKING:
25
26
  from collections.abc import Callable, Iterator
26
27
 
28
+ from typing_extensions import Self
29
+
27
30
  from dissect.target.target import Target
28
31
 
29
32
  FILESYSTEMS: list[type[Filesystem]] = []
@@ -191,7 +194,7 @@ class Filesystem:
191
194
  """
192
195
  return self.get(path).iterdir()
193
196
 
194
- def scandir(self, path: str) -> Iterator[FilesystemEntry]:
197
+ def scandir(self, path: str) -> Iterator[DirEntry]:
195
198
  """Iterate over the contents of a directory, return them as FilesystemEntry's.
196
199
 
197
200
  Args:
@@ -222,7 +225,7 @@ class Filesystem:
222
225
  Returns:
223
226
  A list of FilesystemEntry's.
224
227
  """
225
- return list(self.scandir(path))
228
+ return [e.get() for e in self.scandir(path)]
226
229
 
227
230
  def walk(
228
231
  self,
@@ -251,7 +254,7 @@ class Filesystem:
251
254
  topdown: bool = True,
252
255
  onerror: Callable[[Exception], None] | None = None,
253
256
  followlinks: bool = False,
254
- ) -> Iterator[tuple[list[FilesystemEntry], list[FilesystemEntry], list[FilesystemEntry]]]:
257
+ ) -> Iterator[tuple[list[FilesystemEntry], list[DirEntry], list[DirEntry]]]:
255
258
  """Recursively walk a directory pointed to by ``path``, returning :class:`FilesystemEntry` of files
256
259
  and directories.
257
260
 
@@ -266,7 +269,7 @@ class Filesystem:
266
269
  """
267
270
  return self.get(path).walk_ext(topdown, onerror, followlinks)
268
271
 
269
- def recurse(self, path: str) -> Iterator[FilesystemEntry]:
272
+ def recurse(self, path: str) -> Iterator[DirEntry]:
270
273
  """Recursively walk a directory and yield contents as :class:`FilesystemEntry`.
271
274
 
272
275
  Does not follow symbolic links.
@@ -519,7 +522,7 @@ class FilesystemEntry:
519
522
  def __str__(self) -> str:
520
523
  return str(self.path)
521
524
 
522
- def _resolve(self, follow_symlinks: bool = True) -> FilesystemEntry:
525
+ def _resolve(self, follow_symlinks: bool = True) -> Self:
523
526
  """Helper method to resolve symbolic links.
524
527
 
525
528
  If ``follow_symlinks`` is ``False``, this function is effectively a no-op.
@@ -535,7 +538,7 @@ class FilesystemEntry:
535
538
  return self.readlink_ext()
536
539
  return self
537
540
 
538
- def get(self, path: str) -> FilesystemEntry:
541
+ def get(self, path: str) -> Self:
539
542
  """Retrieve a :class:`FilesystemEntry` relative to this entry.
540
543
 
541
544
  Args:
@@ -560,9 +563,10 @@ class FilesystemEntry:
560
563
  Returns:
561
564
  An iterator of directory entries as path strings.
562
565
  """
563
- raise NotImplementedError
566
+ for entry in self.scandir():
567
+ yield entry.name
564
568
 
565
- def scandir(self) -> Iterator[FilesystemEntry]:
569
+ def scandir(self) -> Iterator[DirEntry]:
566
570
  """Iterate over the contents of a directory, yields :class:`FilesystemEntry`.
567
571
 
568
572
  Returns:
@@ -578,13 +582,13 @@ class FilesystemEntry:
578
582
  """
579
583
  return list(self.iterdir())
580
584
 
581
- def listdir_ext(self) -> list[FilesystemEntry]:
585
+ def listdir_ext(self) -> list[Self]:
582
586
  """List the contents of a directory as a list of :class:`FilesystemEntry`.
583
587
 
584
588
  Returns:
585
589
  A list of :class:`FilesystemEntry`.
586
590
  """
587
- return list(self.scandir())
591
+ return [e.get() for e in self.scandir()]
588
592
 
589
593
  def walk(
590
594
  self,
@@ -615,7 +619,7 @@ class FilesystemEntry:
615
619
  topdown: bool = True,
616
620
  onerror: Callable[[Exception], None] | None = None,
617
621
  followlinks: bool = False,
618
- ) -> Iterator[tuple[list[FilesystemEntry], list[FilesystemEntry], list[FilesystemEntry]]]:
622
+ ) -> Iterator[tuple[list[Self], list[Self], list[Self]]]:
619
623
  """Recursively walk a directory and yield its contents as :class:`FilesystemEntry` split in a tuple of
620
624
  lists of files, directories and symlinks.
621
625
 
@@ -629,13 +633,13 @@ class FilesystemEntry:
629
633
  """
630
634
  yield from fsutil.walk_ext(self, topdown, onerror, followlinks)
631
635
 
632
- def recurse(self) -> Iterator[FilesystemEntry]:
633
- """Recursively walk a directory and yield its contents as :class:`FilesystemEntry`.
636
+ def recurse(self) -> Iterator[DirEntry]:
637
+ """Recursively walk a directory and yield its contents as :class:`DirEntry`.
634
638
 
635
639
  Does not follow symbolic links.
636
640
 
637
641
  Returns:
638
- An iterator of :class:`FilesystemEntry`.
642
+ An iterator of :class:`DirEntry`.
639
643
  """
640
644
  yield from fsutil.recurse(self)
641
645
 
@@ -651,7 +655,7 @@ class FilesystemEntry:
651
655
  for entry in self.glob_ext(pattern):
652
656
  yield entry.path
653
657
 
654
- def glob_ext(self, pattern: str) -> Iterator[FilesystemEntry]:
658
+ def glob_ext(self, pattern: str) -> Iterator[Self]:
655
659
  """Iterate over the directory part of ``pattern``, returning entries matching
656
660
  ``pattern`` as :class:`FilesysmteEntry`.
657
661
 
@@ -746,7 +750,7 @@ class FilesystemEntry:
746
750
  The path the link points to."""
747
751
  raise NotImplementedError
748
752
 
749
- def readlink_ext(self) -> FilesystemEntry:
753
+ def readlink_ext(self) -> Self:
750
754
  """Read the link where this entry points to, return the resulting path as :class:`FilesystemEntry`.
751
755
 
752
756
  If it is a symlink and returns the string that corresponds to that path.
@@ -841,14 +845,109 @@ class FilesystemEntry:
841
845
  return hashutil.common(self.open())
842
846
 
843
847
 
848
+ class DirEntry:
849
+ """Directory entry base class. Closely models ``os.DirEntry``.
850
+
851
+ Filesystem implementations are encouraged to subclass this class to provide efficient
852
+ implementations of the various methods.
853
+
854
+ Args:
855
+ fs: The filesystem the entry belongs to.
856
+ path: The path of the parent directory.
857
+ name: The name of the entry.
858
+ entry: The raw entry backing this directory entry.
859
+ """
860
+
861
+ def __init__(self, fs: Filesystem, path: str, name: str, entry: Any):
862
+ self.fs = fs
863
+ """The filesystem the entry belongs to."""
864
+ self.path = fsutil.join(path, name, alt_separator=self.fs.alt_separator)
865
+ """The full path of the entry."""
866
+ self.name = name
867
+ """The name of the entry."""
868
+ self.entry = entry
869
+ """The raw entry backing this directory entry."""
870
+
871
+ self.stat = cache(self.stat)
872
+
873
+ def __fspath__(self) -> str:
874
+ return self.path
875
+
876
+ def __repr__(self) -> str:
877
+ return f"<DirEntry {self.name!r}>"
878
+
879
+ def get(self) -> FilesystemEntry:
880
+ """Retrieve the :class:`FilesystemEntry` this directory entry points to.
881
+
882
+ Subclasses should override this method to provide an efficient implementation.
883
+ """
884
+ return self.fs.get(self.path)
885
+
886
+ def is_dir(self, *, follow_symlinks: bool = True) -> bool:
887
+ """Return whether this entry is a directory or a symbolic link pointing to a directory.
888
+
889
+ Subclasses should override this method to provide an efficient implementation.
890
+ """
891
+ try:
892
+ return stat.S_ISDIR(self.stat(follow_symlinks=follow_symlinks).st_mode)
893
+ except FileNotFoundError:
894
+ return False
895
+
896
+ def is_file(self, *, follow_symlinks: bool = True) -> bool:
897
+ """Return whether this entry is a file or a symbolic link pointing to a file.
898
+
899
+ Subclasses should override this method to provide an efficient implementation.
900
+ """
901
+ try:
902
+ return stat.S_ISREG(self.stat(follow_symlinks=follow_symlinks).st_mode)
903
+ except FileNotFoundError:
904
+ return False
905
+
906
+ def is_symlink(self) -> bool:
907
+ """Return whether this entry is a symbolic link.
908
+
909
+ Subclasses should override this method to provide an efficient implementation.
910
+ """
911
+ return stat.S_ISLNK(self.stat(follow_symlinks=False).st_mode)
912
+
913
+ def is_junction(self) -> bool:
914
+ """Return whether this entry is a junction (only valid for NTFS)."""
915
+ return False
916
+
917
+ def stat(self, *, follow_symlinks: bool = True) -> fsutil.stat_result:
918
+ """Return the stat information of this entry.
919
+
920
+ Subclasses should override this method to provide an efficient implementation.
921
+
922
+ Note that this may return slightly different information than a "full" stat on the full filesystem entry,
923
+ as in most cases this will generate a stat based on the information available in the directory entry only.
924
+ """
925
+ return self.fs.stat(self.path, follow_symlinks=follow_symlinks)
926
+
927
+ def inode(self) -> int:
928
+ """Return the inode number of this entry."""
929
+ return self.stat(follow_symlinks=False).st_ino
930
+
931
+
932
+ class VirtualDirEntry(DirEntry):
933
+ fs: VirtualFilesystem
934
+ entry: FilesystemEntry
935
+
936
+ def get(self) -> FilesystemEntry:
937
+ return self.entry
938
+
939
+ def stat(self, *, follow_symlinks: bool = True) -> fsutil.stat_result:
940
+ return self.entry.stat(follow_symlinks=follow_symlinks)
941
+
942
+
844
943
  class VirtualDirectory(FilesystemEntry):
845
944
  """Virtual directory implementation. Backed by a dict."""
846
945
 
847
946
  def __init__(self, fs: VirtualFilesystem, path: str):
848
947
  super().__init__(fs, path, None)
849
948
  self.up = None
850
- self.top = None
851
- self.entries = {}
949
+ self.top: FilesystemEntry | None = None
950
+ self.entries: dict[str, FilesystemEntry] = {}
852
951
 
853
952
  def __getitem__(self, item: str) -> FilesystemEntry:
854
953
  if not self.fs.case_sensitive:
@@ -879,25 +978,11 @@ class VirtualDirectory(FilesystemEntry):
879
978
  def get(self, path: str) -> FilesystemEntry:
880
979
  return self.fs.get(path, relentry=self)
881
980
 
882
- def iterdir(self) -> Iterator[str]:
981
+ def scandir(self) -> Iterator[DirEntry]:
883
982
  yielded = set()
884
- for entry in self.entries:
885
- yield entry
886
- yielded.add(entry)
887
-
888
- # self.top used to be a reference to a filesystem. This is now a reference to
889
- # any filesystem entry, usually the root of a filesystem.
890
- if self.top:
891
- for entry in self.top.iterdir():
892
- if entry in yielded or (not self.fs.case_sensitive and entry.lower() in yielded):
893
- continue
894
- yield entry
895
-
896
- def scandir(self) -> Iterator[FilesystemEntry]:
897
- yielded = set()
898
- for entry in self.entries.values():
899
- yield entry
900
- yielded.add(entry.name)
983
+ for name, entry in self.entries.items():
984
+ yield VirtualDirEntry(self.fs, self.path, entry.name, entry)
985
+ yielded.add(name)
901
986
 
902
987
  # self.top used to be a reference to a filesystem. This is now a reference to
903
988
  # any filesystem entry, usually the root of a filesystem.
@@ -970,10 +1055,7 @@ class VirtualFile(FilesystemEntry):
970
1055
  return self
971
1056
  raise NotADirectoryError(f"'{self.path}' is not a directory")
972
1057
 
973
- def iterdir(self) -> Iterator[str]:
974
- raise NotADirectoryError(f"'{self.path}' is not a directory")
975
-
976
- def scandir(self) -> Iterator[FilesystemEntry]:
1058
+ def scandir(self) -> Iterator[DirEntry]:
977
1059
  raise NotADirectoryError(f"'{self.path}' is not a directory")
978
1060
 
979
1061
  def open(self) -> BinaryIO:
@@ -1056,10 +1138,7 @@ class VirtualSymlink(FilesystemEntry):
1056
1138
  def get(self, path: str) -> FilesystemEntry:
1057
1139
  return self.fs.get(path, self)
1058
1140
 
1059
- def iterdir(self) -> Iterator[str]:
1060
- yield from self.readlink_ext().iterdir()
1061
-
1062
- def scandir(self) -> Iterator[FilesystemEntry]:
1141
+ def scandir(self) -> Iterator[DirEntry]:
1063
1142
  yield from self.readlink_ext().scandir()
1064
1143
 
1065
1144
  def open(self) -> BinaryIO:
@@ -1517,6 +1596,14 @@ class EntryList(list):
1517
1596
  return object.__getattribute__(self, attr)
1518
1597
 
1519
1598
 
1599
+ class LayerDirEntry(DirEntry):
1600
+ fs: LayerFilesystem
1601
+ entry: list[DirEntry]
1602
+
1603
+ def get(self) -> LayerFilesystemEntry:
1604
+ return LayerFilesystemEntry(self.fs, self.path, [e.get() for e in self.entry])
1605
+
1606
+
1520
1607
  class LayerFilesystemEntry(FilesystemEntry):
1521
1608
  def __init__(self, fs: Filesystem, path: str, entry: FilesystemEntry):
1522
1609
  super().__init__(fs, path, EntryList(entry))
@@ -1542,24 +1629,12 @@ class LayerFilesystemEntry(FilesystemEntry):
1542
1629
  def open(self) -> BinaryIO:
1543
1630
  return self._resolve()._exec("open")
1544
1631
 
1545
- def iterdir(self) -> Iterator[str]:
1546
- yielded = {".", ".."}
1547
- selfentry = self._resolve()
1548
- for fsentry in selfentry.entries:
1549
- for entry_name in fsentry.iterdir():
1550
- name = entry_name if selfentry.fs.case_sensitive else entry_name.lower()
1551
- if name in yielded:
1552
- continue
1553
-
1554
- yield entry_name
1555
- yielded.add(name)
1556
-
1557
- def scandir(self) -> Iterator[LayerFilesystemEntry]:
1632
+ def scandir(self) -> Iterator[LayerDirEntry]:
1558
1633
  # Every entry is actually a list of entries from the different
1559
1634
  # overlaying FSes, of which each may implement a different function
1560
1635
  # like .stat() or .open()
1561
1636
  items = defaultdict(list)
1562
- selfentry = self._resolve()
1637
+ selfentry: LayerFilesystemEntry = self._resolve()
1563
1638
  for fsentry in selfentry.entries:
1564
1639
  for entry in fsentry.scandir():
1565
1640
  name = entry.name if selfentry.fs.case_sensitive else entry.name.lower()
@@ -1572,9 +1647,7 @@ class LayerFilesystemEntry(FilesystemEntry):
1572
1647
  # The filename for the first entry is taken. Note that in case of
1573
1648
  # non case-sensitive FSes, the different entries from the
1574
1649
  # overlaying FSes may have different casing of the name.
1575
- entry_name = entries[0].name
1576
- path = fsutil.join(selfentry.path, entry_name, alt_separator=selfentry.fs.alt_separator)
1577
- yield LayerFilesystemEntry(selfentry.fs, path, entries)
1650
+ yield DirEntry(selfentry.fs, selfentry.path, entries[0].name, entries)
1578
1651
 
1579
1652
  def is_file(self, follow_symlinks: bool = True) -> bool:
1580
1653
  try:
@@ -1627,6 +1700,15 @@ class RootFilesystem(LayerFilesystem):
1627
1700
  return entry
1628
1701
 
1629
1702
 
1703
+ class RootDirEntry(LayerDirEntry):
1704
+ fs: RootFilesystem
1705
+
1706
+ def get(self) -> RootFilesystemEntry:
1707
+ entry = super().get()
1708
+ entry.__class__ = RootFilesystemEntry
1709
+ return entry
1710
+
1711
+
1630
1712
  class RootFilesystemEntry(LayerFilesystemEntry):
1631
1713
  fs: RootFilesystem
1632
1714
 
@@ -1640,14 +1722,10 @@ class RootFilesystemEntry(LayerFilesystemEntry):
1640
1722
  self.fs.target.log.trace("%r::open()", self)
1641
1723
  return super().open()
1642
1724
 
1643
- def iterdir(self) -> Iterator[str]:
1644
- self.fs.target.log.trace("%r::iterdir()", self)
1645
- yield from super().iterdir()
1646
-
1647
- def scandir(self) -> Iterator[RootFilesystemEntry]:
1725
+ def scandir(self) -> Iterator[DirEntry]:
1648
1726
  self.fs.target.log.trace("%r::scandir()", self)
1649
1727
  for entry in super().scandir():
1650
- entry.__class__ = RootFilesystemEntry
1728
+ entry.__class__ = RootDirEntry
1651
1729
  yield entry
1652
1730
 
1653
1731
  def is_file(self, follow_symlinks: bool = True) -> bool:
@@ -11,7 +11,7 @@ from dissect.target.exceptions import (
11
11
  NotADirectoryError,
12
12
  NotASymlinkError,
13
13
  )
14
- from dissect.target.filesystem import Filesystem, FilesystemEntry
14
+ from dissect.target.filesystem import DirEntry, Filesystem, FilesystemEntry
15
15
  from dissect.target.helpers import fsutil
16
16
 
17
17
  if TYPE_CHECKING:
@@ -39,6 +39,17 @@ class AD1Filesystem(Filesystem):
39
39
  raise FileNotFoundError(path)
40
40
 
41
41
 
42
+ class AD1DirEntry(DirEntry):
43
+ fs: AD1Filesystem
44
+ entry: ad1.FileEntry
45
+
46
+ def get(self) -> AD1FilesystemEntry:
47
+ return AD1FilesystemEntry(self.fs, self.path, self.entry)
48
+
49
+ def stat(self, follow_symlinks: bool = True) -> fsutil.stat_result:
50
+ return self.get().stat(follow_symlinks=follow_symlinks)
51
+
52
+
42
53
  class AD1FilesystemEntry(FilesystemEntry):
43
54
  def get(self, path: str) -> AD1FilesystemEntry:
44
55
  path = fsutil.join(self.path, path, alt_separator=self.alt_separator)
@@ -49,19 +60,12 @@ class AD1FilesystemEntry(FilesystemEntry):
49
60
  raise IsADirectoryError(self.path)
50
61
  return self.entry.open()
51
62
 
52
- def iterdir(self) -> Iterator[str]:
53
- if not self.is_dir():
54
- raise NotADirectoryError(self.path)
55
-
56
- yield from self.entry.listdir().keys()
57
-
58
63
  def scandir(self) -> Iterator[AD1FilesystemEntry]:
59
64
  if not self.is_dir():
60
65
  raise NotADirectoryError(self.path)
61
66
 
62
- for fname, file_ in self.entry.listdir().items():
63
- path = fsutil.join(self.path, fname, alt_separator=self.alt_separator)
64
- yield AD1FilesystemEntry(self.fs, path, file_)
67
+ for name, entry in self.entry.listdir().items():
68
+ yield AD1DirEntry(self.fs, self.path, name, entry)
65
69
 
66
70
  def is_file(self, follow_symlinks: bool = True) -> bool:
67
71
  return self.entry.is_file()
@@ -13,7 +13,7 @@ from dissect.target.exceptions import (
13
13
  NotADirectoryError,
14
14
  NotASymlinkError,
15
15
  )
16
- from dissect.target.filesystem import Filesystem, FilesystemEntry
16
+ from dissect.target.filesystem import DirEntry, Filesystem, FilesystemEntry
17
17
  from dissect.target.helpers import fsutil
18
18
 
19
19
  if TYPE_CHECKING:
@@ -91,42 +91,40 @@ class BtrfsSubvolumeFilesystem(Filesystem):
91
91
  raise FileNotFoundError(path) from e
92
92
 
93
93
 
94
+ class BtrfsDirEntry(DirEntry):
95
+ fs: BtrfsSubvolumeFilesystem
96
+ entry: btrfs.INode
97
+
98
+ def get(self) -> BtrfsFilesystemEntry:
99
+ return BtrfsFilesystemEntry(self.fs, self.path, self.entry)
100
+
101
+ def stat(self, *, follow_symlinks: bool = True) -> fsutil.stat_result:
102
+ return self.get().stat(follow_symlinks=follow_symlinks)
103
+
104
+
94
105
  class BtrfsFilesystemEntry(FilesystemEntry):
95
- fs: BtrfsFilesystem
106
+ fs: BtrfsSubvolumeFilesystem
96
107
  entry: btrfs.INode
97
108
 
98
109
  def get(self, path: str) -> FilesystemEntry:
99
- entry_path = fsutil.join(self.path, path, alt_separator=self.fs.alt_separator)
100
- entry = self.fs._get_node(path, self.entry)
101
- return BtrfsFilesystemEntry(self.fs, entry_path, entry)
110
+ path = fsutil.join(self.path, path, alt_separator=self.fs.alt_separator)
111
+ return BtrfsFilesystemEntry(self.fs, path, self.fs._get_node(path, self.entry))
102
112
 
103
113
  def open(self) -> BinaryIO:
104
114
  if self.is_dir():
105
115
  raise IsADirectoryError(self.path)
106
116
  return self._resolve().entry.open()
107
117
 
108
- def _iterdir(self) -> Iterator[btrfs.INode]:
118
+ def scandir(self) -> Iterator[BtrfsDirEntry]:
109
119
  if not self.is_dir():
110
120
  raise NotADirectoryError(self.path)
111
121
 
112
- if self.is_symlink():
113
- for entry in self.readlink_ext().iterdir():
114
- yield entry
115
- else:
116
- for name, entry in self.entry.iterdir():
117
- if name in (".", ".."):
118
- continue
119
-
120
- yield name, entry
121
-
122
- def iterdir(self) -> Iterator[str]:
123
- for name, _ in self._iterdir():
124
- yield name
122
+ for name, entry in self._resolve().entry.iterdir():
123
+ if name in (".", ".."):
124
+ continue
125
125
 
126
- def scandir(self) -> Iterator[FilesystemEntry]:
127
- for name, entry in self._iterdir():
128
- entry_path = fsutil.join(self.path, name, alt_separator=self.fs.alt_separator)
129
- yield BtrfsFilesystemEntry(self.fs, entry_path, entry)
126
+ # TODO: Separate INodes and DirEntry in dissect.btrfs
127
+ yield BtrfsDirEntry(self.fs, self.path, name, entry)
130
128
 
131
129
  def is_dir(self, follow_symlinks: bool = True) -> bool:
132
130
  try:
@@ -8,7 +8,7 @@ from typing import TYPE_CHECKING, Any, BinaryIO
8
8
  from dissect.util import ts
9
9
 
10
10
  from dissect.target.exceptions import FileNotFoundError, NotADirectoryError
11
- from dissect.target.filesystem import Filesystem, FilesystemEntry
11
+ from dissect.target.filesystem import DirEntry, Filesystem, FilesystemEntry
12
12
  from dissect.target.helpers import fsutil
13
13
 
14
14
  if TYPE_CHECKING:
@@ -86,6 +86,18 @@ class CbFilesystem(Filesystem):
86
86
  raise FileNotFoundError(path)
87
87
 
88
88
 
89
+ class CbDirEntry(DirEntry):
90
+ fs: CbFilesystem
91
+ entry: tuple[dict[str, Any], str]
92
+
93
+ def get(self) -> CbFilesystemEntry:
94
+ entry, cbpath = self.entry
95
+ return CbFilesystemEntry(self.fs, self.path, entry, cbpath)
96
+
97
+ def stat(self, *, follow_symlinks: bool = True) -> fsutil.stat_result:
98
+ return self.get().stat(follow_symlinks=follow_symlinks)
99
+
100
+
89
101
  class CbFilesystemEntry(FilesystemEntry):
90
102
  def __init__(self, fs: Filesystem, path: str, entry: Any, cbpath: str):
91
103
  super().__init__(fs, path, entry)
@@ -100,25 +112,22 @@ class CbFilesystemEntry(FilesystemEntry):
100
112
  """Returns file handle (file-like object)."""
101
113
  return self.fs.session.get_raw_file(self.cbpath)
102
114
 
103
- def iterdir(self) -> Iterator[str]:
104
- """List the directory contents of a directory. Returns a generator of strings."""
105
- for entry in self.scandir():
106
- yield entry.name
107
-
108
- def scandir(self) -> Iterator[CbFilesystemEntry]:
115
+ def scandir(self) -> Iterator[CbDirEntry]:
109
116
  """List the directory contents of this directory. Returns a generator of filesystem entries."""
110
117
  if not self.is_dir():
111
- raise NotADirectoryError(f"'{self.path}' is not a directory")
118
+ raise NotADirectoryError(self.path)
112
119
 
113
120
  separator = self.fs.alt_separator or "/"
114
121
  for entry in self.fs.session.list_directory(self.cbpath + separator):
115
- filename = entry["filename"]
116
- if filename in (".", ".."):
122
+ if entry["filename"] in (".", ".."):
117
123
  continue
118
124
 
119
- path = fsutil.join(self.path, filename, alt_separator=self.fs.alt_separator)
120
- cbpath = separator.join([self.cbpath, filename])
121
- yield CbFilesystemEntry(self.fs, path, entry, cbpath)
125
+ yield CbDirEntry(
126
+ self.fs,
127
+ self.path,
128
+ entry["filename"],
129
+ (entry, separator.join([self.cbpath, entry["filename"]])),
130
+ )
122
131
 
123
132
  def is_dir(self, follow_symlinks: bool = True) -> bool:
124
133
  """Return whether this entry is a directory."""
@@ -5,7 +5,7 @@ import textwrap
5
5
  from typing import TYPE_CHECKING, Any, BinaryIO
6
6
 
7
7
  from dissect.target.exceptions import ConfigurationParsingError, FileNotFoundError
8
- from dissect.target.filesystem import FilesystemEntry, VirtualFilesystem
8
+ from dissect.target.filesystem import DirEntry, FilesystemEntry, VirtualFilesystem
9
9
  from dissect.target.helpers import fsutil
10
10
  from dissect.target.helpers.configutil import ConfigurationParser, parse
11
11
  from dissect.target.helpers.logging import get_logger
@@ -131,6 +131,17 @@ class ConfigurationFilesystem(VirtualFilesystem):
131
131
  return ConfigurationEntry(self, entry.path, entry, config_parser)
132
132
 
133
133
 
134
+ class ConfigurationDirEntry(DirEntry):
135
+ fs: ConfigurationFilesystem
136
+ entry: tuple[FilesystemEntry, dict | ConfigurationParser | str | list | None]
137
+
138
+ def get(self) -> ConfigurationEntry:
139
+ return ConfigurationEntry(self.fs, self.path, self.entry[0], self.entry[1])
140
+
141
+ def stat(self, *, follow_symlinks: bool = True) -> fsutil.stat_result:
142
+ return self.get().stat(follow_symlinks=follow_symlinks)
143
+
144
+
134
145
  class ConfigurationEntry(FilesystemEntry):
135
146
  """A Special filesystem entry.
136
147
 
@@ -262,22 +273,17 @@ class ConfigurationEntry(FilesystemEntry):
262
273
  output_data = self._write_value_mapping(self.parser_items)
263
274
  return io.BytesIO(bytes(output_data, "utf-8"))
264
275
 
265
- def iterdir(self) -> Iterator[str]:
266
- for entry in self.scandir():
267
- yield entry.name
268
-
269
- def scandir(self) -> Iterator[ConfigurationEntry]:
270
- """Return the items inside :attr:`parser_items` as ``ConfigurationEntries``."""
276
+ def scandir(self) -> Iterator[ConfigurationDirEntry]:
271
277
  if self.is_file():
272
- raise NotADirectoryError
278
+ raise NotADirectoryError(self.path)
273
279
 
274
280
  if self.parser_items is None and self.entry.is_dir():
275
281
  for entry in self.entry.scandir():
276
- yield ConfigurationEntry(self.fs, entry.name, entry, None)
282
+ yield ConfigurationDirEntry(self.fs, self.path, entry.name, (entry.get(), None))
277
283
  return
278
284
 
279
285
  for key, values in self.parser_items.items():
280
- yield ConfigurationEntry(self.fs, key, self.entry, values)
286
+ yield ConfigurationDirEntry(self.fs, self.path, key, (self.entry, values))
281
287
 
282
288
  def is_file(self, follow_symlinks: bool = True) -> bool:
283
289
  return not self.is_dir(follow_symlinks)