Merge remote-tracking branch 'microsoft/master'

* microsoft/master: (71 commits)
  Clang formatting
  Mask ports before inserting them into the map
  Fix compiler warning from applied patch
  Remove statistics plugin in favor of stats bif
  Add EventHandler version of stats plugin
  Mark a few EventHandler methods const
  Changed implementation from std::map to std::unordered_map of Val.cc
  Removed const, Windows build is now working
  Added fixes suggested in PR
  Update src/packet_analysis/protocol/ip/IP.cc
  Apply suggestions from code review
  Clang format again but now with v13.0.1
  Rewrote usages of define(_MSC_VER) to ifdef _MSC_VER
  Clang format it all
  Fixed initial CR comments
  Add NEWS entry about Windows port
  Add a couple of extra unistd.h includes to fix a build failure
  Use std::chrono instead of gettimeofday
  Update libkqueue submodule [nomail]
  Don't call tokenize_string if the input string is empty
  ...
This commit is contained in:
Tim Wojtulewicz 2022-11-11 15:13:47 -07:00
commit a8fc63e182
86 changed files with 1001 additions and 261 deletions

View file

@ -41,7 +41,7 @@ extern "C"
#include "zeek/zeek-affinity.h"
#ifdef DEBUG
#define DBG_STEM(args...) stem->LogDebug(args);
#define DBG_STEM(...) stem->LogDebug(__VA_ARGS__);
#else
#define DBG_STEM
#endif
@ -987,22 +987,24 @@ std::optional<SupervisedNode> Stem::Poll()
const auto total_fd_count = fixed_fd_count + (nodes.size() * 2);
auto pfds = std::make_unique<pollfd[]>(total_fd_count);
int pfd_idx = 0;
pfds[pfd_idx++] = {pipe->InFD(), POLLIN, 0};
pfds[pfd_idx++] = {signal_flare->FD(), POLLIN, 0};
pfds[pfd_idx++] = {static_cast<decltype(pollfd::fd)>(pipe->InFD()), POLLIN, 0};
pfds[pfd_idx++] = {static_cast<decltype(pollfd::fd)>(signal_flare->FD()), POLLIN, 0};
for ( const auto& [name, node] : nodes )
{
node_pollfd_indices[name] = pfd_idx;
if ( node.stdout_pipe.pipe )
pfds[pfd_idx++] = {node.stdout_pipe.pipe->ReadFD(), POLLIN, 0};
pfds[pfd_idx++] = {static_cast<decltype(pollfd::fd)>(node.stdout_pipe.pipe->ReadFD()),
POLLIN, 0};
else
pfds[pfd_idx++] = {-1, POLLIN, 0};
pfds[pfd_idx++] = {static_cast<decltype(pollfd::fd)>(-1), POLLIN, 0};
if ( node.stderr_pipe.pipe )
pfds[pfd_idx++] = {node.stderr_pipe.pipe->ReadFD(), POLLIN, 0};
pfds[pfd_idx++] = {static_cast<decltype(pollfd::fd)>(node.stderr_pipe.pipe->ReadFD()),
POLLIN, 0};
else
pfds[pfd_idx++] = {-1, POLLIN, 0};
pfds[pfd_idx++] = {static_cast<decltype(pollfd::fd)>(-1), POLLIN, 0};
}
// Note: the poll timeout here is for periodically checking if the parent
@ -1249,7 +1251,7 @@ Supervisor::NodeConfig Supervisor::NodeConfig::FromRecord(const RecordVal* node)
const auto& affinity_val = node->GetField("cpu_affinity");
if ( affinity_val )
rval.cpu_affinity = affinity_val->AsInt();
rval.cpu_affinity = static_cast<int>(affinity_val->AsInt());
const auto& bare_mode_val = node->GetField("bare_mode");
@ -1277,10 +1279,14 @@ Supervisor::NodeConfig Supervisor::NodeConfig::FromRecord(const RecordVal* node)
for ( auto i = 0u; i < scripts_val->Size(); ++i )
{
auto script = scripts_val->StringValAt(i)->ToStdString();
#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif
rval.scripts.emplace_back(std::move(script));
#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif
}
auto env_table_val = node->GetField("env")->AsTableVal();
@ -1364,10 +1370,14 @@ Supervisor::NodeConfig Supervisor::NodeConfig::FromJSON(std::string_view json)
auto& scripts = j["scripts"];
for ( auto it = scripts.Begin(); it != scripts.End(); ++it )
#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif
rval.scripts.emplace_back(it->GetString());
#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif
auto& env = j["env"];
@ -1447,10 +1457,14 @@ RecordValPtr Supervisor::NodeConfig::ToRecord() const
auto st = rt->GetFieldType<VectorType>("scripts");
auto scripts_val = make_intrusive<VectorVal>(std::move(st));
#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif
for ( const auto& s : scripts )
#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif
scripts_val->Assign(scripts_val->Size(), make_intrusive<StringVal>(s));
rval->AssignField("scripts", std::move(scripts_val));
@ -1656,10 +1670,14 @@ void SupervisedNode::Init(Options* options) const
stl.insert(stl.begin(), config.addl_base_scripts.begin(), config.addl_base_scripts.end());
stl.insert(stl.end(), config.addl_user_scripts.begin(), config.addl_user_scripts.end());
#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif
stl.insert(stl.end(), config.scripts.begin(), config.scripts.end());
#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif
}
RecordValPtr Supervisor::Status(std::string_view node_name)

View file

@ -2,6 +2,8 @@
#pragma once
#include "zeek/zeek-config.h"
#include <sys/types.h>
#include <chrono>
#include <cstdint>
@ -143,18 +145,26 @@ public:
*/
struct NodeConfig
{
#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif
// This block exists because the default implementations
// themselves trigger deprecation warnings for accessing the
// "scripts" field. It can go when we remove that deprecation.
NodeConfig() = default;
#ifndef _MSC_VER
// MSVC throws this error when specifing this constructor:
// error C2580: multiple versions of a defaulted special member functions are not allowed
NodeConfig(NodeConfig&) = default;
#endif
NodeConfig(const NodeConfig&) = default;
NodeConfig(NodeConfig&&) = default;
~NodeConfig() = default;
NodeConfig& operator=(const NodeConfig&) = default;
#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif
/**
* Create configuration from script-layer record value.