From f1d03fbe2fa99fab3014294846f50f0db93e18c7 Mon Sep 17 00:00:00 2001 From: "Steven Baigal (sbaigal)" Date: Tue, 5 Jul 2022 14:21:52 +0000 Subject: [PATCH] Pull request #3485: Fix config logger Merge in SNORT/snort3 from ~VHORBAN/snort3:fix_config_logger to master Squashed commit of the following: commit 4ce90eea0b6b7c75f4321c3cabdc6781178291a9 Author: Oleksandr Serhiienko Date: Wed Jun 15 17:21:26 2022 +0300 build: remove unnecessary type casts commit 6cda44321578d31de30524a5b8a50ce7713ecea9 Author: Oleksandr Serhiienko Date: Wed Jun 15 17:02:52 2022 +0300 log: add log_value and log_limit overloads with built-in integer types Using built-in integer types in overloads of ConfigLogger::log_value and ConfigLogger::log_limit resolves possible ambiguity over different platforms in case of platform-dependent integer types like size_t --- src/log/messages.cc | 149 ++++++++++++++++-- src/log/messages.h | 28 +++- src/network_inspectors/appid/appid_config.cc | 2 +- .../perf_monitor/perf_monitor.cc | 2 +- src/network_inspectors/port_scan/port_scan.cc | 2 +- .../http_inspect/http_inspect.cc | 4 +- src/service_inspectors/netflow/netflow.cc | 4 +- 7 files changed, 169 insertions(+), 22 deletions(-) diff --git a/src/log/messages.cc b/src/log/messages.cc index e621259fd..a0eee8999 100644 --- a/src/log/messages.cc +++ b/src/log/messages.cc @@ -342,9 +342,76 @@ bool ConfigLogger::log_flag(const char* caption, bool flag, bool subopt) return flag; } +void ConfigLogger::log_limit(const char* caption, int val, int unlim, bool subopt) +{ + auto fmt = subopt ? SUB_CAPTION "%" PRId32 "%s\n" : CAPTION "%" PRId32 "%s\n"; + auto ind = subopt ? indention + strlen(caption) + 2 : indention; + + if ( val == unlim ) + LogMessage(fmt, ind, caption, val, " (unlimited)"); + else + LogMessage(fmt, ind, caption, val, ""); +} + +void ConfigLogger::log_limit(const char* caption, unsigned int val, unsigned int unlim, bool subopt) +{ + auto fmt = subopt ? SUB_CAPTION "%" PRIu32 "%s\n" : CAPTION "%" PRIu32 "%s\n"; + auto ind = subopt ? indention + strlen(caption) + 2 : indention; + + if ( val == unlim ) + LogMessage(fmt, ind, caption, val, " (unlimited)"); + else + LogMessage(fmt, ind, caption, val, ""); +} + +void ConfigLogger::log_limit(const char* caption, long val, int unlim, bool subopt) +{ + auto fmt = subopt ? SUB_CAPTION "%" PRId64 "%s\n" : CAPTION "%" PRId64 "%s\n"; + auto ind = subopt ? indention + strlen(caption) + 2 : indention; + + if ( val == unlim ) + LogMessage(fmt, ind, caption, static_cast(val), " (unlimited)"); + else + LogMessage(fmt, ind, caption, static_cast(val), ""); +} + +void ConfigLogger::log_limit(const char* caption, unsigned long val, unsigned int unlim, bool subopt) +{ + auto fmt = subopt ? SUB_CAPTION "%" PRIu64 "%s\n" : CAPTION "%" PRIu64 "%s\n"; + auto ind = subopt ? indention + strlen(caption) + 2 : indention; + + if ( val == unlim ) + LogMessage(fmt, ind, caption, static_cast(val), " (unlimited)"); + else + LogMessage(fmt, ind, caption, static_cast(val), ""); +} + +void ConfigLogger::log_limit(const char* caption, long long val, int unlim, bool subopt) +{ + auto fmt = subopt ? SUB_CAPTION "%" PRId64 "%s\n" : CAPTION "%" PRId64 "%s\n"; + auto ind = subopt ? indention + strlen(caption) + 2 : indention; + + if ( val == unlim ) + LogMessage(fmt, ind, caption, val, " (unlimited)"); + else + LogMessage(fmt, ind, caption, val, ""); +} + +void ConfigLogger::log_limit(const char* caption, unsigned long long val, unsigned int unlim, + bool subopt) +{ + auto fmt = subopt ? SUB_CAPTION "%" PRIu64 "%s\n" : CAPTION "%" PRIu64 "%s\n"; + auto ind = subopt ? indention + strlen(caption) + 2 : indention; + + if ( val == unlim ) + LogMessage(fmt, ind, caption, val, " (unlimited)"); + else + LogMessage(fmt, ind, caption, val, ""); +} + void ConfigLogger::log_limit(const char* caption, int val, int unlim, int disable, bool subopt) { - auto fmt = subopt ? SUB_CAPTION "%d%s\n" : CAPTION "%d%s\n"; + auto fmt = subopt ? SUB_CAPTION "%" PRId32 "%s\n" : CAPTION "%" PRId32 "%s\n"; auto ind = subopt ? indention + strlen(caption) + 2 : indention; if ( val == disable ) @@ -355,23 +422,69 @@ void ConfigLogger::log_limit(const char* caption, int val, int unlim, int disabl LogMessage(fmt, ind, caption, val, ""); } -void ConfigLogger::log_limit(const char* caption, int val, int unlim, bool subopt) +void ConfigLogger::log_limit(const char* caption, unsigned int val, unsigned int unlim, + unsigned int disable, bool subopt) { - auto fmt = subopt ? SUB_CAPTION "%d%s\n" : CAPTION "%d%s\n"; + auto fmt = subopt ? SUB_CAPTION "%" PRIu32 "%s\n" : CAPTION "%" PRIu32 "%s\n"; auto ind = subopt ? indention + strlen(caption) + 2 : indention; - if ( val == unlim ) + if ( val == disable ) + LogMessage(fmt, ind, caption, val, " (disabled)"); + else if ( val == unlim ) LogMessage(fmt, ind, caption, val, " (unlimited)"); else LogMessage(fmt, ind, caption, val, ""); } -void ConfigLogger::log_limit(const char* caption, int64_t val, int64_t unlim, bool subopt) +void ConfigLogger::log_limit(const char* caption, long val, int unlim, int disable, bool subopt) { auto fmt = subopt ? SUB_CAPTION "%" PRId64 "%s\n" : CAPTION "%" PRId64 "%s\n"; auto ind = subopt ? indention + strlen(caption) + 2 : indention; - if ( val == unlim ) + if ( val == disable ) + LogMessage(fmt, ind, caption, static_cast(val), " (disabled)"); + else if ( val == unlim ) + LogMessage(fmt, ind, caption, static_cast(val), " (unlimited)"); + else + LogMessage(fmt, ind, caption, static_cast(val), ""); +} + +void ConfigLogger::log_limit(const char* caption, unsigned long val, unsigned int unlim, + unsigned int disable, bool subopt) +{ + auto fmt = subopt ? SUB_CAPTION "%" PRIu64 "%s\n" : CAPTION "%" PRIu64 "%s\n"; + auto ind = subopt ? indention + strlen(caption) + 2 : indention; + + if ( val == disable ) + LogMessage(fmt, ind, caption, static_cast(val), " (disabled)"); + else if ( val == unlim ) + LogMessage(fmt, ind, caption, static_cast(val), " (unlimited)"); + else + LogMessage(fmt, ind, caption, static_cast(val), ""); +} + +void ConfigLogger::log_limit(const char* caption, long long val, int unlim, int disable, bool subopt) +{ + auto fmt = subopt ? SUB_CAPTION "%" PRId64 "%s\n" : CAPTION "%" PRId64 "%s\n"; + auto ind = subopt ? indention + strlen(caption) + 2 : indention; + + if ( val == disable ) + LogMessage(fmt, ind, caption, val, " (disabled)"); + else if ( val == unlim ) + LogMessage(fmt, ind, caption, val, " (unlimited)"); + else + LogMessage(fmt, ind, caption, val, ""); +} + +void ConfigLogger::log_limit(const char* caption, unsigned long long val, unsigned int unlim, + unsigned int disable, bool subopt) +{ + auto fmt = subopt ? SUB_CAPTION "%" PRIu64 "%s\n" : CAPTION "%" PRIu64 "%s\n"; + auto ind = subopt ? indention + strlen(caption) + 2 : indention; + + if ( val == disable ) + LogMessage(fmt, ind, caption, val, " (disabled)"); + else if ( val == unlim ) LogMessage(fmt, ind, caption, val, " (unlimited)"); else LogMessage(fmt, ind, caption, val, ""); @@ -385,7 +498,7 @@ void ConfigLogger::log_value(const char* caption, int n, const char* descr, bool LogMessage(fmt, ind, caption, n, descr); } -void ConfigLogger::log_value(const char* caption, int32_t n, bool subopt) +void ConfigLogger::log_value(const char* caption, int n, bool subopt) { auto fmt = subopt ? SUB_CAPTION "%" PRId32 "\n" : CAPTION "%" PRId32 "\n"; auto ind = subopt ? indention + strlen(caption) + 2 : indention; @@ -393,7 +506,7 @@ void ConfigLogger::log_value(const char* caption, int32_t n, bool subopt) LogMessage(fmt, ind, caption, n); } -void ConfigLogger::log_value(const char* caption, uint32_t n, bool subopt) +void ConfigLogger::log_value(const char* caption, unsigned int n, bool subopt) { auto fmt = subopt ? SUB_CAPTION "%" PRIu32 "\n" : CAPTION "%" PRIu32 "\n"; auto ind = subopt ? indention + strlen(caption) + 2 : indention; @@ -401,7 +514,23 @@ void ConfigLogger::log_value(const char* caption, uint32_t n, bool subopt) LogMessage(fmt, ind, caption, n); } -void ConfigLogger::log_value(const char* caption, int64_t n, bool subopt) +void ConfigLogger::log_value(const char* caption, long n, bool subopt) +{ + auto fmt = subopt ? SUB_CAPTION "%" PRId64 "\n" : CAPTION "%" PRId64 "\n"; + auto ind = subopt ? indention + strlen(caption) + 2 : indention; + + LogMessage(fmt, ind, caption, static_cast(n)); +} + +void ConfigLogger::log_value(const char* caption, unsigned long n, bool subopt) +{ + auto fmt = subopt ? SUB_CAPTION "%" PRIu64 "\n" : CAPTION "%" PRIu64 "\n"; + auto ind = subopt ? indention + strlen(caption) + 2 : indention; + + LogMessage(fmt, ind, caption, static_cast(n)); +} + +void ConfigLogger::log_value(const char* caption, long long n, bool subopt) { auto fmt = subopt ? SUB_CAPTION "%" PRId64 "\n" : CAPTION "%" PRId64 "\n"; auto ind = subopt ? indention + strlen(caption) + 2 : indention; @@ -409,7 +538,7 @@ void ConfigLogger::log_value(const char* caption, int64_t n, bool subopt) LogMessage(fmt, ind, caption, n); } -void ConfigLogger::log_value(const char* caption, uint64_t n, bool subopt) +void ConfigLogger::log_value(const char* caption, unsigned long long n, bool subopt) { auto fmt = subopt ? SUB_CAPTION "%" PRIu64 "\n" : CAPTION "%" PRIu64 "\n"; auto ind = subopt ? indention + strlen(caption) + 2 : indention; diff --git a/src/log/messages.h b/src/log/messages.h index 9356afa63..a26701243 100644 --- a/src/log/messages.h +++ b/src/log/messages.h @@ -69,18 +69,36 @@ class SO_PUBLIC ConfigLogger final { public: ConfigLogger() = delete; + static void log_option(const char* caption); + static bool log_flag(const char* caption, bool flag, bool subopt = false); + static void log_limit(const char* caption, int val, int unlim, bool subopt = false); + static void log_limit(const char* caption, unsigned int val, unsigned int unlim, bool subopt = false); + static void log_limit(const char* caption, long val, int unlim, bool subopt = false); + static void log_limit(const char* caption, unsigned long val, unsigned int unlim, bool subopt = false); + static void log_limit(const char* caption, long long val, int unlim, bool subopt = false); + static void log_limit(const char* caption, unsigned long long val, unsigned int unlim, bool subopt = false); + static void log_limit(const char* caption, int val, int unlim, int disable, bool subopt = false); - static void log_limit(const char* caption, int64_t val, int64_t unlim, bool subopt = false); + static void log_limit(const char* caption, unsigned int val, unsigned int unlim, unsigned int disable, bool subopt = false); + static void log_limit(const char* caption, long val, int unlim, int disable, bool subopt = false); + static void log_limit(const char* caption, unsigned long val, unsigned int unlim, unsigned int disable, bool subopt = false); + static void log_limit(const char* caption, long long val, int unlim, int disable, bool subopt = false); + static void log_limit(const char* caption, unsigned long long val, unsigned int unlim, unsigned int disable, bool subopt = false); + static void log_value(const char* caption, int n, const char* descr, bool subopt = false); - static void log_value(const char* caption, int32_t n, bool subopt = false); - static void log_value(const char* caption, uint32_t n, bool subopt = false); - static void log_value(const char* caption, int64_t n, bool subopt = false); - static void log_value(const char* caption, uint64_t n, bool subopt = false); + + static void log_value(const char* caption, int n, bool subopt = false); + static void log_value(const char* caption, unsigned int n, bool subopt = false); + static void log_value(const char* caption, long n, bool subopt = false); + static void log_value(const char* caption, unsigned long n, bool subopt = false); + static void log_value(const char* caption, long long n, bool subopt = false); + static void log_value(const char* caption, unsigned long long n, bool subopt = false); static void log_value(const char* caption, double n, bool subopt = false); static void log_value(const char* caption, const char* str, bool subopt = false); + static void log_list(const char* caption, const char* list, const char* prefix = " ", bool subopt = false); static void log_list(const char* list); private: diff --git a/src/network_inspectors/appid/appid_config.cc b/src/network_inspectors/appid/appid_config.cc index 13cd42f34..1a552ee8f 100644 --- a/src/network_inspectors/appid/appid_config.cc +++ b/src/network_inspectors/appid/appid_config.cc @@ -87,7 +87,7 @@ void AppIdConfig::show() const ConfigLogger::log_flag("log_all_sessions", log_all_sessions); ConfigLogger::log_flag("log_stats", log_stats); - ConfigLogger::log_value("memcap", static_cast(memcap)); + ConfigLogger::log_value("memcap", memcap); } void AppIdContext::pterm() diff --git a/src/network_inspectors/perf_monitor/perf_monitor.cc b/src/network_inspectors/perf_monitor/perf_monitor.cc index ff2881f51..6e1f66385 100644 --- a/src/network_inspectors/perf_monitor/perf_monitor.cc +++ b/src/network_inspectors/perf_monitor/perf_monitor.cc @@ -163,7 +163,7 @@ void PerfMonitor::show(const SnortConfig*) const ConfigLogger::log_value("flow_ports", config->flow_max_port_to_track); if ( ConfigLogger::log_flag("flow_ip", config->perf_flags & PERF_FLOWIP) ) - ConfigLogger::log_value("flow_ip_memcap", static_cast(config->flowip_memcap)); + ConfigLogger::log_value("flow_ip_memcap", config->flowip_memcap); ConfigLogger::log_value("packets", config->pkt_cnt); ConfigLogger::log_value("seconds", config->sample_interval); diff --git a/src/network_inspectors/port_scan/port_scan.cc b/src/network_inspectors/port_scan/port_scan.cc index 6ef7eaf84..93a3f9155 100644 --- a/src/network_inspectors/port_scan/port_scan.cc +++ b/src/network_inspectors/port_scan/port_scan.cc @@ -384,7 +384,7 @@ static std::string to_string(const IPSET* list) static void portscan_config_show(const PortscanConfig* config) { - ConfigLogger::log_value("memcap", static_cast(config->memcap)); + ConfigLogger::log_value("memcap", config->memcap); ConfigLogger::log_value("protos", get_protos(config->detect_scans).c_str()); ConfigLogger::log_value("scan_types", get_types(config->detect_scan_type).c_str()); diff --git a/src/service_inspectors/http_inspect/http_inspect.cc b/src/service_inspectors/http_inspect/http_inspect.cc index e19b27734..60048cdb5 100755 --- a/src/service_inspectors/http_inspect/http_inspect.cc +++ b/src/service_inspectors/http_inspect/http_inspect.cc @@ -163,8 +163,8 @@ void HttpInspect::show(const SnortConfig*) const for (auto s : params->js_norm_param.ignored_props) js_norm_prop_ignore += s + " "; - ConfigLogger::log_limit("request_depth", params->request_depth, -1LL); - ConfigLogger::log_limit("response_depth", params->response_depth, -1LL); + ConfigLogger::log_limit("request_depth", params->request_depth, -1); + ConfigLogger::log_limit("response_depth", params->response_depth, -1); ConfigLogger::log_flag("unzip", params->unzip); ConfigLogger::log_flag("normalize_utf", params->normalize_utf); ConfigLogger::log_flag("decompress_pdf", params->decompress_pdf); diff --git a/src/service_inspectors/netflow/netflow.cc b/src/service_inspectors/netflow/netflow.cc index 39a458c39..f20ee2124 100644 --- a/src/service_inspectors/netflow/netflow.cc +++ b/src/service_inspectors/netflow/netflow.cc @@ -829,8 +829,8 @@ static void show_device(const NetFlowRule& d, bool is_exclude) void NetFlowInspector::show(const SnortConfig*) const { - ConfigLogger::log_value("flow_memcap", (uint64_t)config->flow_memcap); - ConfigLogger::log_value("template_memcap", (uint64_t)config->template_memcap); + ConfigLogger::log_value("flow_memcap", config->flow_memcap); + ConfigLogger::log_value("template_memcap", config->template_memcap); ConfigLogger::log_value("dump_file", config->dump_file); ConfigLogger::log_value("update_timeout", config->update_timeout); bool log_header = true; -- 2.47.3