When attempting to activate a plugin, load dynamic libraries first.

Just moving code. This is so that we can abort if dlopen() fails without
having changed any other state yet.
This commit is contained in:
Robin Sommer 2020-11-06 11:58:41 +00:00
parent 3ebfcdf0ae
commit df40e82fd6

View file

@ -175,58 +175,6 @@ bool Manager::ActivateDynamicPluginInternal(const std::string& name, bool ok_if_
DBG_LOG(DBG_PLUGINS, "Activating plugin %s", name.c_str());
// Add the "scripts" and "bif" directories to ZEEKPATH.
std::string scripts = dir + "scripts";
if ( util::is_dir(scripts) )
{
DBG_LOG(DBG_PLUGINS, " Adding %s to ZEEKPATH", scripts.c_str());
util::detail::add_to_zeek_path(scripts);
}
string init;
// First load {scripts}/__preload__.zeek automatically.
for (const string& ext : util::detail::script_extensions)
{
init = dir + "scripts/__preload__" + ext;
if ( util::is_file(init) )
{
DBG_LOG(DBG_PLUGINS, " Loading %s", init.c_str());
util::detail::warn_if_legacy_script(init);
scripts_to_load.push_back(init);
break;
}
}
// Load {bif,scripts}/__load__.zeek automatically.
for (const string& ext : util::detail::script_extensions)
{
init = dir + "lib/bif/__load__" + ext;
if ( util::is_file(init) )
{
DBG_LOG(DBG_PLUGINS, " Loading %s", init.c_str());
util::detail::warn_if_legacy_script(init);
scripts_to_load.push_back(init);
break;
}
}
for (const string& ext : util::detail::script_extensions)
{
init = dir + "scripts/__load__" + ext;
if ( util::is_file(init) )
{
DBG_LOG(DBG_PLUGINS, " Loading %s", init.c_str());
util::detail::warn_if_legacy_script(init);
scripts_to_load.push_back(init);
break;
}
}
// Load shared libraries.
string dypattern = dir + "/lib/*." + HOST_ARCHITECTURE + DYNAMIC_PLUGIN_SUFFIX;
@ -288,6 +236,58 @@ bool Manager::ActivateDynamicPluginInternal(const std::string& name, bool ok_if_
DBG_LOG(DBG_PLUGINS, " No shared library found");
}
// Add the "scripts" and "bif" directories to ZEEKPATH.
std::string scripts = dir + "scripts";
if ( util::is_dir(scripts) )
{
DBG_LOG(DBG_PLUGINS, " Adding %s to ZEEKPATH", scripts.c_str());
util::detail::add_to_zeek_path(scripts);
}
string init;
// First load {scripts}/__preload__.zeek automatically.
for (const string& ext : util::detail::script_extensions)
{
init = dir + "scripts/__preload__" + ext;
if ( util::is_file(init) )
{
DBG_LOG(DBG_PLUGINS, " Loading %s", init.c_str());
util::detail::warn_if_legacy_script(init);
scripts_to_load.push_back(init);
break;
}
}
// Load {bif,scripts}/__load__.zeek automatically.
for (const string& ext : util::detail::script_extensions)
{
init = dir + "lib/bif/__load__" + ext;
if ( util::is_file(init) )
{
DBG_LOG(DBG_PLUGINS, " Loading %s", init.c_str());
util::detail::warn_if_legacy_script(init);
scripts_to_load.push_back(init);
break;
}
}
for (const string& ext : util::detail::script_extensions)
{
init = dir + "scripts/__load__" + ext;
if ( util::is_file(init) )
{
DBG_LOG(DBG_PLUGINS, " Loading %s", init.c_str());
util::detail::warn_if_legacy_script(init);
scripts_to_load.push_back(init);
break;
}
}
// Mark this plugin as activated by clearing the path.
m->second.clear();