19 package org.sleuthkit.datamodel;
21 import java.io.FileNotFoundException;
22 import java.io.IOException;
23 import java.io.RandomAccessFile;
24 import java.text.MessageFormat;
25 import java.util.ArrayList;
26 import java.util.List;
27 import java.util.ResourceBundle;
29 import java.util.SortedSet;
30 import java.util.logging.Level;
31 import java.util.logging.Logger;
49 protected final Set<TSK_FS_META_FLAG_ENUM>
metaFlags;
51 protected final long metaAddr, ctime, crtime, atime, mtime;
53 protected final int uid, gid;
78 private static final ResourceBundle
bundle = ResourceBundle.getBundle(
"org.sleuthkit.datamodel.Bundle");
112 long size,
long ctime,
long crtime,
long atime,
long mtime,
short modes,
int uid,
int gid, String md5Hash,
FileKnown knownState,
114 super(db, objId, name);
126 this.crtime = crtime;
134 if (knownState == null) {
307 if ((mode & irusr) == irusr) {
312 if ((mode & iwusr) == iwusr) {
319 if ((mode & isuid) == isuid) {
320 if ((mode & ixusr) == ixusr) {
326 if ((mode & ixusr) == ixusr) {
334 if ((mode & irgrp) == irgrp) {
339 if ((mode & iwgrp) == iwgrp) {
346 if ((mode & isgid) == isgid) {
347 if ((mode & ixgrp) == ixgrp) {
353 if ((mode & ixgrp) == ixgrp) {
361 if ((mode & iroth) == iroth) {
366 if ((mode & iwoth) == iwoth) {
373 if ((mode & isvtx) == isvtx) {
374 if ((mode & ixoth) == ixoth) {
380 if ((mode & ixoth) == ixoth) {
388 if (result.length() != 10) {
396 return modes.contains(mode);
406 void setMd5Hash(String md5Hash) {
449 int i =
getName().lastIndexOf(
".");
451 if ((i > 0) && ((i + 1) <
getName().length())) {
452 ext =
getName().substring(i + 1);
464 return ext.toLowerCase();
496 if (ranges == null) {
518 long rangeLength = byteRange.getByteLen();
519 if (fileOffset < rangeLength) {
520 imgOffset = byteRange.getByteStart() + fileOffset;
526 fileOffset -= rangeLength;
566 public abstract boolean isRoot();
577 String[] pathSegments = uniquePath.split(
"/");
581 if (pathSegments[0].startsWith(
"img_")) {
584 if (pathSegments[1].startsWith(
"vol_")) {
590 StringBuilder strbuf =
new StringBuilder();
591 for (; index < pathSegments.length; ++index) {
592 strbuf.append(
"/").append(pathSegments[index]);
595 return strbuf.toString();
608 List<AbstractFile> files =
new ArrayList<AbstractFile>();
609 for (
Content child : children) {
641 return dirType.toString();
649 return dirFlag == flag;
678 return metaFlags.contains(metaFlag);
688 return readInt(buf, offset, len);
718 bundle.getString(
"AbstractFile.readLocal.exception.msg1.text"));
728 MessageFormat.format(bundle.getString(
"AbstractFile.readLocal.exception.msg2.text"),
localAbsPath));
732 MessageFormat.format(bundle.getString(
"AbstractFile.readLocal.exception.msg3.text"),
localAbsPath));
737 if (localFileHandle == null) {
738 synchronized (
this) {
739 if (localFileHandle == null) {
741 localFileHandle =
new RandomAccessFile(
localFile,
"r");
742 }
catch (FileNotFoundException ex) {
743 final String msg = MessageFormat.format(bundle.getString(
744 "AbstractFile.readLocal.exception.msg4.text"),
746 logger.log(Level.SEVERE, msg, ex);
756 long curOffset = localFileHandle.getFilePointer();
757 if (curOffset != offset) {
758 localFileHandle.seek(offset);
761 bytesRead = localFileHandle.read(buf, 0, (
int) len);
762 }
catch (IOException ex) {
763 final String msg = MessageFormat.format(bundle.getString(
"AbstractFile.readLocal.exception.msg5.text"),
localAbsPath);
764 logger.log(Level.SEVERE, msg, ex);
783 if (localPath == null || localPath.equals(
"")) {
786 localPathSet =
false;
794 this.localPathSet =
true;
830 logger.log(Level.SEVERE, ex.getMessage());
851 logger.log(Level.SEVERE, ex.getMessage());
863 throw new TskCoreException(
864 bundle.getString(
"AbstractFile.readLocal.exception.msg1.text"));
872 synchronized (
this) {
883 if (localFileHandle != null) {
884 synchronized (
this) {
885 if (localFileHandle != null) {
887 localFileHandle.close();
888 }
catch (IOException ex) {
889 logger.log(Level.SEVERE,
"Could not close file handle for file: " +
getParentPath() +
"/" +
getName(), ex);
891 localFileHandle = null;
909 return super.toString(preserveState) +
"AbstractFile [\t"
912 +
"\tcrtime " + crtime
913 +
"\t" +
"mtime " + mtime +
"\t" +
"atime " + atime
914 +
"\t" +
"attrId " + attrId
916 +
"\t" +
"dirFlag " + dirFlag +
"\t" +
"dirType " + dirType
917 +
"\t" +
"uid " + uid
918 +
"\t" +
"gid " + gid
919 +
"\t" +
"metaAddr " + metaAddr +
"\t" +
"metaSeq " + metaSeq +
"\t" +
"metaFlags " + metaFlags
920 +
"\t" +
"metaType " + metaType +
"\t" +
"modes " +
modes
921 +
"\t" +
"parentPath " + parentPath +
"\t" +
"size " + size
922 +
"\t" +
"knownState " +
knownState +
"\t" +
"md5Hash " + md5Hash
923 +
"\t" +
"localPathSet " + localPathSet +
"\t" +
"localPath " + localPath
924 +
"\t" +
"localAbsPath " + localAbsPath +
"\t" +
"localFile " +
localFile
940 String time =
"0000-00-00 00:00:00";
942 time =
new java.text.SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss z").format(
new java.util.Date(epoch * 1000));
956 epoch =
new java.text.SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss").parse(time).getTime() / 1000;
957 }
catch (Exception e) {
983 if (attrs.isEmpty()) {
988 if (mimeTypes.contains(batt.getValueString())) {
VIRT
Special (TSK added "Virtual" files) NON-NLS.
boolean isModeSet(TskData.TSK_FS_META_MODE_ENUM mode)
final TSK_FS_NAME_TYPE_ENUM dirType
static String epochToTime(long epoch)
static Set< TSK_FS_META_FLAG_ENUM > valuesOf(short metaFlags)
String getMetaFlagsAsString()
final int readLocal(byte[] buf, long offset, long len)
boolean isDirNameFlagSet(TSK_FS_NAME_FLAG_ENUM flag)
ALLOC
Metadata structure is currently in an allocated state.
final TSK_FS_NAME_FLAG_ENUM dirFlag
File(SleuthkitCase db, long objId, long fsObjId, TSK_FS_ATTR_TYPE_ENUM attrType, short attrId, String name, long metaAddr, int metaSeq, TSK_FS_NAME_TYPE_ENUM dirType, TSK_FS_META_TYPE_ENUM metaType, TSK_FS_NAME_FLAG_ENUM dirFlag, short metaFlags, long size, long ctime, long crtime, long atime, long mtime, short modes, int uid, int gid, String md5Hash, FileKnown knownState, String parentPath)
TSK_FS_META_TYPE_DIR
Directory file NON-NLS.
TSK_FS_META_MODE_ISVTX
sticky bit
final TskData.TSK_DB_FILES_TYPE_ENUM fileType
UNALLOC
Metadata structure is currently in an unallocated state.
static final Logger logger
TskData.TSK_DB_FILES_TYPE_ENUM getType()
boolean localPathSet
if set by setLocalPath(), reads are done on local file
final TskData.TSK_FS_ATTR_TYPE_ENUM attrType
TSK_FS_META_MODE_IXOTH
X for other.
long convertToImgOffset(long fileOffset)
TSK_FS_META_MODE_ISUID
set user id on execution
TSK_FS_NAME_TYPE_ENUM getDirType()
String getDirFlagAsString()
TSK_FS_META_MODE_IXGRP
X for group.
String getNameExtension()
TSK_FS_META_MODE_IWOTH
W for other.
TSK_FS_META_MODE_IRGRP
R for group.
TSK_FS_META_MODE_IWUSR
W for owner.
MimeMatchEnum isMimeType(SortedSet< String > mimeTypes)
String getDirTypeAsString()
final Set< TSK_FS_META_FLAG_ENUM > metaFlags
TSK_FS_META_MODE_IROTH
R for other.
String toString(boolean preserveState)
static final ResourceBundle bundle
TskData.FileKnown getKnown()
List< Content > getChildren()
FALSE
file has a defined mime type and it is one of the given ones
final Set< TskData.TSK_FS_META_MODE_ENUM > modes
List< AbstractFile > listFiles()
TskData.FileKnown knownState
TSK_FS_META_TYPE_VIRT
"Virtual File" created by TSK for file system areas NON-NLS
TSK_FS_META_TYPE_ENUM getMetaType()
TSK_FS_META_MODE_IRUSR
R for owner.
SleuthkitCase getSleuthkitCase()
AbstractFile(SleuthkitCase db, long objId, TskData.TSK_FS_ATTR_TYPE_ENUM attrType, short attrId, String name, TskData.TSK_DB_FILES_TYPE_ENUM fileType, long metaAddr, int metaSeq, TSK_FS_NAME_TYPE_ENUM dirType, TSK_FS_META_TYPE_ENUM metaType, TSK_FS_NAME_FLAG_ENUM dirFlag, short metaFlags, long size, long ctime, long crtime, long atime, long mtime, short modes, int uid, int gid, String md5Hash, FileKnown knownState, String parentPath)
String localPath
local path as stored in db tsk_files_path, is relative to the db,
boolean isMetaFlagSet(TSK_FS_META_FLAG_ENUM metaFlag)
TRUE
file does not have a defined mime time in blackboard
static short toInt(Set< TSK_FS_META_MODE_ENUM > modes)
static long timeToEpoch(String time)
String getModesAsString()
int readInt(byte[] buf, long offset, long len)
volatile RandomAccessFile localFileHandle
volatile java.io.File localFile
UNKNOWN
File marked as unknown by hash db.
static Set< TSK_FS_META_MODE_ENUM > valuesOf(short modes)
List< TskFileRange > ranges
void setLocalPath(String localPath, boolean isAbsolute)
static String createNonUniquePath(String uniquePath)
TSK_FS_META_MODE_IWGRP
W for group.
VIRTUAL_DIR
Virtual directory (not on fs) with no meta-data entry that can be used to group files of types other ...
List< TskFileRange > getRanges()
final int read(byte[] buf, long offset, long len)
String getMetaTypeAsString()
final TSK_FS_META_TYPE_ENUM metaType
TSK_FS_META_TYPE_REG
Regular file NON-NLS.
ArrayList< BlackboardAttribute > getGenInfoAttributes(ATTRIBUTE_TYPE attr_type)
TSK_FS_META_MODE_ISGID
set group id on execution
List< TskFileRange > getFileRanges(long id)
String localAbsPath
absolute path representation of the local path
TSK_FS_META_MODE_IXUSR
X for owner.
TskData.TSK_FS_ATTR_TYPE_ENUM getAttrType()
abstract boolean isRoot()