mirror of
https://github.com/zeek/zeek.git
synced 2025-10-08 17:48:21 +00:00
Add cleaned-up version of zeek-aux
This is the zeek-aux repository with all of the git-related stuff removed, including all of the pre-commit configuration files, git directories, and submodules. It has a modified version of the CMake configuration that uses Zeek's variables and paths, making zeek-aux effectively just a subdirectory to Zeek. All of the source files now have Zeek's license header in them as well.
This commit is contained in:
parent
c090ec1ccd
commit
a1d0cebca4
213 changed files with 7611 additions and 0 deletions
49
auxil/zeek-aux/CMakeLists.txt
Normal file
49
auxil/zeek-aux/CMakeLists.txt
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
cmake_minimum_required(VERSION 3.15 FATAL_ERROR)
|
||||||
|
|
||||||
|
# ##############################################################################
|
||||||
|
# Dependency Configuration
|
||||||
|
|
||||||
|
find_package(PCAP REQUIRED)
|
||||||
|
|
||||||
|
include_directories(BEFORE ${PCAP_INCLUDE_DIR})
|
||||||
|
|
||||||
|
# ##############################################################################
|
||||||
|
# System Introspection
|
||||||
|
|
||||||
|
include(CheckHeaders)
|
||||||
|
include(CheckFunctions)
|
||||||
|
include(CheckNameserCompat)
|
||||||
|
include(MiscTests)
|
||||||
|
|
||||||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h)
|
||||||
|
|
||||||
|
include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
|
|
||||||
|
# ##############################################################################
|
||||||
|
# Recurse on sub-directories
|
||||||
|
|
||||||
|
# For binary packaging or if this is the main CMake project, go through the
|
||||||
|
# regular install target, else use a custom target so programs have to be
|
||||||
|
# explicitly installed by the user via "make install-aux"
|
||||||
|
macro (AddAuxInstallTarget _target)
|
||||||
|
add_custom_target(
|
||||||
|
install-${_target} COMMAND ${CMAKE_COMMAND} -E make_directory
|
||||||
|
${CMAKE_INSTALL_PREFIX}/bin
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${_target}> ${CMAKE_INSTALL_PREFIX}/bin)
|
||||||
|
add_dependencies(install-${_target} ${_target})
|
||||||
|
set(AUX_TARGETS install-${_target};${AUX_TARGETS})
|
||||||
|
set(AUX_TARGETS ${AUX_TARGETS} PARENT_SCOPE)
|
||||||
|
endmacro (AddAuxInstallTarget)
|
||||||
|
|
||||||
|
if (NOT ZEEK_MAN_INSTALL_PATH)
|
||||||
|
set(ZEEK_MAN_INSTALL_PATH ${CMAKE_INSTALL_PREFIX}/share/man)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
add_subdirectory(adtrace)
|
||||||
|
add_subdirectory(zeek-archiver)
|
||||||
|
add_subdirectory(zeek-cut)
|
||||||
|
add_subdirectory(rst)
|
||||||
|
|
||||||
|
add_custom_target(install-aux
|
||||||
|
COMMENT "Zeek auxiliary tools installed to ${CMAKE_INSTALL_PREFIX}/bin")
|
||||||
|
add_dependencies(install-aux ${AUX_TARGETS})
|
107
auxil/zeek-aux/README
Normal file
107
auxil/zeek-aux/README
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
.. -*- mode: rst; -*-
|
||||||
|
..
|
||||||
|
.. Version number is filled in automatically.
|
||||||
|
.. |version| replace:: 0.50-174
|
||||||
|
|
||||||
|
=======================
|
||||||
|
Zeek Auxiliary Programs
|
||||||
|
=======================
|
||||||
|
|
||||||
|
.. contents::
|
||||||
|
|
||||||
|
:Version: |version|
|
||||||
|
|
||||||
|
Handy auxiliary programs related to the use of the Zeek Network Security
|
||||||
|
Monitor (https://www.zeek.org).
|
||||||
|
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
|
||||||
|
Installation is simple and standard::
|
||||||
|
|
||||||
|
./configure
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
adtrace
|
||||||
|
=======
|
||||||
|
|
||||||
|
The "adtrace" utility is used to compute the
|
||||||
|
network address that compose the internal and extern nets that Zeek
|
||||||
|
is monitoring. This program just reads a pcap
|
||||||
|
(tcpdump) file and writes out the src MAC, dst MAC, src IP, dst
|
||||||
|
IP for each packet seen in the file.
|
||||||
|
|
||||||
|
zeek-archiver
|
||||||
|
=============
|
||||||
|
|
||||||
|
This is a modern replacement for Zeek's historical log-archival process. For
|
||||||
|
details, please refer to its dedicated README in the zeek-archiver subdirectory.
|
||||||
|
|
||||||
|
zeek-cut
|
||||||
|
========
|
||||||
|
|
||||||
|
The "zeek-cut" utility reads ASCII Zeek logs on standard input
|
||||||
|
and outputs them to standard output with only the specified columns (the
|
||||||
|
column names can be found in each log file in the "#fields" header line).
|
||||||
|
If no column names are specified, then "zeek-cut" simply outputs all columns.
|
||||||
|
|
||||||
|
There are several command-line options available to modify the output (run
|
||||||
|
"zeek-cut -h" to see a list of all options). There are options to convert
|
||||||
|
timestamps into human-readable format, and options to specify whether or not
|
||||||
|
to include the format header lines in the output (by default, they're not
|
||||||
|
included).
|
||||||
|
|
||||||
|
For example, the following command will output the three specified columns
|
||||||
|
from conn.log with the timestamps from the "ts" column being converted to
|
||||||
|
human-readable format::
|
||||||
|
|
||||||
|
cat conn.log | zeek-cut -d ts id.orig_h id.orig_p
|
||||||
|
|
||||||
|
The specified order of the column names determines the output order of the
|
||||||
|
columns (i.e., "zeek-cut" can reorder the columns).
|
||||||
|
|
||||||
|
The "zeek-cut" utility can read the concatenation of one or more uncompressed
|
||||||
|
ASCII log files (however, JSON format is not supported) produced by Zeek
|
||||||
|
version 2.0 or newer, as long as each log file contains format header
|
||||||
|
lines (these are the lines at the beginning of the file starting with "#").
|
||||||
|
In fact, "zeek-cut" can process the concatenation of multiple ASCII log files
|
||||||
|
that have different column layouts.
|
||||||
|
|
||||||
|
To read a compressed log file, a tool such as "zcat" must be used to
|
||||||
|
uncompress the file. For example, "zeek-cut" can read a group of compressed
|
||||||
|
conn.log files with a command like this::
|
||||||
|
|
||||||
|
zcat conn.*.log.gz | zeek-cut
|
||||||
|
|
||||||
|
|
||||||
|
devel-tools
|
||||||
|
===========
|
||||||
|
|
||||||
|
A set of scripts used commonly for Zeek development. Note that none of
|
||||||
|
these scripts are installed by 'make install'.
|
||||||
|
|
||||||
|
extract-conn-by-uid
|
||||||
|
Extracts a connection from a trace file based
|
||||||
|
on its UID found in Zeek's conn.log
|
||||||
|
|
||||||
|
gen-mozilla-ca-list.rb
|
||||||
|
Generates list of Mozilla SSL root certificates in
|
||||||
|
a format readable by Zeek.
|
||||||
|
|
||||||
|
update-changes
|
||||||
|
A script to maintain the CHANGES and VERSION files.
|
||||||
|
|
||||||
|
git-show-fastpath
|
||||||
|
Show commits to the fastpath branch not yet merged into master.
|
||||||
|
|
||||||
|
cpu-bench-with-trace
|
||||||
|
Run a number of Zeek benchmarks on a trace file.
|
||||||
|
|
||||||
|
|
||||||
|
rst
|
||||||
|
===
|
||||||
|
|
||||||
|
The "rst" utility can be invoked by a Zeek script to terminate an
|
||||||
|
established TCP connection by forging RST tear-down packets.
|
||||||
|
|
1
auxil/zeek-aux/README.rst
Symbolic link
1
auxil/zeek-aux/README.rst
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
README
|
8
auxil/zeek-aux/adtrace/CMakeLists.txt
Normal file
8
auxil/zeek-aux/adtrace/CMakeLists.txt
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
find_package(PCAP REQUIRED)
|
||||||
|
|
||||||
|
set(adtrace_SRCS adtrace.c)
|
||||||
|
|
||||||
|
add_executable(adtrace ${adtrace_SRCS})
|
||||||
|
target_include_directories(adtrace BEFORE PRIVATE ${PCAP_INCLUDE_DIR})
|
||||||
|
target_link_libraries(adtrace ${PCAP_LIBRARY})
|
||||||
|
AddAuxInstallTarget(adtrace)
|
91
auxil/zeek-aux/adtrace/adtrace.c
Normal file
91
auxil/zeek-aux/adtrace/adtrace.c
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include <pcap.h>
|
||||||
|
|
||||||
|
#include "ip.h"
|
||||||
|
#include "ether.h"
|
||||||
|
#include "ethertype.h"
|
||||||
|
|
||||||
|
pcap_t *p;
|
||||||
|
|
||||||
|
const u_char* printEAddr(const u_char* pkt, u_char* endp){
|
||||||
|
const struct ether_header *ep;
|
||||||
|
int i=0;
|
||||||
|
ep = (const struct ether_header*) pkt;
|
||||||
|
|
||||||
|
if (pkt+ETHER_HDRLEN > endp ||
|
||||||
|
ntohs(ep->ether_type) != ETHERTYPE_IP){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i<ETHER_ADDR_LEN; i++){
|
||||||
|
if (i>0) putchar(':');
|
||||||
|
printf("%02x", ep->ether_shost[i]);
|
||||||
|
}
|
||||||
|
putchar (' ');
|
||||||
|
for (i = 0; i<ETHER_ADDR_LEN; i++){
|
||||||
|
if (i>0) putchar(':');
|
||||||
|
printf("%02x", ep->ether_dhost[i]);
|
||||||
|
}
|
||||||
|
putchar(' ');
|
||||||
|
return (pkt+ETHER_HDRLEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
void printIPAddr(const u_char* pkt, u_char* endp){
|
||||||
|
const struct ip* iph;
|
||||||
|
if (pkt+sizeof(struct ip) > endp) return;
|
||||||
|
iph = (const struct ip*) pkt;
|
||||||
|
fputs ((char*) inet_ntoa(iph->ip_src), stdout);
|
||||||
|
putchar(' ');
|
||||||
|
puts ((char*) inet_ntoa(iph->ip_dst));
|
||||||
|
}
|
||||||
|
|
||||||
|
void handler(u_char *user, const struct pcap_pkthdr *head, const u_char *packet){
|
||||||
|
u_char* endp;
|
||||||
|
|
||||||
|
endp =(u_char*) packet + head->caplen;
|
||||||
|
packet = printEAddr(packet, endp);
|
||||||
|
if (packet)
|
||||||
|
printIPAddr(packet, endp);
|
||||||
|
}
|
||||||
|
|
||||||
|
void usage(char *av[])
|
||||||
|
{
|
||||||
|
fprintf(stderr,"usage: %s filename \n", av[0]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main (int argc, char *argv[])
|
||||||
|
{
|
||||||
|
char *file;
|
||||||
|
char errbuf[PCAP_ERRBUF_SIZE];
|
||||||
|
u_char* pkt, endp;
|
||||||
|
struct pcap_pkthdr *head;
|
||||||
|
|
||||||
|
if ( argc != 2 )
|
||||||
|
usage(argv);
|
||||||
|
|
||||||
|
file = argv[1];
|
||||||
|
|
||||||
|
p = pcap_open_offline(file, errbuf);
|
||||||
|
if(p==NULL){
|
||||||
|
fprintf (stderr, "cannot open %s: %s\n", file, errbuf);
|
||||||
|
exit(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pcap_datalink(p) != DLT_EN10MB){
|
||||||
|
fputs ("sorry, currently only ethernet links supported\n", stderr);
|
||||||
|
exit(1); //if it is not ethernet we are watching we won't have MACs
|
||||||
|
}
|
||||||
|
|
||||||
|
pcap_loop(p, -1, handler, NULL);
|
||||||
|
pcap_close(p);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
59
auxil/zeek-aux/adtrace/ether.h
Normal file
59
auxil/zeek-aux/adtrace/ether.h
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
/* @(#) $Header$ (LBL) */
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1982, 1986, 1993
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. All advertising materials mentioning features or use of this software
|
||||||
|
* must display the following acknowledgement:
|
||||||
|
* This product includes software developed by the University of
|
||||||
|
* California, Berkeley and its contributors.
|
||||||
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @(#)if_ether.h 8.3 (Berkeley) 5/2/95
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define ETHERMTU 1500
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The number of bytes in an ethernet (MAC) address.
|
||||||
|
*/
|
||||||
|
#define ETHER_ADDR_LEN 6
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structure of a DEC/Intel/Xerox or 802.3 Ethernet header.
|
||||||
|
*/
|
||||||
|
struct ether_header {
|
||||||
|
u_int8_t ether_dhost[ETHER_ADDR_LEN];
|
||||||
|
u_int8_t ether_shost[ETHER_ADDR_LEN];
|
||||||
|
u_int16_t ether_type;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Length of a DEC/Intel/Xerox or 802.3 Ethernet header; note that some
|
||||||
|
* compilers may pad "struct ether_header" to a multiple of 4 bytes,
|
||||||
|
* for example, so "sizeof (struct ether_header)" may not give the right
|
||||||
|
* answer.
|
||||||
|
*/
|
||||||
|
#define ETHER_HDRLEN 14
|
122
auxil/zeek-aux/adtrace/ethertype.h
Normal file
122
auxil/zeek-aux/adtrace/ethertype.h
Normal file
|
@ -0,0 +1,122 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1993, 1994, 1996
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that: (1) source code distributions
|
||||||
|
* retain the above copyright notice and this paragraph in its entirety, (2)
|
||||||
|
* distributions including binary code include the above copyright notice and
|
||||||
|
* this paragraph in its entirety in the documentation or other materials
|
||||||
|
* provided with the distribution, and (3) all advertising materials mentioning
|
||||||
|
* features or use of this software display the following acknowledgement:
|
||||||
|
* ``This product includes software developed by the University of California,
|
||||||
|
* Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
|
||||||
|
* the University nor the names of its contributors may be used to endorse
|
||||||
|
* or promote products derived from this software without specific prior
|
||||||
|
* written permission.
|
||||||
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* @(#) $Header$ (LBL)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Ethernet types.
|
||||||
|
*
|
||||||
|
* We wrap the declarations with #ifdef, so that if a file includes
|
||||||
|
* <netinet/if_ether.h>, which may declare some of these, we don't
|
||||||
|
* get a bunch of complaints from the C compiler about redefinitions
|
||||||
|
* of these values.
|
||||||
|
*
|
||||||
|
* We declare all of them here so that no file has to include
|
||||||
|
* <netinet/if_ether.h> if all it needs are ETHERTYPE_ values.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ETHERTYPE_PUP
|
||||||
|
#define ETHERTYPE_PUP 0x0200 /* PUP protocol */
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_IP
|
||||||
|
#define ETHERTYPE_IP 0x0800 /* IP protocol */
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_ARP
|
||||||
|
#define ETHERTYPE_ARP 0x0806 /* Addr. resolution protocol */
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_REVARP
|
||||||
|
#define ETHERTYPE_REVARP 0x8035 /* reverse Addr. resolution protocol */
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_NS
|
||||||
|
#define ETHERTYPE_NS 0x0600
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_SPRITE
|
||||||
|
#define ETHERTYPE_SPRITE 0x0500
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_TRAIL
|
||||||
|
#define ETHERTYPE_TRAIL 0x1000
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_MOPDL
|
||||||
|
#define ETHERTYPE_MOPDL 0x6001
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_MOPRC
|
||||||
|
#define ETHERTYPE_MOPRC 0x6002
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_DN
|
||||||
|
#define ETHERTYPE_DN 0x6003
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_LAT
|
||||||
|
#define ETHERTYPE_LAT 0x6004
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_SCA
|
||||||
|
#define ETHERTYPE_SCA 0x6007
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_REVARP
|
||||||
|
#define ETHERTYPE_REVARP 0x8035
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_LANBRIDGE
|
||||||
|
#define ETHERTYPE_LANBRIDGE 0x8038
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_DECDNS
|
||||||
|
#define ETHERTYPE_DECDNS 0x803c
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_DECDTS
|
||||||
|
#define ETHERTYPE_DECDTS 0x803e
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_VEXP
|
||||||
|
#define ETHERTYPE_VEXP 0x805b
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_VPROD
|
||||||
|
#define ETHERTYPE_VPROD 0x805c
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_ATALK
|
||||||
|
#define ETHERTYPE_ATALK 0x809b
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_AARP
|
||||||
|
#define ETHERTYPE_AARP 0x80f3
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_8021Q
|
||||||
|
#define ETHERTYPE_8021Q 0x8100
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_IPX
|
||||||
|
#define ETHERTYPE_IPX 0x8137
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_IPV6
|
||||||
|
#define ETHERTYPE_IPV6 0x86dd
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_PPP
|
||||||
|
#define ETHERTYPE_PPP 0x880b
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_MPLS
|
||||||
|
#define ETHERTYPE_MPLS 0x8847
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_MPLS_MULTI
|
||||||
|
#define ETHERTYPE_MPLS_MULTI 0x8848
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_PPPOED
|
||||||
|
#define ETHERTYPE_PPPOED 0x8863
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_PPPOES
|
||||||
|
#define ETHERTYPE_PPPOES 0x8864
|
||||||
|
#endif
|
||||||
|
#ifndef ETHERTYPE_LOOPBACK
|
||||||
|
#define ETHERTYPE_LOOPBACK 0x9000
|
||||||
|
#endif
|
159
auxil/zeek-aux/adtrace/ip.h
Normal file
159
auxil/zeek-aux/adtrace/ip.h
Normal file
|
@ -0,0 +1,159 @@
|
||||||
|
/* @(#) $Header$ (LBL) */
|
||||||
|
/*
|
||||||
|
* Copyright (c) 1982, 1986, 1993
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. All advertising materials mentioning features or use of this software
|
||||||
|
* must display the following acknowledgement:
|
||||||
|
* This product includes software developed by the University of
|
||||||
|
* California, Berkeley and its contributors.
|
||||||
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* @(#)ip.h 8.2 (Berkeley) 6/1/94
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Definitions for internet protocol version 4.
|
||||||
|
* Per RFC 791, September 1981.
|
||||||
|
*/
|
||||||
|
#define IPVERSION 4
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structure of an internet header, naked of options.
|
||||||
|
*
|
||||||
|
* We declare ip_len and ip_off to be short, rather than u_short
|
||||||
|
* pragmatically since otherwise unsigned comparisons can result
|
||||||
|
* against negative integers quite easily, and fail in subtle ways.
|
||||||
|
*/
|
||||||
|
struct ip {
|
||||||
|
u_int8_t ip_vhl; /* header length, version */
|
||||||
|
#define IP_V(ip) (((ip)->ip_vhl & 0xf0) >> 4)
|
||||||
|
#define IP_HL(ip) ((ip)->ip_vhl & 0x0f)
|
||||||
|
u_int8_t ip_tos; /* type of service */
|
||||||
|
u_int16_t ip_len; /* total length */
|
||||||
|
u_int16_t ip_id; /* identification */
|
||||||
|
u_int16_t ip_off; /* fragment offset field */
|
||||||
|
#define IP_DF 0x4000 /* dont fragment flag */
|
||||||
|
#define IP_MF 0x2000 /* more fragments flag */
|
||||||
|
#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
|
||||||
|
u_int8_t ip_ttl; /* time to live */
|
||||||
|
u_int8_t ip_p; /* protocol */
|
||||||
|
u_int16_t ip_sum; /* checksum */
|
||||||
|
struct in_addr ip_src,ip_dst; /* source and dest address */
|
||||||
|
};
|
||||||
|
|
||||||
|
#define IP_MAXPACKET 65535 /* maximum packet size */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Definitions for IP type of service (ip_tos)
|
||||||
|
*/
|
||||||
|
#define IPTOS_LOWDELAY 0x10
|
||||||
|
#define IPTOS_THROUGHPUT 0x08
|
||||||
|
#define IPTOS_RELIABILITY 0x04
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Definitions for IP precedence (also in ip_tos) (hopefully unused)
|
||||||
|
*/
|
||||||
|
#define IPTOS_PREC_NETCONTROL 0xe0
|
||||||
|
#define IPTOS_PREC_INTERNETCONTROL 0xc0
|
||||||
|
#define IPTOS_PREC_CRITIC_ECP 0xa0
|
||||||
|
#define IPTOS_PREC_FLASHOVERRIDE 0x80
|
||||||
|
#define IPTOS_PREC_FLASH 0x60
|
||||||
|
#define IPTOS_PREC_IMMEDIATE 0x40
|
||||||
|
#define IPTOS_PREC_PRIORITY 0x20
|
||||||
|
#define IPTOS_PREC_ROUTINE 0x00
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Definitions for options.
|
||||||
|
*/
|
||||||
|
#define IPOPT_COPIED(o) ((o)&0x80)
|
||||||
|
#define IPOPT_CLASS(o) ((o)&0x60)
|
||||||
|
#define IPOPT_NUMBER(o) ((o)&0x1f)
|
||||||
|
|
||||||
|
#define IPOPT_CONTROL 0x00
|
||||||
|
#define IPOPT_RESERVED1 0x20
|
||||||
|
#define IPOPT_DEBMEAS 0x40
|
||||||
|
#define IPOPT_RESERVED2 0x60
|
||||||
|
|
||||||
|
#define IPOPT_EOL 0 /* end of option list */
|
||||||
|
#define IPOPT_NOP 1 /* no operation */
|
||||||
|
|
||||||
|
#define IPOPT_RR 7 /* record packet route */
|
||||||
|
#define IPOPT_TS 68 /* timestamp */
|
||||||
|
#define IPOPT_SECURITY 130 /* provide s,c,h,tcc */
|
||||||
|
#define IPOPT_LSRR 131 /* loose source route */
|
||||||
|
#define IPOPT_SATID 136 /* satnet id */
|
||||||
|
#define IPOPT_SSRR 137 /* strict source route */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Offsets to fields in options other than EOL and NOP.
|
||||||
|
*/
|
||||||
|
#define IPOPT_OPTVAL 0 /* option ID */
|
||||||
|
#define IPOPT_OLEN 1 /* option length */
|
||||||
|
#define IPOPT_OFFSET 2 /* offset within option */
|
||||||
|
#define IPOPT_MINOFF 4 /* min value of above */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Time stamp option structure.
|
||||||
|
*/
|
||||||
|
struct ip_timestamp {
|
||||||
|
u_int8_t ipt_code; /* IPOPT_TS */
|
||||||
|
u_int8_t ipt_len; /* size of structure (variable) */
|
||||||
|
u_int8_t ipt_ptr; /* index of current entry */
|
||||||
|
u_int8_t ipt_oflwflg; /* flags, overflow counter */
|
||||||
|
#define IPTS_OFLW(ip) (((ipt)->ipt_oflwflg & 0xf0) >> 4)
|
||||||
|
#define IPTS_FLG(ip) ((ipt)->ipt_oflwflg & 0x0f)
|
||||||
|
union ipt_timestamp {
|
||||||
|
u_int32_t ipt_time[1];
|
||||||
|
struct ipt_ta {
|
||||||
|
struct in_addr ipt_addr;
|
||||||
|
u_int32_t ipt_time;
|
||||||
|
} ipt_ta[1];
|
||||||
|
} ipt_timestamp;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* flag bits for ipt_flg */
|
||||||
|
#define IPOPT_TS_TSONLY 0 /* timestamps only */
|
||||||
|
#define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */
|
||||||
|
#define IPOPT_TS_PRESPEC 3 /* specified modules only */
|
||||||
|
|
||||||
|
/* bits for security (not byte swapped) */
|
||||||
|
#define IPOPT_SECUR_UNCLASS 0x0000
|
||||||
|
#define IPOPT_SECUR_CONFID 0xf135
|
||||||
|
#define IPOPT_SECUR_EFTO 0x789a
|
||||||
|
#define IPOPT_SECUR_MMMM 0xbc4d
|
||||||
|
#define IPOPT_SECUR_RESTR 0xaf13
|
||||||
|
#define IPOPT_SECUR_SECRET 0xd788
|
||||||
|
#define IPOPT_SECUR_TOPSECRET 0x6bc5
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Internet implementation parameters.
|
||||||
|
*/
|
||||||
|
#define MAXTTL 255 /* maximum time to live (seconds) */
|
||||||
|
#define IPDEFTTL 64 /* default ttl, from RFC 1340 */
|
||||||
|
#define IPFRAGTTL 60 /* time to live for frags, slowhz */
|
||||||
|
#define IPTTLDEC 1 /* subtracted when forwarding */
|
||||||
|
|
||||||
|
#define IP_MSS 576 /* default maximum segment size */
|
28
auxil/zeek-aux/config.h.in
Normal file
28
auxil/zeek-aux/config.h.in
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
/* These autoconf variables are obsolete; it's portable to assume C89
|
||||||
|
and signal handlers that return void */
|
||||||
|
#define RETSIGTYPE void
|
||||||
|
#define RETSIGVAL
|
||||||
|
|
||||||
|
/* Define if you have the `sigaction' function. */
|
||||||
|
#cmakedefine HAVE_SIGACTION
|
||||||
|
|
||||||
|
/* Define if you have the `sigset' function. */
|
||||||
|
#cmakedefine HAVE_SIGSET
|
||||||
|
|
||||||
|
/* Define if you have the <memory.h> header file. */
|
||||||
|
#cmakedefine HAVE_MEMORY_H
|
||||||
|
|
||||||
|
/* Define if you have the `strerror' function. */
|
||||||
|
#cmakedefine HAVE_STRERROR
|
||||||
|
|
||||||
|
/* should explicitly declare socket() and friends */
|
||||||
|
#cmakedefine DO_SOCK_DECL
|
||||||
|
|
||||||
|
/* Compatibility for Darwin */
|
||||||
|
#cmakedefine NEED_NAMESER_COMPAT_H
|
||||||
|
|
||||||
|
/* have os-proto.h */
|
||||||
|
#cmakedefine HAVE_OS_PROTO_H
|
||||||
|
|
||||||
|
/* have sin_len field in sockaddr_in */
|
||||||
|
#cmakedefine SIN_LEN
|
15
auxil/zeek-aux/devel-tools/check-release
Executable file
15
auxil/zeek-aux/devel-tools/check-release
Executable file
|
@ -0,0 +1,15 @@
|
||||||
|
#! /usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Checks the current repository and all if its submodules for being
|
||||||
|
# in "release shape".
|
||||||
|
|
||||||
|
repo_status="$(cd $(dirname $0) && pwd)/repo-status"
|
||||||
|
check_cmd="test -e CHANGES && $repo_status"
|
||||||
|
|
||||||
|
printf ' %20s %-10s %-8s %-8s %-7s %-5s %-15s %s\n' "" "Branch" "CHANGES" "Pending" "Modif" "Sub" "VERSION" "Tags"
|
||||||
|
|
||||||
|
(
|
||||||
|
eval $check_cmd
|
||||||
|
git submodule foreach -q --recursive "$check_cmd; true"
|
||||||
|
) |
|
||||||
|
awk '/!/{print "- ", $0; next;} {print "+ ", $0; next;}'
|
32
auxil/zeek-aux/devel-tools/cpu-bench-with-trace
Executable file
32
auxil/zeek-aux/devel-tools/cpu-bench-with-trace
Executable file
|
@ -0,0 +1,32 @@
|
||||||
|
#! /usr/bin/env bash
|
||||||
|
#
|
||||||
|
# This runs a number of Zeek configurations on trace $2. It
|
||||||
|
# starts with the bare config and then
|
||||||
|
# kept adding the scripts load from init-default.zeek and local.zeek one
|
||||||
|
# by one, measuring user time for each run (i.e., the measurements are
|
||||||
|
# cumulative).
|
||||||
|
|
||||||
|
if [ "$2" == "" ]; then
|
||||||
|
echo "usage: $(basename $0) <zeekdir> <trace>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
zeek=$1
|
||||||
|
trace=$2
|
||||||
|
tmp=/tmp/bench.$$.zeek
|
||||||
|
|
||||||
|
export ZEEKPATH=$($zeek/build/zeek-path-dev)
|
||||||
|
|
||||||
|
cat </dev/null >$tmp
|
||||||
|
|
||||||
|
cat $zeek/scripts/base/init-default.zeek $zeek/scripts/site/local.zeek | grep '^ *@load' | while read line; do
|
||||||
|
echo $line >>$tmp
|
||||||
|
script=$(echo $line | awk '{print $2}' | sed 's#/#.#g')
|
||||||
|
output="bench.output.$script.log"
|
||||||
|
|
||||||
|
(time -p $zeek/build/src/zeek -b -r $trace $tmp) >$output 2>&1
|
||||||
|
user=$(cat $output | grep user | awk '{print $2}')
|
||||||
|
printf "%40s %s\n" $script $user
|
||||||
|
done
|
||||||
|
|
||||||
|
rm -f $tmp
|
42
auxil/zeek-aux/devel-tools/extract-conn-by-uid
Executable file
42
auxil/zeek-aux/devel-tools/extract-conn-by-uid
Executable file
|
@ -0,0 +1,42 @@
|
||||||
|
#! /usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Searches the connection with UID $1 in conn.log, and then extracts
|
||||||
|
# it from trace file $2.
|
||||||
|
|
||||||
|
if [ $# != 2 ]; then
|
||||||
|
echo "usage: $(basename $0) <uid> <trace>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
uid=$1
|
||||||
|
trace=$2
|
||||||
|
|
||||||
|
if [ ! -e conn.log ]; then
|
||||||
|
echo "no conn.log found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -e $trace ]; then
|
||||||
|
echo "trace $trace not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
filter=$(awk -v uid=$uid '$2==uid { printf("host %s and port %s and host %s and port %s\n", $3, $4, $5, $6)}' <conn.log)
|
||||||
|
|
||||||
|
if [ "$filter" == "" ]; then
|
||||||
|
echo uid $uid not found in conn.log
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo filter: $filter
|
||||||
|
|
||||||
|
out=$(basename $trace).$uid
|
||||||
|
|
||||||
|
if echo $trace | grep -q '\.gz$'; then
|
||||||
|
cat $trace | gunzip | tcpdump -r - -w $out "$filter"
|
||||||
|
else
|
||||||
|
tcpdump -r $trace -w $out "$filter"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo connection in $out
|
||||||
|
ls -al $out
|
62
auxil/zeek-aux/devel-tools/gen-ct-list.pl
Executable file
62
auxil/zeek-aux/devel-tools/gen-ct-list.pl
Executable file
|
@ -0,0 +1,62 @@
|
||||||
|
#!/usr/bin/env perl
|
||||||
|
#
|
||||||
|
# Generate the Zeek file containing the current list of known
|
||||||
|
# Certificate Transparency logs from the source file provided
|
||||||
|
# by Google.
|
||||||
|
#
|
||||||
|
|
||||||
|
use 5.14.1;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
# This is the only kind-of user-configurable line
|
||||||
|
|
||||||
|
my $google_log_url = "https://www.gstatic.com/ct/log_list/v3/log_list.json";
|
||||||
|
|
||||||
|
# And begin with loading everything we need.
|
||||||
|
# I was lazy and you probably will have to install a few of these.
|
||||||
|
|
||||||
|
use Carp;
|
||||||
|
use autodie;
|
||||||
|
use Net::SSLeay;
|
||||||
|
use HTML::HeadParser;
|
||||||
|
use LWP::Protocol::https;
|
||||||
|
use LWP::UserAgent;
|
||||||
|
use LWP::Simple;
|
||||||
|
use JSON::Parse qw/parse_json/;
|
||||||
|
use MIME::Base64;
|
||||||
|
use Digest::SHA qw/sha256/;
|
||||||
|
use Mozilla::CA;
|
||||||
|
|
||||||
|
my $ua = LWP::UserAgent->new();
|
||||||
|
my $google_known_logs_json = $ua->get($google_log_url);
|
||||||
|
croak("Could not get $google_log_url") unless defined($google_known_logs_json);
|
||||||
|
|
||||||
|
my $list = parse_json($google_known_logs_json->content);
|
||||||
|
|
||||||
|
say "#\n# Do not edit this file. This file is automatically generated by gen-ct-list.pl";
|
||||||
|
say "# File generated at ".localtime;
|
||||||
|
say "# File generated from ".$google_log_url;
|
||||||
|
say "# Source file generated at: ".$list->{log_list_timestamp};
|
||||||
|
say "# Source file version: ".$list->{version};
|
||||||
|
say "#";
|
||||||
|
say "";
|
||||||
|
say '@load base/protocols/ssl';
|
||||||
|
say "module SSL;";
|
||||||
|
say "";
|
||||||
|
say '## @docs-omit-value';
|
||||||
|
say "redef ct_logs += {";
|
||||||
|
|
||||||
|
for my $operator (@{$list->{operators}}) {
|
||||||
|
my $opname = $operator->{name};
|
||||||
|
for my $log (@{$operator->{logs}}) {
|
||||||
|
my $key = join('', map {"\\x$_" } unpack("(H2)*", decode_base64($log->{key})));
|
||||||
|
my $logid = join('', map {"\\x$_" } unpack("(H2)*", sha256(decode_base64($log->{key}))));
|
||||||
|
my $mmd = $log->{mmd};
|
||||||
|
my $url = $log->{url};
|
||||||
|
my $desc = $log->{description};
|
||||||
|
say "[\"$logid\"] = CTInfo(\$description=\"$desc\", \$operator=\"$opname\", \$url=\"$url\", \$maximum_merge_delay=$mmd, \$key=\"$key\"),";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
say "};";
|
84
auxil/zeek-aux/devel-tools/gen-mozilla-ca-list.rb
Executable file
84
auxil/zeek-aux/devel-tools/gen-mozilla-ca-list.rb
Executable file
|
@ -0,0 +1,84 @@
|
||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
tmpcert = "/tmp/tmpcert.der"
|
||||||
|
|
||||||
|
incert=false
|
||||||
|
intrust=false
|
||||||
|
|
||||||
|
if ARGV.length != 1
|
||||||
|
abort "\nPass path to the certdata.txt you want to add as first input argument to this script\n\n"+
|
||||||
|
"certdata.txt can be retrieved from the newest NSS release."
|
||||||
|
end
|
||||||
|
|
||||||
|
url = 'http://mxr.mozilla.org/mozilla-central/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1'
|
||||||
|
io = open(ARGV[0]);
|
||||||
|
|
||||||
|
puts "# Don't edit! This file is automatically generated."
|
||||||
|
puts "# Generated at: #{Time.now}"
|
||||||
|
puts "# Generated from: #{url}"
|
||||||
|
puts "#"
|
||||||
|
puts "# The original source file comes with this licensing statement:"
|
||||||
|
puts "#"
|
||||||
|
puts "# This Source Code Form is subject to the terms of the Mozilla Public"
|
||||||
|
puts "# License, v. 2.0. If a copy of the MPL was not distributed with this"
|
||||||
|
puts "# file, You can obtain one at http://mozilla.org/MPL/2.0/."
|
||||||
|
puts ""
|
||||||
|
|
||||||
|
puts "@load base/protocols/ssl"
|
||||||
|
puts "module SSL;";
|
||||||
|
puts "";
|
||||||
|
puts "## @docs-omit-value"
|
||||||
|
puts "redef root_certs += {";
|
||||||
|
|
||||||
|
all_certs = []
|
||||||
|
all_subjects = []
|
||||||
|
|
||||||
|
cert_name = ""
|
||||||
|
cert = ""
|
||||||
|
io.each do |line|
|
||||||
|
line.chomp!
|
||||||
|
if intrust
|
||||||
|
if line =~ /^CKA_TRUST_SERVER_AUTH/
|
||||||
|
if line =~ /CKT_NSS_TRUSTED_DELEGATOR/
|
||||||
|
File.open(tmpcert, "wb") do |f|
|
||||||
|
byteArray = cert.split("\\x")
|
||||||
|
max = byteArray.length() - 1
|
||||||
|
byteArray[1..max].each do | byte |
|
||||||
|
f.print byte.hex.chr
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
cert_subj = `openssl x509 -in #{tmpcert} -inform DER -noout -subject -nameopt RFC2253`
|
||||||
|
cert_subj["subject="]= ""
|
||||||
|
cert_subj.chomp!
|
||||||
|
File.delete(tmpcert)
|
||||||
|
|
||||||
|
if not all_subjects.include?(cert_subj)
|
||||||
|
puts " [\"#{cert_subj}\"] = \"#{cert}\","
|
||||||
|
all_subjects << cert_subj
|
||||||
|
end
|
||||||
|
end
|
||||||
|
intrust=false
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if line =~ /^CKA_LABEL/
|
||||||
|
cert_name = line.sub(/.*\"(.*)\".*/, "\\1")
|
||||||
|
i = 0
|
||||||
|
while all_certs.include?(cert_name)
|
||||||
|
i+=1
|
||||||
|
cert_name += " #{i}"
|
||||||
|
end
|
||||||
|
all_certs << cert_name
|
||||||
|
elsif line =~ /^CKA_VALUE MULTILINE_OCTAL/
|
||||||
|
incert=true
|
||||||
|
cert=""
|
||||||
|
elsif line =~ /^CKA_CLASS CK_OBJECT_CLASS CKO_NSS_TRUST/
|
||||||
|
intrust=true
|
||||||
|
elsif line =~ /^END/
|
||||||
|
incert=false
|
||||||
|
elsif incert
|
||||||
|
cert += line.split(/\\/).collect { |x| x.oct.chr.unpack("H2")[0].upcase if x!="" }.join("\\x")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
puts "};"
|
32
auxil/zeek-aux/devel-tools/git-delete-old-branches
Executable file
32
auxil/zeek-aux/devel-tools/git-delete-old-branches
Executable file
|
@ -0,0 +1,32 @@
|
||||||
|
# ! /usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Adapted from http://devblog.springest.com/a-script-to-remove-old-git-branches
|
||||||
|
#
|
||||||
|
|
||||||
|
# This has to be run from master
|
||||||
|
git checkout master
|
||||||
|
|
||||||
|
# Update our list of remotes
|
||||||
|
git fetch
|
||||||
|
git remote prune origin
|
||||||
|
|
||||||
|
# # Remove local fully merged branches
|
||||||
|
# git branch --merged master | grep -v 'master$' | xargs git branch -d
|
||||||
|
|
||||||
|
# Show remote fully merged branches
|
||||||
|
echo "The following remote branches are fully merged and will be removed:"
|
||||||
|
git branch -r --merged master | sed 's/ *origin\///' | grep '^topic/'
|
||||||
|
|
||||||
|
if [ $? != 0 ]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
read -p "Continue (y/n)? "
|
||||||
|
|
||||||
|
if [ "$REPLY" == "y" ]
|
||||||
|
then
|
||||||
|
# Remove remote fully merged branches
|
||||||
|
git branch -r --merged master | sed 's/ *origin\///' \
|
||||||
|
| grep '^topic/' | xargs -I% git push origin :%
|
||||||
|
echo "Done!"
|
||||||
|
fi
|
77
auxil/zeek-aux/devel-tools/git-move-submodules
Executable file
77
auxil/zeek-aux/devel-tools/git-move-submodules
Executable file
|
@ -0,0 +1,77 @@
|
||||||
|
#! /usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Recursively check outs the most recent version of all submodules on a given
|
||||||
|
# branch, and commits the updates to the parents.
|
||||||
|
|
||||||
|
branch=$1
|
||||||
|
|
||||||
|
if [ "$branch" == "" ]; then
|
||||||
|
echo "usage: $(basename $0) <branch>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
paths_to_push=()
|
||||||
|
|
||||||
|
function update_module {
|
||||||
|
local cwd=$1
|
||||||
|
local i
|
||||||
|
local modules=""
|
||||||
|
|
||||||
|
cd $cwd
|
||||||
|
|
||||||
|
# These submodules should be ignored by the loop below.
|
||||||
|
local ignored_modules=(
|
||||||
|
"3rdparty"
|
||||||
|
"IXWebSocket"
|
||||||
|
"c-ares"
|
||||||
|
"caf"
|
||||||
|
"cppzmq"
|
||||||
|
"expected-lite"
|
||||||
|
"filesystem"
|
||||||
|
"highwayhash"
|
||||||
|
"libkqueue"
|
||||||
|
"libunistd"
|
||||||
|
"out_ptr"
|
||||||
|
"prometheus-cpp"
|
||||||
|
"rapidjson"
|
||||||
|
"vcpkg")
|
||||||
|
|
||||||
|
# Note we don't use --recursive here, as we want to do a depth-first
|
||||||
|
# search so that we update children first.
|
||||||
|
for i in $(git submodule foreach -q 'echo $path' | grep -vE $(
|
||||||
|
IFS="|"
|
||||||
|
echo "${ignored_modules[*]}"
|
||||||
|
)); do
|
||||||
|
# See if repository has a branch of the given name. Otherwise leave it alone.
|
||||||
|
(cd $i && git show-ref --verify --quiet refs/heads/$branch) || continue
|
||||||
|
|
||||||
|
modules="$modules $i"
|
||||||
|
|
||||||
|
echo "--- Checking out $branch of $(basename $i)"
|
||||||
|
cd $i
|
||||||
|
git fetch -q || exit 1
|
||||||
|
git checkout -q $branch || exit 1
|
||||||
|
git merge origin/master || exit 1
|
||||||
|
|
||||||
|
update_module $cwd/$i
|
||||||
|
|
||||||
|
cd $cwd
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$modules" != "" ]; then
|
||||||
|
if [ -n "$(git status --untracked-files=no --porcelain)" ]; then
|
||||||
|
echo "+++ Committing updates to $(basename $cwd)"
|
||||||
|
git commit -m 'Updating submodule(s) [nomail]' --only $modules
|
||||||
|
paths_to_push+=($cwd)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
update_module $(pwd)
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Added ${#paths_to_push[@]} commits. Run the following commands to push them:"
|
||||||
|
for path in "${paths_to_push[@]}"; do
|
||||||
|
echo "(cd ${path} && git push)"
|
||||||
|
done
|
31
auxil/zeek-aux/devel-tools/git-pre-push-hook
Executable file
31
auxil/zeek-aux/devel-tools/git-pre-push-hook
Executable file
|
@ -0,0 +1,31 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# A pre-push hook that makes sure all testing/external changes
|
||||||
|
# have been pushed already. If not, it will abort. Note that
|
||||||
|
# it will only check for unpushed commits, not for uncommitted
|
||||||
|
# changes.
|
||||||
|
#
|
||||||
|
# To install this, copy it into you Zeek tree's .git/hooks/pre-push.
|
||||||
|
#
|
||||||
|
# This hook is called with the following parameters:
|
||||||
|
#
|
||||||
|
# $1 -- Name of the remote to which the push is being done
|
||||||
|
# $2 -- URL to which the push is being done
|
||||||
|
#
|
||||||
|
# If this script exits with a non-zero status nothing will be pushed.
|
||||||
|
|
||||||
|
test -d testing/external || exit 0
|
||||||
|
|
||||||
|
cd testing/external
|
||||||
|
|
||||||
|
base=$(pwd)
|
||||||
|
abort=0
|
||||||
|
|
||||||
|
for repo in $(./scripts/find-git-repos); do
|
||||||
|
cd ${base}/${repo} &&
|
||||||
|
git rev-list @{u}.. | grep -q . &&
|
||||||
|
echo "ERROR: testing/external/$(basename $repo) has commits that are not pushed." &&
|
||||||
|
abort=1
|
||||||
|
done
|
||||||
|
|
||||||
|
exit ${abort}
|
19
auxil/zeek-aux/devel-tools/git-show-fastpath
Executable file
19
auxil/zeek-aux/devel-tools/git-show-fastpath
Executable file
|
@ -0,0 +1,19 @@
|
||||||
|
#! /usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Shows pending fastpath commits for all modules.
|
||||||
|
|
||||||
|
show="git show-ref -q origin/fastpath && git --no-pager log --format=oneline origin/fastpath ^master || exit 0"
|
||||||
|
|
||||||
|
(echo "Entering <top-level>" && eval $show && git submodule foreach --recursive "$show") | awk '
|
||||||
|
|
||||||
|
/Entering/ { current = $2; next }
|
||||||
|
|
||||||
|
{
|
||||||
|
if ( current != "" )
|
||||||
|
print "==" current;
|
||||||
|
|
||||||
|
print;
|
||||||
|
|
||||||
|
current = "";
|
||||||
|
}
|
||||||
|
'
|
461
auxil/zeek-aux/devel-tools/github-manage
Executable file
461
auxil/zeek-aux/devel-tools/github-manage
Executable file
|
@ -0,0 +1,461 @@
|
||||||
|
#! /usr/bin/env python3
|
||||||
|
#
|
||||||
|
# https://pypi.org/project/argcomplete/#global-completion
|
||||||
|
# PYTHON_ARGCOMPLETE_OK
|
||||||
|
|
||||||
|
"""This script provides tooling to administrate the github.com/zeek organization."""
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
from enum import IntEnum
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
# This is the high-level error for API problems, per
|
||||||
|
# https://github.com/fastai/ghapi/issues/138 and confirmed
|
||||||
|
# in manual testing
|
||||||
|
from urllib.error import HTTPError
|
||||||
|
|
||||||
|
|
||||||
|
def print_err(*args, **kwargs):
|
||||||
|
print(*args, file=sys.stderr, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
import yaml
|
||||||
|
except ImportError:
|
||||||
|
# PyYAML is optional; we will see below whether we need it as we retrieve
|
||||||
|
# the auth token.
|
||||||
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
from ghapi.all import GhApi, paged
|
||||||
|
except ImportError:
|
||||||
|
print_err("This requires the Python Github API package: https://ghapi.fast.ai")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Argcomplete provides command-line completion for users of argparse.
|
||||||
|
# We support it if available, but don't complain when it isn't.
|
||||||
|
import argcomplete
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
GITHUB_SERVER = "github.com"
|
||||||
|
GITHUB_ORG = "zeek"
|
||||||
|
|
||||||
|
# There's a mismatch between how Github shows access levels in the UI vs how
|
||||||
|
# they work in the API. We use the UI-level ones here and provide helper
|
||||||
|
# functions to translate. The discrepancies are "read" being "pull" in the API,
|
||||||
|
# and "write" being "push". The others match.
|
||||||
|
AccessLevel = IntEnum("AccessLevel", ["READ", "TRIAGE", "WRITE", "MAINTAIN", "ADMIN"])
|
||||||
|
|
||||||
|
|
||||||
|
def get_api_token(args):
|
||||||
|
if args.auth_token:
|
||||||
|
return args.auth_token
|
||||||
|
|
||||||
|
# This is the ghapi-recommended way to configure your token and works
|
||||||
|
# transparently:
|
||||||
|
token = os.getenv("GITHUB_TOKEN")
|
||||||
|
if token:
|
||||||
|
return token
|
||||||
|
|
||||||
|
# Try somewhat hard to locate gh's config file:
|
||||||
|
gh_host_config = (
|
||||||
|
Path(os.getenv("XDG_CONFIG_HOME", default=Path.home() / ".config"))
|
||||||
|
/ "gh"
|
||||||
|
/ "hosts.yml"
|
||||||
|
)
|
||||||
|
if gh_host_config.is_file():
|
||||||
|
if "yaml" not in sys.modules:
|
||||||
|
print_err(
|
||||||
|
"This requires PyYAML to use your existing gh config. See: https://pyyaml.org"
|
||||||
|
)
|
||||||
|
print_err(
|
||||||
|
"Please set the GITHUB_TOKEN environment variable to your Github API token."
|
||||||
|
)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(gh_host_config) as stream:
|
||||||
|
ymldata = yaml.safe_load(stream)
|
||||||
|
return ymldata[GITHUB_SERVER]["oauth_token"]
|
||||||
|
except (OSError, yaml.YAMLError, KeyError) as error:
|
||||||
|
print_err(f"Unexpected gh configuration ({error}).")
|
||||||
|
print_err(
|
||||||
|
"Please set the GITHUB_TOKEN environment variable to your Github API token."
|
||||||
|
)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
print_err(
|
||||||
|
"Please provide a Github API token via --auth-token or set the GITHUB_TOKEN environment variable"
|
||||||
|
)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
def get_access_level_string(perms):
|
||||||
|
res = get_access_level(perms)
|
||||||
|
if not res:
|
||||||
|
return None
|
||||||
|
return res.name.lower()
|
||||||
|
|
||||||
|
|
||||||
|
def access_level_to_github(level):
|
||||||
|
if level == AccessLevel.ADMIN:
|
||||||
|
return "admin"
|
||||||
|
if level == AccessLevel.MAINTAIN:
|
||||||
|
return "maintain"
|
||||||
|
if level == AccessLevel.WRITE:
|
||||||
|
return "push"
|
||||||
|
if level == AccessLevel.TRIAGE:
|
||||||
|
return "triage"
|
||||||
|
if level == AccessLevel.READ:
|
||||||
|
return "pull"
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def access_level_from_github(level):
|
||||||
|
if level == "admin":
|
||||||
|
return AccessLevel.ADMIN
|
||||||
|
if level == "maintain":
|
||||||
|
return AccessLevel.MAINTAIN
|
||||||
|
if level == "push":
|
||||||
|
return AccessLevel.WRITE
|
||||||
|
if level == "triage":
|
||||||
|
return AccessLevel.TRIAGE
|
||||||
|
if level == "pull":
|
||||||
|
return AccessLevel.READ
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def get_access_level(perm):
|
||||||
|
"""Returns the access level for a given user/team as shown on the access
|
||||||
|
settings page of a repo, based on the given set of permissions. This returns
|
||||||
|
an AccessLevel, or None when no access level was identifiable.
|
||||||
|
"""
|
||||||
|
# This is a bit messy because permissions are presented differently in
|
||||||
|
# different corners of the API. Sometimes it's a string, sometimes an
|
||||||
|
# object with individual permission bits. For now just check if it's a
|
||||||
|
# string and handle that separately.
|
||||||
|
if isinstance(perm, str):
|
||||||
|
return access_level_from_github(perm)
|
||||||
|
|
||||||
|
try:
|
||||||
|
if perm.admin:
|
||||||
|
return AccessLevel.ADMIN
|
||||||
|
if perm.maintain:
|
||||||
|
return AccessLevel.MAINTAIN
|
||||||
|
if perm.push:
|
||||||
|
return AccessLevel.WRITE
|
||||||
|
if perm.triage:
|
||||||
|
return AccessLevel.TRIAGE
|
||||||
|
if perm.pull:
|
||||||
|
return AccessLevel.READ
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def get_all_repos(api):
|
||||||
|
"""Returns a list of all repos in the GITHUB_ORG, sorted by name."""
|
||||||
|
repos = []
|
||||||
|
|
||||||
|
for page in paged(api.repos.list_for_org, org=GITHUB_ORG, per_page=100):
|
||||||
|
repos.extend(page)
|
||||||
|
|
||||||
|
repos.sort(key=lambda repo: repo.name)
|
||||||
|
return repos
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_repos_list_access(api, args):
|
||||||
|
result = []
|
||||||
|
|
||||||
|
for repo in get_all_repos(api):
|
||||||
|
teams = api.repos.list_teams(repo.name)
|
||||||
|
teams_results = []
|
||||||
|
for team in sorted(teams, key=lambda t: t.name):
|
||||||
|
teams_results.append(
|
||||||
|
{
|
||||||
|
"name": team.name,
|
||||||
|
"access": get_access_level_string(team.permissions),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
# "direct" here means we don't list each individual member of teams that
|
||||||
|
# also have access to the repo:
|
||||||
|
users = api.repos.list_collaborators(repo.name, affiliation="direct")
|
||||||
|
users_results = []
|
||||||
|
for user in sorted(users, key=lambda u: u.login):
|
||||||
|
users_results.append(
|
||||||
|
{
|
||||||
|
"name": user.login,
|
||||||
|
"access": get_access_level_string(user.permissions),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
result.append(
|
||||||
|
{
|
||||||
|
"repo": repo.name,
|
||||||
|
"teams": teams_results,
|
||||||
|
"users": users_results,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
print(json.dumps(result, sort_keys=True))
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_repos_list_redundant_users(api, args):
|
||||||
|
result = []
|
||||||
|
|
||||||
|
for repo in get_all_repos(api):
|
||||||
|
teams = api.repos.list_teams(repo.name)
|
||||||
|
teams_data = {}
|
||||||
|
|
||||||
|
for team in teams:
|
||||||
|
teams_data[team.name] = {
|
||||||
|
"permission": team.permission,
|
||||||
|
"users": [
|
||||||
|
member.login
|
||||||
|
for member in api.teams.list_members_in_org(GITHUB_ORG, team.slug)
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
# "direct" here means we don't list each individual member of teams that
|
||||||
|
# also have access to the repo:
|
||||||
|
users = api.repos.list_collaborators(repo.name, affiliation="direct")
|
||||||
|
|
||||||
|
for user in sorted(users, key=lambda u: u.login):
|
||||||
|
for team, data in teams_data.items():
|
||||||
|
if user.login not in data["users"]:
|
||||||
|
continue
|
||||||
|
# This repo gives access to a team that already includes the
|
||||||
|
# explicitly listed user. See if the user is added with
|
||||||
|
# greater permissions, otherwise this user is redundant.
|
||||||
|
team_access = get_access_level(data["permission"])
|
||||||
|
user_access = get_access_level(user.permissions)
|
||||||
|
|
||||||
|
if user_access <= team_access:
|
||||||
|
result.append(
|
||||||
|
{
|
||||||
|
"repo": repo.name,
|
||||||
|
"user": user.login,
|
||||||
|
"redundancy": team,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
print(json.dumps(result, sort_keys=True))
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_repos_remove_redundant_users(api, args):
|
||||||
|
result = []
|
||||||
|
outcome = True
|
||||||
|
|
||||||
|
for repo in get_all_repos(api):
|
||||||
|
teams = api.repos.list_teams(repo.name)
|
||||||
|
teams_data = {}
|
||||||
|
|
||||||
|
for team in teams:
|
||||||
|
teams_data[team.name] = {
|
||||||
|
"permission": team.permission,
|
||||||
|
"users": [
|
||||||
|
member.login
|
||||||
|
for member in api.teams.list_members_in_org(GITHUB_ORG, team.slug)
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
# "direct" here means we don't list each individual member of teams that
|
||||||
|
# also have access to the repo:
|
||||||
|
users = api.repos.list_collaborators(repo.name, affiliation="direct")
|
||||||
|
|
||||||
|
for user in sorted(users, key=lambda u: u.login):
|
||||||
|
for team, data in teams_data.items():
|
||||||
|
if user.login not in data["users"]:
|
||||||
|
continue
|
||||||
|
# This repo gives access to a team that already includes the
|
||||||
|
# explicitly listed user. See if the user is added with
|
||||||
|
# greater permissions, otherwise this user is redundant.
|
||||||
|
team_access = get_access_level(data["permission"])
|
||||||
|
user_access = get_access_level(user.permissions)
|
||||||
|
|
||||||
|
if user_access <= team_access:
|
||||||
|
try:
|
||||||
|
if not args.dry_run:
|
||||||
|
api.repos.remove_collaborator(repo.name, user.login)
|
||||||
|
result.append(
|
||||||
|
{
|
||||||
|
"repo": repo.name,
|
||||||
|
"user": user.login,
|
||||||
|
"success": True,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
except HTTPError as err:
|
||||||
|
result.append(
|
||||||
|
{
|
||||||
|
"repo": repo.name,
|
||||||
|
"user": user.login,
|
||||||
|
"success": False,
|
||||||
|
"code": err.code,
|
||||||
|
"reason": err.reason,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
outcome = False
|
||||||
|
|
||||||
|
print(json.dumps(result, sort_keys=True))
|
||||||
|
return outcome
|
||||||
|
|
||||||
|
|
||||||
|
def cmd_repos_add_team(api, args):
|
||||||
|
if args.access_level not in [level.name.lower() for level in AccessLevel]:
|
||||||
|
print_err(
|
||||||
|
f"The given access level '{args.access_level}' is not valid. See --help.\n"
|
||||||
|
)
|
||||||
|
return False
|
||||||
|
|
||||||
|
access_level = access_level_to_github(AccessLevel[args.access_level.upper()])
|
||||||
|
|
||||||
|
# Resolve the given team name to a slug:
|
||||||
|
team_slug = None
|
||||||
|
teams = sorted(api.teams.list(GITHUB_ORG), key=lambda t: t.name)
|
||||||
|
for team in teams:
|
||||||
|
if (
|
||||||
|
team.name.lower() == args.team.lower()
|
||||||
|
or team.slug.lower() == args.team.lower()
|
||||||
|
):
|
||||||
|
team_slug = team.slug
|
||||||
|
break
|
||||||
|
|
||||||
|
if not team_slug:
|
||||||
|
print_err(
|
||||||
|
f"Team '{args.team}' is not valid for the '{GITHUB_ORG}' organization."
|
||||||
|
)
|
||||||
|
print_err(f"Must be one of {', '.join(["'" + t.name + "'" for t in teams])}.")
|
||||||
|
return False
|
||||||
|
|
||||||
|
result = []
|
||||||
|
outcome = True
|
||||||
|
|
||||||
|
for repo in get_all_repos(api):
|
||||||
|
try:
|
||||||
|
if not args.dry_run:
|
||||||
|
api.teams.add_or_update_repo_permissions_in_org(
|
||||||
|
GITHUB_ORG, team_slug, repo.name, access_level
|
||||||
|
)
|
||||||
|
result.append(
|
||||||
|
{
|
||||||
|
"repo": repo.name,
|
||||||
|
"success": True,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
except HTTPError as err:
|
||||||
|
result.append(
|
||||||
|
{
|
||||||
|
"repo": repo.name,
|
||||||
|
"success": False,
|
||||||
|
"code": err.code,
|
||||||
|
"reason": err.reason,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
outcome = False
|
||||||
|
|
||||||
|
print(json.dumps(result, sort_keys=True))
|
||||||
|
return outcome
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
top_parser = argparse.ArgumentParser(
|
||||||
|
description="Helpers for automated Zeek repo administration on Github."
|
||||||
|
)
|
||||||
|
|
||||||
|
top_parser.add_argument(
|
||||||
|
"--auth-token",
|
||||||
|
default=None,
|
||||||
|
help="Your Github API token. You can also use the GITHUB_TOKEN environment "
|
||||||
|
"variable to provide this. As a fallback, this script tries to use your "
|
||||||
|
"gh configuration, if available.",
|
||||||
|
)
|
||||||
|
|
||||||
|
cmd_parser = top_parser.add_subparsers(
|
||||||
|
title="commands",
|
||||||
|
dest="command",
|
||||||
|
help="See `%(prog)s <command> -h` for per-command usage info.",
|
||||||
|
)
|
||||||
|
|
||||||
|
repos_parser = cmd_parser.add_parser(
|
||||||
|
"repos", help="Do something for every repo in the Zeek organization."
|
||||||
|
)
|
||||||
|
|
||||||
|
repos_cmd_parser = repos_parser.add_subparsers(
|
||||||
|
title="commands",
|
||||||
|
dest="command",
|
||||||
|
help="See `%(prog)s <command> -h` for per-command usage info.",
|
||||||
|
)
|
||||||
|
|
||||||
|
repos_list_access_cmd_parser = repos_cmd_parser.add_parser(
|
||||||
|
"list-access",
|
||||||
|
help="List all users and teams that have access to a repo, along with the access level.",
|
||||||
|
)
|
||||||
|
repos_list_access_cmd_parser.set_defaults(run_cmd=cmd_repos_list_access)
|
||||||
|
|
||||||
|
repos_list_redundant_users_cmd_parser = repos_cmd_parser.add_parser(
|
||||||
|
"list-redundant-users",
|
||||||
|
help="List users already covered via teams providing at least the same access level.",
|
||||||
|
)
|
||||||
|
repos_list_redundant_users_cmd_parser.set_defaults(
|
||||||
|
run_cmd=cmd_repos_list_redundant_users
|
||||||
|
)
|
||||||
|
|
||||||
|
repos_remove_redundant_user_cmd_parser = repos_cmd_parser.add_parser(
|
||||||
|
"remove-redundant-users",
|
||||||
|
help="Remove users already included via a team that provides at least the same access level.",
|
||||||
|
)
|
||||||
|
repos_remove_redundant_user_cmd_parser.set_defaults(
|
||||||
|
run_cmd=cmd_repos_remove_redundant_users
|
||||||
|
)
|
||||||
|
repos_remove_redundant_user_cmd_parser.add_argument(
|
||||||
|
"--dry-run",
|
||||||
|
action="store_true",
|
||||||
|
help="Don't make any changes, just pretend API calls succeed",
|
||||||
|
)
|
||||||
|
|
||||||
|
repos_add_team_cmd_parser = repos_cmd_parser.add_parser(
|
||||||
|
"add-team",
|
||||||
|
help="Add the given team to each repository at the given access level. Teams that already have access are updated to the provided level.",
|
||||||
|
)
|
||||||
|
repos_add_team_cmd_parser.set_defaults(run_cmd=cmd_repos_add_team)
|
||||||
|
|
||||||
|
repos_add_team_cmd_parser.add_argument(
|
||||||
|
"--dry-run",
|
||||||
|
action="store_true",
|
||||||
|
help="Don't make any changes, just pretend API calls succeed",
|
||||||
|
)
|
||||||
|
repos_add_team_cmd_parser.add_argument(
|
||||||
|
"--team", required=True, help="The name or slug of the team. Case-insensitive."
|
||||||
|
)
|
||||||
|
repos_add_team_cmd_parser.add_argument(
|
||||||
|
"--access-level",
|
||||||
|
required=True,
|
||||||
|
help=f"The access level. One of {', '.join(["'" + level.name.lower() + "'" for level in AccessLevel])}.",
|
||||||
|
)
|
||||||
|
|
||||||
|
if "argcomplete" in sys.modules:
|
||||||
|
argcomplete.autocomplete(top_parser)
|
||||||
|
|
||||||
|
args = top_parser.parse_args()
|
||||||
|
api = GhApi(owner=GITHUB_ORG, token=get_api_token(args))
|
||||||
|
|
||||||
|
try:
|
||||||
|
return args.run_cmd(api, args)
|
||||||
|
except HTTPError as err:
|
||||||
|
sys.stderr.write(f"API error at {err.url}: {err.code}, {err.reason}\n")
|
||||||
|
return False
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
sys.exit(0 if main() else 1)
|
129
auxil/zeek-aux/devel-tools/make-release
Executable file
129
auxil/zeek-aux/devel-tools/make-release
Executable file
|
@ -0,0 +1,129 @@
|
||||||
|
#! /usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Makes release tarballs for the repository in the current directory;
|
||||||
|
# and if --recursive is given, also for all submodules.
|
||||||
|
|
||||||
|
DEST="$(pwd)/build/dist" # Where to put the TGZs.
|
||||||
|
LOGS="$DEST/.log" # Where to put build logs.
|
||||||
|
|
||||||
|
dists=""
|
||||||
|
|
||||||
|
function usage() {
|
||||||
|
echo "Usage: $(basename $0) [--recursive]"
|
||||||
|
}
|
||||||
|
|
||||||
|
function release() {
|
||||||
|
mod=$1
|
||||||
|
tmp="$LOGS/make-release.$(basename $mod).log"
|
||||||
|
|
||||||
|
cat </dev/null >$tmp
|
||||||
|
|
||||||
|
echo "--- Building distribution for $mod" >&2
|
||||||
|
echo "Log in $tmp." >&2
|
||||||
|
|
||||||
|
make dist >$tmp 2>&1
|
||||||
|
|
||||||
|
cat $tmp | awk '/CPack:.*generated/ {print $4} /^Package: / {print $2}' | while read tgz; do
|
||||||
|
if echo $tgz | grep -qv ^/; then
|
||||||
|
tgz="$(pwd)/$tgz"
|
||||||
|
fi
|
||||||
|
|
||||||
|
version=$(git tag --contains HEAD | grep -E '^(release|beta)$')
|
||||||
|
|
||||||
|
if [ "$version" == "" ]; then
|
||||||
|
version="git"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Distribution in $tgz ($version)" >&2
|
||||||
|
ls -al $tgz | awk '{print " ", $0; }' >&2
|
||||||
|
|
||||||
|
echo "$tgz#$version"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "$1" == "--recursive" ]; then
|
||||||
|
submodules=1
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$submodules" == "1" ]; then
|
||||||
|
mods=$(git submodule foreach -q --recursive pwd | grep -v /cmake)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e $DEST ]; then
|
||||||
|
echo
|
||||||
|
echo "$DEST exists already, proceeding will delete it."
|
||||||
|
echo ">> Continue? (y/n)"
|
||||||
|
read line
|
||||||
|
if [ "$line" != "y" ]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -rf $DEST
|
||||||
|
install -d $DEST
|
||||||
|
install -d $LOGS
|
||||||
|
|
||||||
|
mods="$mods ."
|
||||||
|
|
||||||
|
build=
|
||||||
|
|
||||||
|
for mod in $mods; do
|
||||||
|
cwd=$(pwd)
|
||||||
|
cd $mod
|
||||||
|
|
||||||
|
if [ "$mod" = "." ]; then
|
||||||
|
mod=$(pwd)
|
||||||
|
mod=$(basename $mod)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! '(' -e CMakeLists.txt -o -e Makefile ')' ]; then
|
||||||
|
echo "No CMakeLists.txt or Makefile in $mod, skipping."
|
||||||
|
cd $cwd
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
ignore=1
|
||||||
|
|
||||||
|
if [ "$(git describe HEAD)" = "$(git describe release 2>/dev/null)" ]; then
|
||||||
|
ignore=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$(git describe HEAD)" = "$(git describe beta 2>/dev/null)" ]; then
|
||||||
|
ignore=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$ignore" = "1" ]; then
|
||||||
|
echo "Module $mod is not tagged for release or beta, skipping."
|
||||||
|
cd $cwd
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
dist=$(release $mod)
|
||||||
|
(echo $dist | grep -qv "^ *$") || echo "No distribution found for $mod."
|
||||||
|
|
||||||
|
dists="$dists $dist"
|
||||||
|
echo
|
||||||
|
|
||||||
|
cd $cwd
|
||||||
|
done
|
||||||
|
|
||||||
|
for dist in $dists; do
|
||||||
|
tgz=$(echo $dist | cut -d '#' -f 1)
|
||||||
|
version=$(echo $dist | cut -d '#' -f 2)
|
||||||
|
dst=$(basename $tgz)
|
||||||
|
dst="$DEST/$version/$(echo $dst | sed 's/\.tgz/.tar.gz/g')"
|
||||||
|
|
||||||
|
install -d $DEST/$version
|
||||||
|
mv $tgz $dst
|
||||||
|
|
||||||
|
echo Signing $dst ...
|
||||||
|
sign-file $dst
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "--- All distributions in $DEST:"
|
||||||
|
|
||||||
|
all=$(find $DEST -path '*gz*')
|
||||||
|
test "$all" != "" && ls -rl $all || echo "None."
|
||||||
|
echo
|
230
auxil/zeek-aux/devel-tools/perf-benchmark
Executable file
230
auxil/zeek-aux/devel-tools/perf-benchmark
Executable file
|
@ -0,0 +1,230 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
ZEEK_BUILD=""
|
||||||
|
DATA_FILE=""
|
||||||
|
MODE="intf"
|
||||||
|
INTERFACE=""
|
||||||
|
SEED_FILE=""
|
||||||
|
|
||||||
|
# Path where flamegraph is installed
|
||||||
|
FLAMEGRAPH_PATH=""
|
||||||
|
FLAMEGRAPH_PREFIX="benchmark"
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
usage="\
|
||||||
|
Usage: $0 -z [zeek binary path] -d [data file path]
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-b, --build PATH The path to a Zeek binary to benchmark
|
||||||
|
-d, --data-file PATH The path to a data file to read from for replay
|
||||||
|
-m, --mode MODE This can be one of three possible values:
|
||||||
|
intf, read, or flamegraph. This controls what
|
||||||
|
mode is used for the benchmark run, and defaults
|
||||||
|
to intf if not passed. The modes are described
|
||||||
|
below.
|
||||||
|
-i, --interface INTF The network interface to use for capturing data.
|
||||||
|
This interface should be completely idle, since
|
||||||
|
tcpreplay will be using it to replay the data.
|
||||||
|
This argument is ignored if the mode is 'file'.
|
||||||
|
-f, --flamegraph PATH The path to the directory where Flamegraph is
|
||||||
|
installed. This argument is required if the mode
|
||||||
|
is 'flamegraph', but is ignored otherwise.
|
||||||
|
-o, --output FILE The file prefix to use as output for Flamegraph.
|
||||||
|
This defaults to 'benchmark'. This argument is ignored
|
||||||
|
if the mode is not 'flamegraph'.
|
||||||
|
-s, --seed FILE (optional) A path to a Zeek random seed file.
|
||||||
|
This is used control the generation of connection
|
||||||
|
IDs and other data so it is consistent between
|
||||||
|
benchmarking runs.
|
||||||
|
|
||||||
|
By default or when 'intf' is passed for the mode argument, the output will
|
||||||
|
include CPU, memory, etc statistics from Zeek processing all of the data
|
||||||
|
in the data file as if it was reading it live from the network. This mode
|
||||||
|
requires an interface to be passed using the -i argument.
|
||||||
|
|
||||||
|
When 'file' is passed for the mode (-m) argument, the output will include
|
||||||
|
the runtime and maximum memory usage of Zeek when reading the data file
|
||||||
|
directly from disk.
|
||||||
|
|
||||||
|
When 'flamegraph' is passed for the mode (-m) argument, this script will
|
||||||
|
output two flamegraphs for the process runtime in svg format. The first
|
||||||
|
flamegraph is a standard graph showing the time spent in functions,
|
||||||
|
stacked in the normal manner. The second graph is 'stack-reversed'.
|
||||||
|
|
||||||
|
Symbols in Flamegraph outputs may not correctly stack unless the various
|
||||||
|
libraries linked into Zeek are built with frame pointers. This includes
|
||||||
|
glibc, libpcap, and openssl. Rebuilding those libraries with the
|
||||||
|
-fno-omit-frame-pointer compiler flag may provide more accurate output.
|
||||||
|
You can set libraries that get preloaded by setting the PRELOAD_LIBS
|
||||||
|
variable in the script.
|
||||||
|
|
||||||
|
This script assumes that it is being run on a system with a large number
|
||||||
|
of CPU cores. If being used on a smaller system, modify this script and
|
||||||
|
set the ZEEK_CPU and TCPREPLAY_CPU variables to smaller values.
|
||||||
|
"
|
||||||
|
|
||||||
|
echo "${usage}"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
while ( ("$#")); do
|
||||||
|
case "$1" in
|
||||||
|
-d | --data-file)
|
||||||
|
DATA_FILE=$2
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-b | --build)
|
||||||
|
ZEEK_BUILD=$2
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-m | --mode)
|
||||||
|
MODE=$2
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-i | --interface)
|
||||||
|
INTERFACE=$2
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-f | --flamegraph)
|
||||||
|
FLAMEGRAPH_PATH=$2
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-o | --output)
|
||||||
|
FLAMEGRAPH_PREFIX=$2
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-s | --seed)
|
||||||
|
SEED_FILE=$2
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "${MODE}" != "intf" -a "${MODE}" != "file" -a "${MODE}" != "flamegraph" ]; then
|
||||||
|
echo "Error: -m argument should be one of 'intf', 'file', or 'flamegraph'"
|
||||||
|
echo
|
||||||
|
usage
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "${ZEEK_BUILD}" ]; then
|
||||||
|
echo "Error: -b argument is required and should point at a Zeek binary"
|
||||||
|
echo
|
||||||
|
usage
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "${DATA_FILE}" ]; then
|
||||||
|
echo "Error: -d argument is required and should point at a pcap file to replay"
|
||||||
|
echo
|
||||||
|
usage
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${MODE}" != "file" -a -z "${INTERFACE}" ]; then
|
||||||
|
echo "Error: -i argument is required for the ${MODE} mode and should point to an idle network interface"
|
||||||
|
echo
|
||||||
|
usage
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Various run-time options
|
||||||
|
ZEEK_CPU=10
|
||||||
|
TCPREPLAY_CPU=11
|
||||||
|
PRELOAD_LIBS=""
|
||||||
|
|
||||||
|
ZEEK_ARGS=""
|
||||||
|
if [ "${MODE}" != "file" ]; then
|
||||||
|
ZEEK_ARGS="-i af_packet::${INTERFACE}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "${SEED_FILE}" ]; then
|
||||||
|
ZEEK_ARGS="${ZEEK_ARGS} -G ${SEED_FILE}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${MODE}" = "intf" ]; then
|
||||||
|
|
||||||
|
TIME_FILE=$(mktemp)
|
||||||
|
|
||||||
|
echo "####### Testing reading data file from a network interface #######"
|
||||||
|
echo "Running '${ZEEK_BUILD} ${ZEEK_ARGS}' against ${DATA_FILE}"
|
||||||
|
# Start zeek, find it's PID, then wait 10s to let it reach a steady state
|
||||||
|
taskset --cpu-list $ZEEK_CPU time -f "%M" -o $TIME_FILE $ZEEK_BUILD $ZEEK_ARGS &
|
||||||
|
TIME_PID=$!
|
||||||
|
|
||||||
|
sleep 5
|
||||||
|
ZEEK_PID=$(ps -ef | awk -v timepid="${TIME_PID}" '{ if ($3 == timepid) { print $2 } }')
|
||||||
|
renice -20 -p $ZEEK_PID >/dev/null
|
||||||
|
sleep 5
|
||||||
|
echo "Zeek running on PID ${ZEEK_PID}"
|
||||||
|
|
||||||
|
# Start perf stat on the zeek process
|
||||||
|
perf stat -p $ZEEK_PID &
|
||||||
|
PERF_PID=$!
|
||||||
|
|
||||||
|
# Start replaying the data
|
||||||
|
echo "Starting replay"
|
||||||
|
taskset --cpu-list $TCPREPLAY_CPU tcpreplay -i $INTERFACE -q $DATA_FILE
|
||||||
|
|
||||||
|
# Capture the average CPU usage of the process
|
||||||
|
CPU_USAGE=$(ps -p $ZEEK_PID -o %cpu=)
|
||||||
|
|
||||||
|
# Kill everything
|
||||||
|
echo
|
||||||
|
kill -2 $ZEEK_PID
|
||||||
|
wait $TIME_PID
|
||||||
|
wait $PERF_PID
|
||||||
|
|
||||||
|
echo "Maximum memory usage (max_rss): $(head -n 1 ${TIME_FILE}) bytes"
|
||||||
|
echo "Average CPU usage: ${CPU_USAGE}%"
|
||||||
|
|
||||||
|
rm $TIME_FILE
|
||||||
|
|
||||||
|
elif [ "${MODE}" = "file" ]; then
|
||||||
|
|
||||||
|
TIME_FILE=$(mktemp)
|
||||||
|
|
||||||
|
echo "####### Testing reading the file directly from disk #######"
|
||||||
|
taskset --cpu-list $ZEEK_CPU time -f "%e %M" -o $TIME_FILE $ZEEK_BUILD $ZEEK_ARGS -r $DATA_FILE
|
||||||
|
TIME_PID=$!
|
||||||
|
ZEEK_PID=$(ps -ef | awk -v timepid="${TIME_PID}" '{ if ($3 == timepid) { print $2 } }')
|
||||||
|
renice -20 -p $ZEEK_PID >/dev/null
|
||||||
|
awk '{print "Time spent: " $1 " seconds\nMax memory usage: " $2 " bytes"}' $TIME_FILE
|
||||||
|
|
||||||
|
rm $TIME_FILE
|
||||||
|
|
||||||
|
elif [ "${MODE}" = "flamegraph" ]; then
|
||||||
|
|
||||||
|
echo "####### Generating flamegraph data #######"
|
||||||
|
|
||||||
|
PERF_RECORD_FILE=$(mktemp)
|
||||||
|
PERF_COLLAPSED_FILE=$(mktemp)
|
||||||
|
|
||||||
|
# Start zeek under perf record, then sleep for a few seconds to let it actually start up. For runs with
|
||||||
|
# shorter amounts of data or with slower traffic, you can add '-c 499' here to get finer-grained results.
|
||||||
|
# With big data sets, it just results in the graph getting blown out by waits in the IO loop.
|
||||||
|
LD_PRELOAD=${PRELOAD_LIBS} perf record -g -o $PERF_RECORD_FILE -- $ZEEK_BUILD $ZEEK_ARGS &
|
||||||
|
PERF_PID=$!
|
||||||
|
|
||||||
|
sleep 5
|
||||||
|
|
||||||
|
ZEEK_PID=$(ps -ef | awk -v perfpid="${PERF_PID}" '{ if ($3 == perfpid) { print $2 } }')
|
||||||
|
echo "Zeek running on PID ${ZEEK_PID}"
|
||||||
|
|
||||||
|
# Start replaying the data
|
||||||
|
echo "Starting replay"
|
||||||
|
taskset --cpu-list $TCPREPLAY_CPU tcpreplay -i $INTERFACE -q $DATA_FILE
|
||||||
|
|
||||||
|
# Kill everything
|
||||||
|
echo
|
||||||
|
kill -2 $ZEEK_PID
|
||||||
|
wait $PERF_PID
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "####### Collapsing perf stack data #######"
|
||||||
|
perf script -i $PERF_RECORD_FILE | ${FLAMEGRAPH_PATH}/stackcollapse-perf.pl >$PERF_COLLAPSED_FILE
|
||||||
|
echo "####### Building normal flamegraph, writing to ${FLAMEGRAPH_PREFIX}.svg #######"
|
||||||
|
cat $PERF_COLLAPSED_FILE | ${FLAMEGRAPH_PATH}/flamegraph.pl >"${FLAMEGRAPH_PREFIX}.svg"
|
||||||
|
echo "####### Building reverse flamegraph, writing to ${FLAMEGRAPH_PREFIX}-reversed.svg #######"
|
||||||
|
cat $PERF_COLLAPSED_FILE | ${FLAMEGRAPH_PATH}/flamegraph.pl --reverse >"${FLAMEGRAPH_PREFIX}-reversed.svg"
|
||||||
|
|
||||||
|
rm $PERF_RECORD_FILE
|
||||||
|
rm $PERF_COLLAPSED_FILE
|
||||||
|
|
||||||
|
fi
|
18
auxil/zeek-aux/devel-tools/repo-status
Executable file
18
auxil/zeek-aux/devel-tools/repo-status
Executable file
|
@ -0,0 +1,18 @@
|
||||||
|
#! /usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Helper for check-release.
|
||||||
|
|
||||||
|
repo=$(basename $(git config --get remote.origin.url) | sed 's/^[^:]*://')
|
||||||
|
head=$(basename $(git symbolic-ref -q HEAD))
|
||||||
|
|
||||||
|
update_changes="$(dirname $0)/update-changes"
|
||||||
|
|
||||||
|
printf "%20s " "$repo"
|
||||||
|
printf "%-10s " "$head"
|
||||||
|
printf "%-8s " $($update_changes -c | grep -q NOT && echo 'old!' || echo ok)
|
||||||
|
printf "%-8s " $(git log --oneline $head ^origin/$head | wc -l | awk '$1==0{printf("%s",$1)} $1!=0{printf("%s!",$1)}')
|
||||||
|
printf "%-7s " $(git status --porcelain | awk 'NF!=1' | grep -q '.' && echo 'Mod!' || echo ok)
|
||||||
|
printf "%-5s " $(git submodule status --recursive | sed 's/^\(\.\).*/\1/g' | grep -q '^ $' && echo 'Mod!' || echo ok)
|
||||||
|
printf "%-15s " $(cat VERSION | awk '/-/{printf("%s!", $1); next} {printf("%s", $1)}')
|
||||||
|
printf "%s" $(git tag -l --contains HEAD | sort -r | paste -sd ',' | awk '/release|beta/{printf("%s",$1); next;} {printf("%s!",$1)}')
|
||||||
|
echo
|
29
auxil/zeek-aux/devel-tools/sign-file
Executable file
29
auxil/zeek-aux/devel-tools/sign-file
Executable file
|
@ -0,0 +1,29 @@
|
||||||
|
#! /usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Signs $1 with the Zeek GPG key. Signature will be written to $1.asc.
|
||||||
|
#
|
||||||
|
# GPG agent needs to be running.
|
||||||
|
#
|
||||||
|
# Needs gpg2.
|
||||||
|
|
||||||
|
GPG=$(which gpg2)
|
||||||
|
KEY=F8CB8019
|
||||||
|
|
||||||
|
if [ "$GPG" == "" ]; then
|
||||||
|
echo "Can't find gpg2."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$#" != 1 ]; then
|
||||||
|
echo "usage: $(basename $0) <file>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! gpg-agent -q; then
|
||||||
|
echo "GPG agent not running."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
FILE=$1
|
||||||
|
|
||||||
|
$GPG --detach-sign -a -u $KEY --openpgp -o $FILE.asc $FILE
|
630
auxil/zeek-aux/devel-tools/update-changes
Executable file
630
auxil/zeek-aux/devel-tools/update-changes
Executable file
|
@ -0,0 +1,630 @@
|
||||||
|
#! /usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Assembles a draft CHANGES entry out of revisions committed since the last
|
||||||
|
# entry was added. The entry is prepended to the current CHANGES file, and the
|
||||||
|
# user then gets a chance to further edit it in the editor before it gets
|
||||||
|
# committed.
|
||||||
|
#
|
||||||
|
# The script also maintains and updates a VERSION file.
|
||||||
|
#
|
||||||
|
# If the script finds a file called .update-changes.cfg it sources it at the
|
||||||
|
# beginning. That script can define a function "new_version_hook" that will be
|
||||||
|
# called with the new version number. It may use any of the replace_version_*
|
||||||
|
# functions defined below to update other files as necessary.
|
||||||
|
#
|
||||||
|
# If $1 is given, it's interpreted as a release version and a corresponding
|
||||||
|
# tag is created.
|
||||||
|
#
|
||||||
|
# To start using update-changes in a new project, proceed as follows:
|
||||||
|
#
|
||||||
|
# (1) Run "update-changes -I". This will initialize the CHANGES file and, if
|
||||||
|
# needed, establish suitable git tags that update-changes requires in order
|
||||||
|
# to start enumerating commits after a release. You can also prepare the
|
||||||
|
# initial version number in the VERSION file if you prefer that approach.
|
||||||
|
#
|
||||||
|
# (2) If you're planning to use an .update-changes.cfg file, add it as well as
|
||||||
|
# any corresponding changes it requires. Continue regular development, and
|
||||||
|
# when ready, run update-changes to reflect the first actual changeset in
|
||||||
|
# the CHANGES file.
|
||||||
|
#
|
||||||
|
file_changes="CHANGES" # The CHANGES file.
|
||||||
|
file_version="VERSION" # The VERSION file.
|
||||||
|
file_config=".update-changes.cfg" # This will be sourced if available.
|
||||||
|
new_version_hook="new_version_hook" # Function that will be called with new version number.
|
||||||
|
new_commit_msg="Updating CHANGES and VERSION." # Commit message when creating a new commit.
|
||||||
|
init_commit_msg="Starting CHANGES." # Commit message when we initialize CHANGES
|
||||||
|
show_authors=1 # Include author names with commit.
|
||||||
|
|
||||||
|
# The command line used to generate a revision's version string, such as
|
||||||
|
# v1.0.0-23-gabcdef. This relies on tags to work, which update-changes checks
|
||||||
|
# for. By default this only finds annotated tags; to allow lightweight ones as
|
||||||
|
# well, add --tags.
|
||||||
|
git_describe="git describe --tags" # {rev} will be added.
|
||||||
|
|
||||||
|
# The command line used to generate a revision's date. The revision will be
|
||||||
|
# appended. Not used with Zeek-style CHANGES file.
|
||||||
|
git_rev_date="git show -s --pretty=tformat:%ci"
|
||||||
|
|
||||||
|
# The command line used to generate the list of revisions between old and new
|
||||||
|
# state.
|
||||||
|
git_rev_list="git rev-list --topo-order HEAD" # ^{past-rev} will be added.
|
||||||
|
|
||||||
|
# The command line used to show the one-line summary of a revision before
|
||||||
|
# editing.
|
||||||
|
git_rev_summary="git show -s '--pretty=tformat: %h | %aN | %s'" # {rev} will be added.
|
||||||
|
|
||||||
|
# The command line used to get a revision's author.
|
||||||
|
git_author="git show -s --pretty=format:%aN" # {rev} will be added.
|
||||||
|
git_author_email="git show -s --pretty=format:%aE" # {rev} will be added.
|
||||||
|
|
||||||
|
# The command line used to get a revision's message.
|
||||||
|
git_msg=default_format_msg # {rev} will be added.
|
||||||
|
|
||||||
|
# Portable access to ERE, see e.g. https://unix.stackexchange.com/a/131940
|
||||||
|
if [ $(uname) == "Linux" ]; then
|
||||||
|
sed="sed -r"
|
||||||
|
else
|
||||||
|
sed="sed -E"
|
||||||
|
fi
|
||||||
|
|
||||||
|
function usage {
|
||||||
|
echo "usage: $(basename $0) [options]"
|
||||||
|
echo
|
||||||
|
echo " -p <rev> Explicitly name the past revision to compare with."
|
||||||
|
echo " -R <tag> Tag the current revision as a release. Update VERSION to use that."
|
||||||
|
echo " -B <tag> Tag the current revision as a beta release. Update VERSION to use that."
|
||||||
|
echo " -r Tag the current revision as a release, using the next point version as version tag."
|
||||||
|
echo " -I Initialize a new, initially empty CHANGES file."
|
||||||
|
echo " -c Check whether CHANGES is up to date."
|
||||||
|
echo " -n Do not amend the HEAD commit when feasible, create a new one."
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Takes a version string as input and turns it into a Python-styled one. For
|
||||||
|
# example, input "1.2-23" becomes "1.2.dev23". Other formats remain
|
||||||
|
# unchanged. See: https://peps.python.org/pep-0440/#version-scheme
|
||||||
|
function pythonic_version {
|
||||||
|
echo "$1" | $sed "s#-#.dev#"
|
||||||
|
}
|
||||||
|
|
||||||
|
### Functions that can be used to replace version strings in other files.
|
||||||
|
### To use them, create a file $file_config and define a function
|
||||||
|
### "new_version_hook" in there that does whatever is necessary, like calling
|
||||||
|
### any of these.
|
||||||
|
|
||||||
|
# Function that looks for lines of the form 'VERSION="1.2.3"' in $1. It will
|
||||||
|
# replace the version number with $2 and then git-adds the change.
|
||||||
|
function replace_version_in_script {
|
||||||
|
file=$1
|
||||||
|
version=$2
|
||||||
|
|
||||||
|
cat $file | $sed "s#^([[:blank:]]*VERSION[[:blank:]]*=[[:blank:]]*)\"([0-9.-]+)\"#\1\"$version\"#g" >$file.tmp
|
||||||
|
cat $file.tmp >$file
|
||||||
|
rm -f $file.tmp
|
||||||
|
git add $file
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function that looks for lines of the form '.. |version| replace:: 0.3' in $1.
|
||||||
|
# It will replace the version number with $2 and then git-adds the change.
|
||||||
|
function replace_version_in_rst {
|
||||||
|
file=$1
|
||||||
|
version=$2
|
||||||
|
|
||||||
|
cat $file | $sed "s#^([[:blank:]]*\.\.[[:blank:]]*\|version\|[[:blank:]]*replace::[[:blank:]]*)([0-9a-zA-Z.-]+)#\1$version#g" >$file.tmp
|
||||||
|
cat $file.tmp >$file
|
||||||
|
rm -f $file.tmp
|
||||||
|
git add $file
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function that checks file $1 for lines starting with 'version =
|
||||||
|
# "<version>"', where the version string can be of release form (e.g. "1.2.3")
|
||||||
|
# or a development one, expressed as "1.2-23" or the Python-styled "1.2.dev23".
|
||||||
|
# It will replace the version number with a Python-styled form of $2, then
|
||||||
|
# git-add the change.
|
||||||
|
function replace_version_in_setup_py {
|
||||||
|
file=$1
|
||||||
|
version=$(pythonic_version $2)
|
||||||
|
|
||||||
|
# The version string can be a sequence of digits and dots, optionally
|
||||||
|
# followed by either "-" or ".dev" plus at least one digit.
|
||||||
|
cat $file | $sed "s#^([[:blank:]]*version[[:blank:]]*=[[:blank:]]*)\"[0-9.]+((-|\.dev)[0-9]+)?\"#\1\"$version\"#g" >$file.tmp
|
||||||
|
cat $file.tmp >$file
|
||||||
|
rm -f $file.tmp
|
||||||
|
git add $file
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function that checks file $1 for lines starting with '__version__ =
|
||||||
|
# "<version>"', where the version string can be of release form (e.g. "1.2.3")
|
||||||
|
# or a development one, expressed as "1.2-23" or the Python-styled "1.2.dev23".
|
||||||
|
# It will replace the version number with a Python-styled form of $2, then
|
||||||
|
# git-add the change.
|
||||||
|
function replace_version_in_python_package {
|
||||||
|
file=$1
|
||||||
|
version=$(pythonic_version $2)
|
||||||
|
|
||||||
|
# The version string can be a sequence of digits and dots, optionally
|
||||||
|
# followed by either "-" or ".dev" plus at least one digit.
|
||||||
|
cat $file | $sed "s#^([[:blank:]]*__version__[[:blank:]]*=[[:blank:]]*)\"[0-9.]+((-|\.dev)[0-9]+)?\"#\1\"$version\"#g" >$file.tmp
|
||||||
|
cat $file.tmp >$file
|
||||||
|
rm -f $file.tmp
|
||||||
|
git add $file
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function that looks for lines of the form "#define .*VERSION "0.3"", with the
|
||||||
|
# number being "version * 100". It will replace the version with $2 and then
|
||||||
|
# git-adds the change.
|
||||||
|
function replace_version_in_c_header {
|
||||||
|
file=$1
|
||||||
|
version=$2
|
||||||
|
|
||||||
|
cat $file | $sed "s#([[:blank:]]*\#define[[:blank:]]*[_A-Za-z0-9]*_VERSION[[:blank:]]*)\"[0-9.-]+\"#\1\"$version\"#g" >$file.tmp
|
||||||
|
mv $file.tmp $file
|
||||||
|
git add $file
|
||||||
|
}
|
||||||
|
|
||||||
|
# Default function for preparing commit message. This scans the message for
|
||||||
|
# GitHub issue references to include.
|
||||||
|
function default_format_msg {
|
||||||
|
if command -v gawk &>/dev/null; then
|
||||||
|
# We need gawk for the match().
|
||||||
|
git show -s --pretty=format:%B $1 |
|
||||||
|
gawk '
|
||||||
|
match($0, "([Ii]ssue|[Gg][Hh]|#)[ _-]?([0-9]+)", x) { issues[x[2]] = 1; }
|
||||||
|
{ msg = msg $0 "\n"; }
|
||||||
|
END {
|
||||||
|
if ( ! match(msg, "^GH-[0-9]+") ) {
|
||||||
|
for ( i in issues )
|
||||||
|
printf("GH-%s: ", i);
|
||||||
|
}
|
||||||
|
|
||||||
|
print msg;
|
||||||
|
}'
|
||||||
|
else
|
||||||
|
git show -s --pretty=format:%B $1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
|
function version {
|
||||||
|
rev=$1
|
||||||
|
$git_describe $rev --match "v*" 2>/dev/null | $sed 's/^v//g' | $sed 's/-g.*//g' | $sed 's/-([[:alnum:]]+)-([0-9]+)$/-\1.\2/g'
|
||||||
|
}
|
||||||
|
|
||||||
|
function start_changes_entry {
|
||||||
|
version=$1
|
||||||
|
dst=$2
|
||||||
|
|
||||||
|
if [ "$zeek_style" == "0" ]; then
|
||||||
|
date=$($git_rev_date HEAD)
|
||||||
|
printf '%s | %s\n' "$version" "$date" >>$dst
|
||||||
|
else
|
||||||
|
date=$(date)
|
||||||
|
printf '%s %s\n' "$version" "$date" >>$dst
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function add_to_changes_entry {
|
||||||
|
rev=$1
|
||||||
|
dst=$2
|
||||||
|
msg=$3
|
||||||
|
|
||||||
|
author=""
|
||||||
|
|
||||||
|
if [ "$msg" == "" ]; then
|
||||||
|
if [ "$show_authors" == "1" ]; then
|
||||||
|
author_email=$($git_author_email $rev)
|
||||||
|
author=$($git_author $rev)
|
||||||
|
|
||||||
|
if [[ "$author_email" == *@corelight.com ]]; then
|
||||||
|
author=" ($author, Corelight)"
|
||||||
|
else
|
||||||
|
author=" ($author)"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg=$($git_msg $rev)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$msg" == "" ]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if echo $msg | grep -q "^$new_commit_msg\$"; then
|
||||||
|
# Ignore our own automated commits.
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $(git show --no-patch --format='%P' "$rev" | wc -w) -gt 1 ]]; then
|
||||||
|
# Ignore merge commits, i.e., commits with more than one parent.
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo >>$dst
|
||||||
|
|
||||||
|
if [ "$zeek_style" == "0" ]; then
|
||||||
|
bullet=" *"
|
||||||
|
else
|
||||||
|
bullet="-"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -n "$msg" |
|
||||||
|
awk -v bullet="$bullet" -v author="$author" 'NR==1{printf "%s %s%s\n", bullet, $0, author; next }{printf " %s\n", $0}' |
|
||||||
|
$sed 's/[[:blank:]]*$//' >>$dst
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
function init_changes {
|
||||||
|
for rev in $(git rev-list HEAD); do
|
||||||
|
version=$(version $rev)
|
||||||
|
[ -n "$version" ] && break
|
||||||
|
done
|
||||||
|
|
||||||
|
git_version=$version
|
||||||
|
|
||||||
|
if [ "$version" == "" ] && [ -f $file_version ]; then
|
||||||
|
# git doesn't offer version info, but there's a VERSION file.
|
||||||
|
# Consider it if the user's okay with it.
|
||||||
|
version=$(cat $file_version | head -1)
|
||||||
|
if [ -n "$version" ]; then
|
||||||
|
echo "This git repo doesn't yet offer suitable version tags."
|
||||||
|
read -p "Use '$version' from $file_version? Y/n " -n 1 -r
|
||||||
|
echo
|
||||||
|
if [ -n "$REPLY" ] && [[ $REPLY != [Yy] ]]; then
|
||||||
|
version=
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$version" == "" ]; then
|
||||||
|
read -p "No initial version available, please provide one (e.g. 0.1, 1.0.0): " -r version
|
||||||
|
if [[ "$version" == v* ]]; then
|
||||||
|
# We don't need a "v" prefix here, it only exists in the git tags.
|
||||||
|
version=${version:1}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Subtle: if we're basing this CHANGES intro on a git tag, then we have a
|
||||||
|
# chicken-and-egg problem with correct numbering of the commit introducing
|
||||||
|
# CHANGES. It is itself going to be the _next_ commit. We could increment
|
||||||
|
# the git-derived version number arithmetically, but it's easier to just
|
||||||
|
# commit an empty CHANGES and then augment that below.
|
||||||
|
if [ -n "$git_version" ]; then
|
||||||
|
touch $file_changes
|
||||||
|
git add $file_changes
|
||||||
|
git commit -m "$init_commit_msg"
|
||||||
|
version=$(version HEAD)
|
||||||
|
flags="--amend"
|
||||||
|
fi
|
||||||
|
|
||||||
|
start_changes_entry $version $file_changes
|
||||||
|
echo >>$file_changes
|
||||||
|
echo " * Starting $file_changes." >>$file_changes
|
||||||
|
|
||||||
|
git add $file_changes
|
||||||
|
git commit $flags -m "$init_commit_msg"
|
||||||
|
|
||||||
|
if [ -z "$git_version" ]; then
|
||||||
|
git tag "v$version"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_last_rev {
|
||||||
|
version=$(cat $file_changes | grep -E '^[0-9a-zA-Z.-]+ *\|' | head -1 | awk '{print $1}')
|
||||||
|
|
||||||
|
if echo $version | grep -q -- '-'; then
|
||||||
|
# version is now e.g. 1.0.4-14 -- find the revision with that number.
|
||||||
|
for rev in $(git rev-list HEAD); do
|
||||||
|
v=$(version $rev)
|
||||||
|
|
||||||
|
if [ "$v" == "$version" ]; then
|
||||||
|
echo $rev
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Cannot determine revision for version $version." >/dev/stderr
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
else
|
||||||
|
# A tag.
|
||||||
|
echo "v$version"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_release_tag {
|
||||||
|
if [ "$release" != "" ]; then
|
||||||
|
git tag -d $release 2>/dev/null
|
||||||
|
git tag -a $release -m "Version tag"
|
||||||
|
echo "Tagged with new tag $release."
|
||||||
|
echo
|
||||||
|
echo "Push with: "
|
||||||
|
echo
|
||||||
|
echo " git push origin && git push origin $release"
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_beta_tag {
|
||||||
|
if [ "$beta" != "" ]; then
|
||||||
|
git tag -d $beta 2>/dev/null
|
||||||
|
git tag -a $beta -m "Beta version tag"
|
||||||
|
echo "Tagged with new tag $beta."
|
||||||
|
echo
|
||||||
|
echo "Push with: "
|
||||||
|
echo
|
||||||
|
echo " git push origin && git push origin $beta"
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_submodules {
|
||||||
|
if git submodule status --recursive | grep ^+; then
|
||||||
|
cat <<EOF
|
||||||
|
|
||||||
|
The revision recorded for the module(s) above does not
|
||||||
|
match the one currently checked out in the respective
|
||||||
|
subdirs.
|
||||||
|
|
||||||
|
Please either update or checkout the recorded revision(s).
|
||||||
|
|
||||||
|
Aborting.
|
||||||
|
EOF
|
||||||
|
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_release_version {
|
||||||
|
# If $1 is provided, return that. Otherwise look for most recent release
|
||||||
|
# version in CHANGES and increase its point version.
|
||||||
|
test -n "$1" && echo "$1" && return
|
||||||
|
old=$(cat $file_changes | grep -E '^[0-9]+\.[0-9]+\.[0-9]+(-(dev\.)?[0-9]+)? ' | cut -d ' ' -f 1 | head -1)
|
||||||
|
test -z "${old}" && echo "" && return
|
||||||
|
point=$(echo ${old} | cut -d - -f 1 | cut -d . -f 3)
|
||||||
|
point=$((${point} + 1))
|
||||||
|
new="$(echo ${old} | cut -d . -f 1-2).${point}"
|
||||||
|
echo v${new}
|
||||||
|
}
|
||||||
|
|
||||||
|
######
|
||||||
|
|
||||||
|
last_rev=""
|
||||||
|
release=""
|
||||||
|
beta=""
|
||||||
|
init=0
|
||||||
|
check=0
|
||||||
|
quiet=0
|
||||||
|
no_amends=0
|
||||||
|
|
||||||
|
while getopts "hp:rR:B:Icn" opt; do
|
||||||
|
case "$opt" in
|
||||||
|
p) last_rev="$OPTARG" ;;
|
||||||
|
R) release="$OPTARG" ;;
|
||||||
|
r)
|
||||||
|
release=$(get_release_version)
|
||||||
|
if [ -z "${release}" ]; then
|
||||||
|
echo "Cannot determine release version."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
B) beta="$OPTARG" ;;
|
||||||
|
I) init=1 ;;
|
||||||
|
c)
|
||||||
|
check=1
|
||||||
|
quiet=1
|
||||||
|
;;
|
||||||
|
n) no_amends=1 ;;
|
||||||
|
*) usage ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -e $file_config ]; then
|
||||||
|
if [ "$quiet" != "1" ]; then
|
||||||
|
echo Reading $file_config ...
|
||||||
|
fi
|
||||||
|
source ./$file_config
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$release" != "" -a "$beta" != "" ]; then
|
||||||
|
echo "Cannot tag as both beta and release."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$release" == "VERSION" ]; then
|
||||||
|
release="v$(cat VERSION)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$beta" == "VERSION" ]; then
|
||||||
|
beta="v$(cat VERSION)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
zeek_style=0 # If 1, we use a slightly different format.
|
||||||
|
|
||||||
|
if [ "$init" != "0" ]; then
|
||||||
|
if [ -e $file_changes ]; then
|
||||||
|
echo "$file_changes already exists, remove it first."
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "Initializing $file_changes ..."
|
||||||
|
init_changes
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [ ! -e $file_changes ]; then
|
||||||
|
echo "$file_changes does not exist, initialize it with '-I'."
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
# If we find this marker, it's Zeek-style CHANGES file.
|
||||||
|
grep -vq -- '-+-+-+-+-+-+-+-+-+-' $file_changes
|
||||||
|
zeek_style=$?
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$release" != "" ]; then
|
||||||
|
if ! echo $release | grep -E -q '^v[0-9]+\.[0-9]+'; then
|
||||||
|
echo "Release tag must be of the form vX.Y[.Z]"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
check_submodules
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$beta" != "" ]; then
|
||||||
|
if ! echo $beta | grep -E -q '^v[0-9]+\.[0-9]+(\.[0-9]+)?-(beta|rc)'; then
|
||||||
|
echo "Release tag must be of the form vX.Y[.Z]-(beta|rc)*"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
check_submodules
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$last_rev" == "" ]; then
|
||||||
|
last_rev=$(get_last_rev)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$last_rev" == "" ]; then
|
||||||
|
echo 'Cannot determine previous revision to compare with, specify with "-p <rev>".'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
auto_version=$(version HEAD)
|
||||||
|
|
||||||
|
if [ "$auto_version" == "" ]; then
|
||||||
|
echo "Cannot determine version, checking HEAD did not return anything."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
tmp=${file_changes}.$$.tmp
|
||||||
|
trap "rm -f $tmp" EXIT
|
||||||
|
rm -f $tmp
|
||||||
|
|
||||||
|
found=0
|
||||||
|
|
||||||
|
new_version=$auto_version
|
||||||
|
version=$(version $rev)
|
||||||
|
|
||||||
|
if [ "$version" == "" ]; then
|
||||||
|
echo "Cannot determine version for $rev."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$release" != "" ]; then
|
||||||
|
new_version=$(echo $release | sed 's/v//g')
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$beta" != "" ]; then
|
||||||
|
new_version=$(echo $beta | sed 's/v//g')
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$quiet" != "1" ]; then
|
||||||
|
echo "New version is $new_version."
|
||||||
|
echo "Listing revisions committed since $(version $last_rev) ($last_rev) ... "
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
|
||||||
|
start_changes_entry $new_version $tmp
|
||||||
|
|
||||||
|
for rev in $($git_rev_list ^$last_rev); do
|
||||||
|
|
||||||
|
version=$(version $rev)
|
||||||
|
|
||||||
|
if [ "$version" == "" ]; then
|
||||||
|
version="<no-version>"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# printf "%15s |" $version
|
||||||
|
|
||||||
|
if add_to_changes_entry $rev $tmp; then
|
||||||
|
found=1
|
||||||
|
|
||||||
|
if [ "$quiet" != "1" ]; then
|
||||||
|
eval "$git_rev_summary $rev | grep -v '^$' | cat"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$found" == "0" ]; then
|
||||||
|
if [ "$check" == "1" ]; then
|
||||||
|
echo "CHANGES is up to date."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo " None."
|
||||||
|
echo
|
||||||
|
|
||||||
|
if [ "$release" != "" -o "$beta" != "" ]; then
|
||||||
|
add_to_changes_entry head $tmp "Release $new_version."
|
||||||
|
else
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$check" == "1" ]; then
|
||||||
|
echo "CHANGES is NOT up to date."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo >>$tmp
|
||||||
|
|
||||||
|
cat $file_changes >>$tmp
|
||||||
|
|
||||||
|
# If we are ahead of origin, we can amend. If not, we need to create a new
|
||||||
|
# commit even if the user wants otherwise. If the user requested -n (no
|
||||||
|
# amendments), we skip all of this.
|
||||||
|
amend=0
|
||||||
|
|
||||||
|
if [ $no_amends == "0" ] &&
|
||||||
|
git remote | grep -q origin &&
|
||||||
|
git rev-list origin/$(git rev-parse --abbrev-ref HEAD)..HEAD | grep -q .; then
|
||||||
|
amend=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
|
||||||
|
if [ "$amend" == "0" ]; then
|
||||||
|
echo Update to $file_changes will become a new commit.
|
||||||
|
else
|
||||||
|
echo Update to $file_changes will be amended to last commit.
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo Type Enter to edit new $file_changes, or CTRL-C to abort without any modifications.
|
||||||
|
read
|
||||||
|
|
||||||
|
# Run editor.
|
||||||
|
if [ -z "$EDITOR" ]; then
|
||||||
|
EDITOR=vi
|
||||||
|
fi
|
||||||
|
eval $EDITOR $tmp
|
||||||
|
|
||||||
|
# Put changes in place.
|
||||||
|
mv $tmp $file_changes
|
||||||
|
echo "Updated $file_changes."
|
||||||
|
|
||||||
|
if [ "$file_version" != "" ]; then
|
||||||
|
echo $new_version >$file_version
|
||||||
|
echo "Updated $version to $new_version."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Call hook function if it exists.
|
||||||
|
if type $new_version_hook >/dev/null 2>&1; then
|
||||||
|
$new_version_hook $new_version
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Commit changes.
|
||||||
|
git add $file_changes $file_version
|
||||||
|
|
||||||
|
if [ "$amend" == "1" ]; then
|
||||||
|
git commit --amend
|
||||||
|
else
|
||||||
|
git commit -m "$new_commit_msg"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Updates committed."
|
||||||
|
|
||||||
|
check_release_tag
|
||||||
|
check_beta_tag
|
57
auxil/zeek-aux/devel-tools/zeek_lldb_utils.py
Normal file
57
auxil/zeek-aux/devel-tools/zeek_lldb_utils.py
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
import lldb
|
||||||
|
from ansi.color import fg
|
||||||
|
from ansi.color.fx import reset
|
||||||
|
from linereader import getline
|
||||||
|
|
||||||
|
# Cache script lines and files so that we don't have to load files repeatedly
|
||||||
|
script_lines = {}
|
||||||
|
|
||||||
|
# TODO: make this check that the thread is actually stopped and return an error if not
|
||||||
|
|
||||||
|
|
||||||
|
@lldb.command("btz")
|
||||||
|
def backtrace_zeek(debugger, command, exe_ctx, result, d):
|
||||||
|
selected_thread = exe_ctx.GetProcess().GetSelectedThread()
|
||||||
|
thread = exe_ctx.GetThread()
|
||||||
|
|
||||||
|
# I'd prefer to retrieve this from LLDB somehow, but the earlier versions
|
||||||
|
# don't have SDDebugger.GetSetting(), and I'm not really sure we could use
|
||||||
|
# the output from that anyways.
|
||||||
|
thread_format = f"{'*' if selected_thread.idx == thread.idx else ' '} thread #{thread.idx}, name = '{thread.name}', queue = {fg.green}'{thread.queue}'{reset}, stop reason = {fg.red}{thread.GetStopDescription(100)}{reset}"
|
||||||
|
print(thread_format)
|
||||||
|
|
||||||
|
selected_frame = thread.GetSelectedFrame().idx
|
||||||
|
|
||||||
|
for frame in thread.get_thread_frames():
|
||||||
|
frame_output = f" {'*' if frame.idx == selected_frame else ' '} "
|
||||||
|
frame_output += f"{frame}"
|
||||||
|
|
||||||
|
this = frame.FindVariable("this")
|
||||||
|
if this:
|
||||||
|
loc_ptr = this.GetChildMemberWithName("location")
|
||||||
|
if loc_ptr and loc_ptr.GetType().GetName() == "zeek::detail::Location *":
|
||||||
|
if loc_ptr.GetValueAsUnsigned() != 0:
|
||||||
|
loc = frame.EvaluateExpression("*(this->location)")
|
||||||
|
fname = (
|
||||||
|
loc.GetChildMemberWithName("filename").GetSummary().strip('"')
|
||||||
|
)
|
||||||
|
line_no = loc.GetChildMemberWithName(
|
||||||
|
"first_line"
|
||||||
|
).GetValueAsUnsigned()
|
||||||
|
frame_output += f"\n {fg.green}zeek script:{reset} {fname}"
|
||||||
|
|
||||||
|
fileinfo = f"{fname}:{line_no}"
|
||||||
|
if fileinfo in script_lines:
|
||||||
|
line = script_lines[fileinfo]
|
||||||
|
else:
|
||||||
|
line = getline(fname, line_no)
|
||||||
|
line = line.strip()
|
||||||
|
script_lines[fileinfo] = line
|
||||||
|
|
||||||
|
if line:
|
||||||
|
line_hdr = f"line {line_no}"
|
||||||
|
frame_output += (
|
||||||
|
f"\n {fg.green}{line_hdr: >11}:{reset} {line}"
|
||||||
|
)
|
||||||
|
|
||||||
|
print(frame_output)
|
4
auxil/zeek-aux/plugin-support/README
Normal file
4
auxil/zeek-aux/plugin-support/README
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
The init-plugin script instantiates a plugin template to provide you with a good
|
||||||
|
starting point for your next Zeek plugin. Use this only if you want to develop
|
||||||
|
a "pure" Zeek plugin -- if you're looking to start a Zeek package for the zkg
|
||||||
|
package manager, then use the "zkg create" command instead.
|
96
auxil/zeek-aux/plugin-support/init-plugin
Executable file
96
auxil/zeek-aux/plugin-support/init-plugin
Executable file
|
@ -0,0 +1,96 @@
|
||||||
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
|
function abspath {
|
||||||
|
(
|
||||||
|
cd "$1"
|
||||||
|
pwd
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
function relpath {
|
||||||
|
echo "$1" | sed "s#$(pwd)/\{0,1\}##g"
|
||||||
|
}
|
||||||
|
|
||||||
|
function lower {
|
||||||
|
echo "$1" | tr A-Z a-z
|
||||||
|
}
|
||||||
|
|
||||||
|
function upper {
|
||||||
|
echo "$1" | tr a-z A-Z
|
||||||
|
}
|
||||||
|
|
||||||
|
function init-skeleton {
|
||||||
|
for i in $(cd ${skeleton} && find * -type d); do
|
||||||
|
mkdir -p $(echo ${plugin_src}/$i)
|
||||||
|
done
|
||||||
|
|
||||||
|
for i in $(cd ${skeleton} && find * .??* -type f); do
|
||||||
|
src=${skeleton}/$i
|
||||||
|
dst=$(echo ${plugin_src}/$i)
|
||||||
|
dst=$(echo $dst | sed "s#%NS_LOWER#${plugin_ns_lower}#g")
|
||||||
|
dst=$(echo $dst | sed "s#%NAME_LOWER#${plugin_name_lower}#g")
|
||||||
|
dst=$(echo $dst | sed "s#%NS#${plugin_ns}#g")
|
||||||
|
dst=$(echo $dst | sed "s#%NAME#${plugin_name}#g")
|
||||||
|
dst=$(echo $dst | sed "s#@#/#g")
|
||||||
|
|
||||||
|
tmp=$dst.$$.tmp
|
||||||
|
|
||||||
|
mkdir -p $(dirname ${dst})
|
||||||
|
cp -p ${src} ${tmp} # Copy first to preserve permissions.
|
||||||
|
cat ${src} |
|
||||||
|
sed "s/@PLUGIN_NAME@/${plugin_name}/g" |
|
||||||
|
sed "s/@PLUGIN_NAMESPACE@/${plugin_ns}/g" |
|
||||||
|
sed "s/@PLUGIN_NAME_UPPER@/${plugin_name_upper}/g" |
|
||||||
|
sed "s/@PLUGIN_NAMESPACE_UPPER@/${plugin_ns_upper}/g" |
|
||||||
|
sed "s/@PLUGIN_NAME_LOWER@/${plugin_name_lower}/g" |
|
||||||
|
sed "s/@PLUGIN_NAMESPACE_LOWER@/${plugin_ns_lower}/g" \
|
||||||
|
>${tmp}
|
||||||
|
|
||||||
|
if [ -e ${dst} ]; then
|
||||||
|
cmp -s ${tmp} ${dst} || echo "$(relpath ${dst}) exists, not installing new version"
|
||||||
|
rm -f ${tmp}
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo Installing $(relpath ${dst}) ...
|
||||||
|
mv ${tmp} ${dst}
|
||||||
|
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
update=0
|
||||||
|
|
||||||
|
if [ "$1" == "-u" ]; then
|
||||||
|
update=1
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $# != 3 ]; then
|
||||||
|
echo "Usage: $(basename $0) [-u] <dst-dir> <namespace> <plugin name>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
dstdir=$1
|
||||||
|
|
||||||
|
if [ -e "${dstdir}" -a ${update} != 1 ]; then
|
||||||
|
echo "error: ${dstdir} already exists, use -u if you want to update skeleton files in there."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p ${dstdir}
|
||||||
|
dstdir=$(abspath ${dstdir})
|
||||||
|
|
||||||
|
basedir=$(dirname $0)
|
||||||
|
skeleton=$(abspath ${basedir})/skeleton
|
||||||
|
plugin_ns=$2
|
||||||
|
plugin_name=$3
|
||||||
|
plugin_ns_lower=$(lower $2)
|
||||||
|
plugin_name_lower=$(lower $3)
|
||||||
|
plugin_ns_upper=$(upper $2)
|
||||||
|
plugin_name_upper=$(upper $3)
|
||||||
|
plugin_src=${dstdir}
|
||||||
|
plugin_build=${dstdir}/dylib
|
||||||
|
|
||||||
|
init-skeleton
|
||||||
|
|
||||||
|
which git >/dev/null 2>&1 && (cd ${dstdir} && git init . && git add .)
|
3
auxil/zeek-aux/plugin-support/skeleton/.gitignore
vendored
Normal file
3
auxil/zeek-aux/plugin-support/skeleton/.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
build
|
||||||
|
*.log
|
||||||
|
.state
|
0
auxil/zeek-aux/plugin-support/skeleton/CHANGES
Normal file
0
auxil/zeek-aux/plugin-support/skeleton/CHANGES
Normal file
21
auxil/zeek-aux/plugin-support/skeleton/CMakeLists.txt
Normal file
21
auxil/zeek-aux/plugin-support/skeleton/CMakeLists.txt
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
cmake_minimum_required(VERSION 3.15 FATAL_ERROR)
|
||||||
|
|
||||||
|
project(ZeekPlugin@PLUGIN_NAME@)
|
||||||
|
|
||||||
|
include(ZeekPlugin)
|
||||||
|
|
||||||
|
zeek_plugin_begin(@PLUGIN_NAMESPACE@ @PLUGIN_NAME@ ${ZEEK_PLUGIN_BEGIN_OPTS})
|
||||||
|
zeek_plugin_cc(src/Plugin.cc)
|
||||||
|
zeek_plugin_bif(src/@PLUGIN_NAME_LOWER@.bif)
|
||||||
|
zeek_plugin_dist_files(README CHANGES COPYING VERSION)
|
||||||
|
zeek_plugin_scripts(scripts/__load__.zeek scripts/__preload__.zeek scripts/types.zeek
|
||||||
|
scripts/@PLUGIN_NAMESPACE@/@PLUGIN_NAME@/__load__.zeek)
|
||||||
|
zeek_plugin_end()
|
||||||
|
|
||||||
|
file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" VERSION LIMIT_COUNT 1)
|
||||||
|
|
||||||
|
if ("${PROJECT_SOURCE_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}")
|
||||||
|
# Allows building rpm/deb packages via "make package" in build dir.
|
||||||
|
include(ConfigurePackaging)
|
||||||
|
ConfigurePackaging(${VERSION})
|
||||||
|
endif ()
|
35
auxil/zeek-aux/plugin-support/skeleton/COPYING.edit-me
Normal file
35
auxil/zeek-aux/plugin-support/skeleton/COPYING.edit-me
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
###
|
||||||
|
### This is a BSD-style license. If you're happy with it, just edit
|
||||||
|
### the XXX parts below and remove this comment. Otherwise, put in
|
||||||
|
### your own license instead.
|
||||||
|
###
|
||||||
|
|
||||||
|
Copyright (c) 2018 by <XXX YOU or YOUR ORGANIZATION XXX>
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
(1) Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
(2) Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in
|
||||||
|
the documentation and/or other materials provided with the
|
||||||
|
distribution.
|
||||||
|
|
||||||
|
(3) Neither the name of <XXX YOU and/or YOUR ORGANIZATION XXX>, nor
|
||||||
|
the names of contributors may be used to endorse or promote
|
||||||
|
products derived from this software without specific prior written
|
||||||
|
permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGE.
|
29
auxil/zeek-aux/plugin-support/skeleton/Makefile
Normal file
29
auxil/zeek-aux/plugin-support/skeleton/Makefile
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
#
|
||||||
|
# Convenience Makefile providing a few common top-level targets.
|
||||||
|
#
|
||||||
|
|
||||||
|
cmake_build_dir=build
|
||||||
|
arch=`uname -s | tr A-Z a-z`-`uname -m`
|
||||||
|
|
||||||
|
all: build-it
|
||||||
|
|
||||||
|
build-it:
|
||||||
|
@test -e $(cmake_build_dir)/config.status || ./configure
|
||||||
|
-@test -e $(cmake_build_dir)/CMakeCache.txt && \
|
||||||
|
test $(cmake_build_dir)/CMakeCache.txt -ot `cat $(cmake_build_dir)/CMakeCache.txt | grep ZEEK_DIST | cut -d '=' -f 2`/build/CMakeCache.txt && \
|
||||||
|
echo Updating stale CMake cache && \
|
||||||
|
touch $(cmake_build_dir)/CMakeCache.txt
|
||||||
|
|
||||||
|
( cd $(cmake_build_dir) && make )
|
||||||
|
|
||||||
|
install:
|
||||||
|
( cd $(cmake_build_dir) && make install )
|
||||||
|
|
||||||
|
clean:
|
||||||
|
( cd $(cmake_build_dir) && make clean )
|
||||||
|
|
||||||
|
distclean:
|
||||||
|
rm -rf $(cmake_build_dir)
|
||||||
|
|
||||||
|
test:
|
||||||
|
make -C tests
|
5
auxil/zeek-aux/plugin-support/skeleton/README
Normal file
5
auxil/zeek-aux/plugin-support/skeleton/README
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
|
||||||
|
@PLUGIN_NAMESPACE@::@PLUGIN_NAME@
|
||||||
|
=================================
|
||||||
|
|
||||||
|
<Insert plugin documentation here.>
|
1
auxil/zeek-aux/plugin-support/skeleton/VERSION
Normal file
1
auxil/zeek-aux/plugin-support/skeleton/VERSION
Normal file
|
@ -0,0 +1 @@
|
||||||
|
0.1.0
|
190
auxil/zeek-aux/plugin-support/skeleton/configure
vendored
Executable file
190
auxil/zeek-aux/plugin-support/skeleton/configure
vendored
Executable file
|
@ -0,0 +1,190 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Wrapper for viewing/setting options that the plugin's CMake
|
||||||
|
# scripts will recognize.
|
||||||
|
#
|
||||||
|
# Don't edit this. Edit configure.plugin to add plugin-specific options.
|
||||||
|
#
|
||||||
|
|
||||||
|
set -e
|
||||||
|
command="$0 $*"
|
||||||
|
|
||||||
|
if [ -e $(dirname $0)/configure.plugin ]; then
|
||||||
|
# Include custom additions.
|
||||||
|
. $(dirname $0)/configure.plugin
|
||||||
|
fi
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
|
||||||
|
cat 1>&2 <<EOF
|
||||||
|
Usage: $0 [OPTIONS]
|
||||||
|
|
||||||
|
Plugin Options:
|
||||||
|
--cmake=PATH Path to CMake binary
|
||||||
|
--zeek-dist=DIR Path to Zeek source tree
|
||||||
|
--install-root=DIR Path where to install plugin into
|
||||||
|
--with-binpac=DIR Path to BinPAC installation root
|
||||||
|
--with-broker=DIR Path to Broker installation root
|
||||||
|
--with-bifcl=PATH Path to bifcl executable
|
||||||
|
--enable-debug Compile in debugging mode
|
||||||
|
--disable-cpp-tests Don't build C++ unit tests
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if type plugin_usage >/dev/null 2>&1; then
|
||||||
|
plugin_usage 1>&2
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to append a CMake cache entry definition to the
|
||||||
|
# CMakeCacheEntries variable
|
||||||
|
# $1 is the cache entry variable name
|
||||||
|
# $2 is the cache entry variable type
|
||||||
|
# $3 is the cache entry variable value
|
||||||
|
append_cache_entry() {
|
||||||
|
CMakeCacheEntries="$CMakeCacheEntries -D $1:$2=$3"
|
||||||
|
}
|
||||||
|
|
||||||
|
# set defaults
|
||||||
|
builddir=build
|
||||||
|
zeekdist=""
|
||||||
|
installroot="default"
|
||||||
|
zeek_plugin_begin_opts=""
|
||||||
|
CMakeCacheEntries=""
|
||||||
|
|
||||||
|
while [ $# -ne 0 ]; do
|
||||||
|
case "$1" in
|
||||||
|
-*=*) optarg=$(echo "$1" | sed 's/[-_a-zA-Z0-9]*=//') ;;
|
||||||
|
*) optarg= ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
--help | -h)
|
||||||
|
usage
|
||||||
|
;;
|
||||||
|
|
||||||
|
--cmake=*)
|
||||||
|
CMakeCommand=$optarg
|
||||||
|
;;
|
||||||
|
|
||||||
|
--zeek-dist=*)
|
||||||
|
zeekdist=$(cd $optarg && pwd)
|
||||||
|
;;
|
||||||
|
|
||||||
|
--install-root=*)
|
||||||
|
installroot=$optarg
|
||||||
|
;;
|
||||||
|
|
||||||
|
--with-binpac=*)
|
||||||
|
append_cache_entry BinPAC_ROOT_DIR PATH $optarg
|
||||||
|
binpac_root=$optarg
|
||||||
|
;;
|
||||||
|
|
||||||
|
--with-broker=*)
|
||||||
|
append_cache_entry BROKER_ROOT_DIR PATH $optarg
|
||||||
|
broker_root=$optarg
|
||||||
|
;;
|
||||||
|
|
||||||
|
--with-bifcl=*)
|
||||||
|
append_cache_entry BifCl_EXE PATH $optarg
|
||||||
|
;;
|
||||||
|
|
||||||
|
--enable-debug)
|
||||||
|
append_cache_entry BRO_PLUGIN_ENABLE_DEBUG BOOL true
|
||||||
|
;;
|
||||||
|
|
||||||
|
--disable-cpp-tests)
|
||||||
|
zeek_plugin_begin_opts="DISABLE_CPP_TESTS;$zeek_plugin_begin_opts"
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
if type plugin_option >/dev/null 2>&1; then
|
||||||
|
plugin_option $1 && shift && continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Invalid option '$1'. Try $0 --help to see available options."
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -z "$CMakeCommand" ]; then
|
||||||
|
# prefer cmake3 over "regular" cmake (cmake == cmake2 on RHEL)
|
||||||
|
if command -v cmake3 >/dev/null 2>&1; then
|
||||||
|
CMakeCommand="cmake3"
|
||||||
|
elif command -v cmake >/dev/null 2>&1; then
|
||||||
|
CMakeCommand="cmake"
|
||||||
|
else
|
||||||
|
echo "This plugin requires CMake, please install it first."
|
||||||
|
echo "Then you may use this script to configure the CMake build."
|
||||||
|
echo "Note: pass --cmake=PATH to use cmake in non-standard locations."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$zeekdist" ]; then
|
||||||
|
if type zeek-config >/dev/null 2>&1; then
|
||||||
|
zeek_config="zeek-config"
|
||||||
|
else
|
||||||
|
echo "Either 'zeek-config' must be in PATH or '--zeek-dist=<path>' used"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
append_cache_entry BRO_CONFIG_PREFIX PATH $(${zeek_config} --prefix)
|
||||||
|
append_cache_entry BRO_CONFIG_INCLUDE_DIR PATH $(${zeek_config} --include_dir)
|
||||||
|
append_cache_entry BRO_CONFIG_PLUGIN_DIR PATH $(${zeek_config} --plugin_dir)
|
||||||
|
append_cache_entry BRO_CONFIG_LIB_DIR PATH $(${zeek_config} --lib_dir)
|
||||||
|
append_cache_entry BRO_CONFIG_CMAKE_DIR PATH $(${zeek_config} --cmake_dir)
|
||||||
|
append_cache_entry CMAKE_MODULE_PATH PATH $(${zeek_config} --cmake_dir)
|
||||||
|
|
||||||
|
build_type=$(${zeek_config} --build_type)
|
||||||
|
|
||||||
|
if [ "$build_type" = "debug" ]; then
|
||||||
|
append_cache_entry BRO_PLUGIN_ENABLE_DEBUG BOOL true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$binpac_root" ]; then
|
||||||
|
append_cache_entry BinPAC_ROOT_DIR PATH $(${zeek_config} --binpac_root)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$broker_root" ]; then
|
||||||
|
append_cache_entry BROKER_ROOT_DIR PATH $(${zeek_config} --broker_root)
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [ ! -e "$zeekdist/zeek-path-dev.in" ]; then
|
||||||
|
echo "$zeekdist does not appear to be a valid Zeek source tree."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
append_cache_entry ZEEK_DIST PATH $zeekdist
|
||||||
|
append_cache_entry CMAKE_MODULE_PATH PATH $zeekdist/cmake
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$installroot" != "default" ]; then
|
||||||
|
mkdir -p $installroot
|
||||||
|
append_cache_entry BRO_PLUGIN_INSTALL_ROOT PATH $installroot
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$zeek_plugin_begin_opts" ]; then
|
||||||
|
append_cache_entry ZEEK_PLUGIN_BEGIN_OPTS STRING "$zeek_plugin_begin_opts"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if type plugin_addl >/dev/null 2>&1; then
|
||||||
|
plugin_addl
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Build Directory : $builddir"
|
||||||
|
echo "Zeek Source Directory : $zeekdist"
|
||||||
|
|
||||||
|
mkdir -p $builddir
|
||||||
|
cd $builddir
|
||||||
|
|
||||||
|
"$CMakeCommand" $CMakeCacheEntries ..
|
||||||
|
|
||||||
|
echo "# This is the command used to configure this build" >config.status
|
||||||
|
echo $command >>config.status
|
||||||
|
chmod u+x config.status
|
31
auxil/zeek-aux/plugin-support/skeleton/configure.plugin
Normal file
31
auxil/zeek-aux/plugin-support/skeleton/configure.plugin
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Hooks to add custom options to the configure script.
|
||||||
|
#
|
||||||
|
|
||||||
|
plugin_usage()
|
||||||
|
{
|
||||||
|
: # Do nothing
|
||||||
|
# cat <<EOF
|
||||||
|
# --with-foo=DIR Path to foo
|
||||||
|
# EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
plugin_option()
|
||||||
|
{
|
||||||
|
case "$1" in
|
||||||
|
# --with-foo=*)
|
||||||
|
# append_cache_entry FOO_DIR PATH $optarg
|
||||||
|
# return 0
|
||||||
|
# ;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
return 1;
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
plugin_addl()
|
||||||
|
{
|
||||||
|
: # Do nothing
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
#
|
||||||
|
# This is processed when a user explicitly loads the plugin's script module
|
||||||
|
# through `@load <plugin-namespace>/<plugin-name>`. Include code here that
|
||||||
|
# should execute at that point. This is the most common entry point to
|
||||||
|
# your plugin's accompanying scripts.
|
||||||
|
#
|
||||||
|
|
||||||
|
# @load ./bar
|
||||||
|
|
10
auxil/zeek-aux/plugin-support/skeleton/scripts/__load__.zeek
Normal file
10
auxil/zeek-aux/plugin-support/skeleton/scripts/__load__.zeek
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#
|
||||||
|
# This is loaded automatically at Zeek startup once the plugin gets activated
|
||||||
|
# and its BiF elements have become available. Include code here that should
|
||||||
|
# always execute unconditionally at that time.
|
||||||
|
#
|
||||||
|
# Note that often you may want your plugin's accompanying scripts not here, but
|
||||||
|
# in scripts/<plugin-namespace>/<plugin-name>/__load__.zeek. That's processed
|
||||||
|
# only on explicit `@load <plugin-namespace>/<plugin-name>`.
|
||||||
|
#
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
#
|
||||||
|
# This is loaded automatically at Zeek startup once the plugin gets activated,
|
||||||
|
# but before any of the BiFs that the plugin defines become available.
|
||||||
|
#
|
||||||
|
# This is primarily for defining types that BiFs already depend on. If you
|
||||||
|
# need to do any other unconditional initialization, that should go into
|
||||||
|
# __load__.zeek instead.
|
||||||
|
#
|
||||||
|
|
||||||
|
@load ./types
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
|
17
auxil/zeek-aux/plugin-support/skeleton/src/Plugin.cc
Normal file
17
auxil/zeek-aux/plugin-support/skeleton/src/Plugin.cc
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
|
||||||
|
#include "Plugin.h"
|
||||||
|
|
||||||
|
namespace plugin { namespace @PLUGIN_NAMESPACE@_@PLUGIN_NAME@ { Plugin plugin; } }
|
||||||
|
|
||||||
|
using namespace plugin::@PLUGIN_NAMESPACE@_@PLUGIN_NAME@;
|
||||||
|
|
||||||
|
zeek::plugin::Configuration Plugin::Configure()
|
||||||
|
{
|
||||||
|
zeek::plugin::Configuration config;
|
||||||
|
config.name = "@PLUGIN_NAMESPACE@::@PLUGIN_NAME@";
|
||||||
|
config.description = "<Insert description>";
|
||||||
|
config.version.major = 0;
|
||||||
|
config.version.minor = 1;
|
||||||
|
config.version.patch = 0;
|
||||||
|
return config;
|
||||||
|
}
|
19
auxil/zeek-aux/plugin-support/skeleton/src/Plugin.h
Normal file
19
auxil/zeek-aux/plugin-support/skeleton/src/Plugin.h
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <zeek/plugin/Plugin.h>
|
||||||
|
|
||||||
|
namespace plugin {
|
||||||
|
namespace @PLUGIN_NAMESPACE@_@PLUGIN_NAME@ {
|
||||||
|
|
||||||
|
class Plugin : public zeek::plugin::Plugin
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
// Overridden from zeek::plugin::Plugin.
|
||||||
|
zeek::plugin::Configuration Configure() override;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern Plugin plugin;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
# @TEST-EXEC: zeek -NN @PLUGIN_NAMESPACE@::@PLUGIN_NAME@ |sed -e 's/version.*)/version)/g' >output
|
||||||
|
# @TEST-EXEC: btest-diff output
|
2
auxil/zeek-aux/plugin-support/skeleton/tests/.gitignore
vendored
Normal file
2
auxil/zeek-aux/plugin-support/skeleton/tests/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
.btest.failed.dat
|
||||||
|
.tmp
|
|
@ -0,0 +1,2 @@
|
||||||
|
@PLUGIN_NAMESPACE@::@PLUGIN_NAME@ - <Insert description> (dynamic, version)
|
||||||
|
|
3
auxil/zeek-aux/plugin-support/skeleton/tests/Makefile
Normal file
3
auxil/zeek-aux/plugin-support/skeleton/tests/Makefile
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
|
||||||
|
test:
|
||||||
|
@btest
|
13
auxil/zeek-aux/plugin-support/skeleton/tests/Scripts/diff-remove-timestamps
Executable file
13
auxil/zeek-aux/plugin-support/skeleton/tests/Scripts/diff-remove-timestamps
Executable file
|
@ -0,0 +1,13 @@
|
||||||
|
#! /usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Replace anything which looks like timestamps with XXXs (including the #start/end markers in logs).
|
||||||
|
|
||||||
|
# Get us "modern" regexps with sed.
|
||||||
|
if [ $(uname) == "Linux" ]; then
|
||||||
|
sed="sed -r"
|
||||||
|
else
|
||||||
|
sed="sed -E"
|
||||||
|
fi
|
||||||
|
|
||||||
|
$sed 's/(0\.000000)|([0-9]{9,10}\.[0-9]{2,8})/XXXXXXXXXX.XXXXXX/g' |
|
||||||
|
$sed 's/^ *#(open|close).(19|20)..-..-..-..-..-..$/#\1 XXXX-XX-XX-XX-XX-XX/g'
|
36
auxil/zeek-aux/plugin-support/skeleton/tests/Scripts/get-zeek-env
Executable file
36
auxil/zeek-aux/plugin-support/skeleton/tests/Scripts/get-zeek-env
Executable file
|
@ -0,0 +1,36 @@
|
||||||
|
#! /bin/sh
|
||||||
|
#
|
||||||
|
# BTest helper for getting values for Zeek-related environment variables.
|
||||||
|
|
||||||
|
base=$(dirname $0)
|
||||||
|
zeek_dist=$(cat ${base}/../../build/CMakeCache.txt | grep ZEEK_DIST | cut -d = -f 2)
|
||||||
|
|
||||||
|
if [ -n "${zeek_dist}" ]; then
|
||||||
|
if [ "$1" = "zeekpath" ]; then
|
||||||
|
${zeek_dist}/build/zeek-path-dev
|
||||||
|
elif [ "$1" = "zeek_plugin_path" ]; then
|
||||||
|
(cd ${base}/../.. && pwd)
|
||||||
|
elif [ "$1" = "path" ]; then
|
||||||
|
echo ${zeek_dist}/build/src:${zeek_dist}/aux/btest:${zeek_dist}/auxil/btest:${base}/:${zeek_dist}/aux/zeek-cut:${zeek_dist}/auxil/zeek-cut:$PATH
|
||||||
|
else
|
||||||
|
echo "usage: $(basename $0) <var>" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Use Zeek installation for testing. In this case zeek-config must be in PATH.
|
||||||
|
if ! which zeek-config >/dev/null; then
|
||||||
|
echo "zeek-config not found" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$1" = "zeekpath" ]; then
|
||||||
|
zeek-config --zeekpath
|
||||||
|
elif [ "$1" = "zeek_plugin_path" ]; then
|
||||||
|
(cd ${base}/../.. && pwd)
|
||||||
|
elif [ "$1" = "path" ]; then
|
||||||
|
echo ${PATH}
|
||||||
|
else
|
||||||
|
echo "usage: $(basename $0) <var>" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
17
auxil/zeek-aux/plugin-support/skeleton/tests/btest.cfg
Normal file
17
auxil/zeek-aux/plugin-support/skeleton/tests/btest.cfg
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
[btest]
|
||||||
|
TestDirs = @PLUGIN_NAME_LOWER@
|
||||||
|
TmpDir = %(testbase)s/.tmp
|
||||||
|
BaselineDir = %(testbase)s/Baseline
|
||||||
|
IgnoreDirs = .svn CVS .tmp
|
||||||
|
IgnoreFiles = *.tmp *.swp #* *.trace .DS_Store
|
||||||
|
|
||||||
|
[environment]
|
||||||
|
ZEEKPATH=`%(testbase)s/Scripts/get-zeek-env zeekpath`
|
||||||
|
ZEEK_PLUGIN_PATH=`%(testbase)s/Scripts/get-zeek-env zeek_plugin_path`
|
||||||
|
ZEEK_SEED_FILE=%(testbase)s/random.seed
|
||||||
|
PATH=`%(testbase)s/Scripts/get-zeek-env path`
|
||||||
|
TZ=UTC
|
||||||
|
LC_ALL=C
|
||||||
|
TRACES=%(testbase)s/Traces
|
||||||
|
TMPDIR=%(testbase)s/.tmp
|
||||||
|
TEST_DIFF_CANONIFIER=%(testbase)s/Scripts/diff-remove-timestamps
|
21
auxil/zeek-aux/plugin-support/skeleton/tests/random.seed
Normal file
21
auxil/zeek-aux/plugin-support/skeleton/tests/random.seed
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
2983378351
|
||||||
|
1299727368
|
||||||
|
0
|
||||||
|
310447
|
||||||
|
0
|
||||||
|
1409073626
|
||||||
|
3975311262
|
||||||
|
34130240
|
||||||
|
1450515018
|
||||||
|
1466150520
|
||||||
|
1342286698
|
||||||
|
1193956778
|
||||||
|
2188527278
|
||||||
|
3361989254
|
||||||
|
3912865238
|
||||||
|
3596260151
|
||||||
|
517973768
|
||||||
|
1462428821
|
||||||
|
0
|
||||||
|
2278350848
|
||||||
|
32767
|
5
auxil/zeek-aux/rst/CMakeLists.txt
Normal file
5
auxil/zeek-aux/rst/CMakeLists.txt
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
set(rst_SRCS rst.c)
|
||||||
|
|
||||||
|
add_executable(rst ${rst_SRCS})
|
||||||
|
|
||||||
|
AddAuxInstallTarget(rst)
|
408
auxil/zeek-aux/rst/rst.c
Normal file
408
auxil/zeek-aux/rst/rst.c
Normal file
|
@ -0,0 +1,408 @@
|
||||||
|
/* Derived from traceroute, which has the following copyright:
|
||||||
|
*
|
||||||
|
* Copyright (c) 1999, 2002
|
||||||
|
* The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that: (1) source code distributions
|
||||||
|
* retain the above copyright notice and this paragraph in its entirety, (2)
|
||||||
|
* distributions including binary code include the above copyright notice and
|
||||||
|
* this paragraph in its entirety in the documentation or other materials
|
||||||
|
* provided with the distribution, and (3) all advertising materials mentioning
|
||||||
|
* features or use of this software display the following acknowledgement:
|
||||||
|
* ``This product includes software developed by the University of California,
|
||||||
|
* Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
|
||||||
|
* the University nor the names of its contributors may be used to endorse
|
||||||
|
* or promote products derived from this software without specific prior
|
||||||
|
* written permission.
|
||||||
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
|
||||||
|
* WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*/
|
||||||
|
#ifndef lint
|
||||||
|
static const char copyright[] =
|
||||||
|
"@(#) Copyright (c) 1999, 2002\nThe Regents of the University of California. All rights reserved.\n";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* need this due to linux's funny idea of a tcphdr */
|
||||||
|
#if defined(__linux__)
|
||||||
|
#define _DEFAULT_SOURCE
|
||||||
|
#define _BSD_SOURCE /* Deprecated, but still needed by older Linux. */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
|
||||||
|
#include <netinet/in_systm.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <netinet/ip.h>
|
||||||
|
#include <netinet/tcp.h>
|
||||||
|
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
/* Forwards */
|
||||||
|
void gripe(const char *, const char *);
|
||||||
|
void pgripe(const char *);
|
||||||
|
uint16_t in_cksum(register uint16_t *, register int);
|
||||||
|
int ones_complement_checksum(const void *, int, uint32_t);
|
||||||
|
int tcp_checksum(const struct ip *, const struct tcphdr *, int);
|
||||||
|
void send_pkt(int, struct in_addr, int, uint32_t, struct in_addr,
|
||||||
|
int, uint32_t, int, int, int, int, const char *);
|
||||||
|
void terminate(int, const char *, int, uint32_t, const char *,
|
||||||
|
int, uint32_t, int, int, int, int, const char *);
|
||||||
|
void usage(void);
|
||||||
|
int main(int, char **);
|
||||||
|
|
||||||
|
const char *prog_name;
|
||||||
|
|
||||||
|
void gripe(const char *fmt, const char *arg)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: ", prog_name);
|
||||||
|
fprintf(stderr, fmt, arg);
|
||||||
|
fprintf(stderr, "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void pgripe(const char *msg)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s: %s (%s)\n", prog_name, msg, strerror(errno));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Checksum routine for Internet Protocol family headers (C Version)
|
||||||
|
*/
|
||||||
|
uint16_t
|
||||||
|
in_cksum(register uint16_t *addr, register int len)
|
||||||
|
{
|
||||||
|
register int nleft = len;
|
||||||
|
register uint16_t *w = addr;
|
||||||
|
register uint16_t answer;
|
||||||
|
register int sum = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Our algorithm is simple, using a 32 bit accumulator (sum),
|
||||||
|
* we add sequential 16 bit words to it, and at the end, fold
|
||||||
|
* back all the carry bits from the top 16 bits into the lower
|
||||||
|
* 16 bits.
|
||||||
|
*/
|
||||||
|
while (nleft > 1) {
|
||||||
|
sum += *w++;
|
||||||
|
nleft -= 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* mop up an odd byte, if necessary */
|
||||||
|
if (nleft == 1)
|
||||||
|
sum += *(u_char *)w;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* add back carry outs from top 16 bits to low 16 bits
|
||||||
|
*/
|
||||||
|
sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */
|
||||||
|
sum += (sum >> 16); /* add carry */
|
||||||
|
answer = ~sum; /* truncate to 16 bits */
|
||||||
|
return (answer);
|
||||||
|
}
|
||||||
|
|
||||||
|
// - adapted from tcpdump
|
||||||
|
// Returns the ones-complement checksum of a chunk of b short-aligned bytes.
|
||||||
|
int ones_complement_checksum(const void *p, int b, uint32_t sum)
|
||||||
|
{
|
||||||
|
const uint16_t *sp = (uint16_t *) p; // better be aligned!
|
||||||
|
|
||||||
|
b /= 2; // convert to count of short's
|
||||||
|
|
||||||
|
/* No need for endian conversions. */
|
||||||
|
while ( --b >= 0 )
|
||||||
|
sum += *sp++;
|
||||||
|
|
||||||
|
while ( sum > 0xffff )
|
||||||
|
sum = (sum & 0xffff) + (sum >> 16);
|
||||||
|
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tcp_checksum(const struct ip *ip, const struct tcphdr *tp, int len)
|
||||||
|
{
|
||||||
|
int tcp_len = tp->th_off * 4 + len;
|
||||||
|
uint32_t sum = 0;
|
||||||
|
|
||||||
|
// There's a weird bug in some versions of GCC where building with -O2 or
|
||||||
|
// higher will cause the initialization here to get optimized away, and
|
||||||
|
// lead to the compiler warning that this variable is used uninitialized.
|
||||||
|
// Using 'volatile' here short-circuits that optimization and fixes the
|
||||||
|
// warning.
|
||||||
|
volatile uint32_t addl_pseudo = 0;
|
||||||
|
|
||||||
|
if ( len % 2 == 1 )
|
||||||
|
// Add in pad byte.
|
||||||
|
sum = htons(((const u_char*) tp)[tcp_len - 1] << 8);
|
||||||
|
else
|
||||||
|
sum = 0;
|
||||||
|
|
||||||
|
sum = ones_complement_checksum((void*) &ip->ip_src.s_addr, 4, sum);
|
||||||
|
sum = ones_complement_checksum((void*) &ip->ip_dst.s_addr, 4, sum);
|
||||||
|
|
||||||
|
addl_pseudo = (htons(IPPROTO_TCP) << 16) | htons((unsigned short) tcp_len);
|
||||||
|
|
||||||
|
sum = ones_complement_checksum((void*) &addl_pseudo, 4, sum);
|
||||||
|
sum = ones_complement_checksum((void*) tp, tcp_len, sum);
|
||||||
|
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
void send_pkt(int s, struct in_addr from, int from_port, uint32_t from_seq,
|
||||||
|
struct in_addr to, int to_port, uint32_t to_seq,
|
||||||
|
int size, int redundancy, int delay, int flags,
|
||||||
|
const char *inject)
|
||||||
|
{
|
||||||
|
int cc;
|
||||||
|
int pktlen = 40 + size;
|
||||||
|
const int max_injection_size = 4096;
|
||||||
|
char *pkt = malloc(pktlen + max_injection_size + 1024 /* slop */);
|
||||||
|
struct ip *ip = (struct ip *) pkt;
|
||||||
|
struct tcphdr *tcp = (struct tcphdr *) &pkt[20];
|
||||||
|
|
||||||
|
if ( ! pkt )
|
||||||
|
pgripe("couldn't malloc memory");
|
||||||
|
|
||||||
|
if ( inject && *inject ) {
|
||||||
|
size = strlen(inject);
|
||||||
|
|
||||||
|
if ( size > max_injection_size )
|
||||||
|
gripe("injection text too large%s", "");
|
||||||
|
|
||||||
|
pktlen = 40 + size;
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(pkt, 0, pktlen);
|
||||||
|
|
||||||
|
ip->ip_v = IPVERSION;
|
||||||
|
ip->ip_len = pktlen; /* on FreeBSD, don't use htons(); YMMV */
|
||||||
|
ip->ip_off = 0;
|
||||||
|
ip->ip_src = from;
|
||||||
|
ip->ip_dst = to;
|
||||||
|
ip->ip_hl = 5;
|
||||||
|
ip->ip_p = IPPROTO_TCP;
|
||||||
|
ip->ip_ttl = 255;
|
||||||
|
ip->ip_id = 0;
|
||||||
|
|
||||||
|
ip->ip_sum = in_cksum((uint16_t *) ip, sizeof(*ip));
|
||||||
|
|
||||||
|
if (ip->ip_sum == 0)
|
||||||
|
ip->ip_sum = 0xffff;
|
||||||
|
|
||||||
|
tcp->th_sport = htons(from_port);
|
||||||
|
tcp->th_dport = htons(to_port);
|
||||||
|
tcp->th_seq = htonl(from_seq);
|
||||||
|
tcp->th_ack = htonl(to_seq);
|
||||||
|
tcp->th_off = 5;
|
||||||
|
tcp->th_flags = flags;
|
||||||
|
tcp->th_win = 0;
|
||||||
|
tcp->th_urp = 0;
|
||||||
|
tcp->th_sum = 0;
|
||||||
|
|
||||||
|
if ( inject && *inject ) {
|
||||||
|
char *payload = &pkt[40];
|
||||||
|
strcpy(payload, inject);
|
||||||
|
|
||||||
|
} else if ( size > 0 )
|
||||||
|
{
|
||||||
|
const char *fill_string =
|
||||||
|
(inject && *inject) ? inject : "BRO-RST\n";
|
||||||
|
char *payload = &pkt[40];
|
||||||
|
int n = strlen(fill_string);
|
||||||
|
int i;
|
||||||
|
for ( i = size; i > n + 1; i -= n )
|
||||||
|
{
|
||||||
|
strcpy(payload, fill_string);
|
||||||
|
payload += n;
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( ; i > 0; --i )
|
||||||
|
*(payload++) = '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
tcp->th_sum = ~tcp_checksum(ip, tcp, size);
|
||||||
|
|
||||||
|
while ( redundancy-- > 0 )
|
||||||
|
{
|
||||||
|
cc = send(s, (char *) ip, pktlen, 0);
|
||||||
|
if (cc < 0 || cc != pktlen)
|
||||||
|
pgripe("problem in sendto()");
|
||||||
|
usleep(delay * 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
free(pkt);
|
||||||
|
}
|
||||||
|
|
||||||
|
void terminate(int s, const char *from_addr, int from_port, uint32_t from_seq,
|
||||||
|
const char *to_addr, int to_port, uint32_t to_seq,
|
||||||
|
int num, int redundancy, int stride, int delay,
|
||||||
|
const char *inject)
|
||||||
|
{
|
||||||
|
struct sockaddr_in where_from, where_to;
|
||||||
|
struct sockaddr_in *from = (struct sockaddr_in *) &where_from;
|
||||||
|
struct sockaddr_in *to = (struct sockaddr_in *) &where_to;
|
||||||
|
|
||||||
|
memset(from, 0, sizeof(*from));
|
||||||
|
memset(to, 0, sizeof(*to));
|
||||||
|
#ifdef SIN_LEN
|
||||||
|
from->sin_len = to->sin_len = sizeof(*to);
|
||||||
|
#endif /* SIN_LEN */
|
||||||
|
from->sin_family = to->sin_family = AF_INET;
|
||||||
|
|
||||||
|
if ( inet_aton(from_addr, (struct in_addr *) &from->sin_addr) == 0 )
|
||||||
|
gripe("bad from address %s", from_addr);
|
||||||
|
if ( inet_aton(to_addr, (struct in_addr *) &to->sin_addr) == 0 )
|
||||||
|
gripe("bad to address %s", to_addr);
|
||||||
|
|
||||||
|
if ( connect(s, (struct sockaddr *) &where_to, sizeof(where_to)) < 0 )
|
||||||
|
pgripe("can't connect");
|
||||||
|
|
||||||
|
while ( num-- > 0 )
|
||||||
|
{
|
||||||
|
send_pkt(s, from->sin_addr, from_port, from_seq,
|
||||||
|
to->sin_addr, to_port, to_seq, 0, redundancy, delay,
|
||||||
|
(*inject ? 0 : TH_RST) | TH_ACK, inject);
|
||||||
|
|
||||||
|
if ( num > 0 && stride > 1 )
|
||||||
|
send_pkt(s, from->sin_addr, from_port, from_seq,
|
||||||
|
to->sin_addr, to_port, to_seq, stride,
|
||||||
|
redundancy, delay, TH_ACK, inject);
|
||||||
|
|
||||||
|
from_seq += stride;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void usage()
|
||||||
|
{
|
||||||
|
#if defined(__linux__)
|
||||||
|
fprintf(stderr, "%s [-R] [-I text-to-inject] [-i interface] [-d delay-msec] [-n num] [-r redundancy] [-s stride] from_addr from_port from_seq to_addr to_port to_seq\n", prog_name);
|
||||||
|
#else
|
||||||
|
fprintf(stderr, "%s [-R] [-I text-to-inject] [-d delay-msec] [-n num] [-r redundancy] [-s stride] from_addr from_port from_seq to_addr to_port to_seq\n", prog_name);
|
||||||
|
#endif
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
extern char* optarg;
|
||||||
|
extern int optind, opterr;
|
||||||
|
const char *from_addr, *to_addr;
|
||||||
|
char inject[8192];
|
||||||
|
int from_port, to_port;
|
||||||
|
uint32_t from_seq, to_seq;
|
||||||
|
int delay = 0.0;
|
||||||
|
int redundancy = 1;
|
||||||
|
int num = 1;
|
||||||
|
int stride = 1;
|
||||||
|
int reverse = 0;
|
||||||
|
int s;
|
||||||
|
int on = 1;
|
||||||
|
int op;
|
||||||
|
|
||||||
|
prog_name = argv[0];
|
||||||
|
|
||||||
|
opterr = 0;
|
||||||
|
|
||||||
|
inject[0] = 0;
|
||||||
|
|
||||||
|
#if defined(__linux__)
|
||||||
|
char *interface = NULL;
|
||||||
|
|
||||||
|
while ( (op = getopt(argc, argv, "RI:i:d:n:r:s:")) != EOF )
|
||||||
|
#else
|
||||||
|
while ( (op = getopt(argc, argv, "RI:d:n:r:s:")) != EOF )
|
||||||
|
#endif
|
||||||
|
switch ( op ) {
|
||||||
|
case 'R':
|
||||||
|
reverse = 1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'I':
|
||||||
|
{
|
||||||
|
char *ap = optarg;
|
||||||
|
char *ip;
|
||||||
|
for ( ip = inject; *ap; ++ip, ++ap ) {
|
||||||
|
if ( ap[0] == '\\' && ap[1] == 'n' )
|
||||||
|
*ip = '\n', ++ap;
|
||||||
|
else
|
||||||
|
*ip = *ap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
#if defined(__linux__)
|
||||||
|
case 'i':
|
||||||
|
interface = optarg;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
case 'd':
|
||||||
|
delay = atoi(optarg);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'n':
|
||||||
|
num = atoi(optarg);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'r':
|
||||||
|
redundancy = atoi(optarg);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 's':
|
||||||
|
stride = atoi(optarg);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
usage();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( argc - optind != 6 )
|
||||||
|
usage();
|
||||||
|
|
||||||
|
s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
|
||||||
|
if ( s < 0 )
|
||||||
|
pgripe("couldn't create raw socket");
|
||||||
|
|
||||||
|
if ( setuid(getuid()) )
|
||||||
|
pgripe("couldn't lower privileges");
|
||||||
|
|
||||||
|
if ( setsockopt(s, 0, IP_HDRINCL, (char *) &on, sizeof(on)) < 0 )
|
||||||
|
pgripe("can't turn on IP_HDRINCL");
|
||||||
|
|
||||||
|
#if defined(__linux__)
|
||||||
|
if ( interface ){
|
||||||
|
if ( setsockopt(s, SOL_SOCKET, SO_BINDTODEVICE, interface, strlen(interface)) < 0 )
|
||||||
|
pgripe("can't set interface");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
from_addr = argv[optind++];
|
||||||
|
from_port = atoi(argv[optind++]);
|
||||||
|
from_seq = strtoul(argv[optind++], 0, 10);
|
||||||
|
|
||||||
|
to_addr = argv[optind++];
|
||||||
|
to_port = atoi(argv[optind++]);
|
||||||
|
to_seq = strtoul(argv[optind++], 0, 10);
|
||||||
|
|
||||||
|
if ( reverse )
|
||||||
|
terminate(s, to_addr, to_port, to_seq,
|
||||||
|
from_addr, from_port, from_seq,
|
||||||
|
num, redundancy, stride, delay, inject);
|
||||||
|
else
|
||||||
|
terminate(s, from_addr, from_port, from_seq,
|
||||||
|
to_addr, to_port, to_seq,
|
||||||
|
num, redundancy, stride, delay, inject);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
3
auxil/zeek-aux/testing/.gitignore
vendored
Normal file
3
auxil/zeek-aux/testing/.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
.btest.failed.dat
|
||||||
|
diag.log
|
||||||
|
.tmp
|
|
@ -0,0 +1,5 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
#define ZEEK_VERSION "1.0.0-2" /* with comment */
|
||||||
|
#define ZEEK_VERSION "1.0.0-2" /* with comment */
|
||||||
|
#define FOO_VERSION "1.0.0-2" // another comment
|
||||||
|
...
|
|
@ -0,0 +1,7 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
__version__ = "1.0.0.dev2", # with comment
|
||||||
|
__version__ = "1.0.0.dev2", # another comment
|
||||||
|
__version__ = "1.0.0.dev2", # Python style
|
||||||
|
__version__ = "0.0.1.nope" # should not change
|
||||||
|
version = "0.0.1" # should not change
|
||||||
|
print('Additional change')
|
|
@ -0,0 +1,7 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
.. |version| replace:: 1.0.0-2
|
||||||
|
.. |version| replace:: 1.0.0-2
|
||||||
|
.. |version| replace:: 1.0.0-2
|
||||||
|
.. |version| replace:: 1.0.0-2
|
||||||
|
.. |version| replace:: 1.0.0-2
|
||||||
|
...
|
|
@ -0,0 +1,8 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
VERSION="1.0.0-2"
|
||||||
|
VERSION="1.0.0-2"
|
||||||
|
VERSION="1.0.0-2"
|
||||||
|
VERSION="1.0.0-2"
|
||||||
|
VERSION = "1.0.0-2" # with some comment
|
||||||
|
VERSION = "2.0.0-nope" # with some comment
|
||||||
|
...
|
|
@ -0,0 +1,8 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
version = "1.0.0.dev2", # short
|
||||||
|
version = "1.0.0.dev2", # with dev update
|
||||||
|
version = "1.0.0.dev2", # long
|
||||||
|
version = "1.0.0.dev2", # long with dev update
|
||||||
|
version = "1.0.0.dev2", # Python style
|
||||||
|
version = "0.0.1.nope" # should not change, invalid suffix
|
||||||
|
print('Additional change')
|
|
@ -0,0 +1,2 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
zeek-cut: bad log header (missing #fields line)
|
|
@ -0,0 +1,6 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
CjhGID4nQcgTWjvg4c tcp
|
||||||
|
CCvvfg3TEfuqmmG4bh tcp
|
||||||
|
CsRx2w45OKnoww6xl4 tcp
|
||||||
|
CRJuHdVW0XPVINV8a tcp
|
||||||
|
CXWv6p3arKYeMETxOg tcp
|
|
@ -0,0 +1,2 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
zeek-cut: bad log header (invalid #separator line)
|
|
@ -0,0 +1,6 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
zeek-cut: bad log header (invalid #separator line)
|
7
auxil/zeek-aux/testing/Baseline/zeek-cut.columns/all
Normal file
7
auxil/zeek-aux/testing/Baseline/zeek-cut.columns/all
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
1329327783.316897 CjhGID4nQcgTWjvg4c 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49186 2001:470:4867:99::21
|
||||||
|
1329327786.524332 CCvvfg3TEfuqmmG4bh 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49187 2001:470:4867:99::21
|
||||||
|
1329327787.289095 CsRx2w45OKnoww6xl4 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49188 2001:470:4867:99::21
|
||||||
|
1329327795.571921 CRJuHdVW0XPVINV8a 2001:470:4867:99::21 55785 2001:470:1f11:81f:c999:d94:aa7c:2e3e
|
||||||
|
1329327777.822004 CXWv6p3arKYeMETxOg 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49185 2001:470:4867:99::21
|
||||||
|
1329327800.017649 CPbrpk1qSsw6ESzHV4 2001:470:4867:99::21 55647 2001:470:1f11:81f:c999:d94:aa7c:2e3e
|
|
@ -0,0 +1,11 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
1329843175.736107 CjhGID4nQcgTWjvg4c
|
||||||
|
1329843179.871641 CCvvfg3TEfuqmmG4bh
|
||||||
|
1329843194.151526 CsRx2w45OKnoww6xl4
|
||||||
|
1329843197.783443 CRJuHdVW0XPVINV8a
|
||||||
|
1329843161.968492 CXWv6p3arKYeMETxOg
|
||||||
|
1329843175.736107 CjhGID4nQcgTWjvg4c
|
||||||
|
1329843179.871641 CCvvfg3TEfuqmmG4bh
|
||||||
|
1329843194.151526 CsRx2w45OKnoww6xl4
|
||||||
|
1329843197.783443 CRJuHdVW0XPVINV8a
|
||||||
|
1329843161.968492 CXWv6p3arKYeMETxOg
|
|
@ -0,0 +1,11 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
tcp CjhGID4nQcgTWjvg4c
|
||||||
|
tcp CCvvfg3TEfuqmmG4bh
|
||||||
|
tcp CsRx2w45OKnoww6xl4
|
||||||
|
tcp CRJuHdVW0XPVINV8a
|
||||||
|
tcp CXWv6p3arKYeMETxOg
|
||||||
|
tcp,CNbXUV0IZ29or3MK6
|
||||||
|
tcp,CJ8woc3c6CfBLdiyp5
|
||||||
|
tcp,CXlgj54ftP8Yc2GSnb
|
||||||
|
tcp,Czw8Gd1zEVn3Xz5x7i
|
||||||
|
tcp,Cys4aQ15qDqHzsIk3l
|
6
auxil/zeek-aux/testing/Baseline/zeek-cut.columns/one
Normal file
6
auxil/zeek-aux/testing/Baseline/zeek-cut.columns/one
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
CjhGID4nQcgTWjvg4c
|
||||||
|
CCvvfg3TEfuqmmG4bh
|
||||||
|
CsRx2w45OKnoww6xl4
|
||||||
|
CRJuHdVW0XPVINV8a
|
||||||
|
CXWv6p3arKYeMETxOg
|
|
@ -0,0 +1,12 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
CjhGID4nQcgTWjvg4c tcp
|
||||||
|
CCvvfg3TEfuqmmG4bh tcp
|
||||||
|
CsRx2w45OKnoww6xl4 tcp
|
||||||
|
CRJuHdVW0XPVINV8a tcp
|
||||||
|
CXWv6p3arKYeMETxOg tcp
|
||||||
|
CjhGID4nQcgTWjvg4c
|
||||||
|
CCvvfg3TEfuqmmG4bh
|
||||||
|
CsRx2w45OKnoww6xl4
|
||||||
|
CRJuHdVW0XPVINV8a
|
||||||
|
CXWv6p3arKYeMETxOg
|
||||||
|
CPbrpk1qSsw6ESzHV4
|
|
@ -0,0 +1,12 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
CjhGID4nQcgTWjvg4c
|
||||||
|
CCvvfg3TEfuqmmG4bh
|
||||||
|
CsRx2w45OKnoww6xl4
|
||||||
|
CRJuHdVW0XPVINV8a
|
||||||
|
CXWv6p3arKYeMETxOg
|
||||||
|
CPbrpk1qSsw6ESzHV4
|
||||||
|
CjhGID4nQcgTWjvg4c tcp
|
||||||
|
CCvvfg3TEfuqmmG4bh tcp
|
||||||
|
CsRx2w45OKnoww6xl4 tcp
|
||||||
|
CRJuHdVW0XPVINV8a tcp
|
||||||
|
CXWv6p3arKYeMETxOg tcp
|
2
auxil/zeek-aux/testing/Baseline/zeek-cut.columns/only
Normal file
2
auxil/zeek-aux/testing/Baseline/zeek-cut.columns/only
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
79.26.245.236
|
|
@ -0,0 +1,6 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
tcp CjhGID4nQcgTWjvg4c
|
||||||
|
tcp CCvvfg3TEfuqmmG4bh
|
||||||
|
tcp CsRx2w45OKnoww6xl4
|
||||||
|
tcp CRJuHdVW0XPVINV8a
|
||||||
|
tcp CXWv6p3arKYeMETxOg
|
25
auxil/zeek-aux/testing/Baseline/zeek-cut.help/show-help
Normal file
25
auxil/zeek-aux/testing/Baseline/zeek-cut.help/show-help
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
|
||||||
|
zeek-cut [options] [<columns>]
|
||||||
|
|
||||||
|
Extracts the given columns from ASCII Zeek logs on standard input, and outputs
|
||||||
|
them to standard output. If no columns are given, all are selected.
|
||||||
|
By default, zeek-cut does not include format header blocks in the output.
|
||||||
|
|
||||||
|
Example: cat conn.log | zeek-cut -d ts id.orig_h id.orig_p
|
||||||
|
|
||||||
|
-c Include the first format header block in the output.
|
||||||
|
-C Include all format header blocks in the output.
|
||||||
|
-m Include the first format header blocks in the output in minimal view.
|
||||||
|
-M Include all format header blocks in the output in minimal view.
|
||||||
|
-d Convert time values into human-readable format.
|
||||||
|
-D <fmt> Like -d, but specify format for time (see strftime(3) for syntax).
|
||||||
|
-F <ofs> Sets a different output field separator character.
|
||||||
|
-h Show help.
|
||||||
|
-n Print all fields *except* those specified.
|
||||||
|
-u Like -d, but print timestamps in UTC instead of local time.
|
||||||
|
-U <fmt> Like -D, but print timestamps in UTC instead of local time.
|
||||||
|
|
||||||
|
For time conversion option -d or -u, the format string can be specified by
|
||||||
|
setting an environment variable ZEEK_CUT_TIMEFMT.
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
uid ts
|
||||||
|
CjhGID4nQcgTWjvg4c 1329843175.736107
|
||||||
|
CCvvfg3TEfuqmmG4bh 1329843179.871641
|
||||||
|
CsRx2w45OKnoww6xl4 1329843194.151526
|
||||||
|
CRJuHdVW0XPVINV8a 1329843197.783443
|
||||||
|
CXWv6p3arKYeMETxOg 1329843161.968492
|
||||||
|
CjhGID4nQcgTWjvg4c 1329327783.316897
|
||||||
|
CCvvfg3TEfuqmmG4bh 1329327786.524332
|
||||||
|
CsRx2w45OKnoww6xl4 1329327787.289095
|
||||||
|
CRJuHdVW0XPVINV8a 1329327795.571921
|
||||||
|
CXWv6p3arKYeMETxOg 1329327777.822004
|
||||||
|
CPbrpk1qSsw6ESzHV4 1329327800.017649
|
|
@ -0,0 +1,20 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
#separator \x09
|
||||||
|
#set_separator ,
|
||||||
|
#empty_field (empty)
|
||||||
|
#unset_field -
|
||||||
|
#path conn
|
||||||
|
#open 2014-04-01-23-15-49
|
||||||
|
#fields uid ts
|
||||||
|
#types string time
|
||||||
|
CjhGID4nQcgTWjvg4c 1329843175.736107
|
||||||
|
CCvvfg3TEfuqmmG4bh 1329843179.871641
|
||||||
|
CsRx2w45OKnoww6xl4 1329843194.151526
|
||||||
|
CRJuHdVW0XPVINV8a 1329843197.783443
|
||||||
|
CXWv6p3arKYeMETxOg 1329843161.968492
|
||||||
|
CjhGID4nQcgTWjvg4c 1329327783.316897
|
||||||
|
CCvvfg3TEfuqmmG4bh 1329327786.524332
|
||||||
|
CsRx2w45OKnoww6xl4 1329327787.289095
|
||||||
|
CRJuHdVW0XPVINV8a 1329327795.571921
|
||||||
|
CXWv6p3arKYeMETxOg 1329327777.822004
|
||||||
|
CPbrpk1qSsw6ESzHV4 1329327800.017649
|
|
@ -0,0 +1,14 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
uid ts
|
||||||
|
CjhGID4nQcgTWjvg4c 1329843175.736107
|
||||||
|
CCvvfg3TEfuqmmG4bh 1329843179.871641
|
||||||
|
CsRx2w45OKnoww6xl4 1329843194.151526
|
||||||
|
CRJuHdVW0XPVINV8a 1329843197.783443
|
||||||
|
CXWv6p3arKYeMETxOg 1329843161.968492
|
||||||
|
uid ts
|
||||||
|
CjhGID4nQcgTWjvg4c 1329327783.316897
|
||||||
|
CCvvfg3TEfuqmmG4bh 1329327786.524332
|
||||||
|
CsRx2w45OKnoww6xl4 1329327787.289095
|
||||||
|
CRJuHdVW0XPVINV8a 1329327795.571921
|
||||||
|
CXWv6p3arKYeMETxOg 1329327777.822004
|
||||||
|
CPbrpk1qSsw6ESzHV4 1329327800.017649
|
|
@ -0,0 +1,13 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
uid ts
|
||||||
|
CjhGID4nQcgTWjvg4c 1329843175.736107
|
||||||
|
CCvvfg3TEfuqmmG4bh 1329843179.871641
|
||||||
|
CsRx2w45OKnoww6xl4 1329843194.151526
|
||||||
|
CRJuHdVW0XPVINV8a 1329843197.783443
|
||||||
|
CXWv6p3arKYeMETxOg 1329843161.968492
|
||||||
|
CjhGID4nQcgTWjvg4c 1329327783.316897
|
||||||
|
CCvvfg3TEfuqmmG4bh 1329327786.524332
|
||||||
|
CsRx2w45OKnoww6xl4 1329327787.289095
|
||||||
|
CRJuHdVW0XPVINV8a 1329327795.571921
|
||||||
|
CXWv6p3arKYeMETxOg 1329327777.822004
|
||||||
|
CPbrpk1qSsw6ESzHV4 1329327800.017649
|
|
@ -0,0 +1,13 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
ts uid id.orig_h id.orig_p id.resp_h id.resp_p proto service duration orig_bytes resp_bytes conn_state local_orig missed_bytes history orig_pkts orig_ip_bytes resp_pkts resp_ip_bytes tunnel_parents
|
||||||
|
1329843175.736107 CjhGID4nQcgTWjvg4c 141.142.220.235 37604 199.233.217.249 56666 tcp ftp-data 0.112432 0 342 SF - 0 ShAdfFa 4 216 4 562 (empty)
|
||||||
|
1329843179.871641 CCvvfg3TEfuqmmG4bh 141.142.220.235 59378 199.233.217.249 56667 tcp ftp-data 0.111218 0 77 SF - 0 ShAdfFa 4 216 4 297 (empty)
|
||||||
|
1329843194.151526 CsRx2w45OKnoww6xl4 199.233.217.249 61920 141.142.220.235 33582 tcp ftp-data 0.056211 342 0 SF - 0 ShADaFf 5 614 3 164 (empty)
|
||||||
|
1329843197.783443 CRJuHdVW0XPVINV8a 199.233.217.249 61918 141.142.220.235 37835 tcp ftp-data 0.056005 77 0 SF - 0 ShADaFf 5 349 3 164 (empty)
|
||||||
|
1329843161.968492 CXWv6p3arKYeMETxOg 141.142.220.235 50003 199.233.217.249 21 tcp ftp 38.055625 180 3146 SF - 0 ShAdDfFa 38 2164 25 4458 (empty)
|
||||||
|
uid id.orig_h id.orig_p id.resp_h id.resp_p proto service duration orig_bytes resp_bytes conn_state local_orig missed_bytes history orig_pkts orig_ip_bytes resp_pkts resp_ip_bytes tunnel_parents ts
|
||||||
|
CjhGID4nQcgTWjvg4c 141.142.220.235 37604 199.233.217.249 56666 tcp ftp-data 0.112432 0 342 SF - 0 ShAdfFa 4 216 4 562 (empty) 1329843175.736107
|
||||||
|
CCvvfg3TEfuqmmG4bh 141.142.220.235 59378 199.233.217.249 56667 tcp ftp-data 0.111218 0 77 SF - 0 ShAdfFa 4 216 4 297 (empty) 1329843179.871641
|
||||||
|
CsRx2w45OKnoww6xl4 199.233.217.249 61920 141.142.220.235 33582 tcp ftp-data 0.056211 342 0 SF - 0 ShADaFf 5 614 3 164 (empty) 1329843194.151526
|
||||||
|
CRJuHdVW0XPVINV8a 199.233.217.249 61918 141.142.220.235 37835 tcp ftp-data 0.056005 77 0 SF - 0 ShADaFf 5 349 3 164 (empty) 1329843197.783443
|
||||||
|
CXWv6p3arKYeMETxOg 141.142.220.235 50003 199.233.217.249 21 tcp ftp 38.055625 180 3146 SF - 0 ShAdDfFa 38 2164 25 4458 (empty) 1329843161.968492
|
|
@ -0,0 +1,13 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
ts uid
|
||||||
|
1329843175.736107 CjhGID4nQcgTWjvg4c
|
||||||
|
1329843179.871641 CCvvfg3TEfuqmmG4bh
|
||||||
|
1329843194.151526 CsRx2w45OKnoww6xl4
|
||||||
|
1329843197.783443 CRJuHdVW0XPVINV8a
|
||||||
|
1329843161.968492 CXWv6p3arKYeMETxOg
|
||||||
|
ts uid
|
||||||
|
1329843175.736107 CjhGID4nQcgTWjvg4c
|
||||||
|
1329843179.871641 CCvvfg3TEfuqmmG4bh
|
||||||
|
1329843194.151526 CsRx2w45OKnoww6xl4
|
||||||
|
1329843197.783443 CRJuHdVW0XPVINV8a
|
||||||
|
1329843161.968492 CXWv6p3arKYeMETxOg
|
|
@ -0,0 +1,13 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
proto uid
|
||||||
|
tcp CjhGID4nQcgTWjvg4c
|
||||||
|
tcp CCvvfg3TEfuqmmG4bh
|
||||||
|
tcp CsRx2w45OKnoww6xl4
|
||||||
|
tcp CRJuHdVW0XPVINV8a
|
||||||
|
tcp CXWv6p3arKYeMETxOg
|
||||||
|
proto,uid
|
||||||
|
tcp,CNbXUV0IZ29or3MK6
|
||||||
|
tcp,CJ8woc3c6CfBLdiyp5
|
||||||
|
tcp,CXlgj54ftP8Yc2GSnb
|
||||||
|
tcp,Czw8Gd1zEVn3Xz5x7i
|
||||||
|
tcp,Cys4aQ15qDqHzsIk3l
|
|
@ -0,0 +1,7 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
ts uid id.orig_h id.orig_p id.resp_h id.resp_p proto service duration orig_bytes resp_bytes conn_state local_orig missed_bytes history orig_pkts orig_ip_bytes resp_pkts resp_ip_bytes tunnel_parents
|
||||||
|
1329843175.736107 CjhGID4nQcgTWjvg4c 141.142.220.235 37604 199.233.217.249 56666 tcp ftp-data 0.112432 0 342 SF - 0 ShAdfFa 4 216 4 562 (empty)
|
||||||
|
1329843179.871641 CCvvfg3TEfuqmmG4bh 141.142.220.235 59378 199.233.217.249 56667 tcp ftp-data 0.111218 0 77 SF - 0 ShAdfFa 4 216 4 297 (empty)
|
||||||
|
1329843194.151526 CsRx2w45OKnoww6xl4 199.233.217.249 61920 141.142.220.235 33582 tcp ftp-data 0.056211 342 0 SF - 0 ShADaFf 5 614 3 164 (empty)
|
||||||
|
1329843197.783443 CRJuHdVW0XPVINV8a 199.233.217.249 61918 141.142.220.235 37835 tcp ftp-data 0.056005 77 0 SF - 0 ShADaFf 5 349 3 164 (empty)
|
||||||
|
1329843161.968492 CXWv6p3arKYeMETxOg 141.142.220.235 50003 199.233.217.249 21 tcp ftp 38.055625 180 3146 SF - 0 ShAdDfFa 38 2164 25 4458 (empty)
|
|
@ -0,0 +1,13 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
uid ts
|
||||||
|
CjhGID4nQcgTWjvg4c 1329843175.736107
|
||||||
|
CCvvfg3TEfuqmmG4bh 1329843179.871641
|
||||||
|
CsRx2w45OKnoww6xl4 1329843194.151526
|
||||||
|
CRJuHdVW0XPVINV8a 1329843197.783443
|
||||||
|
CXWv6p3arKYeMETxOg 1329843161.968492
|
||||||
|
CjhGID4nQcgTWjvg4c 1329327783.316897
|
||||||
|
CCvvfg3TEfuqmmG4bh 1329327786.524332
|
||||||
|
CsRx2w45OKnoww6xl4 1329327787.289095
|
||||||
|
CRJuHdVW0XPVINV8a 1329327795.571921
|
||||||
|
CXWv6p3arKYeMETxOg 1329327777.822004
|
||||||
|
CPbrpk1qSsw6ESzHV4 1329327800.017649
|
|
@ -0,0 +1,13 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
uid,ts
|
||||||
|
CjhGID4nQcgTWjvg4c,1329843175.736107
|
||||||
|
CCvvfg3TEfuqmmG4bh,1329843179.871641
|
||||||
|
CsRx2w45OKnoww6xl4,1329843194.151526
|
||||||
|
CRJuHdVW0XPVINV8a,1329843197.783443
|
||||||
|
CXWv6p3arKYeMETxOg,1329843161.968492
|
||||||
|
CjhGID4nQcgTWjvg4c,1329327783.316897
|
||||||
|
CCvvfg3TEfuqmmG4bh,1329327786.524332
|
||||||
|
CsRx2w45OKnoww6xl4,1329327787.289095
|
||||||
|
CRJuHdVW0XPVINV8a,1329327795.571921
|
||||||
|
CXWv6p3arKYeMETxOg,1329327777.822004
|
||||||
|
CPbrpk1qSsw6ESzHV4,1329327800.017649
|
|
@ -0,0 +1,14 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
uid ts
|
||||||
|
CjhGID4nQcgTWjvg4c 1329843175.736107
|
||||||
|
CCvvfg3TEfuqmmG4bh 1329843179.871641
|
||||||
|
CsRx2w45OKnoww6xl4 1329843194.151526
|
||||||
|
CRJuHdVW0XPVINV8a 1329843197.783443
|
||||||
|
CXWv6p3arKYeMETxOg 1329843161.968492
|
||||||
|
uid ts
|
||||||
|
CjhGID4nQcgTWjvg4c 1329327783.316897
|
||||||
|
CCvvfg3TEfuqmmG4bh 1329327786.524332
|
||||||
|
CsRx2w45OKnoww6xl4 1329327787.289095
|
||||||
|
CRJuHdVW0XPVINV8a 1329327795.571921
|
||||||
|
CXWv6p3arKYeMETxOg 1329327777.822004
|
||||||
|
CPbrpk1qSsw6ESzHV4 1329327800.017649
|
|
@ -0,0 +1,14 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
uid,ts
|
||||||
|
CjhGID4nQcgTWjvg4c,1329843175.736107
|
||||||
|
CCvvfg3TEfuqmmG4bh,1329843179.871641
|
||||||
|
CsRx2w45OKnoww6xl4,1329843194.151526
|
||||||
|
CRJuHdVW0XPVINV8a,1329843197.783443
|
||||||
|
CXWv6p3arKYeMETxOg,1329843161.968492
|
||||||
|
uid,ts
|
||||||
|
CjhGID4nQcgTWjvg4c,1329327783.316897
|
||||||
|
CCvvfg3TEfuqmmG4bh,1329327786.524332
|
||||||
|
CsRx2w45OKnoww6xl4,1329327787.289095
|
||||||
|
CRJuHdVW0XPVINV8a,1329327795.571921
|
||||||
|
CXWv6p3arKYeMETxOg,1329327777.822004
|
||||||
|
CPbrpk1qSsw6ESzHV4,1329327800.017649
|
|
@ -0,0 +1,6 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
1329843175.736107 CjhGID4nQcgTWjvg4c 141.142.220.235 37604 199.233.217.249 56666 tcp ftp-data 0.112432 0 342 SF - 0 ShAdfFa 4 216 4 562 (empty)
|
||||||
|
1329843179.871641 CCvvfg3TEfuqmmG4bh 141.142.220.235 59378 199.233.217.249 56667 tcp ftp-data 0.111218 0 77 SF - 0 ShAdfFa 4 216 4 297 (empty)
|
||||||
|
1329843194.151526 CsRx2w45OKnoww6xl4 199.233.217.249 61920 141.142.220.235 33582 tcp ftp-data 0.056211 342 0 SF - 0 ShADaFf 5 614 3 164 (empty)
|
||||||
|
1329843197.783443 CRJuHdVW0XPVINV8a 199.233.217.249 61918 141.142.220.235 37835 tcp ftp-data 0.056005 77 0 SF - 0 ShADaFf 5 349 3 164 (empty)
|
||||||
|
1329843161.968492 CXWv6p3arKYeMETxOg 141.142.220.235 50003 199.233.217.249 21 tcp ftp 38.055625 180 3146 SF - 0 ShAdDfFa 38 2164 25 4458 (empty)
|
7
auxil/zeek-aux/testing/Baseline/zeek-cut.no-options/tsv
Normal file
7
auxil/zeek-aux/testing/Baseline/zeek-cut.no-options/tsv
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
141.142.220.235 37604 199.233.217.249 56666 tcp ftp-data 0.112432 0 342 SF - 0 ShAdfFa 4 216 4 562 (empty)
|
||||||
|
141.142.220.235 59378 199.233.217.249 56667 tcp ftp-data 0.111218 0 77 SF - 0 ShAdfFa 4 216 4 297 (empty)
|
||||||
|
199.233.217.249 61920 141.142.220.235 33582 tcp ftp-data 0.056211 342 0 SF - 0 ShADaFf 5 614 3 164 (empty)
|
||||||
|
199.233.217.249 61918 141.142.220.235 37835 tcp ftp-data 0.056005 77 0 SF - 0 ShADaFf 5 349 3 164 (empty)
|
||||||
|
141.142.220.235 50003 199.233.217.249 21 tcp ftp 38.055625 180 3146 SF - 0 ShAdDfFa 38 2164 25 4458 (empty)
|
||||||
|
141.142.220.235 37604 199.233.217.249 56666 tcp ftp-data 0.112432 0 342 SF - 0 ShAdfFa 4 216 4 562 (empty)
|
||||||
|
141.142.220.235 59378 199.233.217.249 56667 tcp ftp-data 0.111218 0 77 SF - 0 ShAdfFa 4 216 4 297 (empty)
|
||||||
|
199.233.217.249 61920 141.142.220.235 33582 tcp ftp-data 0.056211 342 0 SF - 0 ShADaFf 5 614 3 164 (empty)
|
||||||
|
199.233.217.249 61918 141.142.220.235 37835 tcp ftp-data 0.056005 77 0 SF - 0 ShADaFf 5 349 3 164 (empty)
|
||||||
|
141.142.220.235 50003 199.233.217.249 21 tcp ftp 38.055625 180 3146 SF - 0 ShAdDfFa 38 2164 25 4458 (empty)
|
|
@ -0,0 +1,7 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
1329327783.316897 CjhGID4nQcgTWjvg4c 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49186 2001:470:4867:99::21
|
||||||
|
1329327786.524332 CCvvfg3TEfuqmmG4bh 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49187 2001:470:4867:99::21
|
||||||
|
1329327787.289095 CsRx2w45OKnoww6xl4 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49188 2001:470:4867:99::21
|
||||||
|
1329327795.571921 CRJuHdVW0XPVINV8a 2001:470:4867:99::21 55785 2001:470:1f11:81f:c999:d94:aa7c:2e3e
|
||||||
|
1329327777.822004 CXWv6p3arKYeMETxOg 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49185 2001:470:4867:99::21
|
||||||
|
1329327800.017649 CPbrpk1qSsw6ESzHV4 2001:470:4867:99::21 55647 2001:470:1f11:81f:c999:d94:aa7c:2e3e
|
|
@ -0,0 +1,7 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
1329327783.316897 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49186 2001:470:4867:99::21
|
||||||
|
1329327786.524332 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49187 2001:470:4867:99::21
|
||||||
|
1329327787.289095 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49188 2001:470:4867:99::21
|
||||||
|
1329327795.571921 2001:470:4867:99::21 55785 2001:470:1f11:81f:c999:d94:aa7c:2e3e
|
||||||
|
1329327777.822004 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49185 2001:470:4867:99::21
|
||||||
|
1329327800.017649 2001:470:4867:99::21 55647 2001:470:1f11:81f:c999:d94:aa7c:2e3e
|
|
@ -0,0 +1,7 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
1329327783.316897 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49186 2001:470:4867:99::21
|
||||||
|
1329327786.524332 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49187 2001:470:4867:99::21
|
||||||
|
1329327787.289095 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49188 2001:470:4867:99::21
|
||||||
|
1329327795.571921 2001:470:4867:99::21 55785 2001:470:1f11:81f:c999:d94:aa7c:2e3e
|
||||||
|
1329327777.822004 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49185 2001:470:4867:99::21
|
||||||
|
1329327800.017649 2001:470:4867:99::21 55647 2001:470:1f11:81f:c999:d94:aa7c:2e3e
|
|
@ -0,0 +1,15 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
#separator \x09
|
||||||
|
#set_separator ,
|
||||||
|
#empty_field (empty)
|
||||||
|
#unset_field -
|
||||||
|
#path test
|
||||||
|
#open 2014-04-01-23-15-51
|
||||||
|
#fields ts id.orig_h id.orig_p id.resp_h
|
||||||
|
#types time addr port addr
|
||||||
|
1329327783.316897 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49186 2001:470:4867:99::21
|
||||||
|
1329327786.524332 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49187 2001:470:4867:99::21
|
||||||
|
1329327787.289095 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49188 2001:470:4867:99::21
|
||||||
|
1329327795.571921 2001:470:4867:99::21 55785 2001:470:1f11:81f:c999:d94:aa7c:2e3e
|
||||||
|
1329327777.822004 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49185 2001:470:4867:99::21
|
||||||
|
1329327800.017649 2001:470:4867:99::21 55647 2001:470:1f11:81f:c999:d94:aa7c:2e3e
|
|
@ -0,0 +1,7 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
1329327783.316897 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49186 2001:470:4867:99::21
|
||||||
|
1329327786.524332 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49187 2001:470:4867:99::21
|
||||||
|
1329327787.289095 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49188 2001:470:4867:99::21
|
||||||
|
1329327795.571921 2001:470:4867:99::21 55785 2001:470:1f11:81f:c999:d94:aa7c:2e3e
|
||||||
|
1329327777.822004 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49185 2001:470:4867:99::21
|
||||||
|
1329327800.017649 2001:470:4867:99::21 55647 2001:470:1f11:81f:c999:d94:aa7c:2e3e
|
|
@ -0,0 +1,2 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
1329327783.316897 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49186
|
||||||
|
1329327786.524332 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49187
|
||||||
|
1329327787.289095 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49188
|
||||||
|
1329327795.571921 2001:470:4867:99::21 55785
|
||||||
|
1329327777.822004 2001:470:1f11:81f:c999:d94:aa7c:2e3e 49185
|
||||||
|
1329327800.017649 2001:470:4867:99::21 55647
|
|
@ -0,0 +1,11 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
tcp:CjhGID4nQcgTWjvg4c
|
||||||
|
tcp:CCvvfg3TEfuqmmG4bh
|
||||||
|
tcp:CsRx2w45OKnoww6xl4
|
||||||
|
tcp:CRJuHdVW0XPVINV8a
|
||||||
|
tcp:CXWv6p3arKYeMETxOg
|
||||||
|
tcp:CNbXUV0IZ29or3MK6
|
||||||
|
tcp:CJ8woc3c6CfBLdiyp5
|
||||||
|
tcp:CXlgj54ftP8Yc2GSnb
|
||||||
|
tcp:Czw8Gd1zEVn3Xz5x7i
|
||||||
|
tcp:Cys4aQ15qDqHzsIk3l
|
2
auxil/zeek-aux/testing/Baseline/zeek-cut.ofs/only-column
Normal file
2
auxil/zeek-aux/testing/Baseline/zeek-cut.ofs/only-column
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63.
|
||||||
|
79.26.245.236
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue