Skip to content

Commit

Permalink
stat: add wrappers to isolate OS_WIN32 specifics
Browse files Browse the repository at this point in the history
(cherry picked from commit 269f751)
  • Loading branch information
victorjulien authored and jlucovsky committed Aug 28, 2023
1 parent 2a4a424 commit eefa743
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 85 deletions.
10 changes: 3 additions & 7 deletions src/detect-engine.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@
#include "util-spm.h"
#include "util-device.h"
#include "util-var-name.h"
#include "util-path.h"
#include "util-profiling.h"
#include "util-validate.h"

Expand Down Expand Up @@ -3301,13 +3302,8 @@ static int DetectEngineMultiTenantLoadTenant(uint32_t tenant_id, const char *fil

snprintf(prefix, sizeof(prefix), "multi-detect.%u", tenant_id);

#ifdef OS_WIN32
struct _stat st;
if(_stat(filename, &st) != 0) {
#else
struct stat st;
if(stat(filename, &st) != 0) {
#endif /* OS_WIN32 */
SCStat st;
if (SCStatFn(filename, &st) != 0) {
SCLogError(SC_ERR_FOPEN, "failed to stat file %s", filename);
goto error;
}
Expand Down
44 changes: 9 additions & 35 deletions src/runmode-unix-socket.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
#include "util-time.h"
#include "util-cpu.h"
#include "util-affinity.h"
#include "util-var-name.h"
#include "util-path.h"
#include "unix-manager.h"

#include "detect-engine.h"
Expand Down Expand Up @@ -304,11 +306,7 @@ static TmEcode UnixSocketAddPcapFileImpl(json_t *cmd, json_t* answer, void *data
bool should_delete = false;
time_t delay = 30;
time_t poll_interval = 5;
#ifdef OS_WIN32
struct _stat st;
#else
struct stat st;
#endif /* OS_WIN32 */
SCStat st;

json_t *jarg = json_object_get(cmd, "filename");
if (!json_is_string(jarg)) {
Expand All @@ -318,11 +316,7 @@ static TmEcode UnixSocketAddPcapFileImpl(json_t *cmd, json_t* answer, void *data
return TM_ECODE_FAILED;
}
filename = json_string_value(jarg);
#ifdef OS_WIN32
if (_stat(filename, &st) != 0) {
#else
if (stat(filename, &st) != 0) {
#endif /* OS_WIN32 */
if (SCStatFn(filename, &st) != 0) {
json_object_set_new(answer, "message",
json_string("filename does not exist"));
return TM_ECODE_FAILED;
Expand All @@ -346,11 +340,7 @@ static TmEcode UnixSocketAddPcapFileImpl(json_t *cmd, json_t* answer, void *data
return TM_ECODE_FAILED;
}

#ifdef OS_WIN32
if (_stat(output_dir, &st) != 0) {
#else
if (stat(output_dir, &st) != 0) {
#endif /* OS_WIN32 */
if (SCStatFn(output_dir, &st) != 0) {
json_object_set_new(answer, "message",
json_string("output-dir does not exist"));
return TM_ECODE_FAILED;
Expand Down Expand Up @@ -909,11 +899,7 @@ TmEcode UnixSocketUnregisterTenantHandler(json_t *cmd, json_t* answer, void *dat
TmEcode UnixSocketRegisterTenant(json_t *cmd, json_t* answer, void *data)
{
const char *filename;
#ifdef OS_WIN32
struct _stat st;
#else
struct stat st;
#endif /* OS_WIN32 */
SCStat st;

if (!(DetectEngineMultiTenantEnabled())) {
SCLogInfo("error: multi-tenant support not enabled");
Expand All @@ -936,11 +922,7 @@ TmEcode UnixSocketRegisterTenant(json_t *cmd, json_t* answer, void *data)
return TM_ECODE_FAILED;
}
filename = json_string_value(jarg);
#ifdef OS_WIN32
if (_stat(filename, &st) != 0) {
#else
if (stat(filename, &st) != 0) {
#endif /* OS_WIN32 */
if (SCStatFn(filename, &st) != 0) {
json_object_set_new(answer, "message", json_string("file does not exist"));
return TM_ECODE_FAILED;
}
Expand Down Expand Up @@ -985,11 +967,7 @@ static int reload_cnt = 1;
TmEcode UnixSocketReloadTenant(json_t *cmd, json_t* answer, void *data)
{
const char *filename;
#ifdef OS_WIN32
struct _stat st;
#else
struct stat st;
#endif /* OS_WIN32 */
SCStat st;

if (!(DetectEngineMultiTenantEnabled())) {
SCLogInfo("error: multi-tenant support not enabled");
Expand All @@ -1012,11 +990,7 @@ TmEcode UnixSocketReloadTenant(json_t *cmd, json_t* answer, void *data)
return TM_ECODE_FAILED;
}
filename = json_string_value(jarg);
#ifdef OS_WIN32
if (_stat(filename, &st) != 0) {
#else
if (stat(filename, &st) != 0) {
#endif /* OS_WIN32 */
if (SCStatFn(filename, &st) != 0) {
json_object_set_new(answer, "message", json_string("file does not exist"));
return TM_ECODE_FAILED;
}
Expand Down
15 changes: 4 additions & 11 deletions src/source-pcap-file-directory-helper.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
#include "source-pcap-file-directory-helper.h"
#include "runmode-unix-socket.h"
#include "util-mem.h"
#include "util-time.h"
#include "util-path.h"
#include "source-pcap-file.h"

static void GetTime(struct timespec *tm);
Expand Down Expand Up @@ -227,23 +229,14 @@ TmEcode PcapDetermineDirectoryOrFile(char *filename, DIR **directory)

int PcapDirectoryGetModifiedTime(char const *file, struct timespec *out)
{
#ifdef OS_WIN32
struct _stat buf;
#else
struct stat buf;
#endif /* OS_WIN32 */
SCStat buf;
int ret;

if (file == NULL)
return -1;

#ifdef OS_WIN32
if((ret = _stat(file, &buf)) != 0)
return ret;
#else
if ((ret = stat(file, &buf)) != 0)
if ((ret = SCStatFn(file, &buf)) != 0)
return ret;
#endif

#ifdef OS_DARWIN
out->tv_sec = buf.st_mtimespec.tv_sec;
Expand Down
48 changes: 30 additions & 18 deletions src/suricata.c
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,25 @@

#include "tmqh-packetpool.h"

#include "util-byte.h"
#include "util-conf.h"
#include "util-coredump-config.h"
#include "util-cpu.h"
#include "util-daemon.h"
#include "util-device.h"
#include "util-ebpf.h"
#include "util-exception-policy.h"
#include "util-host-os-info.h"
#include "util-ioctl.h"
#include "util-luajit.h"
#include "util-macset.h"
#include "util-misc.h"
#include "util-mpm-hs.h"
#include "util-path.h"
#include "util-pidfile.h"
#include "util-plugin.h"
#include "util-privs.h"
#include "util-profiling.h"
#include "util-proto-name.h"
#include "util-running-modes.h"
#include "util-signal.h"
Expand Down Expand Up @@ -518,19 +537,17 @@ static void SetBpfStringFromFile(char *filename)
char *bpf_comment_tmp = NULL;
char *bpf_comment_start = NULL;
uint32_t bpf_len = 0;
#ifdef OS_WIN32
struct _stat st;
#else
struct stat st;
#endif /* OS_WIN32 */
SCStat st;
FILE *fp = NULL;
size_t nm = 0;

#ifdef OS_WIN32
if(_stat(filename, &st) != 0) {
#else
if(stat(filename, &st) != 0) {
#endif /* OS_WIN32 */
fp = fopen(filename, "r");
if (fp == NULL) {
SCLogError(SC_ERR_FOPEN, "Failed to open file %s", filename);
exit(EXIT_FAILURE);
}

if (SCFstatFn(fileno(fp), &st) != 0) {
SCLogError(SC_ERR_FOPEN, "Failed to stat file %s", filename);
exit(EXIT_FAILURE);
}
Expand Down Expand Up @@ -1828,14 +1845,9 @@ static TmEcode ParseCommandLine(int argc, char** argv, SCInstance *suri)
PrintUsage(argv[0]);
return TM_ECODE_FAILED;
}
#ifdef OS_WIN32
struct _stat buf;
if(_stat(optarg, &buf) != 0) {
#else
struct stat buf;
if (stat(optarg, &buf) != 0) {
#endif /* OS_WIN32 */
SCLogError(SC_ERR_INITIALIZATION, "ERROR: Pcap file does not exist\n");
SCStat buf;
if (SCStatFn(optarg, &buf) != 0) {
SCLogError(SC_ERR_INITIALIZATION, "pcap file '%s': %s", optarg, strerror(errno));
return TM_ECODE_FAILED;
}
if (ConfSetFinal("pcap-file.file", optarg) != 1) {
Expand Down
20 changes: 6 additions & 14 deletions src/util-conf.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
#include "conf.h"
#include "runmodes.h"
#include "util-conf.h"
#include "util-debug.h"
#include "util-path.h"

TmEcode ConfigSetLogDirectory(const char *name)
{
Expand Down Expand Up @@ -53,13 +55,8 @@ const char *ConfigGetLogDirectory(void)
TmEcode ConfigCheckLogDirectoryExists(const char *log_dir)
{
SCEnter();
#ifdef OS_WIN32
struct _stat buf;
if (_stat(log_dir, &buf) != 0) {
#else
struct stat buf;
if (stat(log_dir, &buf) != 0) {
#endif /* OS_WIN32 */
SCStat buf;
if (SCStatFn(log_dir, &buf) != 0) {
SCReturnInt(TM_ECODE_FAILED);
}
SCReturnInt(TM_ECODE_OK);
Expand Down Expand Up @@ -101,13 +98,8 @@ const char *ConfigGetDataDirectory(void)
TmEcode ConfigCheckDataDirectory(const char *data_dir)
{
SCEnter();
#ifdef OS_WIN32
struct _stat buf;
if (_stat(data_dir, &buf) != 0) {
#else
struct stat buf;
if (stat(data_dir, &buf) != 0) {
#endif /* OS_WIN32 */
SCStat buf;
if (SCStatFn(data_dir, &buf) != 0) {
SCReturnInt(TM_ECODE_FAILED);
}
SCReturnInt(TM_ECODE_OK);
Expand Down
10 changes: 10 additions & 0 deletions src/util-path.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,16 @@
#ifndef __UTIL_PATH_H__
#define __UTIL_PATH_H__

#ifdef OS_WIN32
typedef struct _stat SCStat;
#define SCFstatFn(fd, statbuf) _fstat((fd), (statbuf))
#define SCStatFn(pathname, statbuf) _stat((pathname), (statbuf))
#else
typedef struct stat SCStat;
#define SCFstatFn(fd, statbuf) fstat((fd), (statbuf))
#define SCStatFn(pathname, statbuf) stat((pathname), (statbuf))
#endif

#ifndef HAVE_NON_POSIX_MKDIR
#define SCMkDir(a, b) mkdir(a, b)
#else
Expand Down

0 comments on commit eefa743

Please sign in to comment.