diff --git a/NEWS b/NEWS index 7c010db247..aab1368c67 100644 --- a/NEWS +++ b/NEWS @@ -9,6 +9,14 @@ Zeek 4.2.0 New Functionality ----------------- +- Zeek now supports formatting the C++ code using clang-format. It requires at + least clang-format 12.0.1 due to some additions that were made in that version + to better support the Whitesmiths style. Zeek also includes a set of python + scripts to more easily reformat in the auxil/run-clang-format directory. An + example command to reformat the code: + + `python3 auxil/run-clang-format/run-clang-format.py --clang-format-executable `which clang-format-12` -r src -i` + Changed Functionality --------------------- diff --git a/src/EventLauncher.cc b/src/EventLauncher.cc index c2acea6c27..e23517122b 100644 --- a/src/EventLauncher.cc +++ b/src/EventLauncher.cc @@ -1,10 +1,3 @@ #include "zeek/EventLauncher.h" -#include "zeek/Conn.h" -#include "zeek/Event.h" -#include "zeek/File.h" -#include "zeek/NetVar.h" -#include "zeek/Val.h" -#include "zeek/analyzer/Analyzer.h" - #include "event.bif.func_def" diff --git a/src/EventLauncher.h b/src/EventLauncher.h index 6c0c002310..4ce7cd6ad9 100644 --- a/src/EventLauncher.h +++ b/src/EventLauncher.h @@ -1,3 +1,10 @@ #pragma once +#include "zeek/Conn.h" +#include "zeek/Event.h" +#include "zeek/File.h" +#include "zeek/NetVar.h" +#include "zeek/Val.h" +#include "zeek/analyzer/Analyzer.h" + #include "event.bif.func_h" diff --git a/src/IP.h b/src/IP.h index 93f847904a..7e8e99f762 100644 --- a/src/IP.h +++ b/src/IP.h @@ -2,9 +2,9 @@ #pragma once +#include // for u_char #include #include -#include // for u_char #include "zeek/zeek-config.h" diff --git a/src/analyzer/protocol/irc/IRC.cc b/src/analyzer/protocol/irc/IRC.cc index 63f017237b..1d3f0db1ee 100644 --- a/src/analyzer/protocol/irc/IRC.cc +++ b/src/analyzer/protocol/irc/IRC.cc @@ -212,246 +212,246 @@ void IRC_Analyzer::DeliverStream(int length, const u_char* line, bool orig) // Count of users, services and servers in whole network. case 251: + { if ( ! irc_network_info ) break; + vector parts = SplitWords(params, ' '); + int users = 0; + int services = 0; + int servers = 0; + + for ( size_t i = 1; i < parts.size(); ++i ) { - vector parts = SplitWords(params, ' '); - int users = 0; - int services = 0; - int servers = 0; - - for ( size_t i = 1; i < parts.size(); ++i ) - { - if ( parts[i] == "users" ) - users = atoi(parts[i - 1].c_str()); - else if ( parts[i] == "services" ) - services = atoi(parts[i - 1].c_str()); - else if ( parts[i] == "servers" ) - servers = atoi(parts[i - 1].c_str()); - // else ### - } - - EnqueueConnEvent(irc_network_info, ConnVal(), val_mgr->Bool(orig), - val_mgr->Int(users), val_mgr->Int(services), - val_mgr->Int(servers)); + if ( parts[i] == "users" ) + users = atoi(parts[i - 1].c_str()); + else if ( parts[i] == "services" ) + services = atoi(parts[i - 1].c_str()); + else if ( parts[i] == "servers" ) + servers = atoi(parts[i - 1].c_str()); + // else ### } + + EnqueueConnEvent(irc_network_info, ConnVal(), val_mgr->Bool(orig), + val_mgr->Int(users), val_mgr->Int(services), + val_mgr->Int(servers)); + } break; // List of users in a channel (names command). case 353: + { if ( ! irc_names_info ) break; + vector parts = SplitWords(params, ' '); + + if ( parts.size() < 3 ) { - vector parts = SplitWords(params, ' '); - - if ( parts.size() < 3 ) - { - Weird("irc_invalid_names_line"); - return; - } - - // Remove nick name. - parts.erase(parts.begin()); - - string type = parts[0]; - string channel = parts[1]; - - // Remove type and channel. - parts.erase(parts.begin()); - parts.erase(parts.begin()); - - if ( parts.size() > 0 && parts[0][0] == ':' ) - parts[0] = parts[0].substr(1); - - auto set = make_intrusive(id::string_set); - - for ( auto& part : parts ) - { - if ( part[0] == '@' ) - part = part.substr(1); - auto idx = make_intrusive(part); - set->Assign(std::move(idx), nullptr); - } - - EnqueueConnEvent(irc_names_info, ConnVal(), val_mgr->Bool(orig), - make_intrusive(type.c_str()), - make_intrusive(channel.c_str()), std::move(set)); + Weird("irc_invalid_names_line"); + return; } - break; + + // Remove nick name. + parts.erase(parts.begin()); + + string type = parts[0]; + string channel = parts[1]; + + // Remove type and channel. + parts.erase(parts.begin()); + parts.erase(parts.begin()); + + if ( parts.size() > 0 && parts[0][0] == ':' ) + parts[0] = parts[0].substr(1); + + auto set = make_intrusive(id::string_set); + + for ( auto& part : parts ) + { + if ( part[0] == '@' ) + part = part.substr(1); + auto idx = make_intrusive(part); + set->Assign(std::move(idx), nullptr); + } + + EnqueueConnEvent(irc_names_info, ConnVal(), val_mgr->Bool(orig), + make_intrusive(type.c_str()), + make_intrusive(channel.c_str()), std::move(set)); + } + break; // Count of users and services on this server. case 255: + { if ( ! irc_server_info ) break; + vector parts = SplitWords(params, ' '); + int users = 0; + int services = 0; + int servers = 0; + + for ( size_t i = 1; i < parts.size(); ++i ) { - vector parts = SplitWords(params, ' '); - int users = 0; - int services = 0; - int servers = 0; - - for ( size_t i = 1; i < parts.size(); ++i ) - { - if ( parts[i] == "users," ) - users = atoi(parts[i - 1].c_str()); - else if ( parts[i] == "clients" ) - users = atoi(parts[i - 1].c_str()); - else if ( parts[i] == "services" ) - services = atoi(parts[i - 1].c_str()); - else if ( parts[i] == "servers" ) - servers = atoi(parts[i - 1].c_str()); - // else ### - } - - EnqueueConnEvent(irc_server_info, ConnVal(), val_mgr->Bool(orig), - val_mgr->Int(users), val_mgr->Int(services), - val_mgr->Int(servers)); + if ( parts[i] == "users," ) + users = atoi(parts[i - 1].c_str()); + else if ( parts[i] == "clients" ) + users = atoi(parts[i - 1].c_str()); + else if ( parts[i] == "services" ) + services = atoi(parts[i - 1].c_str()); + else if ( parts[i] == "servers" ) + servers = atoi(parts[i - 1].c_str()); + // else ### } + + EnqueueConnEvent(irc_server_info, ConnVal(), val_mgr->Bool(orig), + val_mgr->Int(users), val_mgr->Int(services), + val_mgr->Int(servers)); + } break; // Count of channels. case 254: + { if ( ! irc_channel_info ) break; - { - vector parts = SplitWords(params, ' '); - int channels = 0; - for ( size_t i = 1; i < parts.size(); ++i ) - if ( parts[i] == ":channels" ) - channels = atoi(parts[i - 1].c_str()); + vector parts = SplitWords(params, ' '); + int channels = 0; + for ( size_t i = 1; i < parts.size(); ++i ) + if ( parts[i] == ":channels" ) + channels = atoi(parts[i - 1].c_str()); - EnqueueConnEvent(irc_channel_info, ConnVal(), val_mgr->Bool(orig), - val_mgr->Int(channels)); - } + EnqueueConnEvent(irc_channel_info, ConnVal(), val_mgr->Bool(orig), + val_mgr->Int(channels)); + } break; // RPL_GLOBALUSERS case 266: + { + // FIXME: We should really streamline all this + // parsing code ... + if ( ! irc_global_users ) + break; + + const char* prefix = params.c_str(); + + const char* eop = strchr(prefix, ' '); + if ( ! eop ) { - // FIXME: We should really streamline all this - // parsing code ... - if ( ! irc_global_users ) - break; - - const char* prefix = params.c_str(); - - const char* eop = strchr(prefix, ' '); - if ( ! eop ) - { - Weird("invalid_irc_global_users_reply"); - break; - } - - const char* msg = strchr(++eop, ':'); - if ( ! msg ) - { - Weird("invalid_irc_global_users_reply"); - break; - } - - EnqueueConnEvent(irc_global_users, ConnVal(), val_mgr->Bool(orig), - make_intrusive(eop - prefix, prefix), - make_intrusive(++msg)); + Weird("invalid_irc_global_users_reply"); break; } + const char* msg = strchr(++eop, ':'); + if ( ! msg ) + { + Weird("invalid_irc_global_users_reply"); + break; + } + + EnqueueConnEvent(irc_global_users, ConnVal(), val_mgr->Bool(orig), + make_intrusive(eop - prefix, prefix), + make_intrusive(++msg)); + } + break; + // WHOIS user reply line. case 311: + { if ( ! irc_whois_user_line ) break; + vector parts = SplitWords(params, ' '); + + if ( parts.size() > 1 ) + parts.erase(parts.begin()); + if ( parts.size() < 5 ) { - vector parts = SplitWords(params, ' '); - - if ( parts.size() > 1 ) - parts.erase(parts.begin()); - if ( parts.size() < 5 ) - { - Weird("irc_invalid_whois_user_line"); - return; - } - - Args vl; - vl.reserve(6); - vl.emplace_back(ConnVal()); - vl.emplace_back(val_mgr->Bool(orig)); - vl.emplace_back(make_intrusive(parts[0].c_str())); - vl.emplace_back(make_intrusive(parts[1].c_str())); - vl.emplace_back(make_intrusive(parts[2].c_str())); - - parts.erase(parts.begin(), parts.begin() + 4); - - string real_name = parts[0]; - for ( size_t i = 1; i < parts.size(); ++i ) - real_name = real_name + " " + parts[i]; - - if ( real_name[0] == ':' ) - real_name = real_name.substr(1); - - vl.emplace_back(make_intrusive(real_name.c_str())); - - EnqueueConnEvent(irc_whois_user_line, std::move(vl)); + Weird("irc_invalid_whois_user_line"); + return; } + + Args vl; + vl.reserve(6); + vl.emplace_back(ConnVal()); + vl.emplace_back(val_mgr->Bool(orig)); + vl.emplace_back(make_intrusive(parts[0].c_str())); + vl.emplace_back(make_intrusive(parts[1].c_str())); + vl.emplace_back(make_intrusive(parts[2].c_str())); + + parts.erase(parts.begin(), parts.begin() + 4); + + string real_name = parts[0]; + for ( size_t i = 1; i < parts.size(); ++i ) + real_name = real_name + " " + parts[i]; + + if ( real_name[0] == ':' ) + real_name = real_name.substr(1); + + vl.emplace_back(make_intrusive(real_name.c_str())); + + EnqueueConnEvent(irc_whois_user_line, std::move(vl)); + } break; // WHOIS operator reply line. case 313: + { if ( ! irc_whois_operator_line ) break; + vector parts = SplitWords(params, ' '); + + if ( parts.size() > 1 ) + parts.erase(parts.begin()); + + if ( parts.size() < 2 ) { - vector parts = SplitWords(params, ' '); - - if ( parts.size() > 1 ) - parts.erase(parts.begin()); - - if ( parts.size() < 2 ) - { - Weird("irc_invalid_whois_operator_line"); - return; - } - - EnqueueConnEvent(irc_whois_operator_line, ConnVal(), val_mgr->Bool(orig), - make_intrusive(parts[0].c_str())); + Weird("irc_invalid_whois_operator_line"); + return; } + + EnqueueConnEvent(irc_whois_operator_line, ConnVal(), val_mgr->Bool(orig), + make_intrusive(parts[0].c_str())); + } break; // WHOIS channel reply. case 319: + { if ( ! irc_whois_channel_line ) break; + vector parts = SplitWords(params, ' '); + + // Remove nick name. + parts.erase(parts.begin()); + if ( parts.size() < 2 ) { - vector parts = SplitWords(params, ' '); - - // Remove nick name. - parts.erase(parts.begin()); - if ( parts.size() < 2 ) - { - Weird("irc_invalid_whois_channel_line"); - return; - } - - string nick = parts[0]; - parts.erase(parts.begin()); - - if ( parts.size() > 0 && parts[0][0] == ':' ) - parts[0] = parts[0].substr(1); - - auto set = make_intrusive(id::string_set); - - for ( const auto& part : parts ) - { - auto idx = make_intrusive(part); - set->Assign(std::move(idx), nullptr); - } - - EnqueueConnEvent(irc_whois_channel_line, ConnVal(), val_mgr->Bool(orig), - make_intrusive(nick.c_str()), std::move(set)); + Weird("irc_invalid_whois_channel_line"); + return; } + + string nick = parts[0]; + parts.erase(parts.begin()); + + if ( parts.size() > 0 && parts[0][0] == ':' ) + parts[0] = parts[0].substr(1); + + auto set = make_intrusive(id::string_set); + + for ( const auto& part : parts ) + { + auto idx = make_intrusive(part); + set->Assign(std::move(idx), nullptr); + } + + EnqueueConnEvent(irc_whois_channel_line, ConnVal(), val_mgr->Bool(orig), + make_intrusive(nick.c_str()), std::move(set)); + } break; // RPL_TOPIC reply. @@ -485,39 +485,39 @@ void IRC_Analyzer::DeliverStream(int length, const u_char* line, bool orig) Weird("irc_invalid_topic_reply"); return; } - break; } + break; // WHO reply line. case 352: + { if ( ! irc_who_line ) break; + vector parts = SplitWords(params, ' '); + if ( parts.size() < 9 ) { - vector parts = SplitWords(params, ' '); - if ( parts.size() < 9 ) - { - Weird("irc_invalid_who_line"); - return; - } - - if ( parts[2][0] == '~' ) - parts[2] = parts[2].substr(1); - - if ( parts[7][0] == ':' ) - parts[7] = parts[7].substr(1); - - EnqueueConnEvent(irc_who_line, ConnVal(), val_mgr->Bool(orig), - make_intrusive(parts[0].c_str()), - make_intrusive(parts[1].c_str()), - make_intrusive(parts[2].c_str()), - make_intrusive(parts[3].c_str()), - make_intrusive(parts[4].c_str()), - make_intrusive(parts[5].c_str()), - make_intrusive(parts[6].c_str()), - val_mgr->Int(atoi(parts[7].c_str())), - make_intrusive(parts[8].c_str())); + Weird("irc_invalid_who_line"); + return; } + + if ( parts[2][0] == '~' ) + parts[2] = parts[2].substr(1); + + if ( parts[7][0] == ':' ) + parts[7] = parts[7].substr(1); + + EnqueueConnEvent(irc_who_line, ConnVal(), val_mgr->Bool(orig), + make_intrusive(parts[0].c_str()), + make_intrusive(parts[1].c_str()), + make_intrusive(parts[2].c_str()), + make_intrusive(parts[3].c_str()), + make_intrusive(parts[4].c_str()), + make_intrusive(parts[5].c_str()), + make_intrusive(parts[6].c_str()), + val_mgr->Int(atoi(parts[7].c_str())), + make_intrusive(parts[8].c_str())); + } break; // Invalid nick name. diff --git a/src/analyzer/protocol/tcp/TCP_Flags.h b/src/analyzer/protocol/tcp/TCP_Flags.h index 42f19e0028..483652936c 100644 --- a/src/analyzer/protocol/tcp/TCP_Flags.h +++ b/src/analyzer/protocol/tcp/TCP_Flags.h @@ -1,8 +1,14 @@ #pragma once +// This needs to remain the first include in this file, or some defines aren't +// set correctly when netinet/tcp.h is included and the CentOS 7 build breaks. +// clang-format off +#include "zeek/net_util.h" + #include #include #include +// clang-format on namespace zeek::analyzer::tcp { diff --git a/src/iosource/Manager.cc b/src/iosource/Manager.cc index e952cda60c..d0065ab476 100644 --- a/src/iosource/Manager.cc +++ b/src/iosource/Manager.cc @@ -3,9 +3,9 @@ #include "zeek/iosource/Manager.h" #include +#include #include #include -#include #include #include "zeek/NetVar.h" diff --git a/src/net_util.h b/src/net_util.h index 6b47d8016e..f3f3b70801 100644 --- a/src/net_util.h +++ b/src/net_util.h @@ -21,12 +21,12 @@ typedef enum IPv6 } IPFamily; +#include #include #include #include #include #include -#include #ifdef HAVE_LINUX #define __FAVOR_BSD #endif diff --git a/src/packet_analysis/protocol/arp/ARP.h b/src/packet_analysis/protocol/arp/ARP.h index 5dca7eab29..0aa8ebbac0 100644 --- a/src/packet_analysis/protocol/arp/ARP.h +++ b/src/packet_analysis/protocol/arp/ARP.h @@ -2,9 +2,9 @@ #pragma once -#include #include #include +#include #include "zeek/packet_analysis/Analyzer.h" #include "zeek/packet_analysis/Component.h" diff --git a/src/script_opt/IDOptInfo.h b/src/script_opt/IDOptInfo.h index fa5d21f061..732958a7f8 100644 --- a/src/script_opt/IDOptInfo.h +++ b/src/script_opt/IDOptInfo.h @@ -8,6 +8,8 @@ #include #include "zeek/IntrusivePtr.h" +#include "zeek/ID.h" +#include "zeek/Expr.h" namespace zeek::detail { diff --git a/src/script_opt/ZAM/ZBody.cc b/src/script_opt/ZAM/ZBody.cc index ea66c42cc6..b58960ad36 100644 --- a/src/script_opt/ZAM/ZBody.cc +++ b/src/script_opt/ZAM/ZBody.cc @@ -313,8 +313,9 @@ ValPtr ZBody::DoExec(Frame* f, int start_pc, StmtFlowType& flow) case OP_NOP: break; -#include "ZAM-EvalDefs.h" +// These must stay in this order or the build fails. #include "ZAM-EvalMacros.h" +#include "ZAM-EvalDefs.h" default: reporter->InternalError("bad ZAM opcode"); diff --git a/src/zeek-affinity.cc b/src/zeek-affinity.cc index 3555938ee3..c002181286 100644 --- a/src/zeek-affinity.cc +++ b/src/zeek-affinity.cc @@ -28,8 +28,8 @@ bool set_affinity(int core_number) #elif defined(__FreeBSD__) -#include #include +#include namespace zeek {