mirror of
https://github.com/zeek/zeek.git
synced 2025-10-08 09:38:19 +00:00

#1835 subtly changed the semantics of the `LoadFile` plugin hook to no longer have the current script location available for signature files being loaded through `@load-sigs`. This was undocumented behavior, so it's technically not a regression, but since at least one external plugin is depending on it, this change restores the old behavior.
58 lines
1.4 KiB
C++
58 lines
1.4 KiB
C++
#include "zeek/ScannedFile.h"
|
|
|
|
#include <errno.h>
|
|
#include <limits.h> // for PATH_MAX
|
|
|
|
#include "zeek/DebugLogger.h"
|
|
#include "zeek/Reporter.h"
|
|
|
|
namespace zeek::detail
|
|
{
|
|
|
|
std::list<ScannedFile> files_scanned;
|
|
std::vector<SignatureFile> sig_files;
|
|
|
|
ScannedFile::ScannedFile(int arg_include_level, std::string arg_name, bool arg_skipped,
|
|
bool arg_prefixes_checked)
|
|
: include_level(arg_include_level), skipped(arg_skipped),
|
|
prefixes_checked(arg_prefixes_checked), name(std::move(arg_name))
|
|
{
|
|
if ( name == canonical_stdin_path )
|
|
canonical_path = canonical_stdin_path;
|
|
else
|
|
{
|
|
char buf[PATH_MAX];
|
|
auto res = realpath(name.data(), buf);
|
|
|
|
if ( ! res )
|
|
zeek::reporter->FatalError("failed to get realpath() of %s: %s", name.data(),
|
|
strerror(errno));
|
|
|
|
canonical_path = res;
|
|
}
|
|
}
|
|
|
|
bool ScannedFile::AlreadyScanned() const
|
|
{
|
|
auto rval = false;
|
|
|
|
for ( const auto& it : files_scanned )
|
|
if ( it.canonical_path == canonical_path )
|
|
{
|
|
rval = true;
|
|
break;
|
|
}
|
|
|
|
DBG_LOG(zeek::DBG_SCRIPTS, "AlreadyScanned result (%d) %s", rval, canonical_path.data());
|
|
return rval;
|
|
}
|
|
|
|
SignatureFile::SignatureFile(std::string file) : file(std::move(file)) { }
|
|
|
|
SignatureFile::SignatureFile(std::string file, std::string full_path, Location load_location)
|
|
: file(std::move(file)), full_path(std::move(full_path)),
|
|
load_location(std::move(load_location))
|
|
{
|
|
}
|
|
|
|
} // namespace zeek::detail
|