diff --git a/bindings/java/jni/dataModel_SleuthkitJNI.cpp b/bindings/java/jni/dataModel_SleuthkitJNI.cpp index 75ff69cb024e4c1f015dc58c483ad36881d8ef77..0384cfdc3d35d0df35c621c11a1bac5340a2c9df 100644 --- a/bindings/java/jni/dataModel_SleuthkitJNI.cpp +++ b/bindings/java/jni/dataModel_SleuthkitJNI.cpp @@ -1422,13 +1422,31 @@ Java_org_sleuthkit_datamodel_SleuthkitJNI_openVolNat(JNIEnv * env, * @param fs_offset the offset in bytes to the file system */ JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_openFsNat - (JNIEnv * env, jclass obj, jlong a_img_info, jlong fs_offset) { + (JNIEnv * env, jclass obj, jlong a_img_info, jlong fs_offset, jlong pool_block) { TSK_IMG_INFO *img_info = castImgInfo(env, a_img_info); if (img_info == 0) { //exception already set return 0; } TSK_FS_INFO *fs_info; + printf("Java_org_sleuthkit_datamodel_SleuthkitJNI_openFsNat - pool_block = %lld\n", pool_block); + fflush(stdout); + + if (pool_block > 0) { + printf(" Ok have a pool\n"); + const TSK_POOL_INFO *pool = tsk_pool_open_img_sing(img_info, fs_offset, TSK_POOL_TYPE_DETECT); + + if (pool == NULL) { + tsk_error_print(stderr); + if (tsk_error_get_errno() == TSK_ERR_FS_UNSUPTYPE) + tsk_pool_type_print(stderr); + setThrowTskCoreError(env, tsk_error_get()); + } + + printf(" Making new img_info\n"); + fflush(stdout); + img_info = pool->get_img_info(pool, pool_block); + } fs_info = tsk_fs_open_img(img_info, (TSK_OFF_T) fs_offset, diff --git a/bindings/java/jni/dataModel_SleuthkitJNI.h b/bindings/java/jni/dataModel_SleuthkitJNI.h index 52a7a85a46872c3a04cf89ccd6fe3e1be526bff1..ad20cb8e6daca47f049ba7aec1dd32ac17b682ef 100644 --- a/bindings/java/jni/dataModel_SleuthkitJNI.h +++ b/bindings/java/jni/dataModel_SleuthkitJNI.h @@ -290,10 +290,10 @@ JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_openVolNat /* * Class: org_sleuthkit_datamodel_SleuthkitJNI * Method: openFsNat - * Signature: (JJ)J + * Signature: (JJJ)J */ JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_openFsNat - (JNIEnv *, jclass, jlong, jlong); + (JNIEnv *, jclass, jlong, jlong, jlong); /* * Class: org_sleuthkit_datamodel_SleuthkitJNI @@ -479,3 +479,14 @@ extern "C" { } #endif #endif +/* Header for class org_sleuthkit_datamodel_SleuthkitJNI_CaseHandles */ + +#ifndef _Included_org_sleuthkit_datamodel_SleuthkitJNI_CaseHandles +#define _Included_org_sleuthkit_datamodel_SleuthkitJNI_CaseHandles +#ifdef __cplusplus +extern "C" { +#endif +#ifdef __cplusplus +} +#endif +#endif diff --git a/bindings/java/src/org/sleuthkit/datamodel/Bundle.properties b/bindings/java/src/org/sleuthkit/datamodel/Bundle.properties index 9e0e01c75bca51cadc0cc318e21c1f73bd703e06..1368c84046c9663ca338073e9fbb0a12e3a80c10 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/Bundle.properties +++ b/bindings/java/src/org/sleuthkit/datamodel/Bundle.properties @@ -230,6 +230,7 @@ TskData.tskFsTypeEnum.RAWautoDetect=RAW (Auto Detection) TskData.tskFsTypeEnum.ISO9660autoDetect=ISO9660 (Auto Detection) TskData.tskFsTypeEnum.HFSautoDetect=HFS (Auto Detection) TskData.tskFsTypeEnum.YAFFS2autoDetect=YAFFS2 (Auto Detection) +TskData.tskFsTypeEnum.APFSautoDetect=APFS (Auto Detection) TskData.tskFsTypeEnum.unsupported=Unsupported File System TskData.tskImgTypeEnum.autoDetect=Auto Detect TskData.tskImgTypeEnum.rawSingle=Raw Single diff --git a/bindings/java/src/org/sleuthkit/datamodel/FileSystem.java b/bindings/java/src/org/sleuthkit/datamodel/FileSystem.java index 8d5b8fcc8271d808aec5a11e44068aa9a4e77d48..67d23024aa4ac6aabfd8fcae924afbcd5564dab2 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/FileSystem.java +++ b/bindings/java/src/org/sleuthkit/datamodel/FileSystem.java @@ -61,6 +61,7 @@ protected FileSystem(SleuthkitCase db, long obj_id, String name, long img_offset this.firstInum = first_inum; this.lastInum = last_inum; this.poolBlock = poolBlock; + System.out.println("%%% Created new FileSystem object with poolBlock = " + poolBlock); } @Override @@ -94,7 +95,7 @@ long getFileSystemHandle() throws TskCoreException { Content dataSource = getDataSource(); if ((dataSource != null) && (dataSource instanceof Image)) { Image image = (Image) dataSource; - filesystemHandle = SleuthkitJNI.openFs(image.getImageHandle(), imgOffset, getSleuthkitCase()); + filesystemHandle = SleuthkitJNI.openFs(image.getImageHandle(), imgOffset, poolBlock, getSleuthkitCase()); } else { throw new TskCoreException("Data Source of File System is not an image"); } diff --git a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java index 7497fc87ec1a42690de3cf54974bb76c805e0e0d..94128c6fc89e1ba676548bfe21ef9387d0efcd73 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java +++ b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitJNI.java @@ -843,7 +843,7 @@ public static long openFs(long imgHandle, long fsOffset, long poolBlock, Sleuthk //return cached fsHandle = imgOffSetToFsHandle.get(combinedOffset); } else { - fsHandle = openFsNat(imgHandle, combinedOffset); + fsHandle = openFsNat(imgHandle, fsOffset, poolBlock); //cache it imgOffSetToFsHandle.put(combinedOffset, fsHandle); } @@ -1670,7 +1670,7 @@ public static long openFile(long fsHandle, long fileId, TSK_FS_ATTR_TYPE_ENUM at private static native long openVolNat(long vsHandle, long volId) throws TskCoreException; - private static native long openFsNat(long imgHandle, long fsId) throws TskCoreException; + private static native long openFsNat(long imgHandle, long fsId, long poolOffset) throws TskCoreException; private static native long openFileNat(long fsHandle, long fileId, int attrType, int attrId) throws TskCoreException; diff --git a/bindings/java/src/org/sleuthkit/datamodel/TskData.java b/bindings/java/src/org/sleuthkit/datamodel/TskData.java index 6c8b844ff3ad283a40b595d063e110ba6200260d..8e13bba34e223c33e771f4905626d0e68a95a4f9 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/TskData.java +++ b/bindings/java/src/org/sleuthkit/datamodel/TskData.java @@ -460,6 +460,8 @@ public enum TSK_FS_TYPE_ENUM { TSK_FS_TYPE_EXT4(0x00002000, "Ext4"), ///< Ext4 file system TSK_FS_TYPE_YAFFS2(0x00004000, "YAFFS2"), ///< YAFFS2 file system TSK_FS_TYPE_YAFFS2_DETECT(0x00004000, bundle.getString("TskData.tskFsTypeEnum.YAFFS2autoDetect")), ///< YAFFS2 auto detection + TSK_FS_TYPE_APFS(0x00010000, "APFS"), ///< APFS file system + TSK_FS_TYPE_APFS_DETECT(0x00010000, bundle.getString("TskData.tskFsTypeEnum.APFSautoDetect")), ///< APFS auto detection TSK_FS_TYPE_UNSUPP(0xffffffff, bundle.getString("TskData.tskFsTypeEnum.unsupported")); ///< Unsupported file system private int value; @@ -524,6 +526,7 @@ public enum TSK_IMG_TYPE_ENUM { TSK_IMG_TYPE_EWF_EWF(64, "E01"), // Expert Witness format (encase) NON-NLS TSK_IMG_TYPE_VMDK_VMDK(128, "VMDK"), // VMware Virtual Disk (VMDK) NON-NLS TSK_IMG_TYPE_VHD_VHD(256, "VHD"), // Virtual Hard Disk (VHD) image format NON-NLS + TSK_IMG_TYPE_POOL_POOL(16384, "POOL"), // Pool (internal use) NON-NLS TSK_IMG_TYPE_UNSUPP(65535, bundle.getString("TskData.tskImgTypeEnum.unknown")); // Unsupported Image Type private long imgType;