mirror of
https://github.com/zeek/zeek.git
synced 2025-10-12 03:28:19 +00:00
Merge remote branch 'origin/master' into topic/policy-scripts-new
This commit is contained in:
commit
fbf207deda
19 changed files with 192 additions and 105 deletions
|
@ -343,7 +343,7 @@ vector<ParseLocationRec> parse_location_string(const string& s)
|
|||
plr.type = plrUnknown;
|
||||
|
||||
FILE* throwaway = search_for_file(filename.c_str(), "bro",
|
||||
&full_filename);
|
||||
&full_filename, true);
|
||||
if ( ! throwaway )
|
||||
{
|
||||
debug_msg("No such policy file: %s.\n", filename.c_str());
|
||||
|
|
56
src/Desc.cc
56
src/Desc.cc
|
@ -207,41 +207,71 @@ void ODesc::Indent()
|
|||
}
|
||||
}
|
||||
|
||||
static const char hex_chars[] = "0123456789ABCDEF";
|
||||
static const char hex_chars[] = "0123456789abcdef";
|
||||
|
||||
static const char* find_first_unprintable(ODesc* d, const char* bytes, unsigned int n)
|
||||
{
|
||||
if ( d->IsBinary() )
|
||||
return 0;
|
||||
|
||||
while ( n-- )
|
||||
{
|
||||
if ( ! isprint(*bytes) )
|
||||
return bytes;
|
||||
++bytes;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ODesc::AddBytes(const void* bytes, unsigned int n)
|
||||
{
|
||||
if ( ! escape )
|
||||
return AddBytesRaw(bytes, n);
|
||||
|
||||
const char* s = (const char*) bytes;
|
||||
const char* e = (const char*) bytes + n;
|
||||
|
||||
while ( s < e )
|
||||
{
|
||||
const char* t = (const char*) memchr(s, escape[0], e - s);
|
||||
const char* t1 = escape ? (const char*) memchr(s, escape[0], e - s) : e;
|
||||
const char* t2 = find_first_unprintable(this, s, t1 ? e - t1 : e - s);
|
||||
|
||||
if ( ! t )
|
||||
if ( t2 && (t2 < t1 || ! t1) )
|
||||
{
|
||||
AddBytesRaw(s, t2 - s);
|
||||
|
||||
char hex[6] = "\\x00";
|
||||
hex[2] = hex_chars[((*t2) & 0xf0) >> 4];
|
||||
hex[3] = hex_chars[(*t2) & 0x0f];
|
||||
AddBytesRaw(hex, sizeof(hex));
|
||||
|
||||
s = t2 + 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ! escape )
|
||||
break;
|
||||
|
||||
if ( memcmp(t, escape, escape_len) != 0 )
|
||||
if ( ! t1 )
|
||||
break;
|
||||
|
||||
AddBytesRaw(s, t - s);
|
||||
if ( memcmp(t1, escape, escape_len) != 0 )
|
||||
break;
|
||||
|
||||
AddBytesRaw(s, t1 - s);
|
||||
|
||||
for ( int i = 0; i < escape_len; ++i )
|
||||
{
|
||||
char hex[5] = "\\x00";
|
||||
hex[2] = hex_chars[(*t) >> 4];
|
||||
hex[3] = hex_chars[(*t) & 0x0f];
|
||||
hex[2] = hex_chars[((*t1) & 0xf0) >> 4];
|
||||
hex[3] = hex_chars[(*t1) & 0x0f];
|
||||
AddBytesRaw(hex, sizeof(hex));
|
||||
++t;
|
||||
++t1;
|
||||
}
|
||||
|
||||
s = t;
|
||||
s = t1;
|
||||
}
|
||||
|
||||
AddBytesRaw(s, e - s);
|
||||
if ( s < e )
|
||||
AddBytesRaw(s, e - s);
|
||||
}
|
||||
|
||||
void ODesc::AddBytesRaw(const void* bytes, unsigned int n)
|
||||
|
|
|
@ -223,7 +223,7 @@ bool LogWriterAscii::DoWrite(int num_fields, const LogField* const * fields,
|
|||
return false;
|
||||
}
|
||||
|
||||
desc.Add("\n");
|
||||
desc.AddRaw("\n", 1);
|
||||
|
||||
if ( fwrite(desc.Bytes(), desc.Len(), 1, file) != 1 )
|
||||
{
|
||||
|
|
|
@ -295,7 +295,7 @@ void OSFingerprint::load_config(const char* file)
|
|||
uint32 ln=0;
|
||||
char buf[MAXLINE];
|
||||
char* p;
|
||||
FILE* c = search_for_file( file, "osf", 0);
|
||||
FILE* c = search_for_file( file, "osf", 0, false);
|
||||
|
||||
if (!c)
|
||||
{
|
||||
|
|
|
@ -195,7 +195,7 @@ bool RuleMatcher::ReadFiles(const name_list& files)
|
|||
|
||||
for ( int i = 0; i < files.length(); ++i )
|
||||
{
|
||||
rules_in = search_for_file( files[i], "sig", 0);
|
||||
rules_in = search_for_file( files[i], "sig", 0, false);
|
||||
if ( ! rules_in )
|
||||
{
|
||||
error("Can't open signature file", files[i]);
|
||||
|
|
|
@ -557,7 +557,7 @@ static int load_files_with_prefix(const char* orig_file)
|
|||
else
|
||||
strcpy(new_filename, file);
|
||||
|
||||
f = search_for_file(new_filename, "bro", &full_filename);
|
||||
f = search_for_file(new_filename, "bro", &full_filename, true);
|
||||
delete [] new_filename;
|
||||
}
|
||||
|
||||
|
|
37
src/util.cc
37
src/util.cc
|
@ -868,21 +868,45 @@ const char* bro_prefixes()
|
|||
return p;
|
||||
}
|
||||
|
||||
FILE* open_file(const char* filename, const char** full_filename)
|
||||
static const char* PACKAGE_LOADER = "__load__.bro";
|
||||
|
||||
// If filename is pointing to a directory that contains a file called
|
||||
// PACKAGE_LOADER, returns the files path. Otherwise returns filename itself.
|
||||
// In both cases, the returned string is newly allocated.
|
||||
static const char* check_for_dir(const char* filename, bool load_pkgs)
|
||||
{
|
||||
if ( load_pkgs && is_dir(filename) )
|
||||
{
|
||||
char init_filename_buf[1024];
|
||||
safe_snprintf(init_filename_buf, sizeof(init_filename_buf),
|
||||
"%s/%s", filename, PACKAGE_LOADER);
|
||||
|
||||
if ( access(init_filename_buf, R_OK) == 0 )
|
||||
return copy_string(init_filename_buf);
|
||||
}
|
||||
|
||||
return copy_string(filename);
|
||||
}
|
||||
|
||||
FILE* open_file(const char* filename, const char** full_filename, bool load_pkgs)
|
||||
{
|
||||
filename = check_for_dir(filename, load_pkgs);
|
||||
|
||||
if ( full_filename )
|
||||
*full_filename = copy_string(filename);
|
||||
|
||||
FILE* f = fopen(filename, "r");
|
||||
|
||||
delete [] filename;
|
||||
|
||||
return f;
|
||||
}
|
||||
|
||||
FILE* search_for_file(const char* filename, const char* ext,
|
||||
const char** full_filename)
|
||||
const char** full_filename, bool load_pkgs)
|
||||
{
|
||||
if ( filename[0] == '/' || filename[0] == '.' )
|
||||
return open_file(filename, full_filename);
|
||||
return open_file(filename, full_filename, load_pkgs);
|
||||
|
||||
char path[1024], full_filename_buf[1024];
|
||||
safe_strncpy(path, bro_path(), sizeof(path));
|
||||
|
@ -905,13 +929,12 @@ FILE* search_for_file(const char* filename, const char* ext,
|
|||
"%s/%s.%s", dir_beginning, filename, ext);
|
||||
if ( access(full_filename_buf, R_OK) == 0 &&
|
||||
! is_dir(full_filename_buf) )
|
||||
return open_file(full_filename_buf, full_filename);
|
||||
return open_file(full_filename_buf, full_filename, load_pkgs);
|
||||
|
||||
safe_snprintf(full_filename_buf, sizeof(full_filename_buf),
|
||||
"%s/%s", dir_beginning, filename);
|
||||
if ( access(full_filename_buf, R_OK) == 0 &&
|
||||
! is_dir(full_filename_buf) )
|
||||
return open_file(full_filename_buf, full_filename);
|
||||
if ( access(full_filename_buf, R_OK) == 0 )
|
||||
return open_file(full_filename_buf, full_filename, load_pkgs);
|
||||
|
||||
dir_beginning = ++dir_ending;
|
||||
}
|
||||
|
|
|
@ -190,7 +190,7 @@ extern int int_list_cmp(const void* v1, const void* v2);
|
|||
extern const char* bro_path();
|
||||
extern const char* bro_prefixes();
|
||||
extern FILE* search_for_file(const char* filename, const char* ext,
|
||||
const char** full_filename);
|
||||
const char** full_filename, bool load_pkgs);
|
||||
|
||||
// Renames the given file to a new temporary name, and opens a new file with
|
||||
// the original name. Returns new file or NULL on error. Inits rotate_info if
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue