mirror of
https://github.com/hashcat/hashcat.git
synced 2024-12-23 07:08:19 +00:00
Sessions: Move out handling of multiple instance from restore file into separate pidfile
This commit is contained in:
parent
e2b2dc7ae0
commit
ac5d274845
@ -40,6 +40,7 @@
|
|||||||
- Events: Improved the maximum event message handling. event_log () will now also internally make sure that the message is properly terminated
|
- Events: Improved the maximum event message handling. event_log () will now also internally make sure that the message is properly terminated
|
||||||
- Files: Do several file and folder checks on startup rather than when they are actually used to avoid related error after eventual intense operations
|
- Files: Do several file and folder checks on startup rather than when they are actually used to avoid related error after eventual intense operations
|
||||||
- Helper: Added functions to check existence, type, read- and write-permissions and rewrite sources to use them instead of stat()
|
- Helper: Added functions to check existence, type, read- and write-permissions and rewrite sources to use them instead of stat()
|
||||||
|
- Sessions: Move out handling of multiple instance from restore file into separate pidfile
|
||||||
|
|
||||||
* changes v3.20 -> v3.30:
|
* changes v3.20 -> v3.30:
|
||||||
|
|
||||||
|
29
include/pidfile.h
Normal file
29
include/pidfile.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/**
|
||||||
|
* Author......: See docs/credits.txt
|
||||||
|
* License.....: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _PIDFILE_H
|
||||||
|
#define _PIDFILE_H
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
#if defined (_POSIX)
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#endif // _POSIX
|
||||||
|
|
||||||
|
#if defined (_WIN)
|
||||||
|
#include <windows.h>
|
||||||
|
#include <psapi.h>
|
||||||
|
#endif // _WIN
|
||||||
|
|
||||||
|
void unlink_pidfile (hashcat_ctx_t *hashcat_ctx);
|
||||||
|
|
||||||
|
int pidfile_ctx_init (hashcat_ctx_t *hashcat_ctx);
|
||||||
|
|
||||||
|
void pidfile_ctx_destroy (hashcat_ctx_t *hashcat_ctx);
|
||||||
|
|
||||||
|
#endif // _PIDFILE_H
|
@ -20,8 +20,8 @@
|
|||||||
#include <psapi.h>
|
#include <psapi.h>
|
||||||
#endif // _WIN
|
#endif // _WIN
|
||||||
|
|
||||||
#define RESTORE_VERSION_MIN 320
|
#define RESTORE_VERSION_MIN 340
|
||||||
#define RESTORE_VERSION_CUR 330
|
#define RESTORE_VERSION_CUR 340
|
||||||
|
|
||||||
int cycle_restore (hashcat_ctx_t *hashcat_ctx);
|
int cycle_restore (hashcat_ctx_t *hashcat_ctx);
|
||||||
|
|
||||||
|
@ -1256,7 +1256,6 @@ typedef struct restore_data
|
|||||||
{
|
{
|
||||||
int version;
|
int version;
|
||||||
char cwd[256];
|
char cwd[256];
|
||||||
u32 pid;
|
|
||||||
|
|
||||||
u32 dicts_pos;
|
u32 dicts_pos;
|
||||||
u32 masks_pos;
|
u32 masks_pos;
|
||||||
@ -1268,6 +1267,12 @@ typedef struct restore_data
|
|||||||
|
|
||||||
} restore_data_t;
|
} restore_data_t;
|
||||||
|
|
||||||
|
typedef struct pidfile_data
|
||||||
|
{
|
||||||
|
u32 pid;
|
||||||
|
|
||||||
|
} pidfile_data_t;
|
||||||
|
|
||||||
typedef struct restore_ctx
|
typedef struct restore_ctx
|
||||||
{
|
{
|
||||||
bool enabled;
|
bool enabled;
|
||||||
@ -1282,6 +1287,15 @@ typedef struct restore_ctx
|
|||||||
|
|
||||||
} restore_ctx_t;
|
} restore_ctx_t;
|
||||||
|
|
||||||
|
typedef struct pidfile_ctx
|
||||||
|
{
|
||||||
|
u32 pid;
|
||||||
|
char *filename;
|
||||||
|
|
||||||
|
pidfile_data_t *pd;
|
||||||
|
|
||||||
|
} pidfile_ctx_t;
|
||||||
|
|
||||||
typedef struct kernel_rule
|
typedef struct kernel_rule
|
||||||
{
|
{
|
||||||
u32 cmds[32];
|
u32 cmds[32];
|
||||||
@ -1819,6 +1833,7 @@ typedef struct hashcat_ctx
|
|||||||
opencl_ctx_t *opencl_ctx;
|
opencl_ctx_t *opencl_ctx;
|
||||||
outcheck_ctx_t *outcheck_ctx;
|
outcheck_ctx_t *outcheck_ctx;
|
||||||
outfile_ctx_t *outfile_ctx;
|
outfile_ctx_t *outfile_ctx;
|
||||||
|
pidfile_ctx_t *pidfile_ctx;
|
||||||
potfile_ctx_t *potfile_ctx;
|
potfile_ctx_t *potfile_ctx;
|
||||||
restore_ctx_t *restore_ctx;
|
restore_ctx_t *restore_ctx;
|
||||||
status_ctx_t *status_ctx;
|
status_ctx_t *status_ctx;
|
||||||
|
@ -267,7 +267,7 @@ include $(CRT_GLOB_INCLUDE_FOLDER)/win_file_globbing.mk
|
|||||||
## Objects
|
## Objects
|
||||||
##
|
##
|
||||||
|
|
||||||
OBJS_ALL := affinity autotune benchmark bitmap bitops combinator common convert cpt cpu_aes cpu_crc32 cpu_des cpu_md4 cpu_md5 cpu_sha1 cpu_sha256 debugfile dictstat dispatch dynloader event ext_ADL ext_nvapi ext_nvml ext_OpenCL ext_sysfs ext_xnvctrl ext_lzma lzma_sdk/Alloc lzma_sdk/Lzma2Dec lzma_sdk/LzmaDec filehandling folder hashcat hashes hlfmt hwmon induct interface locking logfile loopback memory monitor mpsp opencl outfile_check outfile potfile restore rp rp_cpu rp_kernel_on_cpu shared status stdout straight terminal thread timer tuningdb usage user_options weak_hash wordlist
|
OBJS_ALL := affinity autotune benchmark bitmap bitops combinator common convert cpt cpu_aes cpu_crc32 cpu_des cpu_md4 cpu_md5 cpu_sha1 cpu_sha256 debugfile dictstat dispatch dynloader event ext_ADL ext_nvapi ext_nvml ext_OpenCL ext_sysfs ext_xnvctrl ext_lzma lzma_sdk/Alloc lzma_sdk/Lzma2Dec lzma_sdk/LzmaDec filehandling folder hashcat hashes hlfmt hwmon induct interface locking logfile loopback memory monitor mpsp opencl outfile_check outfile pidfile potfile restore rp rp_cpu rp_kernel_on_cpu shared status stdout straight terminal thread timer tuningdb usage user_options weak_hash wordlist
|
||||||
|
|
||||||
NATIVE_STATIC_OBJS := $(foreach OBJ,$(OBJS_ALL),obj/$(OBJ).NATIVE.STATIC.o)
|
NATIVE_STATIC_OBJS := $(foreach OBJ,$(OBJS_ALL),obj/$(OBJ).NATIVE.STATIC.o)
|
||||||
NATIVE_SHARED_OBJS := $(foreach OBJ,$(OBJS_ALL),obj/$(OBJ).NATIVE.SHARED.o)
|
NATIVE_SHARED_OBJS := $(foreach OBJ,$(OBJS_ALL),obj/$(OBJ).NATIVE.SHARED.o)
|
||||||
@ -293,7 +293,7 @@ WIN_64_OBJS := $(foreach OBJ,$(OBJS_ALL),obj/$(OBJ).WIN.64.o) $(CRT_
|
|||||||
default: hashcat
|
default: hashcat
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(RM) -f obj/*.o obj/lzma_sdk/*.o *.bin *.exe *.so *.dll *.restore *.out *.pot *.log hashcat core
|
$(RM) -f obj/*.o obj/lzma_sdk/*.o *.bin *.exe *.so *.dll *.restore *.out *.pid *.log hashcat core
|
||||||
$(RM) -rf *.induct
|
$(RM) -rf *.induct
|
||||||
$(RM) -rf *.outfiles
|
$(RM) -rf *.outfiles
|
||||||
$(RM) -rf *.dSYM
|
$(RM) -rf *.dSYM
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
#include "opencl.h"
|
#include "opencl.h"
|
||||||
#include "outfile_check.h"
|
#include "outfile_check.h"
|
||||||
#include "outfile.h"
|
#include "outfile.h"
|
||||||
|
#include "pidfile.h"
|
||||||
#include "potfile.h"
|
#include "potfile.h"
|
||||||
#include "restore.h"
|
#include "restore.h"
|
||||||
#include "rp.h"
|
#include "rp.h"
|
||||||
@ -809,6 +810,7 @@ int hashcat_init (hashcat_ctx_t *hashcat_ctx, void (*event) (const u32, struct h
|
|||||||
hashcat_ctx->opencl_ctx = (opencl_ctx_t *) hcmalloc (sizeof (opencl_ctx_t));
|
hashcat_ctx->opencl_ctx = (opencl_ctx_t *) hcmalloc (sizeof (opencl_ctx_t));
|
||||||
hashcat_ctx->outcheck_ctx = (outcheck_ctx_t *) hcmalloc (sizeof (outcheck_ctx_t));
|
hashcat_ctx->outcheck_ctx = (outcheck_ctx_t *) hcmalloc (sizeof (outcheck_ctx_t));
|
||||||
hashcat_ctx->outfile_ctx = (outfile_ctx_t *) hcmalloc (sizeof (outfile_ctx_t));
|
hashcat_ctx->outfile_ctx = (outfile_ctx_t *) hcmalloc (sizeof (outfile_ctx_t));
|
||||||
|
hashcat_ctx->pidfile_ctx = (pidfile_ctx_t *) hcmalloc (sizeof (pidfile_ctx_t));
|
||||||
hashcat_ctx->potfile_ctx = (potfile_ctx_t *) hcmalloc (sizeof (potfile_ctx_t));
|
hashcat_ctx->potfile_ctx = (potfile_ctx_t *) hcmalloc (sizeof (potfile_ctx_t));
|
||||||
hashcat_ctx->restore_ctx = (restore_ctx_t *) hcmalloc (sizeof (restore_ctx_t));
|
hashcat_ctx->restore_ctx = (restore_ctx_t *) hcmalloc (sizeof (restore_ctx_t));
|
||||||
hashcat_ctx->status_ctx = (status_ctx_t *) hcmalloc (sizeof (status_ctx_t));
|
hashcat_ctx->status_ctx = (status_ctx_t *) hcmalloc (sizeof (status_ctx_t));
|
||||||
@ -840,6 +842,7 @@ void hashcat_destroy (hashcat_ctx_t *hashcat_ctx)
|
|||||||
hcfree (hashcat_ctx->opencl_ctx);
|
hcfree (hashcat_ctx->opencl_ctx);
|
||||||
hcfree (hashcat_ctx->outcheck_ctx);
|
hcfree (hashcat_ctx->outcheck_ctx);
|
||||||
hcfree (hashcat_ctx->outfile_ctx);
|
hcfree (hashcat_ctx->outfile_ctx);
|
||||||
|
hcfree (hashcat_ctx->pidfile_ctx);
|
||||||
hcfree (hashcat_ctx->potfile_ctx);
|
hcfree (hashcat_ctx->potfile_ctx);
|
||||||
hcfree (hashcat_ctx->restore_ctx);
|
hcfree (hashcat_ctx->restore_ctx);
|
||||||
hcfree (hashcat_ctx->status_ctx);
|
hcfree (hashcat_ctx->status_ctx);
|
||||||
@ -880,6 +883,14 @@ int hashcat_session_init (hashcat_ctx_t *hashcat_ctx, char *install_folder, char
|
|||||||
|
|
||||||
if (rc_folder_config_init == -1) return -1;
|
if (rc_folder_config_init == -1) return -1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pidfile
|
||||||
|
*/
|
||||||
|
|
||||||
|
const int rc_pidfile_init = pidfile_ctx_init (hashcat_ctx);
|
||||||
|
|
||||||
|
if (rc_pidfile_init == -1) return -1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* restore
|
* restore
|
||||||
*/
|
*/
|
||||||
@ -1104,6 +1115,10 @@ int hashcat_session_execute (hashcat_ctx_t *hashcat_ctx)
|
|||||||
|
|
||||||
unlink_restore (hashcat_ctx);
|
unlink_restore (hashcat_ctx);
|
||||||
|
|
||||||
|
// unlink the pidfile
|
||||||
|
|
||||||
|
unlink_pidfile (hashcat_ctx);
|
||||||
|
|
||||||
// final update dictionary cache
|
// final update dictionary cache
|
||||||
|
|
||||||
dictstat_write (hashcat_ctx);
|
dictstat_write (hashcat_ctx);
|
||||||
@ -1172,6 +1187,7 @@ int hashcat_session_destroy (hashcat_ctx_t *hashcat_ctx)
|
|||||||
opencl_ctx_devices_destroy (hashcat_ctx);
|
opencl_ctx_devices_destroy (hashcat_ctx);
|
||||||
outcheck_ctx_destroy (hashcat_ctx);
|
outcheck_ctx_destroy (hashcat_ctx);
|
||||||
outfile_destroy (hashcat_ctx);
|
outfile_destroy (hashcat_ctx);
|
||||||
|
pidfile_ctx_destroy (hashcat_ctx);
|
||||||
potfile_destroy (hashcat_ctx);
|
potfile_destroy (hashcat_ctx);
|
||||||
restore_ctx_destroy (hashcat_ctx);
|
restore_ctx_destroy (hashcat_ctx);
|
||||||
tuning_db_destroy (hashcat_ctx);
|
tuning_db_destroy (hashcat_ctx);
|
||||||
|
168
src/pidfile.c
Normal file
168
src/pidfile.c
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
/**
|
||||||
|
* Author......: See docs/credits.txt
|
||||||
|
* License.....: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
#include "types.h"
|
||||||
|
#include "memory.h"
|
||||||
|
#include "event.h"
|
||||||
|
#include "user_options.h"
|
||||||
|
#include "shared.h"
|
||||||
|
#include "pidfile.h"
|
||||||
|
|
||||||
|
static int check_running_process (hashcat_ctx_t *hashcat_ctx)
|
||||||
|
{
|
||||||
|
pidfile_ctx_t *pidfile_ctx = hashcat_ctx->pidfile_ctx;
|
||||||
|
|
||||||
|
char *pidfile_filename = pidfile_ctx->filename;
|
||||||
|
|
||||||
|
FILE *fp = fopen (pidfile_filename, "rb");
|
||||||
|
|
||||||
|
if (fp == NULL) return 0;
|
||||||
|
|
||||||
|
pidfile_data_t *pd = (pidfile_data_t *) hcmalloc (sizeof (pidfile_data_t));
|
||||||
|
|
||||||
|
const size_t nread = fread (pd, sizeof (pidfile_data_t), 1, fp);
|
||||||
|
|
||||||
|
fclose (fp);
|
||||||
|
|
||||||
|
if (nread != 1)
|
||||||
|
{
|
||||||
|
event_log_error (hashcat_ctx, "Cannot read %s", pidfile_filename);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pd->pid)
|
||||||
|
{
|
||||||
|
#if defined (_POSIX)
|
||||||
|
|
||||||
|
char *pidbin;
|
||||||
|
|
||||||
|
hc_asprintf (&pidbin, "/proc/%u/cmdline", pd->pid);
|
||||||
|
|
||||||
|
if (hc_path_exist (pidbin) == true)
|
||||||
|
{
|
||||||
|
event_log_error (hashcat_ctx, "Already an instance running on pid %u", pd->pid);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
hcfree (pidbin);
|
||||||
|
|
||||||
|
#elif defined (_WIN)
|
||||||
|
|
||||||
|
HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS, FALSE, pd->pid);
|
||||||
|
|
||||||
|
char *pidbin = (char *) hcmalloc (HCBUFSIZ_LARGE);
|
||||||
|
char *pidbin2 = (char *) hcmalloc (HCBUFSIZ_LARGE);
|
||||||
|
|
||||||
|
int pidbin_len = GetModuleFileName (NULL, pidbin, HCBUFSIZ_LARGE);
|
||||||
|
int pidbin2_len = GetModuleFileNameEx (hProcess, NULL, pidbin2, HCBUFSIZ_LARGE);
|
||||||
|
|
||||||
|
pidbin[pidbin_len] = 0;
|
||||||
|
pidbin2[pidbin2_len] = 0;
|
||||||
|
|
||||||
|
if (pidbin2_len)
|
||||||
|
{
|
||||||
|
if (strcmp (pidbin, pidbin2) == 0)
|
||||||
|
{
|
||||||
|
event_log_error (hashcat_ctx, "Already an instance %s running on pid %d", pidbin2, pd->pid);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hcfree (pidbin2);
|
||||||
|
hcfree (pidbin);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
hcfree (pd);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int init_pidfile (hashcat_ctx_t *hashcat_ctx)
|
||||||
|
{
|
||||||
|
pidfile_ctx_t *pidfile_ctx = hashcat_ctx->pidfile_ctx;
|
||||||
|
|
||||||
|
pidfile_data_t *pd = (pidfile_data_t *) hcmalloc (sizeof (pidfile_data_t));
|
||||||
|
|
||||||
|
pidfile_ctx->pd = pd;
|
||||||
|
|
||||||
|
const int rc = check_running_process (hashcat_ctx);
|
||||||
|
|
||||||
|
if (rc == -1) return -1;
|
||||||
|
|
||||||
|
#if defined (_POSIX)
|
||||||
|
pd->pid = getpid ();
|
||||||
|
#elif defined (_WIN)
|
||||||
|
pd->pid = GetCurrentProcessId ();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int write_pidfile (hashcat_ctx_t *hashcat_ctx)
|
||||||
|
{
|
||||||
|
const pidfile_ctx_t *pidfile_ctx = hashcat_ctx->pidfile_ctx;
|
||||||
|
|
||||||
|
pidfile_data_t *pd = pidfile_ctx->pd;
|
||||||
|
|
||||||
|
char *pidfile_filename = pidfile_ctx->filename;
|
||||||
|
|
||||||
|
FILE *fp = fopen (pidfile_filename, "wb");
|
||||||
|
|
||||||
|
if (fp == NULL)
|
||||||
|
{
|
||||||
|
event_log_error (hashcat_ctx, "%s: %m", pidfile_filename);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
fwrite (pd, sizeof (pidfile_data_t), 1, fp);
|
||||||
|
|
||||||
|
fflush (fp);
|
||||||
|
|
||||||
|
fclose (fp);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void unlink_pidfile (hashcat_ctx_t *hashcat_ctx)
|
||||||
|
{
|
||||||
|
pidfile_ctx_t *pidfile_ctx = hashcat_ctx->pidfile_ctx;
|
||||||
|
|
||||||
|
unlink (pidfile_ctx->filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
int pidfile_ctx_init (hashcat_ctx_t *hashcat_ctx)
|
||||||
|
{
|
||||||
|
folder_config_t *folder_config = hashcat_ctx->folder_config;
|
||||||
|
pidfile_ctx_t *pidfile_ctx = hashcat_ctx->pidfile_ctx;
|
||||||
|
user_options_t *user_options = hashcat_ctx->user_options;
|
||||||
|
|
||||||
|
hc_asprintf (&pidfile_ctx->filename, "%s/%s.pid", folder_config->session_dir, user_options->session);
|
||||||
|
|
||||||
|
const int rc_init_pidfile = init_pidfile (hashcat_ctx);
|
||||||
|
|
||||||
|
if (rc_init_pidfile == -1) return -1;
|
||||||
|
|
||||||
|
write_pidfile (hashcat_ctx);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void pidfile_ctx_destroy (hashcat_ctx_t *hashcat_ctx)
|
||||||
|
{
|
||||||
|
pidfile_ctx_t *pidfile_ctx = hashcat_ctx->pidfile_ctx;
|
||||||
|
|
||||||
|
hcfree (pidfile_ctx->filename);
|
||||||
|
|
||||||
|
hcfree (pidfile_ctx->pd);
|
||||||
|
|
||||||
|
memset (pidfile_ctx, 0, sizeof (pidfile_ctx_t));
|
||||||
|
}
|
116
src/restore.c
116
src/restore.c
@ -20,106 +20,6 @@ static void fsync (int fd)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int check_running_process (hashcat_ctx_t *hashcat_ctx)
|
|
||||||
{
|
|
||||||
restore_ctx_t *restore_ctx = hashcat_ctx->restore_ctx;
|
|
||||||
|
|
||||||
char *eff_restore_file = restore_ctx->eff_restore_file;
|
|
||||||
|
|
||||||
FILE *fp = fopen (eff_restore_file, "rb");
|
|
||||||
|
|
||||||
if (fp == NULL) return 0;
|
|
||||||
|
|
||||||
restore_data_t *rd = (restore_data_t *) hcmalloc (sizeof (restore_data_t));
|
|
||||||
|
|
||||||
const size_t nread = fread (rd, sizeof (restore_data_t), 1, fp);
|
|
||||||
|
|
||||||
fclose (fp);
|
|
||||||
|
|
||||||
if (nread != 1)
|
|
||||||
{
|
|
||||||
event_log_error (hashcat_ctx, "Cannot read %s", eff_restore_file);
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rd->pid)
|
|
||||||
{
|
|
||||||
#if defined (_POSIX)
|
|
||||||
|
|
||||||
char *pidbin;
|
|
||||||
|
|
||||||
hc_asprintf (&pidbin, "/proc/%u/cmdline", rd->pid);
|
|
||||||
|
|
||||||
FILE *fd = fopen (pidbin, "rb");
|
|
||||||
|
|
||||||
if (fd)
|
|
||||||
{
|
|
||||||
size_t pidbin_len = fread (pidbin, 1, HCBUFSIZ_LARGE, fd);
|
|
||||||
|
|
||||||
pidbin[pidbin_len] = 0;
|
|
||||||
|
|
||||||
fclose (fd);
|
|
||||||
|
|
||||||
char *argv0_r = strrchr (restore_ctx->argv[0], '/');
|
|
||||||
|
|
||||||
char *pidbin_r = strrchr (pidbin, '/');
|
|
||||||
|
|
||||||
if (argv0_r == NULL) argv0_r = restore_ctx->argv[0];
|
|
||||||
|
|
||||||
if (pidbin_r == NULL) pidbin_r = pidbin;
|
|
||||||
|
|
||||||
if (strcmp (argv0_r, pidbin_r) == 0)
|
|
||||||
{
|
|
||||||
event_log_error (hashcat_ctx, "Already an instance %s running on pid %u", pidbin, rd->pid);
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
hcfree (pidbin);
|
|
||||||
|
|
||||||
#elif defined (_WIN)
|
|
||||||
|
|
||||||
HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS, FALSE, rd->pid);
|
|
||||||
|
|
||||||
char *pidbin = (char *) hcmalloc (HCBUFSIZ_LARGE);
|
|
||||||
char *pidbin2 = (char *) hcmalloc (HCBUFSIZ_LARGE);
|
|
||||||
|
|
||||||
int pidbin_len = GetModuleFileName (NULL, pidbin, HCBUFSIZ_LARGE);
|
|
||||||
int pidbin2_len = GetModuleFileNameEx (hProcess, NULL, pidbin2, HCBUFSIZ_LARGE);
|
|
||||||
|
|
||||||
pidbin[pidbin_len] = 0;
|
|
||||||
pidbin2[pidbin2_len] = 0;
|
|
||||||
|
|
||||||
if (pidbin2_len)
|
|
||||||
{
|
|
||||||
if (strcmp (pidbin, pidbin2) == 0)
|
|
||||||
{
|
|
||||||
event_log_error (hashcat_ctx, "Already an instance %s running on pid %d", pidbin2, rd->pid);
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
hcfree (pidbin2);
|
|
||||||
hcfree (pidbin);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rd->version < RESTORE_VERSION_MIN)
|
|
||||||
{
|
|
||||||
event_log_error (hashcat_ctx, "Cannot use outdated %s. Please remove it.", eff_restore_file);
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
hcfree (rd);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int init_restore (hashcat_ctx_t *hashcat_ctx)
|
static int init_restore (hashcat_ctx_t *hashcat_ctx)
|
||||||
{
|
{
|
||||||
restore_ctx_t *restore_ctx = hashcat_ctx->restore_ctx;
|
restore_ctx_t *restore_ctx = hashcat_ctx->restore_ctx;
|
||||||
@ -128,21 +28,11 @@ static int init_restore (hashcat_ctx_t *hashcat_ctx)
|
|||||||
|
|
||||||
restore_ctx->rd = rd;
|
restore_ctx->rd = rd;
|
||||||
|
|
||||||
const int rc = check_running_process (hashcat_ctx);
|
|
||||||
|
|
||||||
if (rc == -1) return -1;
|
|
||||||
|
|
||||||
rd->version = RESTORE_VERSION_CUR;
|
rd->version = RESTORE_VERSION_CUR;
|
||||||
|
|
||||||
rd->argc = restore_ctx->argc;
|
rd->argc = restore_ctx->argc;
|
||||||
rd->argv = restore_ctx->argv;
|
rd->argv = restore_ctx->argv;
|
||||||
|
|
||||||
#if defined (_POSIX)
|
|
||||||
rd->pid = getpid ();
|
|
||||||
#elif defined (_WIN)
|
|
||||||
rd->pid = GetCurrentProcessId ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (getcwd (rd->cwd, 255) == NULL)
|
if (getcwd (rd->cwd, 255) == NULL)
|
||||||
{
|
{
|
||||||
event_log_error (hashcat_ctx, "getcwd(): %m");
|
event_log_error (hashcat_ctx, "getcwd(): %m");
|
||||||
@ -387,12 +277,6 @@ int restore_ctx_init (hashcat_ctx_t *hashcat_ctx, int argc, char **argv)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined (_POSIX)
|
|
||||||
rd->pid = getpid ();
|
|
||||||
#elif defined (_WIN)
|
|
||||||
rd->pid = GetCurrentProcessId ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
user_options_init (hashcat_ctx);
|
user_options_init (hashcat_ctx);
|
||||||
|
|
||||||
const int rc_options_getopt = user_options_getopt (hashcat_ctx, rd->argc, rd->argv);
|
const int rc_options_getopt = user_options_getopt (hashcat_ctx, rd->argc, rd->argv);
|
||||||
|
@ -75,10 +75,11 @@ void goodbye_screen (hashcat_ctx_t *hashcat_ctx, const time_t proc_start, const
|
|||||||
if (user_options->show == true) return;
|
if (user_options->show == true) return;
|
||||||
if (user_options->left == true) return;
|
if (user_options->left == true) return;
|
||||||
|
|
||||||
char start_buf[32], stop_buf[32];
|
char start_buf[32]; memset (start_buf, 0, sizeof (start_buf));
|
||||||
|
char stop_buf[32]; memset (start_buf, 0, sizeof (stop_buf));
|
||||||
|
|
||||||
event_log_info_nn (hashcat_ctx, "Started: %s", ctime_r (&proc_start, start_buf));
|
event_log_info_nn (hashcat_ctx, "Started: %s", ctime_r (&proc_start, start_buf));
|
||||||
event_log_info_nn (hashcat_ctx, "Stopped: %s", ctime_r (&proc_stop, stop_buf));
|
event_log_info_nn (hashcat_ctx, "Stopped: %s", ctime_r (&proc_stop, stop_buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
int setup_console ()
|
int setup_console ()
|
||||||
|
@ -1268,6 +1268,7 @@ int user_options_check_files (hashcat_ctx_t *hashcat_ctx)
|
|||||||
logfile_ctx_t *logfile_ctx = hashcat_ctx->logfile_ctx;
|
logfile_ctx_t *logfile_ctx = hashcat_ctx->logfile_ctx;
|
||||||
outcheck_ctx_t *outcheck_ctx = hashcat_ctx->outcheck_ctx;
|
outcheck_ctx_t *outcheck_ctx = hashcat_ctx->outcheck_ctx;
|
||||||
outfile_ctx_t *outfile_ctx = hashcat_ctx->outfile_ctx;
|
outfile_ctx_t *outfile_ctx = hashcat_ctx->outfile_ctx;
|
||||||
|
pidfile_ctx_t *pidfile_ctx = hashcat_ctx->pidfile_ctx;
|
||||||
potfile_ctx_t *potfile_ctx = hashcat_ctx->potfile_ctx;
|
potfile_ctx_t *potfile_ctx = hashcat_ctx->potfile_ctx;
|
||||||
user_options_extra_t *user_options_extra = hashcat_ctx->user_options_extra;
|
user_options_extra_t *user_options_extra = hashcat_ctx->user_options_extra;
|
||||||
user_options_t *user_options = hashcat_ctx->user_options;
|
user_options_t *user_options = hashcat_ctx->user_options;
|
||||||
@ -1551,6 +1552,18 @@ int user_options_check_files (hashcat_ctx_t *hashcat_ctx)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// pidfile
|
||||||
|
|
||||||
|
if (hc_path_exist (pidfile_ctx->filename) == true)
|
||||||
|
{
|
||||||
|
if (hc_path_write (pidfile_ctx->filename) == false)
|
||||||
|
{
|
||||||
|
event_log_error (hashcat_ctx, "%s: %m", pidfile_ctx->filename);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// potfile
|
// potfile
|
||||||
|
|
||||||
if (potfile_ctx->enabled == true)
|
if (potfile_ctx->enabled == true)
|
||||||
|
Loading…
Reference in New Issue
Block a user