From: Bhagya Tholpady (bbantwal) Date: Mon, 2 Nov 2020 16:07:10 +0000 (+0000) Subject: Merge pull request #2568 in SNORT/snort3 from ~SVLASIUK/snort3:global_log_quiet to... X-Git-Tag: 3.0.3-5~18 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ebb89ddb9dcf2f9abe24214e74475631a8fab212;p=thirdparty%2Fsnort3.git Merge pull request #2568 in SNORT/snort3 from ~SVLASIUK/snort3:global_log_quiet to master Squashed commit of the following: commit e3d825a4b74e8c8d806a88bf877204bbf29ebdec Author: Serhii Vlasiuk Date: Wed Oct 28 14:22:20 2020 +0200 main: set up logging flags globally to avoid dependencies on a particular SnortConfig object --- diff --git a/src/helpers/process.cc b/src/helpers/process.cc index b07ec2aaa..0a8d7a00a 100644 --- a/src/helpers/process.cc +++ b/src/helpers/process.cc @@ -536,7 +536,7 @@ void daemonize() if ( errno ) FatalError("failed to setsid - %s", get_error(errno)); - if ( SnortConfig::get_conf()->log_quiet() or SnortConfig::get_conf()->log_syslog() ) + if ( SnortConfig::log_quiet() or SnortConfig::log_syslog() ) snuff_stdio(); pid_t ppid = getppid(); diff --git a/src/host_tracker/host_cache.h b/src/host_tracker/host_cache.h index 553412aea..0f7a86a9c 100644 --- a/src/host_tracker/host_cache.h +++ b/src/host_tracker/host_cache.h @@ -75,7 +75,7 @@ public: void print_config() { - if ( snort::SnortConfig::get_conf()->log_verbose() ) + if ( snort::SnortConfig::log_verbose() ) { std::lock_guard cache_lock(cache_mutex); diff --git a/src/log/log_text.cc b/src/log/log_text.cc index 6dfc9bbe6..546db57c1 100644 --- a/src/log/log_text.cc +++ b/src/log/log_text.cc @@ -152,7 +152,7 @@ void Log2ndHeader(TextLog* log, Packet* p) if ( SFDAQ::get_base_protocol() == DLT_EN10MB ) LogEthHeader(log, p); - else if ( p->context->conf->log_verbose() ) + else if ( SnortConfig::log_verbose() ) ErrorMessage("Datalink %i (not supported)\n", SFDAQ::get_base_protocol()); } diff --git a/src/log/messages.cc b/src/log/messages.cc index 18f7d94c2..7b5fb366c 100644 --- a/src/log/messages.cc +++ b/src/log/messages.cc @@ -174,21 +174,9 @@ void ReloadError(const char* format, ...) FatalError("%s\n", buf); } -static bool log_syslog() -{ - const SnortConfig* sc = SnortConfig::get_conf(); - return sc and sc->log_syslog(); -} - -static bool log_quiet() -{ - const SnortConfig* sc = SnortConfig::get_conf(); - return sc and sc->log_quiet(); -} - static void WriteLogMessage(FILE* fh, bool prefer_fh, const char* format, va_list& ap) { - if ( prefer_fh or !log_syslog() ) + if ( prefer_fh or !SnortConfig::log_syslog() ) { vfprintf(fh, format, ap); return; @@ -211,7 +199,7 @@ static void WriteLogMessage(FILE* fh, bool prefer_fh, const char* format, va_lis */ void LogMessage(const char* format,...) { - if ( log_quiet() ) + if ( SnortConfig::log_quiet() ) return; va_list ap; @@ -224,7 +212,7 @@ void LogMessage(const char* format,...) void LogMessage(FILE* fh, const char* format,...) { - if ( fh == stdout and log_quiet() ) + if ( fh == stdout and SnortConfig::log_quiet() ) return; va_list ap; @@ -251,7 +239,7 @@ void WarningMessage(const char* format,...) va_start(ap, format); - if ( log_syslog() ) + if ( SnortConfig::log_syslog() ) { char buf[STD_BUF+1]; vsnprintf(buf, STD_BUF, format, ap); @@ -282,7 +270,7 @@ void ErrorMessage(const char* format,...) va_start(ap, format); - if ( log_syslog() ) + if ( SnortConfig::log_syslog() ) { char buf[STD_BUF+1]; vsnprintf(buf, STD_BUF, format, ap); @@ -326,10 +314,8 @@ void ErrorMessage(const char* format,...) buf[STD_BUF] = '\0'; - if ( log_syslog() ) - { + if ( SnortConfig::log_syslog() ) syslog(LOG_CONS | LOG_DAEMON | LOG_ERR, "FATAL ERROR: %s", buf); - } else { fprintf(stderr, "FATAL: %s", buf); diff --git a/src/main/modules.cc b/src/main/modules.cc index 306871494..b38a0983c 100644 --- a/src/main/modules.cc +++ b/src/main/modules.cc @@ -772,7 +772,10 @@ bool OutputModule::set(const char*, Value& v, SnortConfig* sc) v.update_mask(sc->output_flags, OUTPUT_FLAG__VERBOSE_DUMP); else if ( v.is("quiet") ) - v.update_mask(sc->logging_flags, LOGGING_FLAG__QUIET); + { + if ( v.get_bool() ) + SnortConfig::set_log_quiet(true); + } else if ( v.is("logdir") ) sc->log_dir = v.get_string(); @@ -789,7 +792,7 @@ bool OutputModule::set(const char*, Value& v, SnortConfig* sc) else if ( v.is("verbose") ) { if ( v.get_bool() ) - v.update_mask(sc->logging_flags, LOGGING_FLAG__VERBOSE); + SnortConfig::enable_log_verbose(); } else if ( v.is("wide_hex_dump") ) v.update_mask(sc->output_flags, OUTPUT_FLAG__WIDE_HEX); diff --git a/src/main/shell.cc b/src/main/shell.cc index c924536ff..f42f541d8 100644 --- a/src/main/shell.cc +++ b/src/main/shell.cc @@ -439,7 +439,7 @@ bool Shell::configure(SnortConfig* sc, bool is_fatal, bool is_root) if ( !overrides.empty() ) load_string(lua, overrides.c_str()); - if ( SnortConfig::get_conf()->log_verbose() ) + if ( SnortConfig::log_verbose() ) print_whitelist(); load_string(lua, ModuleManager::get_lua_finalize()); diff --git a/src/main/snort.cc b/src/main/snort.cc index 9d435a527..09507d4c8 100644 --- a/src/main/snort.cc +++ b/src/main/snort.cc @@ -161,7 +161,7 @@ void Snort::init(int argc, char** argv) PluginManager::load_so_plugins(sc); - if ( sc->logging_flags & LOGGING_FLAG__SHOW_PLUGINS ) + if ( SnortConfig::log_show_plugins() ) { ModuleManager::dump_modules(); PluginManager::dump_plugins(); @@ -193,7 +193,7 @@ void Snort::init(int argc, char** argv) // Must be after CodecManager::instantiate() if ( !InspectorManager::configure(sc) ) ParseError("can't initialize inspectors"); - else if ( sc->log_verbose() ) + else if ( SnortConfig::log_verbose() ) InspectorManager::print_config(sc); InspectorManager::prepare_controls(sc); @@ -484,7 +484,7 @@ SnortConfig* Snort::get_reload_config(const char* fname, const char* plugin_path return nullptr; } - if ( sc->log_verbose() ) + if ( SnortConfig::log_verbose() ) InspectorManager::print_config(sc); // FIXIT-L is this still needed? diff --git a/src/main/snort_config.cc b/src/main/snort_config.cc index 163fd79bf..ced01551d 100644 --- a/src/main/snort_config.cc +++ b/src/main/snort_config.cc @@ -90,6 +90,7 @@ using namespace snort; static THREAD_LOCAL const SnortConfig* snort_conf = nullptr; uint32_t SnortConfig::warning_flags = 0; +uint32_t SnortConfig::logging_flags = 0; static std::vector scratch_handlers; @@ -352,7 +353,6 @@ void SnortConfig::merge(SnortConfig* cmd_line) run_flags |= cmd_line->run_flags; output_flags |= cmd_line->output_flags; - logging_flags |= cmd_line->logging_flags; include_path = cmd_line->include_path; stdin_rules = cmd_line->stdin_rules; @@ -647,14 +647,6 @@ void SnortConfig::set_obfuscation_mask(const char* mask) obfuscation_net.set(mask); } -void SnortConfig::set_quiet(bool enabled) -{ - if (enabled) - logging_flags |= LOGGING_FLAG__QUIET; - else - logging_flags &= ~LOGGING_FLAG__QUIET; -} - void SnortConfig::set_gid(const char* args) { struct group* gr; @@ -779,16 +771,6 @@ void SnortConfig::set_utc(bool enabled) output_flags &= ~OUTPUT_FLAG__USE_UTC; } -void SnortConfig::set_verbose(bool enabled) -{ - if (enabled) - { - logging_flags |= LOGGING_FLAG__VERBOSE; - } - else - logging_flags &= ~LOGGING_FLAG__VERBOSE; -} - void SnortConfig::set_overlay_trace_config(TraceConfig* tc) { delete overlay_trace_config; @@ -923,7 +905,7 @@ void SnortConfig::enable_syslog() openlog("snort", LOG_PID | LOG_CONS, LOG_DAEMON); - logging_flags |= LOGGING_FLAG__SYSLOG; + enable_log_syslog(); syslog_configured = true; } diff --git a/src/main/snort_config.h b/src/main/snort_config.h index 46b087143..0dcc5252c 100644 --- a/src/main/snort_config.h +++ b/src/main/snort_config.h @@ -208,10 +208,10 @@ public: void merge(SnortConfig*); void clone(const SnortConfig* const); +private: + static uint32_t logging_flags; + public: - //------------------------------------------------------ - // non-reloadable stuff (single instance) - // FIXIT-L non-reloadable stuff should be made static static uint32_t warning_flags; //------------------------------------------------------ @@ -228,8 +228,6 @@ public: #else uint32_t output_flags = 0; #endif - uint32_t logging_flags = 0; - uint32_t tagged_packet_limit = 256; uint16_t event_trace_max = 0; @@ -475,7 +473,6 @@ public: void set_obfuscation_mask(const char*); void set_include_path(const char*); void set_process_all_events(bool); - void set_quiet(bool); void set_show_year(bool); void set_tunnel_verdicts(const char*); void set_treat_drop_as_alert(bool); @@ -484,7 +481,6 @@ public: void set_uid(const char*); void set_umask(uint32_t); void set_utc(bool); - void set_verbose(bool); void set_overlay_trace_config(TraceConfig*); //------------------------------------------------------ @@ -554,16 +550,6 @@ public: bool adaptor_inline_test_mode() const { return run_flags & RUN_FLAG__INLINE_TEST; } - // logging stuff - bool log_syslog() const - { return logging_flags & LOGGING_FLAG__SYSLOG; } - - bool log_verbose() const - { return logging_flags & LOGGING_FLAG__VERBOSE; } - - bool log_quiet() const - { return logging_flags & LOGGING_FLAG__QUIET; } - // event stuff uint32_t get_event_log_id() const { return event_log_id; } @@ -730,6 +716,36 @@ public: SO_PUBLIC void register_reload_resource_tuner(ReloadResourceTuner*); static void cleanup_fatal_error(); + + // logging stuff + static void enable_log_syslog() + { logging_flags |= LOGGING_FLAG__SYSLOG; } + + static bool log_syslog() + { return logging_flags & LOGGING_FLAG__SYSLOG; } + + static void set_log_quiet(bool enabled) + { + if (enabled) + logging_flags |= LOGGING_FLAG__QUIET; + else + logging_flags &= ~LOGGING_FLAG__QUIET; + } + + static bool log_quiet() + { return logging_flags & LOGGING_FLAG__QUIET; } + + static void enable_log_verbose() + { logging_flags |= LOGGING_FLAG__VERBOSE; } + + static bool log_verbose() + { return logging_flags & LOGGING_FLAG__VERBOSE; } + + static void enable_log_show_plugins() + { logging_flags |= LOGGING_FLAG__SHOW_PLUGINS; } + + static bool log_show_plugins() + { return logging_flags & LOGGING_FLAG__SHOW_PLUGINS; } }; } diff --git a/src/main/snort_module.cc b/src/main/snort_module.cc index 4ab163b63..edf693b6b 100644 --- a/src/main/snort_module.cc +++ b/src/main/snort_module.cc @@ -756,7 +756,7 @@ bool SnortModule::set(const char*, Value& v, SnortConfig* sc) sc->run_flags |= RUN_FLAG__INLINE; else if ( v.is("-q") ) - sc->set_quiet(true); + SnortConfig::set_log_quiet(true); else if ( v.is("-R") ) { @@ -789,7 +789,7 @@ bool SnortModule::set(const char*, Value& v, SnortConfig* sc) help_version(sc); else if ( v.is("-v") ) - sc->set_verbose(true); + SnortConfig::enable_log_verbose(); else if ( v.is("-X") ) sc->set_dump_payload_verbose(true); @@ -871,7 +871,7 @@ bool SnortModule::set(const char*, Value& v, SnortConfig* sc) else if ( v.is("--dump-config") ) { - sc->set_quiet(true); + SnortConfig::set_log_quiet(true); sc->run_flags |= RUN_FLAG__TEST; if ( v.get_as_string() == "all" ) sc->dump_config_type = DUMP_CONFIG_JSON_ALL; @@ -881,7 +881,7 @@ bool SnortModule::set(const char*, Value& v, SnortConfig* sc) else if ( v.is("--dump-config-text") ) { - sc->set_quiet(true); + SnortConfig::set_log_quiet(true); sc->run_flags |= RUN_FLAG__TEST; sc->dump_config_type = DUMP_CONFIG_TEXT; } @@ -895,18 +895,18 @@ bool SnortModule::set(const char*, Value& v, SnortConfig* sc) else if ( v.is("--dump-rule-deps") ) { sc->run_flags |= (RUN_FLAG__DUMP_RULE_DEPS | RUN_FLAG__TEST); - sc->set_quiet(true); + SnortConfig::set_log_quiet(true); } else if ( v.is("--dump-rule-meta") ) { sc->run_flags |= (RUN_FLAG__DUMP_RULE_META | RUN_FLAG__TEST); sc->output_flags |= OUTPUT_FLAG__ALERT_REFS; - sc->set_quiet(true); + SnortConfig::set_log_quiet(true); } else if ( v.is("--dump-rule-state") ) { sc->run_flags |= (RUN_FLAG__DUMP_RULE_STATE | RUN_FLAG__TEST); - sc->set_quiet(true); + SnortConfig::set_log_quiet(true); } else if ( v.is("--dump-version") ) dump_version(sc); @@ -918,7 +918,7 @@ bool SnortModule::set(const char*, Value& v, SnortConfig* sc) { sc->run_flags |= (RUN_FLAG__DUMP_MSG_MAP | RUN_FLAG__TEST); sc->output_flags |= OUTPUT_FLAG__ALERT_REFS; - sc->set_quiet(true); + SnortConfig::set_log_quiet(true); } else if ( v.is("--help") ) help_basic(sc, v.get_string()); @@ -1072,7 +1072,7 @@ bool SnortModule::set(const char*, Value& v, SnortConfig* sc) sc->run_flags |= RUN_FLAG__SHOW_FILE_CODES; else if ( v.is("--show-plugins") ) - sc->logging_flags |= LOGGING_FLAG__SHOW_PLUGINS; + SnortConfig::enable_log_show_plugins(); else if ( v.is("--skip") ) sc->pkt_skip = v.get_uint64(); diff --git a/src/memory/memory_cap.cc b/src/memory/memory_cap.cc index 9cbe0f35a..89737f099 100644 --- a/src/memory/memory_cap.cc +++ b/src/memory/memory_cap.cc @@ -201,7 +201,7 @@ void MemoryCap::print() if ( !MemoryModule::is_active() ) return; - bool verbose = SnortConfig::get_conf()->log_verbose(); + bool verbose = SnortConfig::log_verbose(); if ( verbose or mem_stats.allocations ) LogLabel("memory (heap)"); diff --git a/src/packet_io/sfdaq_instance.cc b/src/packet_io/sfdaq_instance.cc index 38735fc12..226d6e7af 100644 --- a/src/packet_io/sfdaq_instance.cc +++ b/src/packet_io/sfdaq_instance.cc @@ -172,7 +172,7 @@ bool SFDAQInstance::start() pool_size = mpool_info.size; pool_available = mpool_info.available; assert(pool_size == pool_available); - if (SnortConfig::get_conf()->log_verbose()) + if (SnortConfig::log_verbose()) { LogMessage("Instance %d daq pool size: %d\n", get_instance_id(), pool_size); LogMessage("Instance %d daq batch size: %d\n", get_instance_id(), batch_size); diff --git a/src/parser/parser.cc b/src/parser/parser.cc index f469e4ab8..1e51dd90b 100644 --- a/src/parser/parser.cc +++ b/src/parser/parser.cc @@ -319,7 +319,6 @@ SnortConfig* ParseSnortConf(const SnortConfig* boot_conf, const char* fname, boo sc->run_flags = boot_conf->run_flags; sc->output_flags = boot_conf->output_flags; - sc->logging_flags = boot_conf->logging_flags; sc->tweaks = boot_conf->tweaks; sc->dump_config_type = boot_conf->dump_config_type; diff --git a/src/trace/trace_module.cc b/src/trace/trace_module.cc index 88cf8cf44..1e04af5e7 100644 --- a/src/trace/trace_module.cc +++ b/src/trace/trace_module.cc @@ -166,7 +166,7 @@ bool TraceModule::begin(const char* fqn, int, SnortConfig* sc) trace_parser = new TraceParser(*sc->trace_config); // Init default output type based on Snort run-mode - if ( sc->daemon_mode() or sc->log_syslog() ) + if ( sc->daemon_mode() or SnortConfig::log_syslog() ) log_output_type = OUTPUT_TYPE_SYSLOG; else log_output_type = OUTPUT_TYPE_STDOUT; @@ -237,7 +237,7 @@ bool TraceModule::end(const char* fqn, int, SnortConfig* sc) // "output=syslog" config override case // do not closelog() here since it will be closed in Snort::clean_exit() - if ( !sc->log_syslog() and log_output_type == OUTPUT_TYPE_SYSLOG + if ( !SnortConfig::log_syslog() and log_output_type == OUTPUT_TYPE_SYSLOG and !local_syslog ) { local_syslog = true; diff --git a/src/utils/stats.cc b/src/utils/stats.cc index 18a52e21e..bc0b88a4c 100644 --- a/src/utils/stats.cc +++ b/src/utils/stats.cc @@ -250,17 +250,15 @@ void PrintStatistics() DropStats(); timing_stats(); - SnortConfig* sc = SnortConfig::get_main_conf(); - // FIXIT-L can do flag saving with RAII (much cleaner) - int save_quiet_flag = sc->logging_flags & LOGGING_FLAG__QUIET; - sc->logging_flags &= ~LOGGING_FLAG__QUIET; + bool origin_log_quiet = SnortConfig::log_quiet(); + SnortConfig::set_log_quiet(false); // once more for the main thread Profiler::consolidate_stats(); Profiler::show_stats(); - sc->logging_flags |= save_quiet_flag; + SnortConfig::set_log_quiet(origin_log_quiet); } //-------------------------------------------------------------------------