From 40c68b8bf4fd0d21a8ce861346c61d7a0c7ed1f6 Mon Sep 17 00:00:00 2001 From: nycex Date: Sat, 5 Jun 2021 20:48:03 +0200 Subject: [PATCH] use recursive mkdir for the profile and the cache dir --- include/folder.h | 1 + src/folder.c | 30 ++++++++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/include/folder.h b/include/folder.h index 34b4618bf..484eff168 100644 --- a/include/folder.h +++ b/include/folder.h @@ -37,5 +37,6 @@ int folder_config_init (hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const char void folder_config_destroy (hashcat_ctx_t *hashcat_ctx); int hc_mkdir (const char *name, MAYBE_UNUSED const int mode); +int hc_mkdir_rec (const char *path, MAYBE_UNUSED const int mode); #endif // _FOLDER_H diff --git a/src/folder.c b/src/folder.c index 018e63cec..61917687d 100644 --- a/src/folder.c +++ b/src/folder.c @@ -9,6 +9,7 @@ #include "event.h" #include "shared.h" #include "folder.h" +#include #if defined (__APPLE__) #include "event.h" @@ -394,8 +395,8 @@ int folder_config_init (hashcat_ctx_t *hashcat_ctx, MAYBE_UNUSED const char *ins shared_dir = hcstrdup (shared_folder); - hc_mkdir (profile_dir, 0700); - hc_mkdir (cache_dir, 0700); + hc_mkdir_rec (profile_dir, 0700); + hc_mkdir_rec (cache_dir, 0700); hc_mkdir (session_dir, 0700); } else @@ -567,3 +568,28 @@ int hc_mkdir (const char *name, MAYBE_UNUSED const int mode) return mkdir (name, mode); #endif } + +int hc_mkdir_rec (const char *path, MAYBE_UNUSED const int mode) +{ + char *subpath, *fullpath; + + fullpath = hcstrdup (path); + subpath = dirname (fullpath); + if (strlen (subpath) > 1) + { + if (hc_mkdir_rec (subpath, mode) == -1) { + return -1; + }; + } + + if (hc_mkdir (path, mode) == -1) + { + if (errno != EEXIST) + { + return -1; + } + } + + hcfree (fullpath); + return 0; +}