1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
/*
* The Sleuth Kit
*
* Brian Carrier [carrier <at> sleuthkit [dot] org]
* Copyright (c) 2019-2020 Brian Carrier. All Rights reserved
* Copyright (c) 2018-2019 BlackBag Technologies. All Rights reserved
*
* This software is distributed under the Common Public License 1.0
*/
#include "../libtsk.h"
#include "apfs_compat.hpp"
#include "../img/pool.hpp"
#include "tsk_fs_i.h"
TSK_FS_INFO* apfs_open_auto_detect(TSK_IMG_INFO * img_info, TSK_OFF_T offset,
TSK_FS_TYPE_ENUM fstype, uint8_t test) {
return apfs_open(img_info, offset, fstype, "");
}
TSK_FS_INFO* apfs_open(TSK_IMG_INFO * img_info, TSK_OFF_T offset,
TSK_FS_TYPE_ENUM fstype, const char* pass) {
tsk_error_reset();
if (img_info->itype != TSK_IMG_TYPE_POOL) {
tsk_error_reset();
tsk_error_set_errno(TSK_ERR_FS_ARG);
tsk_error_set_errstr("tsk_apfs_open: Not a pool image");
return nullptr;
}
IMG_POOL_INFO *pool_img = (IMG_POOL_INFO*)img_info;
if (pool_img->pool_info == nullptr) {
tsk_error_reset();
tsk_error_set_errno(TSK_ERR_FS_ARG);
tsk_error_set_errstr("tsk_apfs_open: Null pool_info");
return nullptr;
}
if (fstype != TSK_FS_TYPE_APFS) {
tsk_error_reset();
tsk_error_set_errno(TSK_ERR_FS_ARG);
tsk_error_set_errstr("tsk_apfs_open: invalid fstype");
return nullptr;
}
try {
auto fs = new APFSFSCompat(img_info, pool_img->pool_info, pool_img->pvol_block, pass);
return &fs->fs_info();
} catch (std::runtime_error& e) {
tsk_error_set_errno(TSK_ERR_FS_GENFS);
tsk_error_set_errstr("tsk_apfs_open: %s", e.what());
return nullptr;
}
}
|