1
0
mirror of https://github.com/hashcat/hashcat.git synced 2024-12-23 07:08:19 +00:00

Move all outfile-check folder related host code into outfile_check.c

This commit is contained in:
jsteube 2016-09-22 22:40:47 +02:00
parent 1e2869e8bd
commit 319d548766
4 changed files with 127 additions and 97 deletions

View File

@ -10,4 +10,7 @@
void *thread_outfile_remove (void *p); void *thread_outfile_remove (void *p);
int outcheck_ctx_init (outcheck_ctx_t *outcheck_ctx, const user_options_t *user_options, const folder_config_t *folder_config);
void outcheck_ctx_destroy (outcheck_ctx_t *outcheck_ctx);
#endif // _OUTFILE_CHECK_H #endif // _OUTFILE_CHECK_H

View File

@ -903,6 +903,14 @@ typedef struct
} induct_ctx_t; } induct_ctx_t;
typedef struct
{
bool enabled;
char *root_directory;
} outcheck_ctx_t;
typedef struct typedef struct
{ {
/** /**
@ -976,7 +984,6 @@ typedef struct
u32 maskpos; u32 maskpos;
char *eff_restore_file; char *eff_restore_file;
char *new_restore_file; char *new_restore_file;
char *outfile_check_directory;
u32 pw_min; u32 pw_min;
u32 pw_max; u32 pw_max;
@ -992,6 +999,7 @@ typedef struct
session_ctx_t *session_ctx; session_ctx_t *session_ctx;
bitmap_ctx_t *bitmap_ctx; bitmap_ctx_t *bitmap_ctx;
induct_ctx_t *induct_ctx; induct_ctx_t *induct_ctx;
outcheck_ctx_t *outcheck_ctx;
/** /**
* used for restore * used for restore

View File

@ -176,8 +176,6 @@ int main (int argc, char **argv)
* folder * folder
*/ */
folder_config_t *folder_config = (folder_config_t *) mymalloc (sizeof (folder_config_t));
char *install_folder = NULL; char *install_folder = NULL;
char *shared_folder = NULL; char *shared_folder = NULL;
@ -189,6 +187,8 @@ int main (int argc, char **argv)
shared_folder = SHARED_FOLDER; shared_folder = SHARED_FOLDER;
#endif #endif
folder_config_t *folder_config = (folder_config_t *) mymalloc (sizeof (folder_config_t));
folder_config_init (folder_config, install_folder, shared_folder); folder_config_init (folder_config, install_folder, shared_folder);
/** /**
@ -327,6 +327,16 @@ int main (int argc, char **argv)
} }
} }
/**
* tuning db
*/
char tuning_db_file[256] = { 0 };
snprintf (tuning_db_file, sizeof (tuning_db_file) - 1, "%s/%s", folder_config->shared_dir, TUNING_DB_FILE);
tuning_db_t *tuning_db = tuning_db_init (tuning_db_file);
/** /**
* induction directory * induction directory
*/ */
@ -339,60 +349,17 @@ int main (int argc, char **argv)
if (rc_induct_ctx_init == -1) return -1; if (rc_induct_ctx_init == -1) return -1;
/**
* tuning db
*/
char tuning_db_file[256] = { 0 };
snprintf (tuning_db_file, sizeof (tuning_db_file) - 1, "%s/%s", folder_config->shared_dir, TUNING_DB_FILE);
tuning_db_t *tuning_db = tuning_db_init (tuning_db_file);
/** /**
* outfile-check directory * outfile-check directory
*/ */
char *outfile_check_directory = NULL; outcheck_ctx_t *outcheck_ctx = (outcheck_ctx_t *) mymalloc (sizeof (outcheck_ctx_t));
if ((user_options->keyspace == false) && (user_options->benchmark == false) && (user_options->opencl_info == false)) data.outcheck_ctx = outcheck_ctx;
{
if (user_options->outfile_check_dir == NULL)
{
outfile_check_directory = (char *) mymalloc (HCBUFSIZ_TINY);
snprintf (outfile_check_directory, HCBUFSIZ_TINY - 1, "%s/%s.%s", folder_config->session_dir, user_options->session, OUTFILES_DIR); const int rc_outcheck_ctx_init = outcheck_ctx_init (outcheck_ctx, user_options, folder_config);
}
else
{
outfile_check_directory = user_options->outfile_check_dir;
}
struct stat outfile_check_stat; if (rc_outcheck_ctx_init == -1) return -1;
if (stat (outfile_check_directory, &outfile_check_stat) == 0)
{
uint is_dir = S_ISDIR (outfile_check_stat.st_mode);
if (is_dir == 0)
{
log_error ("ERROR: Directory specified in outfile-check '%s' is not a valid directory", outfile_check_directory);
return -1;
}
}
else if (user_options->outfile_check_dir == NULL)
{
if (mkdir (outfile_check_directory, 0700) == -1)
{
log_error ("ERROR: %s: %s", outfile_check_directory, strerror (errno));
return -1;
}
}
}
data.outfile_check_directory = outfile_check_directory;
/** /**
* cpu affinity * cpu affinity
@ -2491,29 +2458,12 @@ int main (int argc, char **argv)
inner_threads_cnt++; inner_threads_cnt++;
if (user_options->outfile_check_timer != 0) if (outcheck_ctx->enabled == true)
{
if (data.outfile_check_directory != NULL)
{
if ((hashconfig->hash_mode != 5200) &&
!((hashconfig->hash_mode >= 6200) && (hashconfig->hash_mode <= 6299)) &&
!((hashconfig->hash_mode >= 13700) && (hashconfig->hash_mode <= 13799)) &&
(hashconfig->hash_mode != 9000))
{ {
hc_thread_create (inner_threads[inner_threads_cnt], thread_outfile_remove, NULL); hc_thread_create (inner_threads[inner_threads_cnt], thread_outfile_remove, NULL);
inner_threads_cnt++; inner_threads_cnt++;
} }
else
{
user_options->outfile_check_timer = 0;
}
}
else
{
user_options->outfile_check_timer = 0;
}
}
} }
/** /**
@ -3907,28 +3857,9 @@ int main (int argc, char **argv)
// outfile-check directory // outfile-check directory
if (outfile_check_directory != NULL) outcheck_ctx_destroy (outcheck_ctx);
{
if (rmdir (outfile_check_directory) == -1)
{
if (errno == ENOENT)
{
// good, we can ignore
}
else if (errno == ENOTEMPTY)
{
// good, we can ignore
}
else
{
log_error ("ERROR: %s: %s", outfile_check_directory, strerror (errno));
return -1; // shutdown
}
}
local_free (outfile_check_directory);
}
time_t proc_stop; time_t proc_stop;

View File

@ -6,6 +6,7 @@
#include "common.h" #include "common.h"
#include "types.h" #include "types.h"
#include "memory.h" #include "memory.h"
#include "logging.h"
#include "interface.h" #include "interface.h"
#include "timer.h" #include "timer.h"
#include "folder.h" #include "folder.h"
@ -39,9 +40,10 @@ void *thread_outfile_remove (void *p)
// some hash-dependent constants // some hash-dependent constants
user_options_t *user_options = data.user_options; user_options_t *user_options = data.user_options;
opencl_ctx_t *opencl_ctx = data.opencl_ctx;
hashconfig_t *hashconfig = data.hashconfig; hashconfig_t *hashconfig = data.hashconfig;
hashes_t *hashes = data.hashes; hashes_t *hashes = data.hashes;
outcheck_ctx_t *outcheck_ctx = data.outcheck_ctx;
opencl_ctx_t *opencl_ctx = data.opencl_ctx;
uint dgst_size = hashconfig->dgst_size; uint dgst_size = hashconfig->dgst_size;
uint is_salted = hashconfig->is_salted; uint is_salted = hashconfig->is_salted;
@ -49,7 +51,7 @@ void *thread_outfile_remove (void *p)
uint hash_mode = hashconfig->hash_mode; uint hash_mode = hashconfig->hash_mode;
char separator = hashconfig->separator; char separator = hashconfig->separator;
char *outfile_dir = data.outfile_check_directory; char *root_directory = outcheck_ctx->root_directory;
uint outfile_check_timer = user_options->outfile_check_timer; uint outfile_check_timer = user_options->outfile_check_timer;
// buffers // buffers
@ -80,11 +82,11 @@ void *thread_outfile_remove (void *p)
check_left--; check_left--;
if (check_left == false) if (check_left == 0)
{ {
struct stat outfile_check_stat; struct stat outfile_check_stat;
if (stat (outfile_dir, &outfile_check_stat) == 0) if (stat (root_directory, &outfile_check_stat) == 0)
{ {
uint is_dir = S_ISDIR (outfile_check_stat.st_mode); uint is_dir = S_ISDIR (outfile_check_stat.st_mode);
@ -92,7 +94,7 @@ void *thread_outfile_remove (void *p)
{ {
if (outfile_check_stat.st_mtime > folder_mtime) if (outfile_check_stat.st_mtime > folder_mtime)
{ {
char **out_files_new = scan_directory (outfile_dir); char **out_files_new = scan_directory (root_directory);
int out_cnt_new = count_dictionaries (out_files_new); int out_cnt_new = count_dictionaries (out_files_new);
@ -331,3 +333,89 @@ void *thread_outfile_remove (void *p)
return (p); return (p);
} }
int outcheck_ctx_init (outcheck_ctx_t *outcheck_ctx, const user_options_t *user_options, const folder_config_t *folder_config)
{
outcheck_ctx->enabled = false;
if (user_options->keyspace == true) return 0;
if (user_options->benchmark == true) return 0;
if (user_options->opencl_info == true) return 0;
if (user_options->outfile_check_timer == 0) return 0;
if ((user_options->hash_mode == 5200) ||
((user_options->hash_mode >= 6200) && (user_options->hash_mode <= 6299)) ||
((user_options->hash_mode >= 13700) && (user_options->hash_mode <= 13799)) ||
(user_options->hash_mode == 9000)) return 0;
if (user_options->outfile_check_dir == NULL)
{
outcheck_ctx->root_directory = (char *) mymalloc (HCBUFSIZ_TINY);
snprintf (outcheck_ctx->root_directory, HCBUFSIZ_TINY - 1, "%s/%s.%s", folder_config->session_dir, user_options->session, OUTFILES_DIR);
}
else
{
outcheck_ctx->root_directory = user_options->outfile_check_dir;
}
struct stat outfile_check_stat;
if (stat (outcheck_ctx->root_directory, &outfile_check_stat) == 0)
{
const uint is_dir = S_ISDIR (outfile_check_stat.st_mode);
if (is_dir == 0)
{
log_error ("ERROR: Directory specified in outfile-check '%s' is not a valid directory", outcheck_ctx->root_directory);
return -1;
}
}
else
{
if (mkdir (outcheck_ctx->root_directory, 0700) == -1)
{
log_error ("ERROR: %s: %s", outcheck_ctx->root_directory, strerror (errno));
return -1;
}
}
outcheck_ctx->enabled = true;
return 0;
}
void outcheck_ctx_destroy (outcheck_ctx_t *outcheck_ctx)
{
if (outcheck_ctx->enabled == false)
{
myfree (outcheck_ctx);
return;
}
if (rmdir (outcheck_ctx->root_directory) == -1)
{
if (errno == ENOENT)
{
// good, we can ignore
}
else if (errno == ENOTEMPTY)
{
// good, we can ignore
}
else
{
log_error ("ERROR: %s: %s", outcheck_ctx->root_directory, strerror (errno));
//return -1;
}
}
myfree (outcheck_ctx->root_directory);
myfree (outcheck_ctx);
}