diff --git a/bindings/java/jni/auto_db_java.cpp b/bindings/java/jni/auto_db_java.cpp index 85e81370c3d4aeac3ba979db188cc99bcffc1cbe..582cd1404e1772b35e37fd7638b44e5791af0e7c 100644 --- a/bindings/java/jni/auto_db_java.cpp +++ b/bindings/java/jni/auto_db_java.cpp @@ -91,6 +91,35 @@ TskAutoDbJava::initializeJni(JNIEnv * jniEnv, jobject jobj) { return TSK_ERR; } + m_addVolumeSystemMethodID = m_jniEnv->GetMethodID(m_callbackClass, "addVsInfo", "(JIJJ)J"); + if (m_addVolumeSystemMethodID == NULL) { + printf("#### Error loading m_addVolumeSystemMethodID\n"); + fflush(stdout); + return TSK_ERR; + } + + m_addVolumeMethodID = m_jniEnv->GetMethodID(m_callbackClass, "addVolume", "(JJJJLjava/lang/String;J)J"); + if (m_addVolumeMethodID == NULL) { + printf("#### Error loading m_addVolumeMethodID\n"); + fflush(stdout); + return TSK_ERR; + } + + m_addPoolMethodID = m_jniEnv->GetMethodID(m_callbackClass, "addPool", "(JI)J"); + if (m_addPoolMethodID == NULL) { + printf("#### Error loading m_addPoolMethodID\n"); + fflush(stdout); + return TSK_ERR; + } + + + m_addFileSystemMethodID = m_jniEnv->GetMethodID(m_callbackClass, "addFileSystem", "(JJIJJJJJ)J"); + if (m_addFileSystemMethodID == NULL) { + printf("#### Error loading m_addFileSystemMethodID\n"); + fflush(stdout); + return TSK_ERR; + } + printf("\n#### Yay found method IDs!\n"); fflush(stdout); return TSK_OK; @@ -137,9 +166,14 @@ TskAutoDbJava::addImageInfo(int type, TSK_OFF_T ssize, int64_t & objId, const st } jlong objIdj = m_jniEnv->CallLongMethod(m_javaDbObj, m_addImageMethodID, - jint(type), jlong(ssize), tzj, jlong(size), md5j, sha1j, sha256j, devIdj, collj); + type, ssize, tzj, size, md5j, sha1j, sha256j, devIdj, collj); objId = (int64_t)objIdj; + printf("New image object ID: %lld\n", objId); + fflush(stdout); + if (objId < 0) { + return TSK_ERR; + } return TSK_OK; } @@ -155,12 +189,14 @@ TskAutoDbJava::addImageName(int64_t objId, char const* imgName, int sequence) { jstring imgNamej = m_jniEnv->NewStringUTF(imgName); jint res = m_jniEnv->CallIntMethod(m_javaDbObj, m_addImageNameMethodID, - jlong(objId), imgNamej, jlong(sequence)); + objId, imgNamej, (int64_t)sequence); if (res == 0) { return TSK_OK; } else { + printf("Error in addImageName...\n"); + fflush(stdout); return TSK_ERR; } } @@ -168,12 +204,58 @@ TskAutoDbJava::addImageName(int64_t objId, char const* imgName, int sequence) { TSK_RETVAL_ENUM TskAutoDbJava::addVsInfo(const TSK_VS_INFO* vs_info, int64_t parObjId, int64_t& objId) { printf("addVsInfo\n"); + + + printf("addVsInfo - making JNI call\n"); + fflush(stdout); + + if (m_addVolumeSystemMethodID == NULL) { + printf("#### Yikes m_addVolumeSystemMethodID is null...\n"); + return TSK_ERR; + } + + jlong objIdj = m_jniEnv->CallLongMethod(m_javaDbObj, m_addVolumeSystemMethodID, + parObjId, vs_info->vstype, vs_info->offset, (uint64_t)vs_info->block_size); + objId = (int64_t)objIdj; + printf("New volume system object ID: %lld\n", objId); + fflush(stdout); + + if (objId < 0) { + return TSK_ERR; + } return TSK_OK; } TSK_RETVAL_ENUM TskAutoDbJava::addPoolInfoAndVS(const TSK_POOL_INFO *pool_info, int64_t parObjId, int64_t& objId) { - printf("addPoolInfoAndVS\n"); + if (m_addPoolMethodID == NULL) { + printf("#### Yikes m_addPoolMethodID is null...\n"); + return TSK_ERR; + } + + jlong poolObjIdj = m_jniEnv->CallLongMethod(m_javaDbObj, m_addPoolMethodID, + parObjId, pool_info->ctype); + long poolObjId = (int64_t)poolObjIdj; + printf("New pool object ID: %lld\n", objId); + fflush(stdout); + + if (poolObjId < 0) { + return TSK_ERR; + } + + // "INSERT INTO tsk_vs_info (obj_id, vs_type, img_offset, block_size) VALUES (%" PRId64 ", %d,%" PRIuDADDR ",%d)", + // objId, TSK_VS_TYPE_APFS, pool_info->img_offset, pool_info->block_size); // TODO - offset + if (m_addVolumeSystemMethodID == NULL) { + printf("#### Yikes m_addVolumeSystemMethodID is null...\n"); + return TSK_ERR; + } + + jlong objIdj = m_jniEnv->CallLongMethod(m_javaDbObj, m_addVolumeSystemMethodID, + poolObjIdj, TSK_VS_TYPE_APFS, pool_info->img_offset, (uint64_t)pool_info->block_size); + objId = (int64_t)objIdj; + printf("New pool volume system object ID: %lld\n", objId); + fflush(stdout); + return TSK_OK; } @@ -181,6 +263,26 @@ TSK_RETVAL_ENUM TskAutoDbJava::addPoolVolumeInfo(const TSK_POOL_VOLUME_INFO* pool_vol, int64_t parObjId, int64_t& objId) { printf("addPoolVolumeInfo\n"); + + //objId, (int)pool_vol->index, pool_vol->block, pool_vol->num_blocks, + // pool_vol->desc, pool_vol->flags); + if (m_addVolumeMethodID == NULL) { + printf("#### Yikes m_addVolumeMethodID is null...\n"); + return TSK_ERR; + } + + jstring descj = m_jniEnv->NewStringUTF(pool_vol->desc); // TODO free? + + jlong objIdj = m_jniEnv->CallLongMethod(m_javaDbObj, m_addVolumeMethodID, + parObjId, (int64_t)pool_vol->index, pool_vol->block, pool_vol->num_blocks, + descj, pool_vol->flags); + objId = (int64_t)objIdj; + printf("New volume object ID: %lld\n", objId); + fflush(stdout); + + if (objId < 0) { + return TSK_ERR; + } return TSK_OK; } @@ -189,6 +291,24 @@ TSK_RETVAL_ENUM TskAutoDbJava::addVolumeInfo(const TSK_VS_PART_INFO* vs_part, int64_t parObjId, int64_t& objId) { printf("addVolumeInfo\n"); + + if (m_addVolumeMethodID == NULL) { + printf("#### Yikes m_addVolumeMethodID is null...\n"); + return TSK_ERR; + } + + jstring descj = m_jniEnv->NewStringUTF(vs_part->desc); // TODO free? + + jlong objIdj = m_jniEnv->CallLongMethod(m_javaDbObj, m_addVolumeMethodID, + parObjId, (uint64_t)vs_part->addr, vs_part->start, vs_part->len, + descj, vs_part->flags); + objId = (int64_t)objIdj; + printf("New volume object ID: %lld\n", objId); + fflush(stdout); + + if (objId < 0) { + return TSK_ERR; + } return TSK_OK; } @@ -196,6 +316,22 @@ TSK_RETVAL_ENUM TskAutoDbJava::addFsInfo(const TSK_FS_INFO* fs_info, int64_t parObjId, int64_t& objId) { printf("addFsInfo\n"); + + if (m_addFileSystemMethodID == NULL) { + printf("#### Yikes m_addFileSystemMethodID is null...\n"); + return TSK_ERR; + } + + jlong objIdj = m_jniEnv->CallLongMethod(m_javaDbObj, m_addFileSystemMethodID, + parObjId, fs_info->offset, (int)fs_info->ftype, (uint64_t)fs_info->block_size, + fs_info->block_count, fs_info->root_inum, fs_info->first_inum, + fs_info->last_inum); + objId = (int64_t)objIdj; + + if (objId < 0) { + return TSK_ERR; + } + return TSK_OK; } @@ -446,10 +582,8 @@ TskAutoDbJava::addImageDetails(const char* deviceId) } free(img_ptrs); #endif - printf("Returning error from end of addImageDetails\n"); // TODO TODO - fflush(stdout); - return 1; - //return 0; + + return 0; } @@ -568,6 +702,11 @@ TskAutoDbJava::filterFs(TSK_FS_INFO * fs_info) setFileFilterFlags(filterFlags); + + printf("Returning TSK_FILTER_STOP from the fs method\n"); // TODO TODO + fflush(stdout); + return TSK_FILTER_STOP; + return TSK_FILTER_CONT; } diff --git a/bindings/java/jni/auto_db_java.h b/bindings/java/jni/auto_db_java.h index d6c53854b0172212aaa057c81b998e6e95dc2eef..c5289b0d9cb99232c0ad11abdb36499d781050b3 100644 --- a/bindings/java/jni/auto_db_java.h +++ b/bindings/java/jni/auto_db_java.h @@ -143,6 +143,10 @@ class TskAutoDbJava :public TskAuto { jobject m_javaDbObj; jmethodID m_addImageMethodID = NULL; jmethodID m_addImageNameMethodID = NULL; + jmethodID m_addVolumeSystemMethodID = NULL; + jmethodID m_addVolumeMethodID = NULL; + jmethodID m_addPoolMethodID = NULL; + jmethodID m_addFileSystemMethodID = NULL; // prevent copying until we add proper logic to handle it diff --git a/bindings/java/src/org/sleuthkit/datamodel/JniDbHelper.java b/bindings/java/src/org/sleuthkit/datamodel/JniDbHelper.java index 4a992be4ddc59a6911154bf90583135631209c62..1052df284815aa1fd085827fa592804bb4962116 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/JniDbHelper.java +++ b/bindings/java/src/org/sleuthkit/datamodel/JniDbHelper.java @@ -53,7 +53,7 @@ long addImageInfo(int type, long ssize, String timezone, System.out.println("\n@@@ In Java! addImageInfo"); System.out.flush(); try { - return caseDb.addImageJNI(TskData.TSK_IMG_TYPE_ENUM.valueOf(type), ssize, size, "displayName", + return caseDb.addImageJNI(TskData.TSK_IMG_TYPE_ENUM.valueOf(type), ssize, size, timezone, md5, sha1, sha256, deviceId, trans); } catch (TskCoreException ex) { ex.printStackTrace(); @@ -70,4 +70,47 @@ int addImageName(long objId, String name, long sequence) { return -1; } } + + long addVsInfo(long parentObjId, int vsType, long imgOffset, long blockSize) { + try { + VolumeSystem vs = caseDb.addVolumeSystem(parentObjId, TskData.TSK_VS_TYPE_ENUM.valueOf(vsType), imgOffset, blockSize, trans); + return vs.getId(); + } catch (TskCoreException ex) { + ex.printStackTrace(); + return -1; + } + } + + long addVolume(long parentObjId, long addr, long start, long length, String desc, + long flags) { + try { + Volume vol = caseDb.addVolume(parentObjId, addr, start, length, desc, flags, trans); + return vol.getId(); + } catch (TskCoreException ex) { + ex.printStackTrace(); + return -1; + } + } + // TskData.TSK_POOL_TYPE_ENUM + long addPool(long parentObjId, int poolType) { + try { + Pool pool = caseDb.addPool(parentObjId, TskData.TSK_POOL_TYPE_ENUM.valueOf(poolType), trans); + return pool.getId(); + } catch (TskCoreException ex) { + ex.printStackTrace(); + return -1; + } + } + + long addFileSystem(long parentObjId, long imgOffset, int fsType, long blockSize, long blockCount, + long rootInum, long firstInum, long lastInum) { + try { + FileSystem fs = caseDb.addFileSystem(parentObjId, imgOffset, TskData.TSK_FS_TYPE_ENUM.valueOf(fsType), blockSize, blockCount, + rootInum, firstInum, lastInum, "", trans); + return fs.getId(); + } catch (TskCoreException ex) { + ex.printStackTrace(); + return -1; + } + } } diff --git a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java index 3238198a7c394552618349bcee0579d7ef76503a..1418dbf82de57743ca853213a0865318d2f54084 100644 --- a/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java +++ b/bindings/java/src/org/sleuthkit/datamodel/SleuthkitCase.java @@ -10978,7 +10978,7 @@ private List<IngestModuleInfo> getIngestModules(int ingestJobId, CaseDbConnectio * * @throws TskCoreException */ - long addImageJNI(TskData.TSK_IMG_TYPE_ENUM type, long sectorSize, long size, String displayName, + long addImageJNI(TskData.TSK_IMG_TYPE_ENUM type, long sectorSize, long size, String timezone, String md5, String sha1, String sha256, String deviceId, CaseDbTransaction transaction) throws TskCoreException { @@ -11003,7 +11003,7 @@ long addImageJNI(TskData.TSK_IMG_TYPE_ENUM type, long sectorSize, long size, Str preparedStatement.setString(6, md5); preparedStatement.setString(7, sha1); preparedStatement.setString(8, sha256); - preparedStatement.setString(9, displayName); + preparedStatement.setString(9, ""); connection.executeUpdate(preparedStatement); // Add a row to data_source_info @@ -11016,7 +11016,7 @@ long addImageJNI(TskData.TSK_IMG_TYPE_ENUM type, long sectorSize, long size, Str return newObjId; } catch (SQLException ex) { - throw new TskCoreException(String.format("Error adding image with display name %s to database", displayName), ex); + throw new TskCoreException(String.format("Error adding image to database"), ex); } finally { closeStatement(statement); releaseSingleUserCaseWriteLock();