dissect.target 3.17.dev26__tar.gz → 3.17.dev28__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {dissect.target-3.17.dev26/dissect.target.egg-info → dissect_target-3.17.dev28}/PKG-INFO +1 -1
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/network_managers.py +66 -49
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/mqtt.py +41 -16
- dissect_target-3.17.dev28/dissect/target/plugins/os/unix/log/messages.py +118 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/tools/query.py +1 -2
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28/dissect.target.egg-info}/PKG-INFO +1 -1
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/loaders/test_mqtt.py +44 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/log/test_messages.py +23 -4
- dissect_target-3.17.dev28/tests/plugins/os/unix/test_ips.py +159 -0
- dissect.target-3.17.dev26/dissect/target/plugins/os/unix/log/messages.py +0 -73
- dissect.target-3.17.dev26/tests/plugins/os/unix/test_ips.py +0 -100
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/COPYRIGHT +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/LICENSE +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/MANIFEST.in +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/README.md +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/container.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/containers/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/containers/asdf.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/containers/ewf.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/containers/fortifw.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/containers/hdd.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/containers/hds.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/containers/qcow2.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/containers/raw.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/containers/split.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/containers/vdi.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/containers/vhd.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/containers/vhdx.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/containers/vmdk.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/data/autocompletion/target_bash_completion.sh +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/exceptions.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/filesystem.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/filesystems/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/filesystems/ad1.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/filesystems/btrfs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/filesystems/cb.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/filesystems/config.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/filesystems/cpio.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/filesystems/dir.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/filesystems/exfat.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/filesystems/extfs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/filesystems/fat.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/filesystems/ffs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/filesystems/itunes.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/filesystems/jffs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/filesystems/ntfs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/filesystems/smb.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/filesystems/squashfs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/filesystems/tar.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/filesystems/vmfs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/filesystems/vmtar.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/filesystems/xfs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/filesystems/zip.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/cache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/compat/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/compat/path_310.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/compat/path_311.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/compat/path_312.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/compat/path_39.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/compat/path_common.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/config.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/configutil.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/cyber.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/data/windowsZones.xml +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/descriptor_extensions.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/docs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/fsutil.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/hashutil.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/keychain.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/lazy.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/loaderutil.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/localeutil.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/mount.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/mui.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/polypath.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/protobuf.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/record.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/record_modifier.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/regutil.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/shell_folder_ids.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/ssh.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/targetd.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/utils.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loader.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/ad1.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/asdf.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/cb.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/cyber.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/dir.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/hyperv.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/itunes.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/kape.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/local.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/log.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/multiraw.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/ova.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/ovf.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/phobos.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/profile.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/pvm.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/pvs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/raw.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/remote.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/res.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/smb.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/tanium.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/tar.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/target.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/targetd.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/utm.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/vb.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/vbox.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/velociraptor.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/vma.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/vmwarevm.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/vmx.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/loaders/xva.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugin.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/av/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/av/mcafee.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/av/sophos.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/av/symantec.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/av/trendmicro.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/browser/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/browser/brave.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/browser/browser.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/browser/chrome.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/browser/chromium.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/browser/edge.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/browser/firefox.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/browser/iexplore.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/container/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/container/docker.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/remoteaccess/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/remoteaccess/anydesk.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/remoteaccess/remoteaccess.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/remoteaccess/teamviewer.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/shell/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/shell/powershell.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/ssh/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/ssh/openssh.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/ssh/opensshd.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/ssh/putty.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/ssh/ssh.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/vpn/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/vpn/openvpn.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/vpn/wireguard.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/webhosting/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/webhosting/cpanel.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/webserver/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/webserver/apache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/webserver/caddy.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/webserver/citrix.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/webserver/iis.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/webserver/nginx.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/apps/webserver/webserver.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/child/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/child/esxi.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/child/hyperv.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/child/virtuozzo.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/child/vmware_workstation.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/child/wsl.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/filesystem/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/filesystem/acquire_handles.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/filesystem/acquire_hash.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/filesystem/icat.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/filesystem/ntfs/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/filesystem/ntfs/mft.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/filesystem/ntfs/mft_timeline.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/filesystem/ntfs/usnjrnl.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/filesystem/ntfs/utils.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/filesystem/resolver.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/filesystem/unix/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/filesystem/unix/capability.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/filesystem/unix/suid.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/filesystem/walkfs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/filesystem/yara.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/general/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/general/config.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/general/default.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/general/example.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/general/loaders.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/general/osinfo.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/general/plugins.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/general/scrape.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/general/users.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/bsd/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/bsd/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/bsd/citrix/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/bsd/citrix/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/bsd/citrix/history.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/bsd/freebsd/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/bsd/freebsd/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/bsd/ios/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/bsd/ios/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/bsd/openbsd/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/bsd/openbsd/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/bsd/osx/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/bsd/osx/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/bsd/osx/user.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/cronjobs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/datetime.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/esxi/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/esxi/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/etc.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/generic.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/history.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/android/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/android/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/cmdline.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/debian/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/debian/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/debian/apt.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/debian/dpkg.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/debian/vyos/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/debian/vyos/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/environ.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/fortios/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/fortios/_keys.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/fortios/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/fortios/generic.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/fortios/locale.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/iptables.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/modules.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/netstat.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/proc.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/processes.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/redhat/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/redhat/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/redhat/yum.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/services.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/sockets.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/suse/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/suse/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/linux/suse/zypper.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/locale.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/locate/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/locate/gnulocate.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/locate/locate.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/locate/mlocate.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/locate/plocate.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/log/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/log/atop.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/log/audit.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/log/auth.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/log/journal.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/log/lastlog.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/log/utmp.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/packagemanager.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/unix/shadow.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/_os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/activitiescache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/adpolicy.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/amcache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/catroot.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/cim.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/clfs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/datetime.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/defender.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/dpapi/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/dpapi/blob.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/dpapi/crypto.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/dpapi/dpapi.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/dpapi/master_key.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/env.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/exchange/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/exchange/exchange.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/generic.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/lnk.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/locale.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/log/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/log/amcache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/log/etl.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/log/evt.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/log/evtx.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/log/pfro.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/log/schedlgu.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/notifications.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/prefetch.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/recyclebin.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/regf/7zip.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/regf/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/regf/appxdebugkeys.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/regf/auditpol.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/regf/bam.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/regf/cit.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/regf/clsid.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/regf/firewall.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/regf/mru.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/regf/muicache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/regf/nethist.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/regf/recentfilecache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/regf/regf.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/regf/runkeys.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/regf/shellbags.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/regf/shimcache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/regf/trusteddocs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/regf/usb.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/regf/userassist.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/registry.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/sam.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/services.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/sru.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/startupinfo.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/syscache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/task_helpers/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/task_helpers/tasks_job.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/task_helpers/tasks_records.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/task_helpers/tasks_xml.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/tasks.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/thumbcache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/ual.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/plugins/os/windows/wer.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/report.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/target.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/tools/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/tools/build_pluginlist.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/tools/dd.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/tools/dump/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/tools/dump/run.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/tools/dump/state.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/tools/dump/utils.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/tools/fs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/tools/info.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/tools/logging.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/tools/mount.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/tools/reg.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/tools/shell.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/tools/utils.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/volume.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/volumes/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/volumes/bde.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/volumes/ddf.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/volumes/disk.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/volumes/luks.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/volumes/lvm.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/volumes/md.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/volumes/vmfs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect.target.egg-info/SOURCES.txt +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect.target.egg-info/dependency_links.txt +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect.target.egg-info/entry_points.txt +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect.target.egg-info/requires.txt +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect.target.egg-info/top_level.txt +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/pyproject.toml +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/setup.cfg +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/_docs/Makefile +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/_docs/conf.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/_docs/index.rst +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/_utils.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/conftest.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/containers/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/containers/test_fortifw.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/containers/test_split.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/filesystems/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/filesystems/test_cb.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/filesystems/test_config.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/filesystems/test_cpio.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/filesystems/test_dir.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/filesystems/test_exfat.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/filesystems/test_fat.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/filesystems/test_ntfs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/filesystems/test_smb.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/filesystems/test_tar.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/filesystems/test_vmtar.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/filesystems/test_zip.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/helpers/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/helpers/test_cache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/helpers/test_config.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/helpers/test_configutil.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/helpers/test_docs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/helpers/test_fsutil.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/helpers/test_hashutil.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/helpers/test_keychain.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/helpers/test_loaderutil.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/helpers/test_localeutil.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/helpers/test_modifier.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/helpers/test_protobuf.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/helpers/test_record.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/helpers/test_regutil.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/helpers/test_utils.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/loaders/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/loaders/test_asdf.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/loaders/test_cb.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/loaders/test_dir.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/loaders/test_hyperv.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/loaders/test_kape.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/loaders/test_local.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/loaders/test_log.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/loaders/test_multiraw.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/loaders/test_ova.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/loaders/test_ovf.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/loaders/test_phobos.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/loaders/test_pvm.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/loaders/test_pvs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/loaders/test_remote.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/loaders/test_smb.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/loaders/test_tanium.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/loaders/test_tar.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/loaders/test_utm.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/loaders/test_vbox.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/loaders/test_velociraptor.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/loaders/test_vmwarevm.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/av/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/av/test_mcafee.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/av/test_sophos.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/av/test_symantec.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/av/test_trendmicro.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/browser/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/browser/test_brave.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/browser/test_chrome.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/browser/test_chromium.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/browser/test_edge.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/browser/test_firefox.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/browser/test_iexplore.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/container/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/container/test_docker.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/remoteaccess/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/remoteaccess/test_anydesk.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/remoteaccess/test_teamviewer.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/shell/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/shell/test_powershell.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/ssh/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/ssh/test_openssh.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/ssh/test_opensshd.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/ssh/test_putty.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/vpn/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/vpn/test_openvpn.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/vpn/test_wireguard.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/webhosting/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/webhosting/test_cpanel.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/webserver/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/webserver/test_apache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/webserver/test_caddy.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/webserver/test_citrix.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/webserver/test_iis.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/webserver/test_nginx.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/apps/webserver/test_webserver.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/child/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/child/test_hyperv.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/child/test_virtuozzo.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/child/test_wsl.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/filesystem/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/filesystem/ntfs/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/filesystem/ntfs/test_mft.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/filesystem/ntfs/test_usnjrnl.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/filesystem/test_acquire_handles.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/filesystem/test_acquire_hash.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/filesystem/test_icat.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/filesystem/test_resolver.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/filesystem/test_walkfs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/filesystem/test_yara.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/filesystem/unix/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/filesystem/unix/test_capability.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/filesystem/unix/test_suid.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/general/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/general/test_config.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/general/test_default.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/general/test_plugins.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/general/test_scrape.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/general/test_users.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/bsd/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/bsd/citrix/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/bsd/citrix/test__os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/bsd/citrix/test_history.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/bsd/osx/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/bsd/osx/test__os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/bsd/osx/test_user.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/esxi/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/esxi/test__os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/linux/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/linux/android/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/linux/android/test__os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/linux/debian/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/linux/debian/test_apt.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/linux/debian/test_dpkg.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/linux/fortios/test_keys.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/linux/redhat/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/linux/redhat/test_yum.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/linux/suse/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/linux/suse/test_zypper.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/linux/test_cmdline.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/linux/test_environ.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/linux/test_iptables.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/linux/test_modules.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/linux/test_netstat.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/linux/test_proc.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/linux/test_processes.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/linux/test_services.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/linux/test_sockets.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/locate/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/locate/test_gnulocate.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/locate/test_mlocate.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/locate/test_plocate.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/log/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/log/test_atop.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/log/test_audit.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/log/test_auth.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/log/test_lastlog.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/log/test_utmp.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/test__os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/test_generic.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/test_history.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/test_journal.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/test_locale.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/test_packagemanager.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/test_shadow.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/test_users.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/test_version.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/log/test_etl.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/log/test_evt.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/log/test_evtx.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/log/test_schedlgu.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/regf/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/regf/test_appxdebugkeys.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/regf/test_cit.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/regf/test_clsid.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/regf/test_muicache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/regf/test_trusteddocs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/regf/test_userassist.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test__os.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test_adpolicy.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test_amcache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test_catroot.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test_clfs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test_datetime.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test_defender.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test_dpapi.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test_env.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test_generic.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test_lnk.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test_locale.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test_mru.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test_notifications.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test_prefetch.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test_recyclebin.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test_registry.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test_sam.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test_shimcache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test_sru.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test_syscache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test_tasks.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test_thumbcache.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test_ual.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/windows/test_wer.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/test_container.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/test_filesystem.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/test_plugin.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/test_registration.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/test_report.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/test_target.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/test_volume.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/tools/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/tools/test_dump.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/tools/test_fs.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/tools/test_mount.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/tools/test_query.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/tools/test_reg.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/tools/test_shell.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/tools/test_utils.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/volumes/__init__.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/volumes/test_bde.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/volumes/test_md.py +0 -0
- {dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tox.ini +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: dissect.target
|
3
|
-
Version: 3.17.
|
3
|
+
Version: 3.17.dev28
|
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: Affero General Public License v3
|
{dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/dissect/target/helpers/network_managers.py
RENAMED
@@ -5,6 +5,7 @@ import re
|
|
5
5
|
from collections import defaultdict
|
6
6
|
from configparser import ConfigParser, MissingSectionHeaderError
|
7
7
|
from io import StringIO
|
8
|
+
from itertools import chain
|
8
9
|
from re import compile, sub
|
9
10
|
from typing import Any, Callable, Iterable, Match, Optional
|
10
11
|
|
@@ -299,7 +300,8 @@ class Parser:
|
|
299
300
|
return
|
300
301
|
|
301
302
|
if section:
|
302
|
-
|
303
|
+
# account for values of sections which are None
|
304
|
+
config = config.get(section, {}) or {}
|
303
305
|
|
304
306
|
for key, value in config.items():
|
305
307
|
if key == option:
|
@@ -508,7 +510,7 @@ class LinuxNetworkManager:
|
|
508
510
|
|
509
511
|
|
510
512
|
def parse_unix_dhcp_log_messages(target) -> list[str]:
|
511
|
-
"""Parse local syslog and cloud init
|
513
|
+
"""Parse local syslog, journal and cloud init-log files for DHCP lease IPs.
|
512
514
|
|
513
515
|
Args:
|
514
516
|
target: Target to discover and obtain network information from.
|
@@ -516,53 +518,68 @@ def parse_unix_dhcp_log_messages(target) -> list[str]:
|
|
516
518
|
Returns:
|
517
519
|
List of DHCP ip addresses.
|
518
520
|
"""
|
519
|
-
ips =
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
521
|
+
ips = set()
|
522
|
+
messages = set()
|
523
|
+
|
524
|
+
for log_func in ["messages", "journal"]:
|
525
|
+
try:
|
526
|
+
messages = chain(messages, getattr(target, log_func)())
|
527
|
+
except PluginError:
|
528
|
+
target.log.debug(f"Could not search for DHCP leases in {log_func} files.")
|
529
|
+
|
530
|
+
if not messages:
|
531
|
+
target.log.warning(f"Could not search for DHCP leases using {log_func}: No log entries found.")
|
532
|
+
|
533
|
+
for record in messages:
|
534
|
+
line = record.message
|
535
|
+
|
536
|
+
# Ubuntu cloud-init
|
537
|
+
if "Received dhcp lease on" in line:
|
538
|
+
interface, ip, netmask = re.search(r"Received dhcp lease on (\w{0,}) for (\S+)\/(\S+)", line).groups()
|
539
|
+
ips.add(ip)
|
540
|
+
continue
|
541
|
+
|
542
|
+
# Ubuntu DHCP
|
543
|
+
if ("DHCPv4" in line or "DHCPv6" in line) and " address " in line and " via " in line:
|
544
|
+
ip = line.split(" address ")[1].split(" via ")[0].strip().split("/")[0]
|
545
|
+
ips.add(ip)
|
546
|
+
continue
|
547
|
+
|
548
|
+
# Ubuntu DHCP NetworkManager
|
549
|
+
if "option ip_address" in line and ("dhcp4" in line or "dhcp6" in line) and "=> '" in line:
|
550
|
+
ip = line.split("=> '")[1].replace("'", "").strip()
|
551
|
+
ips.add(ip)
|
552
|
+
continue
|
553
|
+
|
554
|
+
# Debian and CentOS dhclient
|
555
|
+
if hasattr(record, "daemon") and record.daemon == "dhclient" and "bound to" in line:
|
556
|
+
ip = line.split("bound to")[1].split(" ")[1].strip()
|
557
|
+
ips.add(ip)
|
558
|
+
continue
|
559
|
+
|
560
|
+
# CentOS DHCP and general NetworkManager
|
561
|
+
if " address " in line and ("dhcp4" in line or "dhcp6" in line):
|
562
|
+
ip = line.split(" address ")[1].strip()
|
563
|
+
ips.add(ip)
|
564
|
+
continue
|
565
|
+
|
566
|
+
# Ubuntu/Debian DHCP networkd (Journal)
|
567
|
+
if (
|
568
|
+
hasattr(record, "code_func")
|
569
|
+
and record.code_func == "dhcp_lease_acquired"
|
570
|
+
and " address " in line
|
571
|
+
and " via " in line
|
572
|
+
):
|
573
|
+
interface, ip, netmask, gateway = re.search(
|
574
|
+
r"^(\S+): DHCPv[4|6] address (\S+)\/(\S+) via (\S+)", line
|
575
|
+
).groups()
|
576
|
+
ips.add(ip)
|
577
|
+
continue
|
578
|
+
|
579
|
+
# Journals and syslogs can be large and slow to iterate,
|
580
|
+
# so we stop if we have some results and have reached the journal plugin.
|
581
|
+
if len(ips) >= 2 and record._desc.name == "linux/log/journal":
|
582
|
+
break
|
566
583
|
|
567
584
|
return ips
|
568
585
|
|
@@ -65,6 +65,9 @@ class MQTTStream(AlignedStream):
|
|
65
65
|
class MQTTConnection:
|
66
66
|
broker = None
|
67
67
|
host = None
|
68
|
+
prev = -1
|
69
|
+
factor = 1
|
70
|
+
prefetch_factor_inc = 10
|
68
71
|
|
69
72
|
def __init__(self, broker: Broker, host: str):
|
70
73
|
self.broker = broker
|
@@ -95,20 +98,32 @@ class MQTTConnection:
|
|
95
98
|
|
96
99
|
def read(self, disk_id: int, offset: int, length: int, optimization_strategy: int) -> bytes:
|
97
100
|
message = None
|
98
|
-
self.broker.seek(self.host, disk_id, offset, length, optimization_strategy)
|
99
101
|
|
102
|
+
message = self.broker.read(self.host, disk_id, offset, length)
|
103
|
+
if message:
|
104
|
+
return message.data
|
105
|
+
|
106
|
+
if self.prev == offset - (length * self.factor):
|
107
|
+
if self.factor < 500:
|
108
|
+
self.factor += self.prefetch_factor_inc
|
109
|
+
else:
|
110
|
+
self.factor = 1
|
111
|
+
|
112
|
+
self.prev = offset
|
113
|
+
flength = length * self.factor
|
114
|
+
self.broker.factor = self.factor
|
115
|
+
self.broker.seek(self.host, disk_id, offset, flength, optimization_strategy)
|
100
116
|
attempts = 0
|
101
117
|
while True:
|
102
|
-
message
|
103
|
-
|
104
|
-
if message:
|
118
|
+
if message := self.broker.read(self.host, disk_id, offset, length):
|
119
|
+
# don't waste time with sleep if we have a response
|
105
120
|
break
|
106
121
|
|
107
122
|
attempts += 1
|
108
|
-
time.sleep(0.
|
109
|
-
if attempts >
|
123
|
+
time.sleep(0.1)
|
124
|
+
if attempts > 300:
|
110
125
|
# message might have not reached agent, resend...
|
111
|
-
self.broker.seek(self.host, disk_id, offset,
|
126
|
+
self.broker.seek(self.host, disk_id, offset, flength, optimization_strategy)
|
112
127
|
attempts = 0
|
113
128
|
|
114
129
|
return message.data
|
@@ -127,6 +142,7 @@ class Broker:
|
|
127
142
|
diskinfo = {}
|
128
143
|
index = {}
|
129
144
|
topo = {}
|
145
|
+
factor = 1
|
130
146
|
|
131
147
|
def __init__(self, broker: Broker, port: str, key: str, crt: str, ca: str, case: str, **kwargs):
|
132
148
|
self.broker_host = broker
|
@@ -137,10 +153,13 @@ class Broker:
|
|
137
153
|
self.case = case
|
138
154
|
self.command = kwargs.get("command", None)
|
139
155
|
|
156
|
+
def clear_cache(self) -> None:
|
157
|
+
self.index = {}
|
158
|
+
|
140
159
|
@suppress
|
141
160
|
def read(self, host: str, disk_id: int, seek_address: int, read_length: int) -> SeekMessage:
|
142
161
|
key = f"{host}-{disk_id}-{seek_address}-{read_length}"
|
143
|
-
return self.index.
|
162
|
+
return self.index.get(key)
|
144
163
|
|
145
164
|
@suppress
|
146
165
|
def disk(self, host: str) -> DiskMessage:
|
@@ -165,14 +184,15 @@ class Broker:
|
|
165
184
|
disk_id = tokens[3]
|
166
185
|
seek_address = int(tokens[4], 16)
|
167
186
|
read_length = int(tokens[5], 16)
|
168
|
-
msg = SeekMessage(data=payload)
|
169
187
|
|
170
|
-
|
188
|
+
for i in range(self.factor):
|
189
|
+
sublength = int(read_length / self.factor)
|
190
|
+
start = i * sublength
|
191
|
+
key = f"{hostname}-{disk_id}-{seek_address+start}-{sublength}"
|
192
|
+
if key in self.index:
|
193
|
+
continue
|
171
194
|
|
172
|
-
|
173
|
-
return
|
174
|
-
|
175
|
-
self.index[key] = msg
|
195
|
+
self.index[key] = SeekMessage(data=payload[start : start + sublength])
|
176
196
|
|
177
197
|
def _on_id(self, hostname: str, payload: bytes) -> None:
|
178
198
|
key = hostname
|
@@ -204,9 +224,14 @@ class Broker:
|
|
204
224
|
elif response == "ID":
|
205
225
|
self._on_id(hostname, msg.payload)
|
206
226
|
|
207
|
-
def seek(self, host: str, disk_id: int, offset: int,
|
227
|
+
def seek(self, host: str, disk_id: int, offset: int, flength: int, optimization_strategy: int) -> None:
|
228
|
+
length = int(flength / self.factor)
|
229
|
+
key = f"{host}-{disk_id}-{offset}-{length}"
|
230
|
+
if key in self.index:
|
231
|
+
return
|
232
|
+
|
208
233
|
self.mqtt_client.publish(
|
209
|
-
f"{self.case}/{host}/SEEK/{disk_id}/{hex(offset)}/{hex(
|
234
|
+
f"{self.case}/{host}/SEEK/{disk_id}/{hex(offset)}/{hex(flength)}", pack("<I", optimization_strategy)
|
210
235
|
)
|
211
236
|
|
212
237
|
def info(self, host: str) -> None:
|
@@ -0,0 +1,118 @@
|
|
1
|
+
import re
|
2
|
+
from pathlib import Path
|
3
|
+
from typing import Iterator
|
4
|
+
|
5
|
+
from dissect.target import Target
|
6
|
+
from dissect.target.exceptions import UnsupportedPluginError
|
7
|
+
from dissect.target.helpers.record import TargetRecordDescriptor
|
8
|
+
from dissect.target.helpers.utils import year_rollover_helper
|
9
|
+
from dissect.target.plugin import Plugin, export
|
10
|
+
|
11
|
+
MessagesRecord = TargetRecordDescriptor(
|
12
|
+
"linux/log/messages",
|
13
|
+
[
|
14
|
+
("datetime", "ts"),
|
15
|
+
("string", "daemon"),
|
16
|
+
("varint", "pid"),
|
17
|
+
("string", "message"),
|
18
|
+
("path", "source"),
|
19
|
+
],
|
20
|
+
)
|
21
|
+
|
22
|
+
DEFAULT_TS_LOG_FORMAT = "%b %d %H:%M:%S"
|
23
|
+
RE_TS = re.compile(r"(\w+\s{1,2}\d+\s\d{2}:\d{2}:\d{2})")
|
24
|
+
RE_DAEMON = re.compile(r"^[^:]+:\d+:\d+[^\[\]:]+\s([^\[:]+)[\[|:]{1}")
|
25
|
+
RE_PID = re.compile(r"\w\[(\d+)\]")
|
26
|
+
RE_MSG = re.compile(r"[^:]+:\d+:\d+[^:]+:\s(.*)$")
|
27
|
+
RE_CLOUD_INIT_LINE = re.compile(r"(?P<ts>.*) - (?P<daemon>.*)\[(?P<log_level>\w+)\]\: (?P<message>.*)$")
|
28
|
+
|
29
|
+
|
30
|
+
class MessagesPlugin(Plugin):
|
31
|
+
def __init__(self, target: Target):
|
32
|
+
super().__init__(target)
|
33
|
+
self.log_files = set(self._find_log_files())
|
34
|
+
|
35
|
+
def _find_log_files(self) -> Iterator[Path]:
|
36
|
+
log_dirs = ["/var/log/", "/var/log/installer/"]
|
37
|
+
file_globs = ["syslog*", "messages*", "cloud-init.log*"]
|
38
|
+
for log_dir in log_dirs:
|
39
|
+
for glob in file_globs:
|
40
|
+
yield from self.target.fs.path(log_dir).glob(glob)
|
41
|
+
|
42
|
+
def check_compatible(self) -> None:
|
43
|
+
if not self.log_files:
|
44
|
+
raise UnsupportedPluginError("No log files found")
|
45
|
+
|
46
|
+
@export(record=MessagesRecord)
|
47
|
+
def syslog(self) -> Iterator[MessagesRecord]:
|
48
|
+
"""Return contents of /var/log/messages*, /var/log/syslog* and cloud-init logs.
|
49
|
+
|
50
|
+
See ``messages`` for more information.
|
51
|
+
"""
|
52
|
+
return self.messages()
|
53
|
+
|
54
|
+
@export(record=MessagesRecord)
|
55
|
+
def messages(self) -> Iterator[MessagesRecord]:
|
56
|
+
"""Return contents of /var/log/messages*, /var/log/syslog* and cloud-init logs.
|
57
|
+
|
58
|
+
Note: due to year rollover detection, the contents of the files are returned in reverse.
|
59
|
+
|
60
|
+
The messages log file holds information about a variety of events such as the system error messages, system
|
61
|
+
startups and shutdowns, change in the network configuration, etc. Aims to store valuable, non-debug and
|
62
|
+
non-critical messages. This log should be considered the "general system activity" log.
|
63
|
+
|
64
|
+
References:
|
65
|
+
- https://geek-university.com/linux/var-log-messages-file/
|
66
|
+
- https://www.geeksforgeeks.org/file-timestamps-mtime-ctime-and-atime-in-linux/
|
67
|
+
- https://cloudinit.readthedocs.io/en/latest/development/logging.html#logging-command-output
|
68
|
+
"""
|
69
|
+
|
70
|
+
tzinfo = self.target.datetime.tzinfo
|
71
|
+
|
72
|
+
for log_file in self.log_files:
|
73
|
+
if "cloud-init" in log_file.name:
|
74
|
+
yield from self._parse_cloud_init_log(log_file)
|
75
|
+
continue
|
76
|
+
|
77
|
+
for ts, line in year_rollover_helper(log_file, RE_TS, DEFAULT_TS_LOG_FORMAT, tzinfo):
|
78
|
+
daemon = dict(enumerate(RE_DAEMON.findall(line))).get(0)
|
79
|
+
pid = dict(enumerate(RE_PID.findall(line))).get(0)
|
80
|
+
message = dict(enumerate(RE_MSG.findall(line))).get(0, line)
|
81
|
+
|
82
|
+
yield MessagesRecord(
|
83
|
+
ts=ts,
|
84
|
+
daemon=daemon,
|
85
|
+
pid=pid,
|
86
|
+
message=message,
|
87
|
+
source=log_file,
|
88
|
+
_target=self.target,
|
89
|
+
)
|
90
|
+
|
91
|
+
def _parse_cloud_init_log(self, log_file: Path) -> Iterator[MessagesRecord]:
|
92
|
+
"""Parse a cloud-init.log file.
|
93
|
+
|
94
|
+
Lines are structured in the following format:
|
95
|
+
``YYYY-MM-DD HH:MM:SS,000 - dhcp.py[DEBUG]: Received dhcp lease on IFACE for IP/MASK``
|
96
|
+
|
97
|
+
NOTE: ``cloud-init-output.log`` files are not supported as they do not contain structured logs.
|
98
|
+
|
99
|
+
Args:
|
100
|
+
``log_file``: path to cloud-init.log file.
|
101
|
+
|
102
|
+
Returns: ``MessagesRecord``
|
103
|
+
"""
|
104
|
+
for line in log_file.open("rt").readlines():
|
105
|
+
if line := line.strip():
|
106
|
+
if match := RE_CLOUD_INIT_LINE.match(line):
|
107
|
+
match = match.groupdict()
|
108
|
+
yield MessagesRecord(
|
109
|
+
ts=match["ts"].split(",")[0],
|
110
|
+
daemon=match["daemon"],
|
111
|
+
pid=None,
|
112
|
+
message=match["message"],
|
113
|
+
source=log_file,
|
114
|
+
_target=self.target,
|
115
|
+
)
|
116
|
+
else:
|
117
|
+
self.target.log.warning("Could not match cloud-init log line")
|
118
|
+
self.target.log.debug("No match for line '%s'", line)
|
@@ -173,8 +173,7 @@ def main():
|
|
173
173
|
collected_plugins = {}
|
174
174
|
|
175
175
|
if targets:
|
176
|
-
for
|
177
|
-
plugin_target = Target.open(target)
|
176
|
+
for plugin_target in Target.open_all(targets, args.children):
|
178
177
|
if isinstance(plugin_target._loader, ProxyLoader):
|
179
178
|
parser.error("can't list compatible plugins for remote targets.")
|
180
179
|
funcs, _ = find_plugin_functions(plugin_target, args.list, compatibility=True, show_hidden=True)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: dissect.target
|
3
|
-
Version: 3.17.
|
3
|
+
Version: 3.17.dev28
|
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: Affero General Public License v3
|
@@ -1,5 +1,8 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
1
3
|
import sys
|
2
4
|
import time
|
5
|
+
from dataclasses import dataclass
|
3
6
|
from struct import pack
|
4
7
|
from typing import Iterator
|
5
8
|
from unittest.mock import MagicMock, patch
|
@@ -44,6 +47,24 @@ class MQTTMock(MagicMock):
|
|
44
47
|
self.on_message(self, None, response)
|
45
48
|
|
46
49
|
|
50
|
+
@dataclass
|
51
|
+
class MockSeekMessage:
|
52
|
+
data: bytes = b""
|
53
|
+
|
54
|
+
|
55
|
+
class MockBroker(MagicMock):
|
56
|
+
_seek = False
|
57
|
+
|
58
|
+
def seek(self, *args) -> None:
|
59
|
+
self._seek = True
|
60
|
+
|
61
|
+
def read(self, *args) -> MockSeekMessage | None:
|
62
|
+
if self._seek:
|
63
|
+
self._seek = False
|
64
|
+
return MockSeekMessage(data=b"010101")
|
65
|
+
return None
|
66
|
+
|
67
|
+
|
47
68
|
@pytest.fixture
|
48
69
|
def mock_paho(monkeypatch: pytest.MonkeyPatch) -> Iterator[MagicMock]:
|
49
70
|
with monkeypatch.context() as m:
|
@@ -62,6 +83,11 @@ def mock_client(mock_paho: MagicMock) -> Iterator[MagicMock]:
|
|
62
83
|
yield mock_client
|
63
84
|
|
64
85
|
|
86
|
+
@pytest.fixture
|
87
|
+
def mock_broker() -> Iterator[MockBroker]:
|
88
|
+
yield MockBroker()
|
89
|
+
|
90
|
+
|
65
91
|
@pytest.mark.parametrize(
|
66
92
|
"alias, hosts, disks, disk, seek, read, expected",
|
67
93
|
[
|
@@ -102,3 +128,21 @@ def test_remote_loader_stream(
|
|
102
128
|
target.disks[disk].seek(seek)
|
103
129
|
data = target.disks[disk].read(read)
|
104
130
|
assert data == expected
|
131
|
+
|
132
|
+
|
133
|
+
def test_mqtt_loader_prefetch(mock_broker: MockBroker) -> None:
|
134
|
+
from dissect.target.loaders.mqtt import MQTTConnection
|
135
|
+
|
136
|
+
connection = MQTTConnection(mock_broker, "")
|
137
|
+
connection.prefetch_factor_inc = 10
|
138
|
+
assert connection.factor == 1
|
139
|
+
assert connection.prev == -1
|
140
|
+
connection.read(1, 0, 100, 0)
|
141
|
+
assert connection.factor == 1
|
142
|
+
assert connection.prev == 0
|
143
|
+
connection.read(1, 100, 100, 0)
|
144
|
+
assert connection.factor == connection.prefetch_factor_inc + 1
|
145
|
+
assert connection.prev == 100
|
146
|
+
connection.read(1, 1200, 100, 0)
|
147
|
+
assert connection.factor == (connection.prefetch_factor_inc * 2) + 1
|
148
|
+
assert connection.prev == 1200
|
{dissect.target-3.17.dev26 → dissect_target-3.17.dev28}/tests/plugins/os/unix/log/test_messages.py
RENAMED
@@ -8,16 +8,17 @@ from zoneinfo import ZoneInfo
|
|
8
8
|
from flow.record.fieldtypes import datetime as dt
|
9
9
|
|
10
10
|
from dissect.target import Target
|
11
|
+
from dissect.target.filesystem import VirtualFilesystem
|
11
12
|
from dissect.target.filesystems.tar import TarFilesystem
|
12
13
|
from dissect.target.plugins.general import default
|
13
14
|
from dissect.target.plugins.os.unix.log.messages import MessagesPlugin, MessagesRecord
|
14
15
|
from tests._utils import absolute_path
|
15
16
|
|
16
17
|
|
17
|
-
def test_unix_log_messages_plugin(target_unix_users, fs_unix):
|
18
|
+
def test_unix_log_messages_plugin(target_unix_users: Target, fs_unix: VirtualFilesystem) -> None:
|
18
19
|
fs_unix.map_file_fh("/etc/timezone", BytesIO(b"Europe/Amsterdam"))
|
19
20
|
|
20
|
-
data_file = absolute_path("_data/plugins/os/unix/log
|
21
|
+
data_file = absolute_path("_data/plugins/os/unix/log/messages/messages")
|
21
22
|
fs_unix.map_file("var/log/messages", data_file)
|
22
23
|
|
23
24
|
entry = fs_unix.get("var/log/messages")
|
@@ -46,7 +47,7 @@ def test_unix_log_messages_plugin(target_unix_users, fs_unix):
|
|
46
47
|
assert isinstance(syslogs[0], type(MessagesRecord()))
|
47
48
|
|
48
49
|
|
49
|
-
def test_unix_log_messages_compressed_timezone_year_rollover():
|
50
|
+
def test_unix_log_messages_compressed_timezone_year_rollover() -> None:
|
50
51
|
target = Target()
|
51
52
|
bio = BytesIO()
|
52
53
|
|
@@ -86,7 +87,7 @@ def test_unix_log_messages_compressed_timezone_year_rollover():
|
|
86
87
|
assert results[1].ts == dt(2021, 1, 1, 13, 37, 0, tzinfo=ZoneInfo("America/Chicago"))
|
87
88
|
|
88
89
|
|
89
|
-
def test_unix_log_messages_malformed_log_year_rollover(target_unix_users, fs_unix):
|
90
|
+
def test_unix_log_messages_malformed_log_year_rollover(target_unix_users: Target, fs_unix: VirtualFilesystem) -> None:
|
90
91
|
fs_unix.map_file_fh("/etc/timezone", BytesIO(b"Europe/Amsterdam"))
|
91
92
|
|
92
93
|
messages = BytesIO(
|
@@ -105,3 +106,21 @@ def test_unix_log_messages_malformed_log_year_rollover(target_unix_users, fs_uni
|
|
105
106
|
|
106
107
|
results = list(target_unix_users.messages())
|
107
108
|
assert len(results) == 2
|
109
|
+
|
110
|
+
|
111
|
+
def test_unix_messages_cloud_init(target_unix_users: Target, fs_unix: VirtualFilesystem) -> None:
|
112
|
+
messages = """
|
113
|
+
2005-08-09 11:55:21,000 - foo.py[DEBUG]: This is a cloud-init message!
|
114
|
+
2005-08-09 11:55:21,001 - util.py[DEBUG]: Cloud-init v. 1.2.3-4ubuntu5 running 'init-local' at Tue, 9 Aug 2005 11:55:21 +0000. Up 13.37 seconds.
|
115
|
+
""" # noqa: E501
|
116
|
+
fs_unix.map_file_fh("/var/log/installer/cloud-init.log", BytesIO(textwrap.dedent(messages).encode()))
|
117
|
+
|
118
|
+
target_unix_users.add_plugin(MessagesPlugin)
|
119
|
+
|
120
|
+
results = list(target_unix_users.messages())
|
121
|
+
assert len(results) == 2
|
122
|
+
assert results[0].ts == dt(2005, 8, 9, 11, 55, 21)
|
123
|
+
assert results[0].daemon == "foo.py"
|
124
|
+
assert results[0].pid is None
|
125
|
+
assert results[0].message == "This is a cloud-init message!"
|
126
|
+
assert results[0].source == "/var/log/installer/cloud-init.log"
|