Sleuth Kit Java Bindings (JNI) 4.14.0
Java bindings for using The Sleuth Kit
Loading...
Searching...
No Matches
FileManager.java
Go to the documentation of this file.
1/*
2 * SleuthKit Java Bindings
3 *
4 * Copyright 2021 Basis Technology Corp.
5 * Contact: carrier <at> sleuthkit <dot> org
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 */
19package org.sleuthkit.datamodel;
20
21import java.sql.PreparedStatement;
22import java.sql.ResultSet;
23import java.sql.SQLException;
24import java.sql.Statement;
25import java.util.List;
26import java.util.Objects;
27
31public class FileManager {
32
33 private final SleuthkitCase skCase;
34
40 FileManager(SleuthkitCase skCase) {
41 this.skCase = Objects.requireNonNull(skCase, "Cannot create Blackboard for null SleuthkitCase");
42 }
43
54 public List<AbstractFile> findFilesExactName(long parentId, String name) throws TskCoreException {
55 String ext = SleuthkitCase.extractExtension(name);
56
57 String query = "SELECT tsk_files.* FROM tsk_files JOIN tsk_objects ON tsk_objects.obj_id = tsk_files.obj_id "
58 + " WHERE tsk_objects.par_obj_id = ? AND tsk_files.name = ? ";
59
60 if (!ext.isEmpty()) {
61 query += " AND tsk_files.extension = ? ";
62 }
63
64 skCase.acquireSingleUserCaseReadLock();
65 try (SleuthkitCase.CaseDbConnection connection = skCase.getConnection()) {
66 PreparedStatement statement = connection.getPreparedStatement(query, Statement.RETURN_GENERATED_KEYS);
67 statement.clearParameters();
68 statement.setLong(1, parentId);
69 statement.setString(2, name);
70
71 if (!ext.isEmpty()) {
72 statement.setString(3, ext);
73 }
74
75 try (ResultSet rs = connection.executeQuery(statement)) {
76 return skCase.resultSetToAbstractFiles(rs, connection);
77 }
78 } catch (SQLException ex) {
79 throw new TskCoreException("SQLException thrown when calling query: " + query + " for parentID = " + parentId + " and name " + name, ex);
80 } finally {
81 skCase.releaseSingleUserCaseReadLock();
82 }
83 }
84
96 public List<AbstractFile> findFilesExactNameExactPath(Content dataSource, String name, String path) throws TskCoreException {
97
98 // Database paths will always start and end with a forward slash, so add those if not present
99 String normalizedPath = path;
100 if (!normalizedPath.startsWith("/")) {
101 normalizedPath = "/" + normalizedPath;
102 }
103 if (!normalizedPath.endsWith("/")) {
104 normalizedPath = normalizedPath + "/";
105 }
106
107 String ext = SleuthkitCase.extractExtension(name);
108
109 String query = "";
110 skCase.acquireSingleUserCaseReadLock();
111 try (SleuthkitCase.CaseDbConnection connection = skCase.getConnection()) {
112 PreparedStatement statement;
113 if (ext.isEmpty()) {
114 query = "SELECT tsk_files.* FROM tsk_files JOIN tsk_objects ON tsk_objects.obj_id = tsk_files.obj_id WHERE parent_path = ? AND name = ? AND data_source_obj_id = ?";
115 statement = connection.getPreparedStatement(query, Statement.RETURN_GENERATED_KEYS);
116 statement.clearParameters();
117 statement.setString(1, normalizedPath);
118 statement.setString(2, name);
119 statement.setLong(3, dataSource.getId());
120 } else {
121 // This is done as an optimization since the extension column in tsk_files is indexed
122 query = "SELECT tsk_files.* FROM tsk_files JOIN tsk_objects ON tsk_objects.obj_id = tsk_files.obj_id WHERE extension = ? AND parent_path = ? AND name = ? AND data_source_obj_id = ?";
123 statement = connection.getPreparedStatement(query, Statement.RETURN_GENERATED_KEYS);
124 statement.clearParameters();
125 statement.setString(1, ext);
126 statement.setString(2, normalizedPath);
127 statement.setString(3, name);
128 statement.setLong(4, dataSource.getId());
129 }
130 try (ResultSet rs = connection.executeQuery(statement)) {
131 return skCase.resultSetToAbstractFiles(rs, connection);
132 }
133 } catch (SQLException ex) {
134 throw new TskCoreException("SQLException thrown when calling query: " + query + " for parent path = " + path + " and name " + name, ex);
135 } finally {
136 skCase.releaseSingleUserCaseReadLock();
137 }
138 }
139}
List< AbstractFile > findFilesExactNameExactPath(Content dataSource, String name, String path)
List< AbstractFile > findFilesExactName(long parentId, String name)

Copyright © 2011-2024 Brian Carrier. (carrier -at- sleuthkit -dot- org)
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.