Prepare reordering or files to help integration into linux distributions as discussed...
authorJens Steube <jens.steube@gmail.com>
Sun, 13 Dec 2015 11:21:36 +0000 (12:21 +0100)
committerJens Steube <jens.steube@gmail.com>
Sun, 13 Dec 2015 11:21:36 +0000 (12:21 +0100)
TODOS:
- Let oclHashcat actually use the new paths
- Find a better way for native compilation
- Replace /bin/cp with /usr/bin/install where it has to copy files recursive

include/common.h
include/shared.h
include/types.h
src/Makefile
src/oclHashcat.c
src/shared.c

index 8918d83..ff17c2a 100644 (file)
@@ -33,6 +33,7 @@
 #include <pthread.h>
 #include <semaphore.h>
 #include <dlfcn.h>
+#include <pwd.h>
 
 #ifdef LINUX
 #include <termio.h>
index dc7679a..22379ec 100644 (file)
@@ -1936,6 +1936,8 @@ void dump_hex (const char *s, size_t size);
 void truecrypt_crc32 (char *file, unsigned char keytab[64]);
 
 char *get_install_dir (const char *progname);
+char *get_profile_dir (const char *homedir);
+char *get_session_dir (const char *profile_dir, const char *session);
 
 uint get_vliw_by_compute_capability (const uint major, const uint minor);
 uint get_vliw_by_device_name (const char *device_name);
index 76c3edf..309398a 100644 (file)
@@ -1134,7 +1134,10 @@ typedef struct
   char   *session;
   char    separator;
   char   *hashfile;
+  char   *homedir;
   char   *install_dir;
+  char   *profile_dir;
+  char   *session_dir;
   char   *outfile;
   uint    outfile_format;
   uint    outfile_autohex;
index b283b85..30a7ab6 100644 (file)
@@ -21,7 +21,19 @@ MAKEFLAGS += -j 1
 endif
 
 ##
-## Library Paths
+## Installation paths (Linux only)
+##
+
+INSTALL_FOLDER           ?= /opt/test/usr/bin
+SHARED_FOLDER            ?= /opt/test/usr/share/oclHashcat
+DOCUMENT_FOLDER          ?= /opt/test/usr/share/doc/oclHashcat
+
+#INSTALL_FOLDER           ?= /usr/bin
+#SHARED_FOLDER            ?= /usr/share/oclHashcat
+#DOCUMENT_FOLDER          ?= /usr/share/doc/oclHashcat
+
+##
+## Library paths
 ##
 
 OCL                      := deps/amd-app-sdk
@@ -62,6 +74,9 @@ CLCOMPILE                := $(CLCOMPILE_PATH)/clcompile.bin
 
 BIN                      := .
 
+INSTALL                  := install
+CP                       := cp
+
 ##
 ## Misc stuff
 ##
@@ -175,6 +190,35 @@ nv_all:         $(foreach KERNEL,$(KERNELS_MODE_ALL),$(foreach DEVICE,$(NV_DEVIC
                $(foreach DEVICE,$(NV_DEVICES_ALL),$(foreach BITNESS,$(NV_BITNESS_ALL),$(NV_OUT)/amp_a1_v1.$(DEVICE).$(BITNESS).cubin))    $(foreach DEVICE,$(NV_DEVICES_ALL),$(foreach BITNESS,$(NV_BITNESS_ALL),$(NV_OUT)/amp_a1_v2.$(DEVICE).$(BITNESS).cubin))    $(foreach DEVICE,$(NV_DEVICES_ALL),$(foreach BITNESS,$(NV_BITNESS_ALL),$(NV_OUT)/amp_a1_v4.$(DEVICE).$(BITNESS).cubin)) \
                $(foreach DEVICE,$(NV_DEVICES_ALL),$(foreach BITNESS,$(NV_BITNESS_ALL),$(NV_OUT)/amp_a3_v1.$(DEVICE).$(BITNESS).cubin))    $(foreach DEVICE,$(NV_DEVICES_ALL),$(foreach BITNESS,$(NV_BITNESS_ALL),$(NV_OUT)/amp_a3_v2.$(DEVICE).$(BITNESS).cubin))    $(foreach DEVICE,$(NV_DEVICES_ALL),$(foreach BITNESS,$(NV_BITNESS_ALL),$(NV_OUT)/amp_a3_v4.$(DEVICE).$(BITNESS).cubin))
 
+##
+## Targets: Linux install
+## We need some better native compilation logic here, fixing it to 64 bit for now and AMD kernels
+## How to make /usr/bin/install doing recursive??
+##
+
+install: linux64 amd_all
+       $(INSTALL) -m 755 -d                     $(DOCUMENT_FOLDER)
+       $(CP) -a docs/*                          $(DOCUMENT_FOLDER)/
+       $(INSTALL) -m 755 -d                     $(DOCUMENT_FOLDER)/extra
+       $(CP) -a extra/*                         $(DOCUMENT_FOLDER)/extra/
+       $(INSTALL) -m 755 -d                     $(SHARED_FOLDER)
+       $(INSTALL) -m 755 -d                     $(SHARED_FOLDER)/charsets
+       $(CP) -a charsets/*                      $(SHARED_FOLDER)/charsets/
+       $(INSTALL) -m 755 -d                     $(SHARED_FOLDER)/kernels
+       $(CP) -a kernels/*                       $(SHARED_FOLDER)/kernels/
+       $(INSTALL) -m 755 -d                     $(SHARED_FOLDER)/masks
+       $(CP) -a masks/*                         $(SHARED_FOLDER)/masks/
+       $(INSTALL) -m 755 -d                     $(SHARED_FOLDER)/rules
+       $(CP) -a rules/*                         $(SHARED_FOLDER)/rules/
+       $(INSTALL) -m 755    -T hashcat.hcstat   $(SHARED_FOLDER)/hashcat.hcstat
+       $(INSTALL) -m 755 -s -T oclHashcat64.bin $(INSTALL_FOLDER)/oclHashcat
+
+
+uninstall:
+       $(RM) -f  $(INSTALL_FOLDER)/oclHashcat
+       $(RM) -rf $(SHARED_FOLDER)
+       $(RM) -rf $(DOCUMENT_FOLDER)
+
 ##
 ## Targets: AMD Kernel (oclHashcat)
 ##
@@ -382,10 +426,10 @@ obj/%.cudaHashcat.WIN.64.o:   src/%.c
        $(CC_WIN_64)   $(CFLAGS) $(CFLAGS_WIN)   $(CFLAGS_64) $(CFLAGS_CUDA_WIN)   -c -o $@ $<
 
 oclHashcat32.bin:  src/oclHashcat.c obj/ext_OpenCL.oclHashcat.LINUX.32.o obj/ext_ADL.oclHashcat.LINUX.32.o    obj/shared.oclHashcat.LINUX.32.o  obj/rp_gpu_on_cpu.oclHashcat.LINUX.32.o
-       $(CC_LINUX_32) $(CFLAGS) $(CFLAGS_LINUX) $(CFLAGS_32) $(CFLAGS_OCL_LINUX)  -o $@ -DCOMPTIME=$(NOW) $^ -L$(OCLLIBPATH32)  $(LFLAGS_OCL_LINUX)
+       $(CC_LINUX_32) $(CFLAGS) $(CFLAGS_LINUX) $(CFLAGS_32) $(CFLAGS_OCL_LINUX)  -o $@ -DCOMPTIME=$(NOW) $^ -L$(OCLLIBPATH32)  $(LFLAGS_OCL_LINUX) -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\"
 
 oclHashcat64.bin:  src/oclHashcat.c obj/ext_OpenCL.oclHashcat.LINUX.64.o obj/ext_ADL.oclHashcat.LINUX.64.o    obj/shared.oclHashcat.LINUX.64.o  obj/rp_gpu_on_cpu.oclHashcat.LINUX.64.o
-       $(CC_LINUX_64) $(CFLAGS) $(CFLAGS_LINUX) $(CFLAGS_64) $(CFLAGS_OCL_LINUX)  -o $@ -DCOMPTIME=$(NOW) $^ -L$(OCLLIBPATH64)  $(LFLAGS_OCL_LINUX)
+       $(CC_LINUX_64) $(CFLAGS) $(CFLAGS_LINUX) $(CFLAGS_64) $(CFLAGS_OCL_LINUX)  -o $@ -DCOMPTIME=$(NOW) $^ -L$(OCLLIBPATH64)  $(LFLAGS_OCL_LINUX) -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\"
 
 oclHashcat32.exe:  src/oclHashcat.c obj/ext_OpenCL.oclHashcat.WIN.32.o   obj/ext_ADL.oclHashcat.WIN.32.o      obj/shared.oclHashcat.WIN.32.o    obj/rp_gpu_on_cpu.oclHashcat.WIN.32.o      lib/libOpenCL.a   /usr/i686-w64-mingw32/lib/CRT_glob.o
        $(CC_WIN_32)   $(CFLAGS) $(CFLAGS_WIN)   $(CFLAGS_32) $(CFLAGS_OCL_WIN)    -o $@ -DCOMPTIME=$(NOW) $^ -L$(OCLLIBPATH32)  $(LFLAGS_OCL_WIN) -static-libgcc
@@ -394,10 +438,10 @@ oclHashcat64.exe:  src/oclHashcat.c obj/ext_OpenCL.oclHashcat.WIN.64.o   obj/ext
        $(CC_WIN_64)   $(CFLAGS) $(CFLAGS_WIN)   $(CFLAGS_64) $(CFLAGS_OCL_WIN)    -o $@ -DCOMPTIME=$(NOW) $^ -L$(OCLLIBPATH64)  $(LFLAGS_OCL_WIN) -static-libgcc
 
 cudaHashcat32.bin: src/oclHashcat.c obj/ext_cuda.cudaHashcat.LINUX.32.o  obj/ext_nvml.cudaHashcat.LINUX.32.o  obj/shared.cudaHashcat.LINUX.32.o obj/rp_gpu_on_cpu.cudaHashcat.LINUX.32.o
-       $(CC_LINUX_32) $(CFLAGS) $(CFLAGS_LINUX) $(CFLAGS_32) $(CFLAGS_CUDA_LINUX) -o $@ -DCOMPTIME=$(NOW) $^ -L$(CUDALIBPATH32) $(LFLAGS_CUDA_LINUX) -L$(NVMLLIBPATH32)
+       $(CC_LINUX_32) $(CFLAGS) $(CFLAGS_LINUX) $(CFLAGS_32) $(CFLAGS_CUDA_LINUX) -o $@ -DCOMPTIME=$(NOW) $^ -L$(CUDALIBPATH32) $(LFLAGS_CUDA_LINUX) -L$(NVMLLIBPATH32) -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\"
 
 cudaHashcat64.bin: src/oclHashcat.c obj/ext_cuda.cudaHashcat.LINUX.64.o  obj/ext_nvml.cudaHashcat.LINUX.64.o  obj/shared.cudaHashcat.LINUX.64.o obj/rp_gpu_on_cpu.cudaHashcat.LINUX.64.o
-       $(CC_LINUX_64) $(CFLAGS) $(CFLAGS_LINUX) $(CFLAGS_64) $(CFLAGS_CUDA_LINUX) -o $@ -DCOMPTIME=$(NOW) $^ -L$(CUDALIBPATH64) $(LFLAGS_CUDA_LINUX) -L$(NVMLLIBPATH64)
+       $(CC_LINUX_64) $(CFLAGS) $(CFLAGS_LINUX) $(CFLAGS_64) $(CFLAGS_CUDA_LINUX) -o $@ -DCOMPTIME=$(NOW) $^ -L$(CUDALIBPATH64) $(LFLAGS_CUDA_LINUX) -L$(NVMLLIBPATH64) -DINSTALL_FOLDER=\"$(INSTALL_FOLDER)\" -DSHARED_FOLDER=\"$(SHARED_FOLDER)\" -DDOCUMENT_FOLDER=\"$(DOCUMENT_FOLDER)\"
 
 cudaHashcat32.exe: src/oclHashcat.c obj/ext_cuda.cudaHashcat.WIN.32.o    obj/ext_nvapi.cudaHashcat.WIN.32.o    obj/shared.cudaHashcat.WIN.32.o  obj/rp_gpu_on_cpu.cudaHashcat.WIN.32.o   lib/libcuda.a   /usr/i686-w64-mingw32/lib/CRT_glob.o
        $(CC_WIN_32)   $(CFLAGS) $(CFLAGS_WIN)   $(CFLAGS_32) $(CFLAGS_CUDA_WIN)   -o $@ -DCOMPTIME=$(NOW) $^ -L$(CUDALIBPATH32) $(LFLAGS_CUDA_WIN) -static-libgcc $(NVAPI)/x86/nvapi.lib
index 1d93dc8..f9503e7 100644 (file)
@@ -7016,12 +7016,45 @@ int main (int argc, char **argv)
   data.scrypt_tmto       = scrypt_tmto;
 
   /**
-   * install_dir
+   * folders, as discussed on https://github.com/hashcat/oclHashcat/issues/20
    */
 
+  #ifdef LINUX
+
+  char *resolved_path = realpath (myargv[0], NULL);
+
+  char *install_dir = get_install_dir (resolved_path);
+  char *profile_dir = NULL;
+  char *session_dir = NULL;
+
+  if (strcmp (install_dir, INSTALL_FOLDER) == 0)
+  {
+    struct passwd *pw = getpwuid (getuid ());
+
+    const char *homedir = pw->pw_dir;
+
+    profile_dir = get_profile_dir (homedir);
+    session_dir = get_session_dir (profile_dir, session);
+  }
+  else
+  {
+    profile_dir = install_dir;
+    session_dir = install_dir;
+  }
+
+  myfree (resolved_path);
+
+  #else
+
   char *install_dir = get_install_dir (myargv[0]);
+  char *profile_dir = install_dir;
+  char *session_dir = install_dir;
+
+  #endif
 
   data.install_dir = install_dir;
+  data.profile_dir = profile_dir;
+  data.session_dir = session_dir;
 
   /**
    * cpu affinity
index 823298b..c724f95 100644 (file)
@@ -4093,6 +4093,26 @@ char *get_install_dir (const char *progname)
   return (install_dir);
 }
 
+char *get_profile_dir (const char *homedir)
+{
+  #define DOT_HASHCAT ".hashcat"
+
+  char *profile_dir = (char *) mymalloc (strlen (homedir) + 1 + strlen (DOT_HASHCAT) + 1);
+
+  sprintf (profile_dir, "%s/%s", homedir, DOT_HASHCAT);
+
+  return profile_dir;
+}
+
+char *get_session_dir (const char *profile_dir, const char *session)
+{
+  char *session_dir = (char *) mymalloc (strlen (profile_dir) + 1 + strlen (session) + 1);
+
+  sprintf (session_dir, "%s/%s", profile_dir, session);
+
+  return session_dir;
+}
+
 void truecrypt_crc32 (char *file, unsigned char keytab[64])
 {
   uint crc = ~0;