@@ -26,7 +26,7 @@ using std::stringstream;
26
26
using std::for_each;
27
27
28
28
static TSK_HDB_INFO * m_NSRLDb = NULL ;
29
- static std::vector<TSK_HDB_INFO *> m_knownbads ;
29
+ static std::vector<TSK_HDB_INFO *> m_hashDbs ;
30
30
31
31
/*
32
32
* JNI file handle structure encapsulates both
@@ -274,7 +274,7 @@ JNIEXPORT jint JNICALL
274
274
TSK_TCHAR pathT[1024 ];
275
275
toTCHAR (env, pathT, 1024 , pathJ);
276
276
277
- TSK_HDB_OPEN_ENUM flags = TSK_HDB_OPEN_IDXONLY ;
277
+ TSK_HDB_OPEN_ENUM flags = TSK_HDB_OPEN_TRY ;
278
278
TSK_HDB_INFO * tempdb = tsk_hdb_open (pathT, flags);
279
279
280
280
if (tempdb == NULL )
@@ -302,7 +302,7 @@ JNIEXPORT jint JNICALL
302
302
TSK_TCHAR pathT[1024 ];
303
303
toTCHAR (env, pathT, 1024 , pathJ);
304
304
305
- TSK_HDB_OPEN_ENUM flags = TSK_HDB_OPEN_IDXONLY ;
305
+ TSK_HDB_OPEN_ENUM flags = TSK_HDB_OPEN_TRY ;
306
306
TSK_HDB_INFO * temp = tsk_hdb_open (pathT, flags);
307
307
308
308
if (temp == NULL )
@@ -311,19 +311,143 @@ JNIEXPORT jint JNICALL
311
311
return -1 ;
312
312
}
313
313
314
- m_knownbads .push_back (temp);
314
+ m_hashDbs .push_back (temp);
315
315
316
- return m_knownbads .size ();
316
+ return m_hashDbs .size ();
317
317
}
318
318
319
319
/*
320
- * Get the name of the database pointed to by path
320
+ * Create a new hash db.
321
321
* @param env pointer to java environment this was called from
322
322
* @param obj the java object this was called from
323
323
* @param pathJ the path to the database
324
+ * @return a handle for the database
325
+ */
326
+ JNIEXPORT jint JNICALL
327
+ Java_org_sleuthkit_datamodel_SleuthkitJNI_newDbKnownBadNat (JNIEnv * env,
328
+ jclass obj, jstring pathJ)
329
+ {
330
+ TSK_TCHAR pathT[1024 ];
331
+ toTCHAR (env, pathT, 1024 , pathJ);
332
+
333
+ TSK_HDB_INFO * temp = tsk_hdb_new (pathT);
334
+
335
+ if (temp == NULL )
336
+ {
337
+ setThrowTskCoreError (env);
338
+ return -1 ;
339
+ }
340
+
341
+ m_hashDbs.push_back (temp);
342
+
343
+ return m_hashDbs.size ();
344
+ }
345
+
346
+ /*
347
+ * Add entry to hash db.
348
+ * @param env pointer to java environment this was called from
349
+ * @param obj the java object this was called from
350
+ * @param filenameJ Name of the file that was hashed (can be empty)
351
+ * @param hashMd5J Text of MD5 hash (can be empty)
352
+ * @param hashSha1J Text of SHA1 hash (can be empty)
353
+ * @param hashSha256J Text of SHA256 hash (can be empty)
354
+ * @param dbHandle Which DB.
355
+ * @return 1 on error and 0 on success
356
+ */
357
+ JNIEXPORT jint JNICALL
358
+ Java_org_sleuthkit_datamodel_SleuthkitJNI_addStrDbKnownBadNat (JNIEnv * env,
359
+ jclass obj, jstring filenameJ, jstring hashMd5J, jstring hashSha1J, jstring hashSha256J, jint dbHandle)
360
+ {
361
+ int8_t retval = 0 ;
362
+
363
+ if ((size_t ) dbHandle > m_hashDbs.size ()) {
364
+ setThrowTskCoreError (env, " Invalid database handle" );
365
+ retval = 1 ;
366
+ } else {
367
+ jboolean isCopy;
368
+ const char *md5 = (const char *) env->GetStringUTFChars (hashMd5J, &isCopy);
369
+ const char *sha1 = (const char *) env->GetStringUTFChars (hashSha1J, &isCopy);
370
+ const char *sha256 = (const char *) env->GetStringUTFChars (hashSha256J, &isCopy);
371
+
372
+ TSK_TCHAR filenameT[1024 ];
373
+ toTCHAR (env, filenameT, 1024 , filenameJ);
374
+
375
+ TSK_HDB_INFO * db = m_hashDbs.at (dbHandle-1 );
376
+
377
+ if (db != NULL ) {
378
+ retval = tsk_hdb_add_str (db, filenameT, md5, sha1, sha256);
379
+
380
+ if (retval == 1 ) {
381
+ setThrowTskCoreError (env);
382
+ }
383
+ }
384
+
385
+ env->ReleaseStringUTFChars (hashMd5J, (const char *) md5);
386
+ env->ReleaseStringUTFChars (hashSha1J, (const char *) sha1);
387
+ env->ReleaseStringUTFChars (hashSha256J, (const char *) sha256);
388
+ }
389
+
390
+ return retval;
391
+ }
392
+
393
+ /*
394
+ * Get updateable state.
395
+ * @param env pointer to java environment this was called from
396
+ * @param obj the java object this was called from
397
+ * @param dbHandle Which DB.
398
+ * @return true if db can be updated
399
+ */
400
+ JNIEXPORT jboolean JNICALL
401
+ Java_org_sleuthkit_datamodel_SleuthkitJNI_isUpdateableDbKnownBadNat (JNIEnv * env,
402
+ jclass obj, jint dbHandle)
403
+ {
404
+ bool retval = false ;
405
+
406
+ if ((size_t ) dbHandle > m_hashDbs.size ()) {
407
+ setThrowTskCoreError (env, " Invalid database handle" );
408
+ } else {
409
+ TSK_HDB_INFO * db = m_hashDbs.at (dbHandle-1 );
410
+
411
+ if (db != NULL ) {
412
+ retval = (db->idx_info ->updateable == 1 ) ? true : false ;
413
+ }
414
+ }
415
+ return retval;
416
+ }
417
+
418
+ /*
419
+ * Test for index only (no original Db file) legacy (IDX format).
420
+ * @param env pointer to java environment this was called from
421
+ * @param obj the java object this was called from
422
+ * @param dbHandle Which DB.
423
+ * @return true if index only AND is legacy
424
+ */
425
+ JNIEXPORT jboolean JNICALL
426
+ Java_org_sleuthkit_datamodel_SleuthkitJNI_isIdxOnlyHashDbNat (JNIEnv * env,
427
+ jclass obj, jint dbHandle)
428
+ {
429
+ bool retval = false ;
430
+
431
+ if ((size_t ) dbHandle > m_hashDbs.size ()) {
432
+ setThrowTskCoreError (env, " Invalid database handle" );
433
+ } else {
434
+ TSK_HDB_INFO * db = m_hashDbs.at (dbHandle-1 );
435
+
436
+ if (db != NULL ) {
437
+ retval = (tsk_hdb_is_idxonly (db) == 1 ) ? true : false ;
438
+ }
439
+ }
440
+ return retval;
441
+ }
442
+
443
+ /*
444
+ * Get the name of the database pointed to by path
445
+ * @param env pointer to java environment this was called from
446
+ * @param obj the java object this was called from
447
+ * @param pathJ the path to the database (expects the actual database path, not an index path)
324
448
*/
325
449
JNIEXPORT jstring JNICALL
326
- Java_org_sleuthkit_datamodel_SleuthkitJNI_getDbName (JNIEnv * env,
450
+ Java_org_sleuthkit_datamodel_SleuthkitJNI_getDbNameByPath (JNIEnv * env,
327
451
jclass obj, jstring pathJ) {
328
452
329
453
TSK_HDB_OPEN_ENUM flags;
@@ -350,6 +474,30 @@ JNIEXPORT jstring JNICALL
350
474
return jname;
351
475
}
352
476
477
+ /*
478
+ * Get the name of the database pointed to by path
479
+ * @param env pointer to java environment this was called from
480
+ * @param obj the java object this was called from
481
+ * @param dbHandle Which DB.
482
+ */
483
+ JNIEXPORT jstring JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_getDbName
484
+ (JNIEnv * env, jclass obj, jint dbHandle)
485
+ {
486
+ if ((size_t ) dbHandle > m_hashDbs.size ()) {
487
+ setThrowTskCoreError (env, " Invalid database handle" );
488
+ return env->NewStringUTF (" -1" );
489
+ } else {
490
+ TSK_HDB_INFO * temp = m_hashDbs.at (dbHandle-1 );
491
+ if (temp == NULL ) {
492
+ setThrowTskCoreError (env, " Error: database object is null" );
493
+ return env->NewStringUTF (" -1" );
494
+ }
495
+
496
+
497
+ jstring jname = env->NewStringUTF (temp->db_name );
498
+ return jname;
499
+ }
500
+ }
353
501
354
502
JNIEXPORT void JNICALL
355
503
Java_org_sleuthkit_datamodel_SleuthkitJNI_closeDbLookupsNat (JNIEnv * env,
@@ -360,9 +508,9 @@ JNIEXPORT void JNICALL
360
508
m_NSRLDb = NULL ;
361
509
}
362
510
363
- for_each (m_knownbads .begin (), m_knownbads .end (), tsk_hdb_close);
511
+ for_each (m_hashDbs .begin (), m_hashDbs .end (), tsk_hdb_close);
364
512
365
- m_knownbads .clear ();
513
+ m_hashDbs .clear ();
366
514
}
367
515
368
516
/*
@@ -402,7 +550,7 @@ JNIEXPORT jint JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_nsrlDbLookup
402
550
JNIEXPORT jint JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_knownBadDbLookup
403
551
(JNIEnv * env, jclass obj, jstring hash, jint dbHandle){
404
552
405
- if ((size_t ) dbHandle > m_knownbads .size ()) {
553
+ if ((size_t ) dbHandle > m_hashDbs .size ()) {
406
554
setThrowTskCoreError (env, " Invalid database handle" );
407
555
return -1 ;
408
556
}
@@ -415,7 +563,7 @@ JNIEXPORT jint JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_knownBadDbLooku
415
563
416
564
417
565
418
- TSK_HDB_INFO * db = m_knownbads .at (dbHandle-1 );
566
+ TSK_HDB_INFO * db = m_hashDbs .at (dbHandle-1 );
419
567
420
568
if (db != NULL ) {
421
569
int8_t retval = tsk_hdb_lookup_str (db, md5, TSK_HDB_FLAG_QUICK, NULL , NULL );
@@ -1349,7 +1497,7 @@ Java_org_sleuthkit_datamodel_SleuthkitJNI_startVerboseLoggingNat
1349
1497
* @param dbPathJ path for the database
1350
1498
*/
1351
1499
JNIEXPORT void JNICALL
1352
- Java_org_sleuthkit_datamodel_SleuthkitJNI_createLookupIndexNat (JNIEnv * env,
1500
+ Java_org_sleuthkit_datamodel_SleuthkitJNI_createLookupIndexByPathNat (JNIEnv * env,
1353
1501
jclass obj, jstring dbPathJ)
1354
1502
{
1355
1503
TSK_TCHAR dbPathT[1024 ];
@@ -1384,13 +1532,56 @@ Java_org_sleuthkit_datamodel_SleuthkitJNI_createLookupIndexNat (JNIEnv * env,
1384
1532
tsk_hdb_close (temp);
1385
1533
}
1386
1534
1535
+ /*
1536
+ * Create an index for the given database
1537
+ * @param env pointer to java environment this was called from
1538
+ * @param obj the java object this was called from
1539
+ * @param dbHandle handle for the database
1540
+ */
1541
+ JNIEXPORT void JNICALL
1542
+ Java_org_sleuthkit_datamodel_SleuthkitJNI_createLookupIndexNat (JNIEnv * env,
1543
+ jclass obj, jint dbHandle)
1544
+ {
1545
+ if ((size_t ) dbHandle > m_hashDbs.size ()) {
1546
+ setThrowTskCoreError (env, " Invalid database handle" );
1547
+ return ;
1548
+ } else {
1549
+ TSK_HDB_INFO * temp = m_hashDbs.at (dbHandle-1 );
1550
+ if (temp == NULL ) {
1551
+ setThrowTskCoreError (env, " Error: database object is null" );
1552
+ return ;
1553
+ }
1554
+
1555
+ TSK_TCHAR dbType[1024 ];
1556
+
1557
+ if (temp->db_type == TSK_HDB_DBTYPE_MD5SUM_ID) {
1558
+ TSNPRINTF (dbType, 1024 , _TSK_T (" %" ) PRIcTSK, TSK_HDB_DBTYPE_MD5SUM_STR);
1559
+ }
1560
+ else if (temp->db_type == TSK_HDB_DBTYPE_HK_ID) {
1561
+ TSNPRINTF (dbType, 1024 , _TSK_T (" %" ) PRIcTSK, TSK_HDB_DBTYPE_HK_STR);
1562
+ }
1563
+ else if (temp->db_type == TSK_HDB_DBTYPE_ENCASE_ID) {
1564
+ TSNPRINTF (dbType, 1024 , _TSK_T (" %" ) PRIcTSK, TSK_HDB_DBTYPE_ENCASE_STR);
1565
+ }
1566
+ else {
1567
+ TSNPRINTF (dbType, 1024 , _TSK_T (" %" ) PRIcTSK, TSK_HDB_DBTYPE_NSRL_MD5_STR);
1568
+ }
1569
+
1570
+ if (tsk_hdb_makeindex (temp, dbType)) {
1571
+ setThrowTskCoreError (env, " Error creating index" );
1572
+ }
1573
+
1574
+ return ;
1575
+ }
1576
+ }
1577
+
1387
1578
/*
1388
1579
* Check if an index exists for the given database path.
1389
1580
* @param env pointer to java environment this was called from
1390
1581
* @param obj the java object this was called from
1391
1582
* @param dbPathJ path for the database
1392
1583
*/
1393
- JNIEXPORT jboolean JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_lookupIndexExistsNat
1584
+ JNIEXPORT jboolean JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_lookupIndexExistsByPathNat
1394
1585
(JNIEnv * env, jclass obj, jstring dbPathJ) {
1395
1586
1396
1587
TSK_TCHAR dbPathT[1024 ];
@@ -1408,6 +1599,30 @@ JNIEXPORT jboolean JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_lookupIndex
1408
1599
return (jboolean) retval == 1 ;
1409
1600
}
1410
1601
1602
+ /*
1603
+ * Check if an index exists for the given database.
1604
+ * @param env pointer to java environment this was called from
1605
+ * @param obj the java object this was called from
1606
+ * @param dbHandle handle for the database
1607
+ */
1608
+ JNIEXPORT jboolean JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_lookupIndexExistsNat
1609
+ (JNIEnv * env, jclass obj, jint dbHandle) {
1610
+
1611
+ if ((size_t ) dbHandle > m_hashDbs.size ()) {
1612
+ setThrowTskCoreError (env, " Invalid database handle" );
1613
+ return (jboolean) false ;
1614
+ } else {
1615
+ TSK_HDB_INFO * temp = m_hashDbs.at (dbHandle-1 );
1616
+ if (temp == NULL ) {
1617
+ return (jboolean) false ;
1618
+ }
1619
+
1620
+ uint8_t retval = tsk_hdb_hasindex (temp, TSK_HDB_HTYPE_MD5_ID);
1621
+
1622
+ return (jboolean) retval == 1 ;
1623
+ }
1624
+ }
1625
+
1411
1626
/*
1412
1627
* Get the size of the index for the database at the given path
1413
1628
* @param env pointer to java environment this was called from
@@ -1428,7 +1643,7 @@ JNIEXPORT jint JNICALL Java_org_sleuthkit_datamodel_SleuthkitJNI_getIndexSizeNat
1428
1643
}
1429
1644
1430
1645
if (tsk_hdb_hasindex (temp, TSK_HDB_HTYPE_MD5_ID)) {
1431
- return (jint) ((temp->idx_size - temp->idx_off ) / (temp->idx_llen ));
1646
+ return (jint) ((temp->idx_info -> idx_struct . idx_binsrch -> idx_size - temp->idx_info -> idx_struct . idx_binsrch -> idx_off ) / (temp-> idx_info -> idx_struct . idx_binsrch ->idx_llen ));
1432
1647
}
1433
1648
1434
1649
0 commit comments