From de2fffca5e5d3aece0176418fff3a253eaab4aed Mon Sep 17 00:00:00 2001 From: Jason Ish Date: Thu, 4 Jan 2018 10:06:31 -0600 Subject: [PATCH] util: move SCCreateDirectoryTree to util-path Renames SCLogCreateDirectoryTree to SCCreateDirectoryTree and move into a util module for re-use. Also moves SCMkDir from suricata-common.h to the more appropriately names util-path.h. I would have prefered to use util-file for file related options but that is already used by file store utilities. util-path is close enough for file related operations. --- src/suricata-common.h | 6 ------ src/util-logopenfile.c | 38 ++------------------------------------ src/util-path.c | 36 ++++++++++++++++++++++++++++++++++++ src/util-path.h | 7 +++++++ 4 files changed, 45 insertions(+), 42 deletions(-) diff --git a/src/suricata-common.h b/src/suricata-common.h index e43cfc9518..410b1d500d 100644 --- a/src/suricata-common.h +++ b/src/suricata-common.h @@ -367,12 +367,6 @@ #define WARN_UNUSED __attribute__((warn_unused_result)) -#ifndef HAVE_NON_POSIX_MKDIR - #define SCMkDir(a, b) mkdir(a, b) -#else - #define SCMkDir(a, b) mkdir(a) -#endif - #define SCNtohl(x) (uint32_t)ntohl((x)) #define SCNtohs(x) (uint16_t)ntohs((x)) diff --git a/src/util-logopenfile.c b/src/util-logopenfile.c index 92540812b5..12d230dafd 100644 --- a/src/util-logopenfile.c +++ b/src/util-logopenfile.c @@ -29,6 +29,7 @@ #include "conf.h" /* ConfNode, etc. */ #include "output.h" /* DEFAULT_LOG_* */ #include "util-byte.h" +#include "util-path.h" #include "util-logopenfile.h" #include "util-logopenfile-tile.h" @@ -243,41 +244,6 @@ static char *SCLogFilenameFromPattern(const char *pattern) return filename; } -/** \brief recursively create missing log directories - * \param path path to log file - * \retval 0 on success - * \retval -1 on error - */ -static int SCLogCreateDirectoryTree(const char *filepath) -{ - char pathbuf[PATH_MAX]; - char *p; - size_t len = strlen(filepath); - - if (len > PATH_MAX - 1) { - return -1; - } - - strlcpy(pathbuf, filepath, len); - - for (p = pathbuf + 1; *p; p++) { - if (*p == '/') { - /* Truncate, while creating directory */ - *p = '\0'; - - if (SCMkDir(pathbuf, S_IRWXU | S_IRGRP | S_IXGRP) != 0) { - if (errno != EEXIST) { - return -1; - } - } - - *p = '/'; - } - } - - return 0; -} - static void SCLogFileClose(LogFileCtx *log_ctx) { if (log_ctx->fp) @@ -301,7 +267,7 @@ SCLogOpenFileFp(const char *path, const char *append_setting, uint32_t mode) return NULL; } - int rc = SCLogCreateDirectoryTree(filename); + int rc = SCCreateDirectoryTree(filename); if (rc < 0) { SCFree(filename); return NULL; diff --git a/src/util-path.c b/src/util-path.c index d1b812f028..5af172fb61 100644 --- a/src/util-path.c +++ b/src/util-path.c @@ -26,6 +26,7 @@ #include "suricata.h" #include "debug.h" #include "util-debug.h" +#include "util-path.h" /** * \brief Check if a path is absolute @@ -64,3 +65,38 @@ int PathIsRelative(const char *path) { return PathIsAbsolute(path) ? 0 : 1; } + +/** \brief Recursively create missing log directories. + * \param path path to log file + * \retval 0 on success + * \retval -1 on error + */ +int SCCreateDirectoryTree(const char *path) +{ + char pathbuf[PATH_MAX]; + char *p; + size_t len = strlen(path); + + if (len > PATH_MAX - 1) { + return -1; + } + + strlcpy(pathbuf, path, len); + + for (p = pathbuf + 1; *p; p++) { + if (*p == '/') { + /* Truncate, while creating directory */ + *p = '\0'; + + if (SCMkDir(pathbuf, S_IRWXU | S_IRGRP | S_IXGRP) != 0) { + if (errno != EEXIST) { + return -1; + } + } + + *p = '/'; + } + } + + return 0; +} diff --git a/src/util-path.h b/src/util-path.h index 2243722a59..afb90c647b 100644 --- a/src/util-path.h +++ b/src/util-path.h @@ -25,7 +25,14 @@ #ifndef __UTIL_PATH_H__ #define __UTIL_PATH_H__ +#ifndef HAVE_NON_POSIX_MKDIR + #define SCMkDir(a, b) mkdir(a, b) +#else + #define SCMkDir(a, b) mkdir(a) +#endif + int PathIsAbsolute(const char *); int PathIsRelative(const char *); +int SCCreateDirectoryTree(const char *path); #endif /* __UTIL_PATH_H__ */