mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +00:00
Add warnings when loading scripts ending in ".bro", or using legacy environment variables.
This commit is contained in:
parent
bbc308cb02
commit
649301b667
5 changed files with 64 additions and 18 deletions
|
@ -189,6 +189,7 @@ bool Manager::ActivateDynamicPluginInternal(const std::string& name, bool ok_if_
|
||||||
if ( is_file(init) )
|
if ( is_file(init) )
|
||||||
{
|
{
|
||||||
DBG_LOG(DBG_PLUGINS, " Loading %s", init.c_str());
|
DBG_LOG(DBG_PLUGINS, " Loading %s", init.c_str());
|
||||||
|
warn_if_legacy_script(init);
|
||||||
scripts_to_load.push_back(init);
|
scripts_to_load.push_back(init);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -202,6 +203,7 @@ bool Manager::ActivateDynamicPluginInternal(const std::string& name, bool ok_if_
|
||||||
if ( is_file(init) )
|
if ( is_file(init) )
|
||||||
{
|
{
|
||||||
DBG_LOG(DBG_PLUGINS, " Loading %s", init.c_str());
|
DBG_LOG(DBG_PLUGINS, " Loading %s", init.c_str());
|
||||||
|
warn_if_legacy_script(init);
|
||||||
scripts_to_load.push_back(init);
|
scripts_to_load.push_back(init);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -214,6 +216,7 @@ bool Manager::ActivateDynamicPluginInternal(const std::string& name, bool ok_if_
|
||||||
if ( is_file(init) )
|
if ( is_file(init) )
|
||||||
{
|
{
|
||||||
DBG_LOG(DBG_PLUGINS, " Loading %s", init.c_str());
|
DBG_LOG(DBG_PLUGINS, " Loading %s", init.c_str());
|
||||||
|
warn_if_legacy_script(init);
|
||||||
scripts_to_load.push_back(init);
|
scripts_to_load.push_back(init);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
70
src/util.cc
70
src/util.cc
|
@ -62,6 +62,36 @@
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static bool starts_with(const std::string_view& s, const std::string& beginning)
|
||||||
|
{
|
||||||
|
if ( beginning.size() > s.size() )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return std::equal(beginning.begin(), beginning.end(), s.begin());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("util starts_with")
|
||||||
|
{
|
||||||
|
CHECK(starts_with("abcde", "ab") == true);
|
||||||
|
CHECK(starts_with("abcde", "de") == false);
|
||||||
|
CHECK(starts_with("abcde", "abcedf") == false);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool ends_with(const std::string_view& s, const std::string& ending)
|
||||||
|
{
|
||||||
|
if ( ending.size() > s.size() )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return std::equal(ending.rbegin(), ending.rend(), s.rbegin());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("util ends_with")
|
||||||
|
{
|
||||||
|
CHECK(ends_with("abcde", "de") == true);
|
||||||
|
CHECK(ends_with("abcde", "fg") == false);
|
||||||
|
CHECK(ends_with("abcde", "abcedf") == false);
|
||||||
|
}
|
||||||
|
|
||||||
TEST_CASE("util extract_ip")
|
TEST_CASE("util extract_ip")
|
||||||
{
|
{
|
||||||
CHECK(extract_ip("[1.2.3.4]") == "1.2.3.4");
|
CHECK(extract_ip("[1.2.3.4]") == "1.2.3.4");
|
||||||
|
@ -1249,6 +1279,15 @@ TEST_CASE("util is_package_loader")
|
||||||
|
|
||||||
const array<string, 2> script_extensions = {".zeek", ".bro"};
|
const array<string, 2> script_extensions = {".zeek", ".bro"};
|
||||||
|
|
||||||
|
void warn_if_legacy_script(const std::string_view& filename)
|
||||||
|
{
|
||||||
|
if ( ends_with(filename, ".bro") )
|
||||||
|
{
|
||||||
|
std::string x(filename);
|
||||||
|
reporter->Warning("Loading script '%s' with legacy extension, support for '.bro' will be removed in Zeek v4.1", x.c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool is_package_loader(const string& path)
|
bool is_package_loader(const string& path)
|
||||||
{
|
{
|
||||||
string filename(std::move(SafeBasename(path).result));
|
string filename(std::move(SafeBasename(path).result));
|
||||||
|
@ -1256,8 +1295,11 @@ bool is_package_loader(const string& path)
|
||||||
for ( const string& ext : script_extensions )
|
for ( const string& ext : script_extensions )
|
||||||
{
|
{
|
||||||
if ( filename == "__load__" + ext )
|
if ( filename == "__load__" + ext )
|
||||||
|
{
|
||||||
|
warn_if_legacy_script(filename);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1294,6 +1336,7 @@ FILE* open_package(string& path, const string& mode)
|
||||||
string p = path + ext;
|
string p = path + ext;
|
||||||
if ( can_read(p) )
|
if ( can_read(p) )
|
||||||
{
|
{
|
||||||
|
warn_if_legacy_script(path);
|
||||||
path.append(ext);
|
path.append(ext);
|
||||||
return open_file(path, mode);
|
return open_file(path, mode);
|
||||||
}
|
}
|
||||||
|
@ -1604,21 +1647,6 @@ string find_file(const string& filename, const string& path_set,
|
||||||
return string();
|
return string();
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool ends_with(const std::string& s, const std::string& ending)
|
|
||||||
{
|
|
||||||
if ( ending.size() > s.size() )
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return std::equal(ending.rbegin(), ending.rend(), s.rbegin());
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_CASE("util ends_with")
|
|
||||||
{
|
|
||||||
CHECK(ends_with("abcde", "de") == true);
|
|
||||||
CHECK(ends_with("abcde", "fg") == false);
|
|
||||||
CHECK(ends_with("abcde", "abcedf") == false);
|
|
||||||
}
|
|
||||||
|
|
||||||
string find_script_file(const string& filename, const string& path_set)
|
string find_script_file(const string& filename, const string& path_set)
|
||||||
{
|
{
|
||||||
vector<string> paths;
|
vector<string> paths;
|
||||||
|
@ -1631,11 +1659,16 @@ string find_script_file(const string& filename, const string& path_set)
|
||||||
string f = find_file_in_path(filename, paths[n], ext);
|
string f = find_file_in_path(filename, paths[n], ext);
|
||||||
|
|
||||||
if ( ! f.empty() )
|
if ( ! f.empty() )
|
||||||
|
{
|
||||||
|
warn_if_legacy_script(f);
|
||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( ends_with(filename, ".bro") )
|
if ( ends_with(filename, ".bro") )
|
||||||
{
|
{
|
||||||
|
warn_if_legacy_script(filename);
|
||||||
|
|
||||||
// We were looking for a file explicitly ending in .bro and didn't
|
// We were looking for a file explicitly ending in .bro and didn't
|
||||||
// find it, so fall back to one ending in .zeek, if it exists.
|
// find it, so fall back to one ending in .zeek, if it exists.
|
||||||
auto fallback = string(filename.data(), filename.size() - 4) + ".zeek";
|
auto fallback = string(filename.data(), filename.size() - 4) + ".zeek";
|
||||||
|
@ -2186,7 +2219,12 @@ char* zeekenv(const char* name)
|
||||||
if ( it == legacy_vars.end() )
|
if ( it == legacy_vars.end() )
|
||||||
return rval;
|
return rval;
|
||||||
|
|
||||||
return getenv(it->second);
|
auto val = getenv(it->second);
|
||||||
|
|
||||||
|
if ( val && starts_with(it->second, "BRO_") )
|
||||||
|
reporter->Warning("Using legacy environment variable %s, support will be removed in Zeek v4.1; use %s instead", it->second, name);
|
||||||
|
|
||||||
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
static string json_escape_byte(char c)
|
static string json_escape_byte(char c)
|
||||||
|
|
|
@ -265,6 +265,9 @@ extern std::string bro_prefixes();
|
||||||
|
|
||||||
extern const std::array<std::string, 2> script_extensions;
|
extern const std::array<std::string, 2> script_extensions;
|
||||||
|
|
||||||
|
/** Prints a warning if the filename ends in .bro. */
|
||||||
|
void warn_if_legacy_script(const std::string_view& filename);
|
||||||
|
|
||||||
bool is_package_loader(const std::string& path);
|
bool is_package_loader(const std::string& path);
|
||||||
|
|
||||||
extern void add_to_bro_path(const std::string& dir);
|
extern void add_to_bro_path(const std::string& dir);
|
||||||
|
|
|
@ -1 +1,3 @@
|
||||||
|
warning in /home/robin/bro/master/testing/btest/.tmp/core.load-explicit-bro-suffix-fallback/load-explicit-bro-suffix-fallback.zeek, line 5: Loading script 'foo.bro' with legacy extension, support for '.bro' will be removed in Zeek v4.1
|
||||||
|
warning in /home/robin/bro/master/testing/btest/.tmp/core.load-explicit-bro-suffix-fallback/load-explicit-bro-suffix-fallback.zeek, line 5: Loading script 'foo.bro' with legacy extension, support for '.bro' will be removed in Zeek v4.1
|
||||||
loaded foo.zeek
|
loaded foo.zeek
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# @TEST-EXEC: zeek -b %INPUT >out
|
# @TEST-EXEC: zeek -b %INPUT >out 2>&1
|
||||||
# @TEST-EXEC: btest-diff out
|
# @TEST-EXEC: TEST_DIFF_CANONIFIER=$SCRIPTS/diff-remove-abspath btest-diff out
|
||||||
|
|
||||||
# We don't have a foo.bro, but we'll accept foo.zeek.
|
# We don't have a foo.bro, but we'll accept foo.zeek.
|
||||||
@load foo.bro
|
@load foo.bro
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue