From 7f0fb49612bc1a56868e6f2bba1ff98f3e6abf5a Mon Sep 17 00:00:00 2001 From: Jon Siwek Date: Thu, 23 May 2019 20:40:03 -0700 Subject: [PATCH] Add an internal getenv wrapper function: zeekenv It maps newer environment variable names starting with ZEEK to the legacy names starting with BRO. --- CHANGES | 13 ++++ VERSION | 2 +- scripts/base/frameworks/broker/main.zeek | 4 +- .../frameworks/logging/writers/ascii.zeek | 6 +- scripts/base/init-bare.zeek | 7 +- src/Brofiler.cc | 18 ++---- src/DNS_Mgr.cc | 2 +- src/bro.bif | 2 +- src/broker/Manager.cc | 8 +-- src/logging/writers/ascii/Ascii.cc | 9 +-- src/main.cc | 20 ++---- src/util.cc | 64 +++++++++++-------- src/util.h | 6 ++ src/zeekygen/Manager.cc | 2 +- 14 files changed, 82 insertions(+), 81 deletions(-) diff --git a/CHANGES b/CHANGES index e728a770b4..6293d66cec 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,17 @@ +2.6-334 | 2019-05-23 20:40:03 -0700 + + * Add an internal getenv wrapper function: zeekenv (Jon Siwek, Corelight) + + It maps newer environment variable names starting with ZEEK to the + legacy names starting with BRO. + + * Rename all BRO-prefixed environment variables (Daniel Thayer) + + For backward compatibility when reading values, we first check + the ZEEK-prefixed value, and if not set, then check the corresponding + BRO-prefixed value. + 2.6-331 | 2019-05-23 18:03:42 -0700 * Update broker unit test output. (Jon Siwek, Corelight) diff --git a/VERSION b/VERSION index cb46b976cd..216f0627d7 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.6-331 +2.6-334 diff --git a/scripts/base/frameworks/broker/main.zeek b/scripts/base/frameworks/broker/main.zeek index f8561b19da..458b51050e 100644 --- a/scripts/base/frameworks/broker/main.zeek +++ b/scripts/base/frameworks/broker/main.zeek @@ -16,7 +16,7 @@ export { ## Default address on which to listen. ## ## .. zeek:see:: Broker::listen - const default_listen_address = getenv("ZEEK_DEFAULT_LISTEN_ADDRESS") != "" ? getenv("ZEEK_DEFAULT_LISTEN_ADDRESS") : getenv("BRO_DEFAULT_LISTEN_ADDRESS") &redef; + const default_listen_address = getenv("ZEEK_DEFAULT_LISTEN_ADDRESS") &redef; ## Default interval to retry connecting to a peer if it cannot be made to ## work initially, or if it ever becomes disconnected. Use of the @@ -380,8 +380,6 @@ function listen(a: string, p: port, retry: interval): port if ( bound == 0/tcp ) { local e = getenv("ZEEK_DEFAULT_LISTEN_RETRY"); - if ( e == "" ) - e = getenv("BRO_DEFAULT_LISTEN_RETRY"); if ( e != "" ) retry = double_to_interval(to_double(e)); diff --git a/scripts/base/frameworks/logging/writers/ascii.zeek b/scripts/base/frameworks/logging/writers/ascii.zeek index d15bb059de..a32ce552e3 100644 --- a/scripts/base/frameworks/logging/writers/ascii.zeek +++ b/scripts/base/frameworks/logging/writers/ascii.zeek @@ -84,11 +84,7 @@ function default_rotation_postprocessor_func(info: Log::RotationInfo) : bool local bls = getenv("ZEEK_LOG_SUFFIX"); if ( bls == "" ) - { - bls = getenv("BRO_LOG_SUFFIX"); - if ( bls == "" ) - bls = "log"; - } + bls = "log"; # Move file to name including both opening and closing time. local dst = fmt("%s.%s.%s%s", info$path, diff --git a/scripts/base/init-bare.zeek b/scripts/base/init-bare.zeek index 9c6bf78338..c41613aaef 100644 --- a/scripts/base/init-bare.zeek +++ b/scripts/base/init-bare.zeek @@ -1807,12 +1807,9 @@ event net_done(t: time) { done_with_network = T; } function log_file_name(tag: string): string { local suffix = getenv("ZEEK_LOG_SUFFIX"); + if ( suffix == "" ) - { - suffix = getenv("BRO_LOG_SUFFIX"); - if ( suffix == "" ) - suffix = "log"; - } + suffix = "log"; return fmt("%s.%s", tag, suffix); } diff --git a/src/Brofiler.cc b/src/Brofiler.cc index 871fca3950..1f0bc0268a 100644 --- a/src/Brofiler.cc +++ b/src/Brofiler.cc @@ -17,13 +17,10 @@ Brofiler::~Brofiler() bool Brofiler::ReadStats() { - char* bf = getenv("ZEEK_PROFILER_FILE"); + char* bf = zeekenv("ZEEK_PROFILER_FILE"); + if ( ! bf ) - { - bf = getenv("BRO_PROFILER_FILE"); - if ( ! bf ) - return false; - } + return false; FILE* f = fopen(bf, "r"); if ( ! f ) @@ -51,13 +48,10 @@ bool Brofiler::ReadStats() bool Brofiler::WriteStats() { - char* bf = getenv("ZEEK_PROFILER_FILE"); + char* bf = zeekenv("ZEEK_PROFILER_FILE"); + if ( ! bf ) - { - bf = getenv("BRO_PROFILER_FILE"); - if ( ! bf ) - return false; - } + return false; SafeDirname dirname{bf}; diff --git a/src/DNS_Mgr.cc b/src/DNS_Mgr.cc index 2e1f46de31..c02be19d82 100644 --- a/src/DNS_Mgr.cc +++ b/src/DNS_Mgr.cc @@ -414,7 +414,7 @@ void DNS_Mgr::Init() // script-layer option to configure the DNS resolver as it may not be // configured to the user's desired address at the time when we need to to // the lookup. - auto dns_resolver = getenv("ZEEK_DNS_RESOLVER"); + auto dns_resolver = zeekenv("ZEEK_DNS_RESOLVER"); auto dns_resolver_addr = dns_resolver ? IPAddr(dns_resolver) : IPAddr(); char err[NB_DNS_ERRSIZE]; diff --git a/src/bro.bif b/src/bro.bif index 94c8aab6b7..039053f4f2 100644 --- a/src/bro.bif +++ b/src/bro.bif @@ -339,7 +339,7 @@ function network_time%(%): time ## .. zeek:see:: setenv function getenv%(var: string%): string %{ - const char* env_val = getenv(var->CheckString()); + const char* env_val = zeekenv(var->CheckString()); if ( ! env_val ) env_val = ""; // ### return new StringVal(env_val); diff --git a/src/broker/Manager.cc b/src/broker/Manager.cc index 5e88a97e3d..9baf20ef02 100644 --- a/src/broker/Manager.cc +++ b/src/broker/Manager.cc @@ -177,9 +177,7 @@ void Manager::InitPostScript() BrokerConfig config{std::move(options)}; - auto max_threads_env = getenv("ZEEK_BROKER_MAX_THREADS"); - if ( ! max_threads_env ) - max_threads_env = getenv("BRO_BROKER_MAX_THREADS"); + auto max_threads_env = zeekenv("ZEEK_BROKER_MAX_THREADS"); if ( max_threads_env ) config.set("scheduler.max-threads", atoi(max_threads_env)); @@ -305,9 +303,7 @@ void Manager::Peer(const string& addr, uint16_t port, double retry) DBG_LOG(DBG_BROKER, "Starting to peer with %s:%" PRIu16, addr.c_str(), port); - auto e = getenv("ZEEK_DEFAULT_CONNECT_RETRY"); - if ( ! e ) - e = getenv("BRO_DEFAULT_CONNECT_RETRY"); + auto e = zeekenv("ZEEK_DEFAULT_CONNECT_RETRY"); if ( e ) retry = atoi(e); diff --git a/src/logging/writers/ascii/Ascii.cc b/src/logging/writers/ascii/Ascii.cc index b9e6e2d74c..f84bde5488 100644 --- a/src/logging/writers/ascii/Ascii.cc +++ b/src/logging/writers/ascii/Ascii.cc @@ -444,13 +444,10 @@ bool Ascii::DoHeartbeat(double network_time, double current_time) string Ascii::LogExt() { - const char* ext = getenv("ZEEK_LOG_SUFFIX"); + const char* ext = zeekenv("ZEEK_LOG_SUFFIX"); + if ( ! ext ) - { - ext = getenv("BRO_LOG_SUFFIX"); - if ( ! ext ) - ext = "log"; - } + ext = "log"; return ext; } diff --git a/src/main.cc b/src/main.cc index d5e3c6588e..10026eea7e 100644 --- a/src/main.cc +++ b/src/main.cc @@ -147,10 +147,7 @@ const char* bro_version() bool bro_dns_fake() { - if ( getenv("ZEEK_DNS_FAKE") || getenv("BRO_DNS_FAKE") ) - return true; - else - return false; + return zeekenv("ZEEK_DNS_FAKE"); } void usage(int code = 1) @@ -208,8 +205,8 @@ void usage(int code = 1) fprintf(stderr, " $ZEEK_SEED_FILE | file to load seeds from (not set)\n"); fprintf(stderr, " $ZEEK_LOG_SUFFIX | ASCII log file extension (.%s)\n", logging::writer::Ascii::LogExt().c_str()); fprintf(stderr, " $ZEEK_PROFILER_FILE | Output file for script execution statistics (not set)\n"); - fprintf(stderr, " $ZEEK_DISABLE_ZEEKYGEN | Disable Zeekygen documentation support (%s)\n", getenv("ZEEK_DISABLE_ZEEKYGEN") || getenv("BRO_DISABLE_BROXYGEN") ? "set" : "not set"); - fprintf(stderr, " $ZEEK_DNS_RESOLVER | IPv4/IPv6 address of DNS resolver to use (%s)\n", getenv("ZEEK_DNS_RESOLVER") ? getenv("ZEEK_DNS_RESOLVER") : "not set, will use first IPv4 address from /etc/resolv.conf"); + fprintf(stderr, " $ZEEK_DISABLE_ZEEKYGEN | Disable Zeekygen documentation support (%s)\n", zeekenv("ZEEK_DISABLE_ZEEKYGEN") ? "set" : "not set"); + fprintf(stderr, " $ZEEK_DNS_RESOLVER | IPv4/IPv6 address of DNS resolver to use (%s)\n", zeekenv("ZEEK_DNS_RESOLVER") ? zeekenv("ZEEK_DNS_RESOLVER") : "not set, will use first IPv4 address from /etc/resolv.conf"); fprintf(stderr, "\n"); @@ -428,10 +425,7 @@ int main(int argc, char** argv) char* id_name = 0; char* events_file = 0; - char* seed_load_file = getenv("ZEEK_SEED_FILE"); - if ( ! seed_load_file ) - seed_load_file = getenv("BRO_SEED_FILE"); - + char* seed_load_file = zeekenv("ZEEK_SEED_FILE"); char* seed_save_file = 0; char* user_pcap_filter = 0; char* debug_streams = 0; @@ -500,9 +494,7 @@ int main(int argc, char** argv) prefixes.append(strdup("")); // "" = "no prefix" - char* p = getenv("ZEEK_PREFIXES"); - if ( ! p ) - p = getenv("BRO_PREFIXES"); + char* p = zeekenv("ZEEK_PREFIXES"); if ( p ) add_to_name_list(p, ':', prefixes); @@ -1088,7 +1080,7 @@ int main(int argc, char** argv) // Drain the event queue here to support the protocols framework configuring DPM mgr.Drain(); - if ( reporter->Errors() > 0 && ! getenv("ZEEK_ALLOW_INIT_ERRORS") ) + if ( reporter->Errors() > 0 && ! zeekenv("ZEEK_ALLOW_INIT_ERRORS") ) reporter->FatalError("errors occurred while initializing"); broker_mgr->ZeekInitDone(); diff --git a/src/util.cc b/src/util.cc index 5216468bbf..7a5eb41c5f 100644 --- a/src/util.cc +++ b/src/util.cc @@ -958,15 +958,10 @@ const std::string& bro_path() { if ( bro_path_value.empty() ) { - const char* path = getenv("ZEEKPATH"); + const char* path = zeekenv("ZEEKPATH"); if ( ! path ) - { - path = getenv("BROPATH"); - - if ( ! path ) - path = DEFAULT_ZEEKPATH; - } + path = DEFAULT_ZEEKPATH; bro_path_value = path; } @@ -984,30 +979,20 @@ extern void add_to_bro_path(const string& dir) const char* bro_plugin_path() { - const char* path = getenv("ZEEK_PLUGIN_PATH"); + const char* path = zeekenv("ZEEK_PLUGIN_PATH"); if ( ! path ) - { - path = getenv("BRO_PLUGIN_PATH"); - - if ( ! path ) - path = BRO_PLUGIN_INSTALL_PATH; - } + path = BRO_PLUGIN_INSTALL_PATH; return path; } const char* bro_plugin_activate() { - const char* names = getenv("ZEEK_PLUGIN_ACTIVATE"); + const char* names = zeekenv("ZEEK_PLUGIN_ACTIVATE"); if ( ! names ) - { - names = getenv("BRO_PLUGIN_ACTIVATE"); - - if ( ! names ) - names = ""; - } + names = ""; return names; } @@ -1403,11 +1388,7 @@ FILE* rotate_file(const char* name, RecordVal* rotate_info) const char* log_file_name(const char* tag) { - const char* env = getenv("ZEEK_LOG_SUFFIX"); - - if ( ! env ) - env = getenv("BRO_LOG_SUFFIX"); - + const char* env = zeekenv("ZEEK_LOG_SUFFIX"); return fmt("%s.%s", tag, (env ? env : "log")); } @@ -1862,3 +1843,34 @@ void bro_strerror_r(int bro_errno, char* buf, size_t buflen) // GNU vs. XSI flavors make it harder to use strerror_r. strerror_r_helper(res, buf, buflen); } + +char* zeekenv(const char* name) + { + static std::map legacy_vars = { + { "ZEEKPATH", "BROPATH" }, + { "ZEEK_PLUGIN_PATH", "BRO_PLUGIN_PATH" }, + { "ZEEK_PLUGIN_ACTIVATE", "BRO_PLUGIN_ACTIVATE" }, + { "ZEEK_PREFIXES", "BRO_PREFIXES" }, + { "ZEEK_DNS_FAKE", "BRO_DNS_FAKE" }, + { "ZEEK_SEED_FILE", "BRO_SEED_FILE" }, + { "ZEEK_LOG_SUFFIX", "BRO_LOG_SUFFIX" }, + { "ZEEK_PROFILER_FILE", "BRO_PROFILER_FILE" }, + { "ZEEK_DISABLE_ZEEKYGEN", "BRO_DISABLE_BROXYGEN" }, + { "ZEEK_DEFAULT_CONNECT_RETRY", "BRO_DEFAULT_CONNECT_RETRY" }, + { "ZEEK_BROKER_MAX_THREADS", "BRO_BROKER_MAX_THREADS" }, + { "ZEEK_DEFAULT_LISTEN_ADDRESS", "BRO_DEFAULT_LISTEN_ADDRESS" }, + { "ZEEK_DEFAULT_LISTEN_RETRY", "BRO_DEFAULT_LISTEN_RETRY" }, + }; + + auto rval = getenv(name); + + if ( rval ) + return rval; + + auto it = legacy_vars.find(name); + + if ( it == legacy_vars.end() ) + return rval; + + return getenv(it->second); + } diff --git a/src/util.h b/src/util.h index f9912b72c2..6a08ebe1ea 100644 --- a/src/util.h +++ b/src/util.h @@ -549,4 +549,10 @@ std::string canonify_name(const std::string& name); */ void bro_strerror_r(int bro_errno, char* buf, size_t buflen); +/** + * A wrapper function for getenv(). Helps check for existence of + * legacy environment variable names that map to the latest \a name. + */ +char* zeekenv(const char* name); + #endif diff --git a/src/zeekygen/Manager.cc b/src/zeekygen/Manager.cc index 4fdf7d94ad..df464213ca 100644 --- a/src/zeekygen/Manager.cc +++ b/src/zeekygen/Manager.cc @@ -64,7 +64,7 @@ Manager::Manager(const string& arg_config, const string& bro_command) identifiers(), all_info(), last_identifier_seen(), incomplete_type(), enum_mappings(), config(arg_config), bro_mtime() { - if ( getenv("ZEEK_DISABLE_ZEEKYGEN") || getenv("BRO_DISABLE_BROXYGEN") ) + if ( zeekenv("ZEEK_DISABLE_ZEEKYGEN") ) disabled = true; // If running bro without the "-X" option, then we don't need bro_mtime.