From afed1bb5c2f1b581c0b99dfa32acc942e686dfd9 Mon Sep 17 00:00:00 2001 From: Brian Carrier <carrier@sleuthkit.org> Date: Fri, 23 Sep 2011 15:39:02 +0000 Subject: [PATCH] added more tags to data strutures --- bindings/java/jni/.indent.pro | 1 + bindings/java/jni/Makefile.am | 2 +- bindings/java/jni/dataModel_SleuthkitJNI.cpp | 395 +++++++++++-------- tsk3/fs/fs_open.c | 3 +- tsk3/vs/bsd.c | 2 + tsk3/vs/dos.c | 2 + tsk3/vs/gpt.c | 2 + tsk3/vs/mac.c | 2 + tsk3/vs/mm_part.c | 8 +- tsk3/vs/sun.c | 2 + tsk3/vs/tsk_vs.h | 5 +- 11 files changed, 243 insertions(+), 181 deletions(-) create mode 100644 bindings/java/jni/.indent.pro diff --git a/bindings/java/jni/.indent.pro b/bindings/java/jni/.indent.pro new file mode 100644 index 000000000..536b25437 --- /dev/null +++ b/bindings/java/jni/.indent.pro @@ -0,0 +1 @@ +-kr -psl -nce -ip2 -nlp -nut diff --git a/bindings/java/jni/Makefile.am b/bindings/java/jni/Makefile.am index c0a3921a4..5124ceb34 100644 --- a/bindings/java/jni/Makefile.am +++ b/bindings/java/jni/Makefile.am @@ -6,7 +6,7 @@ libtsk3jni_la_SOURCES = dataModel_SleuthkitJNI.cpp dataModel_SleuthkitJNI.h \ tskAutoDbJNI.cpp tskAutoDbJNI.h indent: - indent *.c *.h + indent *.cpp *.h clean-local: -rm -f *.c~ *.h~ diff --git a/bindings/java/jni/dataModel_SleuthkitJNI.cpp b/bindings/java/jni/dataModel_SleuthkitJNI.cpp index ae18e61b8..44794ba2e 100644 --- a/bindings/java/jni/dataModel_SleuthkitJNI.cpp +++ b/bindings/java/jni/dataModel_SleuthkitJNI.cpp @@ -18,7 +18,9 @@ /** Throw an TSK exception back up to the Java code with a specific message. */ -static void throwTskError(JNIEnv *env, const char *msg){ +static void +throwTskError(JNIEnv * env, const char *msg) +{ jclass exception; exception = env->FindClass("org/sleuthkit/datamodel/TskException"); @@ -28,66 +30,66 @@ static void throwTskError(JNIEnv *env, const char *msg){ /* Throw and exception to java * @param the java environment to send the exception to */ -static void throwTskError(JNIEnv *env){ - const char* msg = tsk_error_get(); +static void +throwTskError(JNIEnv * env) +{ + const char *msg = tsk_error_get(); throwTskError(env, msg); } /***** Methods to cast from jlong to data type and check tags They all throw an exception if the incorrect type is passed in. *****/ -static TSK_IMG_INFO * -castImgInfo(JNIEnv *env, jlong ptr) +static TSK_IMG_INFO * +castImgInfo(JNIEnv * env, jlong ptr) { - TSK_IMG_INFO *lcl = (TSK_IMG_INFO *)ptr; + TSK_IMG_INFO *lcl = (TSK_IMG_INFO *) ptr; if (lcl->tag != TSK_IMG_INFO_TAG) { - throwTskError(env, "Invalid IMG_INFO object"); + throwTskError(env, "Invalid IMG_INFO object"); } return lcl; } -static TSK_VS_INFO * -castVsInfo(JNIEnv *env, jlong ptr) +static TSK_VS_INFO * +castVsInfo(JNIEnv * env, jlong ptr) { - TSK_VS_INFO *lcl = (TSK_VS_INFO *)ptr; -/* if (lcl->tag != TSK_VS_INFO_TAG) { - throwTskError(env, "Invalid VS_INFO object"); + TSK_VS_INFO *lcl = (TSK_VS_INFO *) ptr; + if (lcl->tag != TSK_VS_INFO_TAG) { + throwTskError(env, "Invalid VS_INFO object"); } - - */ + return lcl; } -static TSK_VS_PART_INFO * -castVsPartInfo(JNIEnv *env, jlong ptr) +static TSK_VS_PART_INFO * +castVsPartInfo(JNIEnv * env, jlong ptr) { - TSK_VS_PART_INFO *lcl = (TSK_VS_PART_INFO *)ptr; - /* if (lcl->tag != TSK_VS_PART_INFO_TAG) { - throwTskError(env, "Invalid VS_PART_INFO object"); - } - - */ + TSK_VS_PART_INFO *lcl = (TSK_VS_PART_INFO *) ptr; + if (lcl->tag != TSK_VS_PART_INFO_TAG) { + throwTskError(env, "Invalid VS_PART_INFO object"); + } + return lcl; } -static TSK_FS_INFO * -castFsInfo(JNIEnv *env, jlong ptr) +static TSK_FS_INFO * +castFsInfo(JNIEnv * env, jlong ptr) { - TSK_FS_INFO *lcl = (TSK_FS_INFO *)ptr; + TSK_FS_INFO *lcl = (TSK_FS_INFO *) ptr; if (lcl->tag != TSK_FS_INFO_TAG) { - throwTskError(env, "Invalid FS_INFO object"); + throwTskError(env, "Invalid FS_INFO object"); } return lcl; } -static TSK_FS_FILE * -castFsFileInfo(JNIEnv *env, jlong ptr) +static TSK_FS_FILE * +castFsFileInfo(JNIEnv * env, jlong ptr) { - TSK_FS_FILE *lcl = (TSK_FS_FILE *)ptr; + TSK_FS_FILE *lcl = (TSK_FS_FILE *) ptr; if (lcl->tag != TSK_FS_FILE_TAG) { - throwTskError(env, "Invalid FS_FILE object"); + throwTskError(env, "Invalid FS_FILE object"); } return lcl; } @@ -104,34 +106,38 @@ castFsFileInfo(JNIEnv *env, jlong ptr) */ // @@@ We should remove this method in favor of the multi-step approach. JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_loaddbNat -(JNIEnv *env, jclass obj, jobjectArray paths, jint num_imgs, jstring outDir){ + (JNIEnv * env, jclass obj, jobjectArray paths, jint num_imgs, + jstring outDir) { TskAutoDb tskDb; //change to true when autopsy needs the block table. tskDb.createBlockMap(false); jboolean isCopy; - + // pull the strings into the C++ world. - char *cOutDir8 = (char *)env->GetStringUTFChars(outDir, &isCopy); - if(cOutDir8 == NULL){ + char *cOutDir8 = (char *) env->GetStringUTFChars(outDir, &isCopy); + if (cOutDir8 == NULL) { throwTskError(env); return 1; } - + // get pointers to each of the file names - char ** imagepaths8 = (char**) tsk_malloc(num_imgs * sizeof(char *)); - if(imagepaths8 == NULL){ + char **imagepaths8 = (char **) tsk_malloc(num_imgs * sizeof(char *)); + if (imagepaths8 == NULL) { throwTskError(env); return 1; } - for(int i =0; i < num_imgs; i++){ - imagepaths8[i] = (char *)env->GetStringUTFChars((jstring)env->GetObjectArrayElement(paths, i), &isCopy); + for (int i = 0; i < num_imgs; i++) { + imagepaths8[i] = + (char *) env->GetStringUTFChars((jstring) env-> + GetObjectArrayElement(paths, i), &isCopy); // @@@ Add error checking here } - + // open and process the image - if (tskDb.openImageUtf8(num_imgs, imagepaths8, TSK_IMG_TYPE_DETECT, 0, cOutDir8)) { + if (tskDb.openImageUtf8(num_imgs, imagepaths8, TSK_IMG_TYPE_DETECT, 0, + cOutDir8)) { throwTskError(env, tsk_error_get()); return 1; } @@ -140,16 +146,17 @@ JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_loaddbNat throwTskError(env, tsk_error_get()); return 1; } - + // cleanup - for(int i = 0; i < num_imgs; i++){ - env->ReleaseStringUTFChars((jstring)env->GetObjectArrayElement(paths, i), imagepaths8[i]); + for (int i = 0; i < num_imgs; i++) { + env->ReleaseStringUTFChars((jstring) env-> + GetObjectArrayElement(paths, i), imagepaths8[i]); } free(imagepaths8); env->ReleaseStringUTFChars(outDir, cOutDir8); - + tskDb.closeImage(); - + return 0; } @@ -159,21 +166,23 @@ JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_loaddbNat * @param env pointer to java environment this was called from * @param timezone timezone for the image */ -JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_startloaddbNat -(JNIEnv *env, jclass obj, jstring timezone){ +JNIEXPORT jlong JNICALL + Java_org_sleuthkit_datamodel_SleuthkitJNI_startloaddbNat(JNIEnv * env, + jclass obj, jstring timezone) { jboolean isCopy; char envstr[32]; - snprintf(envstr, 32, "TZ=%s", env->GetStringUTFChars(timezone, &isCopy)); - if (0 != putenv(envstr)) { - throwTskError(env, "Error setting timezone environment"); - return 1; + snprintf(envstr, 32, "TZ=%s", env->GetStringUTFChars(timezone, + &isCopy)); + if (0 != putenv(envstr)) { + throwTskError(env, "Error setting timezone environment"); + return 1; } /* we should be checking this somehow */ TZSET(); TskAutoDbJNI *tskDb = new TskAutoDbJNI(); - return (jlong)tskDb; + return (jlong) tskDb; } @@ -188,39 +197,45 @@ JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_startloaddbNat * @param num_imgs number of image parts * @param outDir the output directory */ -JNIEXPORT void JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_runloaddbNat -(JNIEnv * env, jclass obj, jlong process, jobjectArray paths, jint num_imgs, jstring outDir){ +JNIEXPORT void JNICALL + Java_org_sleuthkit_datamodel_SleuthkitJNI_runloaddbNat(JNIEnv * env, + jclass obj, jlong process, jobjectArray paths, jint num_imgs, + jstring outDir) { jboolean isCopy; - - TskAutoDbJNI * tskDb = ((TskAutoDbJNI*)process); + + TskAutoDbJNI *tskDb = ((TskAutoDbJNI *) process); if (tskDb->m_tag != TSK_AUTO_TAG) { - throwTskError(env, "runLoadDbNat: Invalid AutoDbJNI object passed in"); + throwTskError(env, + "runLoadDbNat: Invalid AutoDbJNI object passed in"); return; } //change to true when autopsy needs the block table. tskDb->createBlockMap(false); - + // move the strings into the C++ world - char *cOutDir8 = (char *)env->GetStringUTFChars(outDir, &isCopy); - if(cOutDir8 == NULL){ + char *cOutDir8 = (char *) env->GetStringUTFChars(outDir, &isCopy); + if (cOutDir8 == NULL) { throwTskError(env); return; } - + // get pointers to each of the file names - char ** imagepaths8 = (char**) tsk_malloc(num_imgs * sizeof(char *)); - if(imagepaths8 == NULL){ + char **imagepaths8 = (char **) tsk_malloc(num_imgs * sizeof(char *)); + if (imagepaths8 == NULL) { throwTskError(env); return; } - for(int i =0; i < num_imgs; i++){ - imagepaths8[i] = (char *)env->GetStringUTFChars((jstring)env->GetObjectArrayElement(paths, i), &isCopy); + for (int i = 0; i < num_imgs; i++) { + imagepaths8[i] = + (char *) env->GetStringUTFChars((jstring) env-> + GetObjectArrayElement(paths, i), &isCopy); } // process the images - if (tskDb->openImageUtf8((int)num_imgs, imagepaths8, TSK_IMG_TYPE_DETECT, 0, cOutDir8)) { + if (tskDb->openImageUtf8((int) num_imgs, imagepaths8, + TSK_IMG_TYPE_DETECT, 0, cOutDir8)) { throwTskError(env, tsk_error_get()); } @@ -228,13 +243,14 @@ JNIEXPORT void JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_runloaddbNat tskDb->closeImage(); throwTskError(env, tsk_error_get()); } - + // cleanup - for(int i = 0; i < num_imgs; i++){ - env->ReleaseStringUTFChars((jstring)env->GetObjectArrayElement(paths, i), imagepaths8[i]); + for (int i = 0; i < num_imgs; i++) { + env->ReleaseStringUTFChars((jstring) env-> + GetObjectArrayElement(paths, i), imagepaths8[i]); } free(imagepaths8); - + env->ReleaseStringUTFChars(outDir, cOutDir8); tskDb->closeImage(); } @@ -247,14 +263,16 @@ JNIEXPORT void JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_runloaddbNat * @param obj the java object this was called from * @param process the loaddb proces created by startloaddbNat */ -JNIEXPORT void JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_stoploaddbNat -(JNIEnv * env, jclass obj, jlong process) { - TskAutoDbJNI * tskDb = ((TskAutoDbJNI*)process); +JNIEXPORT void JNICALL + Java_org_sleuthkit_datamodel_SleuthkitJNI_stoploaddbNat(JNIEnv * env, + jclass obj, jlong process) { + TskAutoDbJNI *tskDb = ((TskAutoDbJNI *) process); if (tskDb->m_tag != TSK_AUTO_TAG) { - throwTskError(env, "stopLoadDbNat: Invalid AutoDbJNI object passed in"); + throwTskError(env, + "stopLoadDbNat: Invalid AutoDbJNI object passed in"); return; } - tskDb->cancelProcess(); + tskDb->cancelProcess(); } @@ -266,35 +284,41 @@ JNIEXPORT void JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_stoploaddbNat * @param paths the paths to the image parts * @param num_imgs number of image parts */ -JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_openImageNat -(JNIEnv *env, jclass obj, jobjectArray paths, jint num_imgs){ - TSK_IMG_INFO * img_info; - jboolean isCopy; - +JNIEXPORT jlong JNICALL + Java_org_sleuthkit_datamodel_SleuthkitJNI_openImageNat(JNIEnv * env, + jclass obj, jobjectArray paths, jint num_imgs) { + TSK_IMG_INFO *img_info; + jboolean isCopy; + // get pointers to each of the file names - char ** imagepaths8 = (char**) tsk_malloc(num_imgs * sizeof(char *)); - if(imagepaths8 == NULL){ + char **imagepaths8 = (char **) tsk_malloc(num_imgs * sizeof(char *)); + if (imagepaths8 == NULL) { throwTskError(env); return NULL; } - for(int i =0; i < num_imgs; i++){ - imagepaths8[i] = (char *)env->GetStringUTFChars((jstring)env->GetObjectArrayElement(paths, i), &isCopy); + for (int i = 0; i < num_imgs; i++) { + imagepaths8[i] = + (char *) env->GetStringUTFChars((jstring) env-> + GetObjectArrayElement(paths, i), &isCopy); // @@@ ERror check } // open the image - img_info = tsk_img_open_utf8((int)num_imgs, imagepaths8, TSK_IMG_TYPE_DETECT, 0); - if(img_info == NULL){ + img_info = + tsk_img_open_utf8((int) num_imgs, imagepaths8, TSK_IMG_TYPE_DETECT, + 0); + if (img_info == NULL) { throwTskError(env, tsk_error_get()); } // cleanup - for(int i = 0; i < num_imgs; i++){ - env->ReleaseStringUTFChars((jstring)env->GetObjectArrayElement(paths, i), imagepaths8[i]); + for (int i = 0; i < num_imgs; i++) { + env->ReleaseStringUTFChars((jstring) env-> + GetObjectArrayElement(paths, i), imagepaths8[i]); } free(imagepaths8); - - return (jlong)img_info; + + return (jlong) img_info; } @@ -308,15 +332,15 @@ JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_openImageNat * @param vsOffset the offset of the volume system in bytes */ JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_openVsNat -(JNIEnv * env, jclass obj, jlong a_img_info, jlong vsOffset){ - TSK_IMG_INFO * img_info = castImgInfo(env, a_img_info); - TSK_VS_INFO * vs_info; + (JNIEnv * env, jclass obj, jlong a_img_info, jlong vsOffset) { + TSK_IMG_INFO *img_info = castImgInfo(env, a_img_info); + TSK_VS_INFO *vs_info; vs_info = tsk_vs_open(img_info, vsOffset, TSK_VS_TYPE_DETECT); - if(vs_info == NULL){ + if (vs_info == NULL) { throwTskError(env, tsk_error_get()); } - return (jlong)vs_info; + return (jlong) vs_info; } @@ -328,16 +352,17 @@ JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_openVsNat * @param a_vs_info the pointer to the parent vs object * @param vol_id the id of the volume to get */ -JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_openVolNat -(JNIEnv * env, jclass obj, jlong a_vs_info, jlong vol_id){ - TSK_VS_INFO * vs_info = castVsInfo(env, a_vs_info); - const TSK_VS_PART_INFO * vol_part_info; - +JNIEXPORT jlong JNICALL + Java_org_sleuthkit_datamodel_SleuthkitJNI_openVolNat(JNIEnv * env, + jclass obj, jlong a_vs_info, jlong vol_id) { + TSK_VS_INFO *vs_info = castVsInfo(env, a_vs_info); + const TSK_VS_PART_INFO *vol_part_info; + vol_part_info = tsk_vs_part_get(vs_info, (TSK_PNUM_T) vol_id); - if(vol_part_info == NULL){ + if (vol_part_info == NULL) { throwTskError(env, tsk_error_get()); } - return (jlong)vol_part_info; + return (jlong) vol_part_info; } @@ -350,15 +375,17 @@ JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_openVolNat * @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){ - TSK_IMG_INFO * img_info = castImgInfo(env, a_img_info); - TSK_FS_INFO * fs_info; - - fs_info = tsk_fs_open_img(img_info, (TSK_OFF_T) fs_offset, TSK_FS_TYPE_DETECT); - if(fs_info == NULL){ + (JNIEnv * env, jclass obj, jlong a_img_info, jlong fs_offset) { + TSK_IMG_INFO *img_info = castImgInfo(env, a_img_info); + TSK_FS_INFO *fs_info; + + fs_info = + tsk_fs_open_img(img_info, (TSK_OFF_T) fs_offset, + TSK_FS_TYPE_DETECT); + if (fs_info == NULL) { throwTskError(env, tsk_error_get()); } - return (jlong)fs_info; + return (jlong) fs_info; } @@ -370,17 +397,18 @@ JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_openFsNat * @param a_fs_info the pointer to the parent file system object * @param file_id id of the file to open */ -JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_openFileNat -(JNIEnv * env, jclass obj, jlong a_fs_info, jlong file_id){ - TSK_FS_INFO * fs_info = castFsInfo(env, a_fs_info); - TSK_FS_FILE * file_info; +JNIEXPORT jlong JNICALL + Java_org_sleuthkit_datamodel_SleuthkitJNI_openFileNat(JNIEnv * env, + jclass obj, jlong a_fs_info, jlong file_id) { + TSK_FS_INFO *fs_info = castFsInfo(env, a_fs_info); + TSK_FS_FILE *file_info; file_info = tsk_fs_file_open_meta(fs_info, NULL, (TSK_INUM_T) file_id); - if(file_info == NULL){ + if (file_info == NULL) { throwTskError(env, tsk_error_get()); } - - return (jlong)file_info; + + return (jlong) file_info; } @@ -391,17 +419,18 @@ JNIEXPORT jlong JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_openFileNat * @returns Pointer to java byte array or exception if there is an error */ static jbyteArray -copyBufToByteArray(JNIEnv *env, const char *buf, ssize_t len) { +copyBufToByteArray(JNIEnv * env, const char *buf, ssize_t len) +{ jbyteArray return_array = env->NewByteArray(len); // @@@ Error check - - jbyte * jBytes = env->GetByteArrayElements(return_array, 0); + + jbyte *jBytes = env->GetByteArrayElements(return_array, 0); // @@@ error check - - for(int i = 0; i<len; i++){ + + for (int i = 0; i < len; i++) { jBytes[i] = buf[i]; } - + env->ReleaseByteArrayElements(return_array, jBytes, 0); return return_array; @@ -416,28 +445,30 @@ copyBufToByteArray(JNIEnv *env, const char *buf, ssize_t len) { * @param offset the offset in bytes to start at * @param len number of bytes to read */ -JNIEXPORT jbyteArray JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_readImgNat -(JNIEnv * env, jclass obj, jlong a_img_info, jlong offset, jlong len){ - char * buf = (char *) tsk_malloc((size_t)len); - if(buf == NULL){ +JNIEXPORT jbyteArray JNICALL + Java_org_sleuthkit_datamodel_SleuthkitJNI_readImgNat(JNIEnv * env, + jclass obj, jlong a_img_info, jlong offset, jlong len) { + char *buf = (char *) tsk_malloc((size_t) len); + if (buf == NULL) { throwTskError(env, tsk_error_get()); return NULL; } - - TSK_IMG_INFO * img_info = castImgInfo(env, a_img_info); - ssize_t retval = tsk_img_read(img_info, (TSK_OFF_T) offset, buf, (size_t) len); + TSK_IMG_INFO *img_info = castImgInfo(env, a_img_info); + + ssize_t retval = + tsk_img_read(img_info, (TSK_OFF_T) offset, buf, (size_t) len); if (retval == -1) { throwTskError(env, tsk_error_get()); } - + // package it up for return jbyteArray return_array = copyBufToByteArray(env, buf, retval); free(buf); return return_array; } - + /* * Read bytes from the given volume system * @return array of bytes read from the volume system @@ -447,20 +478,23 @@ JNIEXPORT jbyteArray JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_readImgNa * @param offset the offset in bytes to start at * @param len number of bytes to read */ -JNIEXPORT jbyteArray JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_readVsNat -(JNIEnv * env, jclass obj, jlong a_vs_info, jlong offset, jlong len){ - char * buf = (char *) tsk_malloc((size_t) len); - if(buf == NULL){ +JNIEXPORT jbyteArray JNICALL + Java_org_sleuthkit_datamodel_SleuthkitJNI_readVsNat(JNIEnv * env, + jclass obj, jlong a_vs_info, jlong offset, jlong len) { + char *buf = (char *) tsk_malloc((size_t) len); + if (buf == NULL) { throwTskError(env); return NULL; } - TSK_VS_INFO * vs_info = castVsInfo(env, a_vs_info); + TSK_VS_INFO *vs_info = castVsInfo(env, a_vs_info); - ssize_t retval = tsk_vs_read_block(vs_info, (TSK_DADDR_T) offset, buf, (size_t) len); + ssize_t retval = + tsk_vs_read_block(vs_info, (TSK_DADDR_T) offset, buf, + (size_t) len); if (retval == -1) { throwTskError(env, tsk_error_get()); } - + // package it up for return jbyteArray return_array = copyBufToByteArray(env, buf, retval); free(buf); @@ -478,20 +512,23 @@ JNIEXPORT jbyteArray JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_readVsNat * @param len number of bytes to read */ -JNIEXPORT jbyteArray JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_readVolNat -(JNIEnv * env, jclass obj, jlong a_vol_info, jlong offset, jlong len){ - char * buf = (char *) tsk_malloc((size_t) len); - if(buf == NULL){ +JNIEXPORT jbyteArray JNICALL + Java_org_sleuthkit_datamodel_SleuthkitJNI_readVolNat(JNIEnv * env, + jclass obj, jlong a_vol_info, jlong offset, jlong len) { + char *buf = (char *) tsk_malloc((size_t) len); + if (buf == NULL) { throwTskError(env); return NULL; } - TSK_VS_PART_INFO * vol_part_info = castVsPartInfo(env, a_vol_info); + TSK_VS_PART_INFO *vol_part_info = castVsPartInfo(env, a_vol_info); - ssize_t retval = tsk_vs_part_read(vol_part_info, (TSK_OFF_T) offset, buf, (size_t) len); + ssize_t retval = + tsk_vs_part_read(vol_part_info, (TSK_OFF_T) offset, buf, + (size_t) len); if (retval == -1) { throwTskError(env, tsk_error_get()); } - + // package it up for return jbyteArray return_array = copyBufToByteArray(env, buf, retval); free(buf); @@ -508,20 +545,22 @@ JNIEXPORT jbyteArray JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_readVolNa * @param offset the offset in bytes to start at * @param len number of bytes to read */ -JNIEXPORT jbyteArray JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_readFsNat -(JNIEnv * env, jclass obj, jlong a_fs_info, jlong offset, jlong len){ - char * buf = (char *) tsk_malloc((size_t) len); - if(buf == NULL){ +JNIEXPORT jbyteArray JNICALL + Java_org_sleuthkit_datamodel_SleuthkitJNI_readFsNat(JNIEnv * env, + jclass obj, jlong a_fs_info, jlong offset, jlong len) { + char *buf = (char *) tsk_malloc((size_t) len); + if (buf == NULL) { throwTskError(env); return NULL; } - TSK_FS_INFO * fs_info = castFsInfo(env, a_fs_info); + TSK_FS_INFO *fs_info = castFsInfo(env, a_fs_info); - ssize_t retval = tsk_fs_read(fs_info, (TSK_OFF_T) offset, buf, (size_t) len); + ssize_t retval = + tsk_fs_read(fs_info, (TSK_OFF_T) offset, buf, (size_t) len); if (retval == -1) { throwTskError(env, tsk_error_get()); } - + // package it up for return jbyteArray return_array = copyBufToByteArray(env, buf, retval); free(buf); @@ -538,21 +577,24 @@ JNIEXPORT jbyteArray JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_readFsNat * @param offset the offset in bytes to start at * @param len number of bytes to read */ -JNIEXPORT jbyteArray JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_readFileNat -(JNIEnv * env, jclass obj, jlong a_file_info, jlong offset, jlong len){ - char * buf = (char *) tsk_malloc((size_t) len); - if(buf == NULL){ +JNIEXPORT jbyteArray JNICALL + Java_org_sleuthkit_datamodel_SleuthkitJNI_readFileNat(JNIEnv * env, + jclass obj, jlong a_file_info, jlong offset, jlong len) { + char *buf = (char *) tsk_malloc((size_t) len); + if (buf == NULL) { throwTskError(env); return NULL; } - - TSK_FS_FILE * file_info = castFsFileInfo(env, a_file_info); - ssize_t retval = tsk_fs_file_read(file_info, (TSK_OFF_T) offset, buf, (size_t) len, TSK_FS_FILE_READ_FLAG_NONE); + TSK_FS_FILE *file_info = castFsFileInfo(env, a_file_info); + + ssize_t retval = + tsk_fs_file_read(file_info, (TSK_OFF_T) offset, buf, (size_t) len, + TSK_FS_FILE_READ_FLAG_NONE); if (retval == -1) { throwTskError(env, tsk_error_get()); } - + // package it up for return jbyteArray return_array = copyBufToByteArray(env, buf, retval); free(buf); @@ -565,9 +607,10 @@ JNIEXPORT jbyteArray JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_readFileN * @param obj the java object this was called from * @param a_img_info the pointer to the image object */ -JNIEXPORT void JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_closeImgNat -(JNIEnv * env, jclass obj, jlong a_img_info){ - TSK_IMG_INFO * img_info = castImgInfo(env, a_img_info); +JNIEXPORT void JNICALL + Java_org_sleuthkit_datamodel_SleuthkitJNI_closeImgNat(JNIEnv * env, + jclass obj, jlong a_img_info) { + TSK_IMG_INFO *img_info = castImgInfo(env, a_img_info); tsk_img_close(img_info); } @@ -578,8 +621,8 @@ JNIEXPORT void JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_closeImgNat * @param a_vs_info the pointer to the volume system object */ JNIEXPORT void JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_closeVsNat -(JNIEnv *env, jclass obj, jlong a_vs_info){ - TSK_VS_INFO * vs_info = castVsInfo(env, a_vs_info); + (JNIEnv * env, jclass obj, jlong a_vs_info) { + TSK_VS_INFO *vs_info = castVsInfo(env, a_vs_info); tsk_vs_close(vs_info); } @@ -590,8 +633,8 @@ JNIEXPORT void JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_closeVsNat * @param a_fs_info the pointer to the file system object */ JNIEXPORT void JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_closeFsNat -(JNIEnv * env, jclass obj, jlong a_fs_info){ - TSK_FS_INFO * fs_info = castFsInfo(env, a_fs_info); + (JNIEnv * env, jclass obj, jlong a_fs_info) { + TSK_FS_INFO *fs_info = castFsInfo(env, a_fs_info); tsk_fs_close(fs_info); } @@ -601,9 +644,10 @@ JNIEXPORT void JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_closeFsNat * @param obj the java object this was called from * @param a_file_info the pointer to the file object */ -JNIEXPORT void JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_closeFileNat -(JNIEnv * env, jclass obj, jlong a_file_info){ - TSK_FS_FILE * file_info = castFsFileInfo(env, a_file_info); +JNIEXPORT void JNICALL + Java_org_sleuthkit_datamodel_SleuthkitJNI_closeFileNat(JNIEnv * env, + jclass obj, jlong a_file_info) { + TSK_FS_FILE *file_info = castFsFileInfo(env, a_file_info); tsk_fs_file_close(file_info); } @@ -613,9 +657,10 @@ JNIEXPORT void JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_closeFileNat * @param env pointer to java environment this was called from * @param obj the java object this was called from */ -JNIEXPORT jstring JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_getVersionNat -(JNIEnv * env, jclass obj){ - const char * cversion = tsk_version_get_str(); +JNIEXPORT jstring JNICALL + Java_org_sleuthkit_datamodel_SleuthkitJNI_getVersionNat(JNIEnv * env, + jclass obj) { + const char *cversion = tsk_version_get_str(); jstring jversion = (*env).NewStringUTF(cversion); - return jversion; + return jversion; } diff --git a/tsk3/fs/fs_open.c b/tsk3/fs/fs_open.c index 0c623fd1e..b5f84878e 100644 --- a/tsk3/fs/fs_open.c +++ b/tsk3/fs/fs_open.c @@ -54,7 +54,8 @@ tsk_fs_open_vol(const TSK_VS_PART_INFO * a_part_info, tsk_error_set_errstr("tsk_fs_open_vol: Null vpart handle"); return NULL; } - else if (a_part_info->vs == NULL) { + else if ((a_part_info->vs == NULL) + || (a_part_info->vs->tag != TSK_VS_INFO_TAG)) { tsk_error_reset(); tsk_error_set_errno(TSK_ERR_FS_ARG); tsk_error_set_errstr("tsk_fs_open_vol: Null vs handle"); diff --git a/tsk3/vs/bsd.c b/tsk3/vs/bsd.c index e37adfacc..eeeeea093 100644 --- a/tsk3/vs/bsd.c +++ b/tsk3/vs/bsd.c @@ -200,6 +200,7 @@ bsd_load_table(TSK_VS_INFO * a_vs) static void bsd_close(TSK_VS_INFO * a_vs) { + a_vs->tag = 0; tsk_vs_part_free(a_vs); free(a_vs); } @@ -224,6 +225,7 @@ tsk_vs_bsd_open(TSK_IMG_INFO * img_info, TSK_DADDR_T offset) vs->img_info = img_info; vs->vstype = TSK_VS_TYPE_BSD; + vs->tag = TSK_VS_INFO_TAG; /* use the offset provided */ vs->offset = offset; diff --git a/tsk3/vs/dos.c b/tsk3/vs/dos.c index a5d71ec66..a9ef51a03 100644 --- a/tsk3/vs/dos.c +++ b/tsk3/vs/dos.c @@ -1019,6 +1019,7 @@ dos_load_prim_table(TSK_VS_INFO * vs, uint8_t test) static void dos_close(TSK_VS_INFO * vs) { + vs->tag = 0; tsk_vs_part_free(vs); free(vs); } @@ -1047,6 +1048,7 @@ tsk_vs_dos_open(TSK_IMG_INFO * img_info, TSK_DADDR_T offset, uint8_t test) return NULL; vs->vstype = TSK_VS_TYPE_DOS; + vs->tag = TSK_VS_INFO_TAG; vs->img_info = img_info; vs->offset = offset; diff --git a/tsk3/vs/gpt.c b/tsk3/vs/gpt.c index 4632c091b..e6fd07635 100644 --- a/tsk3/vs/gpt.c +++ b/tsk3/vs/gpt.c @@ -267,6 +267,7 @@ gpt_load_table(TSK_VS_INFO * vs) static void gpt_close(TSK_VS_INFO * vs) { + vs->tag = 0; tsk_vs_part_free(vs); free(vs); } @@ -285,6 +286,7 @@ tsk_vs_gpt_open(TSK_IMG_INFO * img_info, TSK_DADDR_T offset) vs->img_info = img_info; vs->vstype = TSK_VS_TYPE_GPT; + vs->tag = TSK_VS_INFO_TAG; /* If an offset was given, then use that too */ vs->offset = offset; diff --git a/tsk3/vs/mac.c b/tsk3/vs/mac.c index 61a4b416e..88a20d4b6 100644 --- a/tsk3/vs/mac.c +++ b/tsk3/vs/mac.c @@ -163,6 +163,7 @@ mac_load_table(TSK_VS_INFO * vs) static void mac_close(TSK_VS_INFO * vs) { + vs->tag = 0; tsk_vs_part_free(vs); free(vs); } @@ -185,6 +186,7 @@ tsk_vs_mac_open(TSK_IMG_INFO * img_info, TSK_DADDR_T offset) vs->img_info = img_info; vs->vstype = TSK_VS_TYPE_MAC; + vs->tag = TSK_VS_INFO_TAG; /* If an offset was given, then use that too */ vs->offset = offset; diff --git a/tsk3/vs/mm_part.c b/tsk3/vs/mm_part.c index 38d0786c5..cb65ea6a2 100644 --- a/tsk3/vs/mm_part.c +++ b/tsk3/vs/mm_part.c @@ -50,6 +50,7 @@ tsk_vs_part_add(TSK_VS_INFO * a_vs, TSK_DADDR_T a_start, TSK_DADDR_T len, part->flags = type; part->vs = a_vs; part->addr = 0; + part->tag = TSK_VS_PART_INFO_TAG; /* is this the first entry in the list */ if (a_vs->part_list == NULL) { @@ -180,7 +181,7 @@ tsk_vs_part_free(TSK_VS_INFO * a_vs) while (part) { if (part->desc) free(part->desc); - + part->tag = 0; part2 = part->next; free(part); part = part2; @@ -203,10 +204,11 @@ tsk_vs_part_get(const TSK_VS_INFO * a_vs, TSK_PNUM_T a_idx) { TSK_VS_PART_INFO *part; - if (a_vs == NULL) { + if ((a_vs == NULL) || (a_vs->tag != TSK_VS_INFO_TAG)) { tsk_error_reset(); tsk_error_set_errno(TSK_ERR_VS_ARG); - tsk_error_set_errstr("tsk_vs_part_get: pointer is NULL"); + tsk_error_set_errstr + ("tsk_vs_part_get: pointer is NULL or has unallocated structures"); return NULL; } diff --git a/tsk3/vs/sun.c b/tsk3/vs/sun.c index 2cac0efba..a878a6fbe 100644 --- a/tsk3/vs/sun.c +++ b/tsk3/vs/sun.c @@ -323,6 +323,7 @@ sun_load_table(TSK_VS_INFO * vs) static void sun_close(TSK_VS_INFO * vs) { + vs->tag = 0; tsk_vs_part_free(vs); free(vs); } @@ -341,6 +342,7 @@ tsk_vs_sun_open(TSK_IMG_INFO * img_info, TSK_DADDR_T offset) vs->img_info = img_info; vs->vstype = TSK_VS_TYPE_SUN; + vs->tag = TSK_VS_INFO_TAG; vs->offset = offset; diff --git a/tsk3/vs/tsk_vs.h b/tsk3/vs/tsk_vs.h index 39fe6a1a0..de5c86d1a 100644 --- a/tsk3/vs/tsk_vs.h +++ b/tsk3/vs/tsk_vs.h @@ -62,6 +62,7 @@ extern "C" { * for open volume systems. */ struct TSK_VS_INFO { + int tag; ///< \internal Will be set to TSK_VS_INFO_TAG if structure is still allocated, 0 if not TSK_IMG_INFO *img_info; ///< Pointer to disk image that VS is in TSK_VS_TYPE_ENUM vstype; ///< Type of volume system / media management TSK_DADDR_T offset; ///< Byte offset where VS starts in disk image @@ -76,7 +77,7 @@ extern "C" { void (*close) (TSK_VS_INFO *); ///< \internal Progs should call tsk_vs_close(). }; - +#define TSK_VS_INFO_TAG 0x52301642 /*************************************************************** @@ -98,6 +99,7 @@ extern "C" { * Linked list entry that describes a volume in a generic way. */ struct TSK_VS_PART_INFO { + int tag; TSK_VS_PART_INFO *prev; ///< Pointer to previous partition (or NULL) TSK_VS_PART_INFO *next; ///< Pointer to next partition (or NULL) TSK_VS_INFO *vs; ///< Pointer to parent volume system handle @@ -111,6 +113,7 @@ extern "C" { TSK_VS_PART_FLAG_ENUM flags; ///< Flags for partition }; +#define TSK_VS_PART_INFO_TAG 0x90121253 // to and from type ids and names extern TSK_VS_TYPE_ENUM tsk_vs_type_toid(const TSK_TCHAR *); -- GitLab