From a48856822c0853508c2d096cf6e28f2fa1612571 Mon Sep 17 00:00:00 2001 From: Eduardo Arias Date: Tue, 23 Apr 2024 11:46:29 -0300 Subject: [PATCH] Updated included headers to support compilation on Windows (using Visual C++) - most of posix related functions and constants in unistd.h can be found in io.h in Visual C++ - introduced src/compat/msvc.h to adjust for compiler differences (and avoid updating code with #ifdef blocks for Windows support) - removed some included headers that are not needed (both on Unix and Windows builds) --- examples/multiprocess_c/multi.c | 4 ++++ .../using_bodies_in_chunks/simple_request.cc | 4 ++++ .../transformations/html_entity_decode.cc | 4 ++++ src/actions/transformations/lower_case.cc | 1 + src/actions/transformations/upper_case.cc | 1 + src/audit_log/writer/parallel.cc | 5 +++++ src/audit_log/writer/writer.h | 2 ++ .../backend/in_memory-per_process.h | 1 + src/collection/backend/lmdb.cc | 4 ++++ src/compat/msvc.h | 22 +++++++++++++++++++ src/debug_log/debug_log.cc | 4 ---- src/operators/inspect_file.cc | 4 ++++ src/operators/rbl.cc | 5 +++++ src/operators/rbl.h | 4 ++++ src/parser/seclang-scanner.cc | 4 ++++ src/rules_set_properties.cc | 4 ++++ src/transaction.cc | 3 +++ src/utils/geo_lookup.cc | 5 ++++- src/utils/ip_tree.cc | 4 ++++ src/utils/msc_tree.cc | 6 +++++ src/utils/string.cc | 5 ----- src/utils/system.h | 2 -- src/variables/time.cc | 4 ++++ src/variables/time_day.cc | 4 ++++ src/variables/time_hour.cc | 4 ++++ src/variables/time_min.cc | 4 ++++ src/variables/time_mon.cc | 4 ++++ src/variables/time_sec.cc | 4 ++++ src/variables/time_wday.cc | 4 ++++ src/variables/time_year.cc | 4 ++++ test/fuzzer/afl_fuzzer.cc | 4 ++++ test/regression/regression.cc | 4 ++++ tools/rules-check/rules-check.cc | 4 ++++ 33 files changed, 130 insertions(+), 12 deletions(-) create mode 100644 src/compat/msvc.h diff --git a/examples/multiprocess_c/multi.c b/examples/multiprocess_c/multi.c index 6c2ae521..2481db4e 100644 --- a/examples/multiprocess_c/multi.c +++ b/examples/multiprocess_c/multi.c @@ -19,7 +19,11 @@ #include #include #include +#ifndef WIN32 #include +#else +#include +#endif #include #include #include diff --git a/examples/using_bodies_in_chunks/simple_request.cc b/examples/using_bodies_in_chunks/simple_request.cc index ec8795fe..783e639b 100644 --- a/examples/using_bodies_in_chunks/simple_request.cc +++ b/examples/using_bodies_in_chunks/simple_request.cc @@ -13,7 +13,11 @@ * */ +#ifndef WIN32 #include +#else +#include +#endif #include #include diff --git a/src/actions/transformations/html_entity_decode.cc b/src/actions/transformations/html_entity_decode.cc index b9268df5..6a683245 100644 --- a/src/actions/transformations/html_entity_decode.cc +++ b/src/actions/transformations/html_entity_decode.cc @@ -27,6 +27,10 @@ #include "modsecurity/transaction.h" #include "src/actions/transformations/transformation.h" +#ifdef WIN32 +#include "src/compat/msvc.h" +#endif + namespace modsecurity { namespace actions { diff --git a/src/actions/transformations/lower_case.cc b/src/actions/transformations/lower_case.cc index d00ab40c..7bca9479 100644 --- a/src/actions/transformations/lower_case.cc +++ b/src/actions/transformations/lower_case.cc @@ -17,6 +17,7 @@ #include #include +#include #include "modsecurity/transaction.h" #include "src/actions/transformations/transformation.h" diff --git a/src/actions/transformations/upper_case.cc b/src/actions/transformations/upper_case.cc index 118696ad..998ec725 100644 --- a/src/actions/transformations/upper_case.cc +++ b/src/actions/transformations/upper_case.cc @@ -17,6 +17,7 @@ #include #include +#include #include "modsecurity/transaction.h" #include "src/actions/transformations/transformation.h" diff --git a/src/audit_log/writer/parallel.cc b/src/audit_log/writer/parallel.cc index e42d7871..d23e7958 100644 --- a/src/audit_log/writer/parallel.cc +++ b/src/audit_log/writer/parallel.cc @@ -21,7 +21,12 @@ #include #include #include +#ifndef WIN32 #include +#else +#include +#include "src/compat/msvc.h" +#endif #include #include diff --git a/src/audit_log/writer/writer.h b/src/audit_log/writer/writer.h index 093f271c..56dada06 100644 --- a/src/audit_log/writer/writer.h +++ b/src/audit_log/writer/writer.h @@ -18,8 +18,10 @@ #include +#ifndef WIN32 #include #include +#endif #include #include diff --git a/src/collection/backend/in_memory-per_process.h b/src/collection/backend/in_memory-per_process.h index 43b8de24..3cacdca0 100644 --- a/src/collection/backend/in_memory-per_process.h +++ b/src/collection/backend/in_memory-per_process.h @@ -12,6 +12,7 @@ * directly using the email address security@modsecurity.org. * */ +#include #ifdef __cplusplus diff --git a/src/collection/backend/lmdb.cc b/src/collection/backend/lmdb.cc index 040ebdff..85c68e3c 100644 --- a/src/collection/backend/lmdb.cc +++ b/src/collection/backend/lmdb.cc @@ -18,7 +18,11 @@ #include "src/collection/backend/collection_data.h" #include +#ifndef WIN32 #include +#else +#include +#endif #include #include diff --git a/src/compat/msvc.h b/src/compat/msvc.h new file mode 100644 index 00000000..ce9a14c0 --- /dev/null +++ b/src/compat/msvc.h @@ -0,0 +1,22 @@ +#ifndef __COMPAT_MSVC +#define __COMPAT_MSVC + +#include + +#if !defined(S_ISREG) && defined(S_IFMT) && defined(S_IFREG) +#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +#endif + +#define strcasecmp _stricmp +#define strncasecmp _strnicmp +#define strtok_r strtok_s +#define popen _popen +#define pclose _pclose + +inline tm* localtime_r(const time_t* tin, tm* tout) { + if (!localtime_s(tout, tin)) return tout; + + return nullptr; +} + +#endif diff --git a/src/debug_log/debug_log.cc b/src/debug_log/debug_log.cc index 54d86bda..e883177c 100644 --- a/src/debug_log/debug_log.cc +++ b/src/debug_log/debug_log.cc @@ -15,10 +15,6 @@ #include "modsecurity/debug_log.h" -#include - -#include - #include "src/debug_log/debug_log_writer.h" #include "src/debug_log_writer_agent.h" diff --git a/src/operators/inspect_file.cc b/src/operators/inspect_file.cc index 9ce43af0..72052a32 100644 --- a/src/operators/inspect_file.cc +++ b/src/operators/inspect_file.cc @@ -23,6 +23,10 @@ #include "src/operators/operator.h" #include "src/utils/system.h" +#ifdef WIN32 +#include "src/compat/msvc.h" +#endif + namespace modsecurity { namespace operators { diff --git a/src/operators/rbl.cc b/src/operators/rbl.cc index ffdb17a2..eb7c3f0b 100644 --- a/src/operators/rbl.cc +++ b/src/operators/rbl.cc @@ -16,10 +16,15 @@ #include "src/operators/rbl.h" #include +#ifndef WIN32 #include #include #include #include +#else +#include +#include +#endif #include diff --git a/src/operators/rbl.h b/src/operators/rbl.h index fb57d2d9..7f70b599 100644 --- a/src/operators/rbl.h +++ b/src/operators/rbl.h @@ -17,10 +17,14 @@ #define SRC_OPERATORS_RBL_H_ #include +#ifndef WIN32 #include #include #include #include +#else +#include +#endif #include #include diff --git a/src/parser/seclang-scanner.cc b/src/parser/seclang-scanner.cc index c0d4d766..92afab76 100644 --- a/src/parser/seclang-scanner.cc +++ b/src/parser/seclang-scanner.cc @@ -4952,7 +4952,11 @@ static std::stack YY_PREVIOUS_STATE; * The user has a chance to override it with an option. */ /* %if-c-only */ +#ifndef WIN32 #include +#else +#include +#endif /* %endif */ /* %if-c++-only */ /* %endif */ diff --git a/src/rules_set_properties.cc b/src/rules_set_properties.cc index 075e3e87..80078b3d 100644 --- a/src/rules_set_properties.cc +++ b/src/rules_set_properties.cc @@ -19,6 +19,10 @@ #include "src/utils/string.h" #include "src/variables/variable.h" +#ifdef WIN32 +#include "src/compat/msvc.h" +#endif + namespace modsecurity { diff --git a/src/transaction.cc b/src/transaction.cc index cf52288d..a0762125 100644 --- a/src/transaction.cc +++ b/src/transaction.cc @@ -53,6 +53,9 @@ #include "src/actions/disruptive/allow.h" #include "src/variables/remote_user.h" +#ifdef WIN32 +#include "src/compat/msvc.h" +#endif using modsecurity::actions::Action; diff --git a/src/utils/geo_lookup.cc b/src/utils/geo_lookup.cc index 33a80be5..e76e728d 100644 --- a/src/utils/geo_lookup.cc +++ b/src/utils/geo_lookup.cc @@ -13,10 +13,13 @@ * */ +#ifndef WIN32 #include -#include #include #include +#else +#include +#endif #include #include diff --git a/src/utils/ip_tree.cc b/src/utils/ip_tree.cc index 969213a5..c4c38f1c 100644 --- a/src/utils/ip_tree.cc +++ b/src/utils/ip_tree.cc @@ -15,10 +15,14 @@ #include "src/utils/ip_tree.h" +#ifndef WIN32 #include #include #include #include +#else +#include +#endif #include #include diff --git a/src/utils/msc_tree.cc b/src/utils/msc_tree.cc index 8e36f274..c2850750 100644 --- a/src/utils/msc_tree.cc +++ b/src/utils/msc_tree.cc @@ -15,9 +15,15 @@ #include #include #include +#ifndef WIN32 #include #include #include +#else +#include "src/compat/msvc.h" +#include +#include +#endif #include "src/utils/msc_tree.h" diff --git a/src/utils/string.cc b/src/utils/string.cc index 750d2bd1..8d9e08ff 100644 --- a/src/utils/string.cc +++ b/src/utils/string.cc @@ -17,11 +17,6 @@ #include #include #include -#ifdef __OpenBSD__ -#include -#else -#include -#endif #include #include diff --git a/src/utils/system.h b/src/utils/system.h index b3033b44..d6b0adf6 100644 --- a/src/utils/system.h +++ b/src/utils/system.h @@ -13,8 +13,6 @@ * */ -#include -#include #include #include diff --git a/src/variables/time.cc b/src/variables/time.cc index ae071b49..7d481ee6 100644 --- a/src/variables/time.cc +++ b/src/variables/time.cc @@ -30,6 +30,10 @@ #include "modsecurity/transaction.h" +#ifdef WIN32 +#include "src/compat/msvc.h" +#endif + namespace modsecurity { namespace variables { diff --git a/src/variables/time_day.cc b/src/variables/time_day.cc index f74a8409..f094d4c9 100644 --- a/src/variables/time_day.cc +++ b/src/variables/time_day.cc @@ -30,6 +30,10 @@ #include "modsecurity/transaction.h" +#ifdef WIN32 +#include "src/compat/msvc.h" +#endif + namespace modsecurity { namespace variables { diff --git a/src/variables/time_hour.cc b/src/variables/time_hour.cc index 0f2a4219..ab809ead 100644 --- a/src/variables/time_hour.cc +++ b/src/variables/time_hour.cc @@ -30,6 +30,10 @@ #include "modsecurity/transaction.h" +#ifdef WIN32 +#include "src/compat/msvc.h" +#endif + namespace modsecurity { namespace variables { diff --git a/src/variables/time_min.cc b/src/variables/time_min.cc index 526d8e6f..9d03be4d 100644 --- a/src/variables/time_min.cc +++ b/src/variables/time_min.cc @@ -30,6 +30,10 @@ #include "modsecurity/transaction.h" +#ifdef WIN32 +#include "src/compat/msvc.h" +#endif + namespace modsecurity { namespace variables { diff --git a/src/variables/time_mon.cc b/src/variables/time_mon.cc index 53ba2919..17e74f31 100644 --- a/src/variables/time_mon.cc +++ b/src/variables/time_mon.cc @@ -30,6 +30,10 @@ #include "modsecurity/transaction.h" +#ifdef WIN32 +#include "src/compat/msvc.h" +#endif + namespace modsecurity { namespace variables { diff --git a/src/variables/time_sec.cc b/src/variables/time_sec.cc index 20d3be7a..5e39af7f 100644 --- a/src/variables/time_sec.cc +++ b/src/variables/time_sec.cc @@ -30,6 +30,10 @@ #include "modsecurity/transaction.h" +#ifdef WIN32 +#include "src/compat/msvc.h" +#endif + namespace modsecurity { namespace variables { diff --git a/src/variables/time_wday.cc b/src/variables/time_wday.cc index ff9825c1..fd6a0278 100644 --- a/src/variables/time_wday.cc +++ b/src/variables/time_wday.cc @@ -30,6 +30,10 @@ #include "modsecurity/transaction.h" +#ifdef WIN32 +#include "src/compat/msvc.h" +#endif + namespace modsecurity { namespace variables { diff --git a/src/variables/time_year.cc b/src/variables/time_year.cc index a4656125..f68e8cd6 100644 --- a/src/variables/time_year.cc +++ b/src/variables/time_year.cc @@ -30,6 +30,10 @@ #include "modsecurity/transaction.h" +#ifdef WIN32 +#include "src/compat/msvc.h" +#endif + namespace modsecurity { namespace variables { diff --git a/test/fuzzer/afl_fuzzer.cc b/test/fuzzer/afl_fuzzer.cc index 6b19a18f..21bfa1bf 100644 --- a/test/fuzzer/afl_fuzzer.cc +++ b/test/fuzzer/afl_fuzzer.cc @@ -114,7 +114,11 @@ using namespace modsecurity; #include #include +#ifndef WIN32 #include +#else +#include +#endif #include #include diff --git a/test/regression/regression.cc b/test/regression/regression.cc index 6343c9e1..a5c4832d 100644 --- a/test/regression/regression.cc +++ b/test/regression/regression.cc @@ -15,7 +15,11 @@ #include +#ifndef WIN32 #include +#else +#include +#endif #include #include diff --git a/tools/rules-check/rules-check.cc b/tools/rules-check/rules-check.cc index f59439ee..46c8e1a8 100644 --- a/tools/rules-check/rules-check.cc +++ b/tools/rules-check/rules-check.cc @@ -15,7 +15,11 @@ #include #include +#ifndef WIN32 #include +#else +#include +#endif #include #include