From: Russ Combs (rucombs) Date: Mon, 14 Aug 2017 20:28:10 +0000 (-0400) Subject: Merge pull request #989 in SNORT/snort3 from pause_fix to master X-Git-Tag: 3.0.0-240~68 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=057fb1edfa95abf679f7eb2946aebb10f24e72eb;p=thirdparty%2Fsnort3.git Merge pull request #989 in SNORT/snort3 from pause_fix to master Squashed commit of the following: commit 22cbf9fe707272c9549ec81125fec4fbc69d961e Author: Bhagya Tholpady Date: Fri Aug 11 13:34:12 2017 -0400 main: Fix pause command issued from command line to accept control commands while in paused state commit 8519c9d98ebc9375e66234de9aa3a6d108d27fd8 Author: Bhagya Tholpady Date: Fri Aug 11 12:46:48 2017 -0400 main: Fix pause command issued from command line to accept control commands while in paused state --- diff --git a/src/main.cc b/src/main.cc index c3a3cf7d0..1c6df6f0b 100644 --- a/src/main.cc +++ b/src/main.cc @@ -757,12 +757,12 @@ static void handle(Pig& pig, unsigned& swine, unsigned& pending_privileges) FatalError("Failed to drop privileges!\n"); Snort::do_pidfile(); - broadcast(new ACRun()); + broadcast(new ACRun(paused)); } else { Snort::do_pidfile(); - pig.queue_command(new ACRun()); + pig.queue_command(new ACRun(paused)); } break; @@ -796,7 +796,7 @@ static void main_loop() while ( swine or paused or (Trough::has_next() and !exit_requested) ) { const char* src; - int idx = paused ? -1 : main_read(); + int idx = main_read(); if ( idx >= 0 ) { @@ -813,7 +813,7 @@ static void main_loop() continue; } - if ( !exit_requested and !paused and (swine < max_pigs) and (src = Trough::get_next()) ) + if ( !exit_requested and (swine < max_pigs) and (src = Trough::get_next()) ) { Pig* pig = get_lazy_pig(max_pigs); pig->prep(src); diff --git a/src/main/analyzer.cc b/src/main/analyzer.cc index b5cc63b6f..38df21177 100644 --- a/src/main/analyzer.cc +++ b/src/main/analyzer.cc @@ -182,11 +182,14 @@ void Analyzer::start() DebugMessage(DEBUG_ANALYZER, "Handled START command\n"); } -void Analyzer::run() +void Analyzer::run(bool paused) { assert(state == State::STARTED); Snort::thread_init_unprivileged(); - set_state(State::RUNNING); + if ( paused ) + set_state(State::PAUSED); + else + set_state(State::RUNNING); DebugMessage(DEBUG_ANALYZER, "Handled RUN command\n"); } diff --git a/src/main/analyzer.h b/src/main/analyzer.h index 85a064f56..5e43fb4bf 100644 --- a/src/main/analyzer.h +++ b/src/main/analyzer.h @@ -58,7 +58,7 @@ public: // Functions called by analyzer commands void start(); - void run(); + void run(bool paused = false); void stop(); void pause(); void resume(); diff --git a/src/main/analyzer_command.cc b/src/main/analyzer_command.cc index 158e064ed..6cf682aeb 100644 --- a/src/main/analyzer_command.cc +++ b/src/main/analyzer_command.cc @@ -41,7 +41,8 @@ void ACStart::execute(Analyzer& analyzer) void ACRun::execute(Analyzer& analyzer) { - analyzer.run(); + analyzer.run(paused); + paused = false; } void ACStop::execute(Analyzer& analyzer) diff --git a/src/main/analyzer_command.h b/src/main/analyzer_command.h index f4ae88e99..cefd005b0 100644 --- a/src/main/analyzer_command.h +++ b/src/main/analyzer_command.h @@ -67,8 +67,12 @@ public: class ACRun : public AnalyzerCommand { public: + ACRun() = delete; + ACRun(bool is_paused = false ) { paused = is_paused; } void execute(Analyzer&) override; const char* stringify() override { return "RUN"; } +private: + bool paused = false; }; class ACStart : public AnalyzerCommand