From: Mike Stepanek (mstepane) Date: Tue, 24 Sep 2019 14:20:05 +0000 (-0400) Subject: Merge pull request #1757 in SNORT/snort3 from ~SMINUT/snort3:reload_module_reputation... X-Git-Tag: 3.0.0-262~27 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8f8227dc58179c11963f0e3792a6af2556fb0d8d;p=thirdparty%2Fsnort3.git Merge pull request #1757 in SNORT/snort3 from ~SMINUT/snort3:reload_module_reputation to master Squashed commit of the following: commit 7fcf2e12927d6e6511d7d3b03efbbdc2f96ce0a0 Author: Silviu Minut Date: Mon Sep 23 12:54:40 2019 -0400 reputation: prevent reload module crash when reputation is not configured in lua at startup. --- diff --git a/src/main/snort.cc b/src/main/snort.cc index d9a4aacaf..02397c8ed 100644 --- a/src/main/snort.cc +++ b/src/main/snort.cc @@ -508,6 +508,7 @@ SnortConfig* Snort::get_reload_config(const char* fname) SnortConfig* Snort::get_updated_policy(SnortConfig* other_conf, const char* fname, const char* iname) { reloading = true; + reset_parse_errors(); SnortConfig* sc = new SnortConfig(other_conf); @@ -565,6 +566,7 @@ SnortConfig* Snort::get_updated_module(SnortConfig* other_conf, const char* name if ( name ) { + reset_parse_errors(); ModuleManager::reset_errors(); ModuleManager::reload_module(name, sc); if ( ModuleManager::get_errors() || !sc->verify() ) diff --git a/src/managers/module_manager.cc b/src/managers/module_manager.cc index 4a29c8942..ab718f9aa 100644 --- a/src/managers/module_manager.cc +++ b/src/managers/module_manager.cc @@ -1058,7 +1058,7 @@ void ModuleManager::reload_module(const char* name, snort::SnortConfig* sc) if ( h and h->api and h->mod and sc ) { PluginManager::instantiate(h->api, h->mod, sc); - + s_errors += get_parse_errors(); } else { diff --git a/src/network_inspectors/reputation/reputation_inspect.cc b/src/network_inspectors/reputation/reputation_inspect.cc index b4419a8bf..cbc198f05 100644 --- a/src/network_inspectors/reputation/reputation_inspect.cc +++ b/src/network_inspectors/reputation/reputation_inspect.cc @@ -420,7 +420,8 @@ static void reputation_init() static Inspector* reputation_ctor(Module* m) { ReputationModule* mod = (ReputationModule*)m; - return new Reputation(mod->get_data()); + ReputationConfig* conf = mod->get_data(); + return conf ? new Reputation(conf) : nullptr; } static void reputation_dtor(Inspector* p) @@ -465,4 +466,3 @@ SO_PUBLIC const BaseApi* snort_plugins[] = #else const BaseApi* nin_reputation = &reputation_api.base; #endif - diff --git a/src/network_inspectors/reputation/reputation_module.cc b/src/network_inspectors/reputation/reputation_module.cc index 6b80e4539..655633878 100644 --- a/src/network_inspectors/reputation/reputation_module.cc +++ b/src/network_inspectors/reputation/reputation_module.cc @@ -152,6 +152,10 @@ bool ReputationModule::set(const char*, Value& v, SnortConfig*) ReputationConfig* ReputationModule::get_data() { + + // FIXIT-M: this needs to be set to NULL prior to returning here. + // If we do that, though, reload module will error out, even when + // reputation has been properly configured (on startup) in lua. return conf; }