Skip to content
Snippets Groups Projects
Commit c3c60588 authored by Jeff Wallace's avatar Jeff Wallace
Browse files

Merge branch 'unixJNIFix' of https://github.com/jawallace/sleuthkit into unixJNIFix

parents eeba90bf 616c0519
Branches
Tags
No related merge requests found
......@@ -42,16 +42,10 @@
<property environment="env"/>
<property name="jni.dylib" location="${basedir}/jni/.libs/libtsk_jni.dylib" />
<property name="jni.jnilib" value="libtsk_jni.jnilib" />
<property name="mac.zlib" location="/usr/lib/libz.dylib"/>
<property name="mac.libewf" location="${env.LIBEWF_HOME}/libewf/.libs/libewf.dylib"/>
<!-- x86_64 -->
<copy file="${jni.dylib}" tofile="${x86_64}/mac/${jni.jnilib}"/>
<copy file="${mac.libewf}" tofile="${x86_64}/mac/libewf.dylib"/>
<copy file="${mac.zlib}" tofile="${x86_64}/mac/zlib.dylib"/>
<!-- amd64 -->
<copy file="${jni.dylib}" tofile="${amd64}/mac/${jni.jnilib}"/>
<copy file="${mac.libewf}" tofile="${amd64}/mac/libewf.dylib"/>
<copy file="${mac.zlib}" tofile="${amd64}/mac/zlib.dylib"/>
</target>
<!-- Non-OS X -->
......@@ -63,35 +57,18 @@
<target name="copyLinuxLibs" depends="testTSKLibs" if="tsk_so.present">
<property environment="env"/>
<property name="jni.so" location="${basedir}/jni/.libs/libtsk_jni.so" />
<!-- check that this location is correct -->
<property name="linux.zlib" location="/usr/lib/libz.so"/>
<property name="zlib.so" value="zlib.so"/>
<property name="linux.libewf" location="${env.LIBEWF_HOME}/libewf/.libs/libewf.so"/>
<property name="libewf.so" value="libewf.so"/>
<!-- x86_64 -->
<copy file="${jni.so}" tofile="${x86_64}/linux/libtsk_jni.so"/>
<copy file="${linux.zlib}" tofile="${x86_64}/linux/${zlib.so}"/>
<copy file="${linux.libewf}" tofile="${x86_64}/linux/${libewf.so}"/>
<!-- amd64 -->
<copy file="${jni.so}" tofile="${amd64}/linux/libtsk_jni.so"/>
<copy file="${linux.zlib}" tofile="${amd64}/linux/${zlib.so}"/>
<copy file="${linux.libewf}" tofile="${amd64}/linux/${libewf.so}"/>
<!-- x86 -->
<copy file="${jni.so}" tofile="${x86}/linux/libtsk_jni.so"/>
<copy file="${linux.zlib}" tofile="${x86}/linux/${zlib.so}"/>
<copy file="${linux.libewf}" tofile="${x86}/linux/${libewf.so}"/>
<!-- i386 -->
<copy file="${jni.so}" tofile="${i386}/linux/libtsk_jni.so"/>
<copy file="${linux.zlib}" tofile="${i386}/linux/${zlib.so}"/>
<copy file="${linux.libewf}" tofile="${i386}/linux/${libewf.so}"/>
<!-- i586 -->
<copy file="${jni.so}" tofile="${i586}/linux/libtsk_jni.so"/>
<copy file="${linux.zlib}" tofile="${i586}/linux/${zlib.so}"/>
<copy file="${linux.libewf}" tofile="${i586}/linux/${libewf.so}"/>
<!-- i686 -->
<copy file="${jni.so}" tofile="${i686}/linux/libtsk_jni.so"/>
<copy file="${linux.zlib}" tofile="${i686}/linux/${zlib.so}"/>
<copy file="${linux.libewf}" tofile="${i686}/linux/${libewf.so}"/>
</target>
<target name="copyLibs" depends="copyLinuxLibs,copyMacLibs" />
......
......@@ -23,6 +23,8 @@
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.Arrays;
import java.util.List;
/**
* Collection of methods to load libraries embedded in the TSK Datamodel Jar file.
......@@ -35,34 +37,113 @@ public class LibraryUtils {
public static final Lib[] CRT_LIBS = new Lib[] { Lib.MSVCP, Lib.MSVCR };
public static final Lib[] OTHER_LIBS = new Lib[] { Lib.ZLIB, Lib.LIBEWF, Lib.TSK_JNI };
public static final Lib[] OTHER_LIBS = new Lib[] { Lib.ZLIB, Lib.LIBEWF };
/**
* The libraries the TSK Datamodel needs.
*/
public enum Lib {
MSVCP ("msvcp100"),
MSVCR ("msvcr100"),
ZLIB ("zlib"),
LIBEWF ("libewf"),
TSK_JNI ("libtsk_jni");
MSVCP ("msvcp100", ""),
MSVCR ("msvcr100", ""),
ZLIB ("zlib", "z"),
LIBEWF ("libewf", "ewf"),
TSK_JNI ("libtsk_jni", "tsk_jni");
private final String name;
private final String unixName;
Lib(String name) {
Lib(String name, String unixName) {
this.name = name;
this.unixName = unixName;
}
public String getLibName() {
return this.name;
}
public String getUnixName() {
return this.unixName;
}
}
/**
* Load all libraries needed for the current platform except the TSK JNI.
*
* @return
*/
public static boolean loadAuxilliaryLibs() {
boolean loaded = true;
if (LibraryUtils.isWindows()) {
try {
// on windows force loading ms crt dependencies first
// in case linker can't find them on some systems
// Note: if shipping with a different CRT version, this will only print a warning
// and try to use linker mechanism to find the correct versions of libs.
// We should update this if we officially switch to a new version of CRT/compiler
for(LibraryUtils.Lib crt : LibraryUtils.getCRTLibs()) {
loaded = LibraryUtils.loadLibFromJar(crt);
if(!loaded) {
System.out.println("SleuthkitJNI: failed to load " + crt.getLibName());
} else {
System.out.println("SleuthkitJNI: loaded " + crt.getLibName());
}
}
} catch (UnsatisfiedLinkError e1) {
System.out.println(e1.toString());
try {
//Try to load from system path.
System.out.println("Can't find CRT libraries, attempting to load from System.loadLibrary");
System.loadLibrary("msvcr100");
System.loadLibrary("msvcp100");
loaded = true;
} catch (UnsatisfiedLinkError e2) {
System.out.println("SleuthkitJNI: error loading CRT libraries, " + e2.toString());
loaded = false;
}
}
for(LibraryUtils.Lib lib : LibraryUtils.getLibs()) {
loaded = LibraryUtils.loadLibFromJar(lib);
if (!loaded) {
System.out.println("SleuthkitJNI: failed to load " + lib.getLibName());
} else {
System.out.println("SleuthkitJNI: loaded " + lib.getLibName());
}
}
} else {
// Unix platform
for (Lib lib : LibraryUtils.getLibs()) {
try {
System.loadLibrary(lib.getUnixName());
System.out.println("SleuthkitJNI: loaded " + lib.getLibName());
} catch (UnsatisfiedLinkError e) {
loaded = false;
System.out.println("SleuthkitJNI: failed to load " + lib.getLibName());
}
}
}
return loaded;
}
/**
* Load the Sleuthkit JNI.
*
* @return
*/
public static boolean loadSleuthkitJNI() {
boolean loaded = LibraryUtils.loadLibFromJar(Lib.TSK_JNI);
if (!loaded) {
System.out.println("SleuthkitJNI: failed to load " + Lib.TSK_JNI.getLibName());
} else {
System.out.println("SleuthkitJNI: loaded " + Lib.TSK_JNI.getLibName());
}
return loaded;
}
/**
* Get the name of the current platform.
*
* @return a platform identifier, formatted as "OS_ARCH/OS_NAME"
*/
public static String getPlatform() {
private static String getPlatform() {
String os = System.getProperty("os.name").toLowerCase();
if(LibraryUtils.isWindows()) {
os = "win";
......@@ -79,7 +160,7 @@ public static String getPlatform() {
*
* @return
*/
public static boolean isWindows() {
private static boolean isWindows() {
return System.getProperty("os.name").toLowerCase().contains("windows");
}
......@@ -97,7 +178,7 @@ private static boolean isMac() {
*
* @return
*/
public static boolean isLinux() {
private static boolean isLinux() {
return System.getProperty("os.name").equals("Linux");
}
......@@ -107,7 +188,7 @@ public static boolean isLinux() {
* @param library
* @return
*/
public static boolean loadLibrary(Lib library) {
private static boolean loadLibFromJar(Lib library) {
StringBuilder path = new StringBuilder();
path.append("/NATIVELIBS/");
path.append(getPlatform());
......@@ -159,11 +240,11 @@ public static boolean loadLibrary(Lib library) {
return true;
}
public static Lib[] getCRTLibs() {
private static Lib[] getCRTLibs() {
return CRT_LIBS;
}
public static Lib[] getLibs() {
private static Lib[] getLibs() {
return OTHER_LIBS;
}
}
......@@ -118,49 +118,8 @@ public class SleuthkitJNI {
//Linked library loading
static {
boolean loaded = false;
if (LibraryUtils.isWindows()) {
try {
// on windows force loading ms crt dependencies first
// in case linker can't find them on some systems
// Note: if shipping with a different CRT version, this will only print a warning
// and try to use linker mechanism to find the correct versions of libs.
// We should update this if we officially switch to a new version of CRT/compiler
for(LibraryUtils.Lib crt : LibraryUtils.getCRTLibs()) {
loaded = LibraryUtils.loadLibrary(crt);
if(!loaded) {
System.out.println("SleuthkitJNI: failed to load " + crt.getLibName());
} else {
System.out.println("SleuthkitJNI: loaded " + crt.getLibName());
}
}
} catch (UnsatisfiedLinkError e1) {
System.out.println(e1.toString());
try {
//Try to load from system path.
System.out.println("Can't find CRT libraries, attempting to load from System.loadLibrary");
System.loadLibrary("msvcr100");
System.loadLibrary("msvcp100");
} catch (UnsatisfiedLinkError e2) {
System.out.println("SleuthkitJNI: error loading CRT libraries, " + e2.toString());
}
}
}
for (LibraryUtils.Lib lib : LibraryUtils.getLibs()) {
try {
loaded = LibraryUtils.loadLibrary(lib);
if(loaded) {
System.out.println("SleuthkitJNI: loaded " + lib);
} else {
System.out.println("SleuthkitJNI: failed to load " + lib);
}
} catch (UnsatisfiedLinkError e) {
System.out.println("SleuthkitJNI: error loading " + lib + "library, " + e.toString());
}
}
LibraryUtils.loadAuxilliaryLibs();
LibraryUtils.loadSleuthkitJNI();
}
public SleuthkitJNI() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment