diff --git a/src/main.cc b/src/main.cc index d1d60218f3..924660f8dc 100644 --- a/src/main.cc +++ b/src/main.cc @@ -855,14 +855,14 @@ int main(int argc, char** argv) ! (id_name || bst_file) && ! command_line_policy && ! print_plugins ) add_input_file("-"); - // Process remaining arguments. X=Y arguments indicate script - // variable/parameter assignments. The remainder are treated - // as scripts to load. + // Process remaining arguments. X=Y arguments indicate script + // variable/parameter assignments. X::Y arguments indicate plugins to + // activate/query. The remainder are treated as scripts to load. while ( optind < argc ) { if ( strchr(argv[optind], '=') ) params.push_back(argv[optind++]); - else if ( print_plugins && strstr(argv[optind], "::") ) + else if ( strstr(argv[optind], "::") ) requested_plugins.insert(argv[optind++]); else add_input_file(argv[optind++]); @@ -890,6 +890,10 @@ int main(int argc, char** argv) file_mgr->InitPreScript(); broxygen_mgr->InitPreScript(); + for ( set::const_iterator i = requested_plugins.begin(); + i != requested_plugins.end(); i++ ) + plugin_mgr->ActivateDynamicPlugin(*i); + plugin_mgr->ActivateDynamicPlugins(! bare_mode); if ( events_file ) diff --git a/src/plugin/Manager.cc b/src/plugin/Manager.cc index efe7e0aea3..657050df77 100644 --- a/src/plugin/Manager.cc +++ b/src/plugin/Manager.cc @@ -146,6 +146,10 @@ bool Manager::ActivateDynamicPluginInternal(const std::string& name, bool ok_if_ return false; } + if ( m->second == "" ) + // Already activated. + return true; + std::string dir = m->second + "/"; if ( dir.empty() ) @@ -283,6 +287,8 @@ void Manager::UpdateInputFiles() for ( file_list::const_reverse_iterator i = scripts_to_load.rbegin(); i != scripts_to_load.rend(); i++ ) add_input_file_at_front((*i).c_str()); + + scripts_to_load.clear(); } static bool plugin_cmp(const Plugin* a, const Plugin* b) diff --git a/testing/btest/Baseline/plugins.bifs-and-scripts/output b/testing/btest/Baseline/plugins.bifs-and-scripts/output index 82daee1d7e..ef591e92aa 100644 --- a/testing/btest/Baseline/plugins.bifs-and-scripts/output +++ b/testing/btest/Baseline/plugins.bifs-and-scripts/output @@ -18,3 +18,7 @@ calling bif, Hello from the plugin! plugin: automatically loaded at startup calling bif, Hello from the plugin! plugin: manually loaded +=== +plugin: automatically loaded at startup +calling bif, Hello from the plugin! +plugin: manually loaded diff --git a/testing/btest/plugins/bifs-and-scripts.sh b/testing/btest/plugins/bifs-and-scripts.sh index 5df9972c95..9975da21c6 100644 --- a/testing/btest/plugins/bifs-and-scripts.sh +++ b/testing/btest/plugins/bifs-and-scripts.sh @@ -18,6 +18,9 @@ # @TEST-EXEC: echo === >>output # @TEST-EXEC: BRO_PLUGIN_PATH=`pwd` bro -b ./activate.bro demo/foo -r $TRACES/empty.trace >>output +# @TEST-EXEC: echo === >>output +# @TEST-EXEC: BRO_PLUGIN_PATH=`pwd` bro -b Demo::Foo demo/foo -r $TRACES/empty.trace >>output + # @TEST-EXEC: TEST_DIFF_CANONIFIER= btest-diff output cat >scripts/__load__.bro <