]> git.ipfire.org Git - thirdparty/ulogd2.git/log
thirdparty/ulogd2.git
22 months agodb: insert ipv6 addresses in the same format as ip2bin
Jeremy Sowden [Mon, 21 Aug 2023 19:42:37 +0000 (20:42 +0100)] 
db: insert ipv6 addresses in the same format as ip2bin

Move a `ULOGD_RET_BOOL` case for consistency.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
22 months agosqlite3: insert ipv6 addresses as null rather than garbage
Jeremy Sowden [Mon, 21 Aug 2023 19:42:36 +0000 (20:42 +0100)] 
sqlite3: insert ipv6 addresses as null rather than garbage

Currently, the plug-in assumes that all IP addresses are 32-bit ipv4
addresses, so ipv6 addresses get truncated and inserted as garbage.
Insert nulls instead.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
22 months agosqlite3: correct binding of ipv4 addresses and 64-bit integers
Jeremy Sowden [Mon, 21 Aug 2023 19:42:35 +0000 (20:42 +0100)] 
sqlite3: correct binding of ipv4 addresses and 64-bit integers

Hitherto we have bound ipv4 addresses as 64-bit ints and 64-bit ints as
32-bit.

Move a `ULOGD_RET_BOOL` case for consistency and fix some nearby
formatting.

Fix some nearby formatting.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
22 months agogprint, oprint: add support for printing ipv6 addresses
Jeremy Sowden [Mon, 21 Aug 2023 19:42:34 +0000 (20:42 +0100)] 
gprint, oprint: add support for printing ipv6 addresses

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
22 months agogprint, oprint: use inet_ntop to format ip addresses
Jeremy Sowden [Mon, 21 Aug 2023 19:42:33 +0000 (20:42 +0100)] 
gprint, oprint: use inet_ntop to format ip addresses

Replace hand-rolled ipv4-only formatting code in order to be able to
support ipv6 addresses.  This also changes the byte-order expected by
oprint from HBO to NBO.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
22 months agoipfix: skip non-ipv4 addresses
Jeremy Sowden [Mon, 21 Aug 2023 19:42:32 +0000 (20:42 +0100)] 
ipfix: skip non-ipv4 addresses

This plug-in expects ipv4 addresses.  Check the length of the key value
in order to filter out ipv6 addresses.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
22 months agoip2hbin: store ipv6 address as integer
Jeremy Sowden [Mon, 21 Aug 2023 19:42:31 +0000 (20:42 +0100)] 
ip2hbin: store ipv6 address as integer

By using `okey_set_u128` we keep track of the address size and
downstream plug-ins can distinguish the address family.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
22 months agoraw2packet_BASE: store ARP address values as integers
Jeremy Sowden [Mon, 21 Aug 2023 19:42:30 +0000 (20:42 +0100)] 
raw2packet_BASE: store ARP address values as integers

Keys of type `ULOGD_RET_IPADDR` may be ipv4 or ipv6.  ARP protocol
addresses are 32-bits (i.e., ipv4).  By using `okey_set_u32` we keep
track of the size and allow downstream plug-ins to handle them
correctly.

Reported-by: Robert O'Brien <robrien@foxtrot-research.com>
Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
22 months agoprintpkt, raw2packet_BASE: keep gateway address in NBO
Jeremy Sowden [Mon, 21 Aug 2023 19:42:29 +0000 (20:42 +0100)] 
printpkt, raw2packet_BASE: keep gateway address in NBO

Everywhere else ipv4 addresses are left in NBO until output.  The only
exception is the IP2HBIN filter, which is explicitly intended to convert
from NBO to HBO.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
22 months agoprintpkt: fix statement punctuator
Jeremy Sowden [Mon, 21 Aug 2023 19:42:28 +0000 (20:42 +0100)] 
printpkt: fix statement punctuator

Replace comma with semicolon.

Fixes: d4cf078cb71a ("add ukey_* function for key assignation")
Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
22 months agosrc: record length of integer key values
Jeremy Sowden [Mon, 21 Aug 2023 19:42:27 +0000 (20:42 +0100)] 
src: record length of integer key values

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
2 years agoMakefile: Create LZMA-compressed dist-files
Phil Sutter [Fri, 23 Jun 2023 14:41:29 +0000 (16:41 +0200)] 
Makefile: Create LZMA-compressed dist-files

Use a more modern alternative to bzip2.

Suggested-by: Jan Engelhardt <jengelh@inai.de>
Suggested-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Phil Sutter <phil@nwl.cc>
2 years agoulogd2: avoid use after free in unregister on global ulogd_fds linked list
Kyuwon Shim [Thu, 9 Mar 2023 01:24:47 +0000 (14:24 +1300)] 
ulogd2: avoid use after free in unregister on global ulogd_fds linked list

Invalid read of size 4
   at 0x405F60: ulogd_unregister_fd (select.c:74)
   by 0x4E4E3DF: ??? (in /usr/lib/ulogd/ulogd_inppkt_NFLOG.so)
   by 0x405003: stop_pluginstances (ulogd.c:1335)
   by 0x405003: sigterm_handler_task (ulogd.c:1383)
   by 0x405153: call_signal_handler_tasks (ulogd.c:424)
   by 0x405153: signal_channel_callback (ulogd.c:443)
   by 0x406163: ulogd_select_main (select.c:105)
   by 0x403CF3: ulogd_main_loop (ulogd.c:1070)
   by 0x403CF3: main (ulogd.c:1649)

Problem is that ulogd_inppkt_NFLOG.c::stop() calls ulogd_unregister_fd()
which does llist_del().  This llist_del may touch ->prev pointer.

As the list element is in private data, we cannot do this llist_del
from stop_pluginstances().

Therefore, the free() process moved location after finishing ulogd_unregister_fd().

Signed-off-by: Kyuwon Shim <kyuwon.shim@alliedtelesis.co.nz>
Signed-off-by: Florian Westphal <fw@strlen.de>
2 years agopcap: prevent crashes when output `FILE *` is null
Jeremy Sowden [Thu, 16 Mar 2023 11:07:54 +0000 (11:07 +0000)] 
pcap: prevent crashes when output `FILE *` is null

If ulogd2 receives a signal it will attempt to re-open the pcap output
file.  If this fails (because the permissions or ownership have changed
for example), the FILE pointer will be null and when the next packet
comes in, the null pointer will be passed to fwrite and ulogd will
crash.

Instead, assign the return value of `fopen` to a local variable, and
only close the existing stream if `fopen` succeeded.

Link: https://bugs.launchpad.net/ubuntu/+source/ulogd2/+bug/1429778
Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
2 years agopcap: simplify opening of output file
Jeremy Sowden [Thu, 16 Mar 2023 11:07:53 +0000 (11:07 +0000)] 
pcap: simplify opening of output file

Instead of statting the file, and choosing the mode with which to open
it and whether to write the PCAP header based on the result, always open
it with mode "a" and _then_ stat it.  This simplifies the flow-control
and avoids a race between statting and opening.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
2 years agobuild: fix pgsql fall-back configuration of CFLAGS
Jeremy Sowden [Tue, 13 Dec 2022 11:19:51 +0000 (11:19 +0000)] 
build: fix pgsql fall-back configuration of CFLAGS

When using mysql_config and pcap_config to configure `CFLAGS`, one
requests the actual flags:

  $mysql_config --cflags
  $pcap_config --cflags

By constrast, when using pg_config, one requests the include-directory:

  $pg_config --includedir

Therefore, the `-I` option has to be explicitly added.

Fixes: 20727ab8b9fc ("build: use pkg-config or pg_config for libpq")
Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2 years agooutput: Fix formatting of OPRINT switch.
Jeremy Sowden [Sun, 27 Nov 2022 00:22:59 +0000 (00:22 +0000)] 
output: Fix formatting of OPRINT switch.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2 years agooutput: add missing support for int64_t values
Jeremy Sowden [Sun, 27 Nov 2022 00:22:59 +0000 (00:22 +0000)] 
output: add missing support for int64_t values

Some of the output plug-ins don't handle 64-bit signed values.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2 years agofilter: IP2BIN: correct spelling of variable
Jeremy Sowden [Sun, 27 Nov 2022 00:22:58 +0000 (00:22 +0000)] 
filter: IP2BIN: correct spelling of variable

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2 years agopgsql: correct `ulog2.ip_totlen` type
Jeremy Sowden [Tue, 29 Nov 2022 21:11:27 +0000 (21:11 +0000)] 
pgsql: correct `ulog2.ip_totlen` type

The types of `ip_totlen` in the `ulog` view and the `INSERT_IP_PACKET_FULL`
function are `integer`, but the column in the `ulog2` table is `smallint`.  The
"total length" field of an IP packet is an unsigned 16-bit integer, whereas
`smallint` in PostgreSQL is a signed 16-bit integer type.  Change the type of
`ulog2.ip_totlen` to `integer`.

Link: https://bugzilla.netfilter.org/show_bug.cgi?id=1556
Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2 years agodb: fix back-log capacity checks
Jeremy Sowden [Sat, 3 Dec 2022 19:02:12 +0000 (19:02 +0000)] 
db: fix back-log capacity checks

Hitherto, when adding queries to the back-log, the memory usage has been
incremented and decremented by the size of the query structure and the
length of the SQL statement, `sizeof(struct db_stmt) + len`.  However,
when checking whether there is available capacity to add a new query,
the struct size has been ignored.  Amend the check to include the struct
size, and also account for the NULL that terminates the SQL.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2 years agoJSON: remove incorrect config value check
Jeremy Sowden [Sat, 3 Dec 2022 19:02:11 +0000 (19:02 +0000)] 
JSON: remove incorrect config value check

The `u.string` member of a config entry is an array, and so never `NULL`.
Output the device string unconditionally.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2 years agofilter: fix buffer sizes in filter plug-ins
Jeremy Sowden [Sat, 3 Dec 2022 19:02:10 +0000 (19:02 +0000)] 
filter: fix buffer sizes in filter plug-ins

Three of the filter plug-ins define arrays to hold output key values.
The arrays are sized based on the values of enums.  For example:

  enum output_keys {
    KEY_MAC_TYPE,
    KEY_MAC_PROTOCOL,
    KEY_MAC_SADDR,
    START_KEY = KEY_MAC_SADDR,
    KEY_MAC_DADDR,
    KEY_MAC_ADDR,
    MAX_KEY = KEY_MAC_ADDR,
  };

  static char hwmac_str[MAX_KEY - START_KEY][HWADDR_LENGTH];

The arrays are indexed by subtracting `START_KEY` from the enum value of
the key currently being processed: `hwmac_str[okey - START_KEY]`.
However, this means that the last key (`KEY_MAC_ADDR` in this example)
will run off the end of the array.  Increase the size of the arrays.

In the case of `IP2BIN` and `IP2HBIN`, there is no overrun, but only
because they use the wrong upper bound when looping over the keys, and
thus don't assign a value to the last key.  Correct the bound.

Also some small white-space tweaks.

Link: https://bugzilla.netfilter.org/show_bug.cgi?id=890
Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2 years agoulogd: fix parse-error check
Jeremy Sowden [Sat, 3 Dec 2022 19:02:09 +0000 (19:02 +0000)] 
ulogd: fix parse-error check

If `config_parse_file` returns `-ERRTOOLONG`, `config_errce` may be
`NULL`.  However, the calling function checks whether
`config_errce->key` is `NULL` instead.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2 years agodoc: mysql: declare MAC protocol columns unsigned
Jeremy Sowden [Sat, 5 Nov 2022 16:54:02 +0000 (16:54 +0000)] 
doc: mysql: declare MAC protocol columns unsigned

By default, MySQL smallints are signed.  This causes problems inserting packets
for ethertypes above 0x7fff, such as IPv6 (0x86dd):

  MariaDB [ulogd]> SELECT INSERT_PACKET_FULL(...,'f4:7b:09:41:7a:71','f0:2f:74:4e:b2:f3',34525,0,NULL,NULL,NULL);
                                                                                         ^^^^^

which fails as follows:

  ERROR 1264 (22003): Out of range value for column 'mac_protocol' at row 1

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2 years agobuild: bump release version to 2.0.8 ulogd-2.0.8
Pablo Neira Ayuso [Wed, 2 Nov 2022 08:47:31 +0000 (09:47 +0100)] 
build: bump release version to 2.0.8

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: if `--enable-sqlite3` is `yes`, abort if libsqlite3 is not found
Jeremy Sowden [Sun, 9 Jan 2022 11:57:53 +0000 (11:57 +0000)] 
build: if `--enable-sqlite3` is `yes`, abort if libsqlite3 is not found

If SQLITE3 support has been explicitly requested, abort if it is not
available.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: if `--enable-pgsql` is `yes`, abort if libpq is not found
Jeremy Sowden [Sun, 9 Jan 2022 11:57:52 +0000 (11:57 +0000)] 
build: if `--enable-pgsql` is `yes`, abort if libpq is not found

If PostgreSQL support has been explicitly requested, abort if it is not
available.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: if `--enable-pcap` is `yes`, abort if libpcap is not found
Jeremy Sowden [Sun, 9 Jan 2022 11:57:51 +0000 (11:57 +0000)] 
build: if `--enable-pcap` is `yes`, abort if libpcap is not found

If libpcap support has been explicitly requested, abort if it is not
available.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: if `--enable-mysql` is `yes`, abort if libmysqlclient is not found
Jeremy Sowden [Sun, 9 Jan 2022 11:57:50 +0000 (11:57 +0000)] 
build: if `--enable-mysql` is `yes`, abort if libmysqlclient is not found

If MySQL support has been explicitly requested, abort if it is not
available.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: if `--enable-dbi` is `yes`, abort if libdbi is not found
Jeremy Sowden [Sun, 9 Jan 2022 11:57:49 +0000 (11:57 +0000)] 
build: if `--enable-dbi` is `yes`, abort if libdbi is not found

If DBI support has been explicitly requested, abort if it is not
available.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: use pkg-config or pg_config for libpq
Jeremy Sowden [Sun, 9 Jan 2022 11:57:48 +0000 (11:57 +0000)] 
build: use pkg-config or pg_config for libpq

Recent versions of postgresql support pkg-config.  Use pkg-config if
available, otherwise fall back to pg_config.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: use pkg-config or pcap-config for libpcap
Jeremy Sowden [Sun, 9 Jan 2022 11:57:47 +0000 (11:57 +0000)] 
build: use pkg-config or pcap-config for libpcap

Recent versions of libpcap support pkg-config.  Older versions provide a
pcap-config script.  Use pkg-config if available, otherwise fall back to
pcap-config.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: use pkg-config or mysql_config for libmysqlclient
Jeremy Sowden [Sun, 9 Jan 2022 11:57:46 +0000 (11:57 +0000)] 
build: use pkg-config or mysql_config for libmysqlclient

Recent versions of mariadb and mysql support pkg-config.  Older versions
provide a mysql_config script.  Use pkg-config if available, otherwise
fall back to mysql_config.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: use pkg-config for libdbi
Jeremy Sowden [Sun, 9 Jan 2022 11:57:45 +0000 (11:57 +0000)] 
build: use pkg-config for libdbi

libdbi introduced pkg-config support in 0.9.0, which was released in
2013.  Use it.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: use `--enable-XYZ` options for output plugins
Jeremy Sowden [Sun, 9 Jan 2022 11:57:44 +0000 (11:57 +0000)] 
build: use `--enable-XYZ` options for output plugins

Currently, we use `AC_ARG_WITH` for output plugins.  However, this is
not consistent with the input plugins, which use `AC_ARG_ENABLE`, and in
some cases (dbi, mysql, pgsql) the macro calls in configure.ac conflict
with others in acinclude.m4.  Use `AC_ARG_ENABLE` instead and change the
name of the option for the JSON plugin from `jansson` to `json`.

Fixes: 51ba7aec8951 ("Fix automagic support of dbi, pcap and sqlite3")
Fixes: c61c05c2d050 ("configure.ac: Add --without-{mysql,pgsql}")
Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooutput: SQLITE3: remove unused variable
Jeremy Sowden [Wed, 5 Jan 2022 22:37:21 +0000 (22:37 +0000)] 
output: SQLITE3: remove unused variable

There's local variable left over from a previous tidy-up.  Remove it.

Fixes: 67b0be90f16f ("output: SQLITE3: improve mapping of fields to DB columns")
Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooutput: GPRINT: fix it with NFLOG
Pablo Neira Ayuso [Tue, 4 Jan 2022 11:17:11 +0000 (12:17 +0100)] 
output: GPRINT: fix it with NFLOG

Add ULOGD_DTYPE_RAW to GPRINT to make it work, it does not provide much
information since raw packets come with only a few fields set on.

Therefore, update example ulogd.conf.in file since BASE provides a more
complete packet dissection.

Fixes: 59a71256945d ("src: add example use of GPRINT to ulogd.conf.in configuration file")
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooutput: JSON: remove bogus check for host and port
Pablo Neira Ayuso [Mon, 3 Jan 2022 18:11:38 +0000 (19:11 +0100)] 
output: JSON: remove bogus check for host and port

struct config_entry already provides storage for the host and port
strings, .u.string is never NULL.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooutput: JSON: fix possible truncation of socket path
Pablo Neira Ayuso [Mon, 3 Jan 2022 18:11:37 +0000 (19:11 +0100)] 
output: JSON: fix possible truncation of socket path

Verify that the path is shorter than 108 bytes (maximum unix socket path).

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooutput: IPFIX: remove compiler attribute macros
Jeremy Sowden [Tue, 30 Nov 2021 10:56:00 +0000 (10:56 +0000)] 
output: IPFIX: remove compiler attribute macros

The ipfix.h header includes three macros which expand to compiler attributes.
Presumably, at some point the definitions were one branch of an if-else
preprocessor conditional where the definitions in the other branch expanded to
nothing.  This is no longer the case.  Only one of the macros (`__packed`) is
used and the raw attribute is used elsewhere in the code-base.  Remove the
macros.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooutput: JSON: optimize appending of newline to output
Jeremy Sowden [Tue, 30 Nov 2021 10:55:58 +0000 (10:55 +0000)] 
output: JSON: optimize appending of newline to output

We have `buflen` available.  We can remove `strncat` and assign the characters
directly, without traversing the whole buffer.

Fixes a compiler warning:

  logd_output_JSON.c:407:9: warning: `strncat` specified bound 1 equals source length

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooutput: JSON: fix possible leak in error-handling.
Jeremy Sowden [Tue, 30 Nov 2021 10:55:57 +0000 (10:55 +0000)] 
output: JSON: fix possible leak in error-handling.

The `realloc` extending the buffer containing the JSON to allow us to
insert a final new-line may fail.  Therefore, we need to assign the
return-value to a temporary variable or we will not able to free the
existing buffer on error.

Use the correct type for `buflen`.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooutput: JSON: increase time-stamp buffer size
Jeremy Sowden [Tue, 30 Nov 2021 10:55:56 +0000 (10:55 +0000)] 
output: JSON: increase time-stamp buffer size

The output buffer for date-times is of sufficient size provided that we
don't get oversized integer values for any of the fields, which is a
reasonable assumption.  However, the compiler complains about possible
truncation, e.g.:

  ulogd_output_JSON.c:314:65: warning: `%06u` directive output may be truncated writing between 6 and 10 bytes into a region of size between 0 and 18
  ulogd_output_JSON.c:313:25: note: `snprintf` output between 27 and 88 bytes into a destination of size 38

Fix the warnings by increasing the buffer size.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooutput: JSON: fix output of GMT offset
Jeremy Sowden [Tue, 30 Nov 2021 10:55:55 +0000 (10:55 +0000)] 
output: JSON: fix output of GMT offset

The compiler has two sets of complaints.  Firstly, `t->tm_gmtoffset` is
a `long int`, but it is being passed to `abs`, which leads to warnings
such as:

  ulogd_output_JSON.c:308:34: warning: absolute value function `abs` given an argument of type `long int` but has parameter of type `int` which may cause truncation of value

Secondly, it can't verify that the hour value derived from the offset
will in fact fit into `%02d`, thus:

  ulogd_output_JSON.c:306:37: warning: `%02d` directive output may be truncated writing between 2 and 6 bytes into a region of size 5

To remedy these, we now mod the offset by 86,400 and assign it to an `int`
before deriving the hour and minute values.

We also change the format-specifier for the hour value to `%+03d` which
causes a sign to be printed even if the value is positive, thus allowing
us not to specify the sign explicitly and to drop the `abs` call for the
hour value.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agodb: simplify initialization of ring-buffer
Jeremy Sowden [Tue, 30 Nov 2021 10:55:54 +0000 (10:55 +0000)] 
db: simplify initialization of ring-buffer

Currently, `strncpy` is used to copy the SQL statement to the ring
buffer, passing the length of the source string, which leads gcc to
complain:

  ../../util/db.c:231:25: warning: `strncpy` specified bound depends on the length of the source argument

In fact, the ring buffer is sized to be a multiple of the size of the
SQL buffer, and the SQL is simply copied multiple times at increasing
offsets, so use `strcpy` instead.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agodb: improve mapping of input-keys to DB columns
Jeremy Sowden [Tue, 30 Nov 2021 10:55:53 +0000 (10:55 +0000)] 
db: improve mapping of input-keys to DB columns

Currently, we copy the key-name to a buffer, iterate over it to replace
the full-stops with underscores, using `strchr` from the start of the
buffer on each iteration, then append the buffer to the SQL statement.

Apart from the inefficiency, `strncpy` is used to do the copies, which
leads gcc to complain:

  ../../util/db.c:118:25: warning: `strncpy` output may be truncated copying 31 bytes from a string of length 31

Furthermore, the buffer is one character too short and so there is the
possibility of overruns.

Instead, append the key-name directly to the statement using `sprintf`,
and run `strchr` from the last underscore on each iteration.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agodb: improve formatting of insert statement
Jeremy Sowden [Tue, 30 Nov 2021 10:55:52 +0000 (10:55 +0000)] 
db: improve formatting of insert statement

`sql_createstmt` contains a variable `stmt_val` which points to the end
of the SQL already written, where the next chunk should be appended.
Currently, this is assigned after every write:

  sprintf(stmt_val, ...);
  stmt_val = mi->stmt + strlen(mi->stmt);

However, since `sprintf` returns the number of bytes written, increment
`stmt_val` by the return-value of `sprintf` in order to avoid the
repeated `strlen` calls.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooutput: SQLITE3: catch errors creating SQL statement
Jeremy Sowden [Tue, 30 Nov 2021 10:55:51 +0000 (10:55 +0000)] 
output: SQLITE3: catch errors creating SQL statement

`sqlite3_createstmt` returns non-zero on error, but the return-value was
being ignored.  Change the calling code to check the return-value, log
an error message and propagate the error.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooutput: SQLITE3: improve mapping of fields to DB columns
Pablo Neira Ayuso [Mon, 3 Jan 2022 15:10:01 +0000 (16:10 +0100)] 
output: SQLITE3: improve mapping of fields to DB columns

Currently, we derive a field-name by replacing all the underscores in a
DB column-name with full-stops and use the field-name to find the
matching input-key.  However, every time we create a new insert SQL
statement, we derive the column-names by copying the field-names to a
buffer, replacing all the full-stops with underscores, and then
appending the buffer containing the column-name to the one containing
the statments.

Apart from the inefficiency, `strncpy` is used to do the copies, which
leads gcc to complain:

  ulogd_output_SQLITE3.c:234:17: warning: `strncpy` output may be truncated copying 31 bytes from a string of length 31

Instead, leave the underscores in the field-name, but copy it once to a
buffer in which the underscores are replaced and use this to find the
input-key.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooutput: SQLITE3: improve mapping of DB columns to fields
Jeremy Sowden [Tue, 30 Nov 2021 10:55:49 +0000 (10:55 +0000)] 
output: SQLITE3: improve mapping of DB columns to fields

Currently, we copy the column-name to a buffer, iterate over it to
replace the underscores with full-stops, using `strchr` from the start
of the buffer on each iteration, then copy the buffer to the field's
`name` member.

Apart from the inefficiency, `strncpy` is used to do the copies, which
leads gcc to complain:

  ulogd_output_SQLITE3.c:341:17: warning: `strncpy` output may be truncated copying 31 bytes from a string of length 31

Furthermore, the buffer is not initialized, which means that there is
also a possible buffer overrun if the column-name is too long, since
`strncpy` will not append a NUL.

Instead, copy the column-name directly to the field using `snprintf`,
and run `strchr` from the last underscore on each iteration.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooutput: SQLITE3: improve formatting of insert statement
Jeremy Sowden [Tue, 30 Nov 2021 10:55:48 +0000 (10:55 +0000)] 
output: SQLITE3: improve formatting of insert statement

`sqlite3_createstmt` contains a variable `stmt_pos` which points to the
end of the SQL already written, where the next chunk should be appended.
Currently, this is assigned after every write:

  sprintf(stmt_pos, ...);
  stmt_pos = priv->stmt + strlen(priv->stmt);

However, since `sprintf` returns the number of bytes written, increment
`stmt_pos` by the return-value of `sprintf` in order to avoid the
repeated `strlen` calls.

Pablo mangled this original patch to add this chunk at the end of this
patch (originally submitted as a conversion to use strcpy).

+       for (i = 0; i < cols - 1; i++)
+               stmt_pos += sprintf(stmt_pos, "?,");

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: bump libnetfilter_log dependency
Jeremy Sowden [Sat, 4 Dec 2021 20:56:00 +0000 (20:56 +0000)] 
build: bump libnetfilter_log dependency

Recent changes to add conntrack info to the NFLOG output plug-in rely on
symbols only present in the headers provided by libnetfilter-log v1.0.2:

    CC       ulogd_inppkt_NFLOG.lo
  ulogd_inppkt_NFLOG.c: In function 'build_ct':
  ulogd_inppkt_NFLOG.c:346:34: error: 'NFULA_CT' undeclared (first use in this function); did you mean 'NFULA_GID'?
     if (mnl_attr_get_type(attr) == NFULA_CT) {
                                    ^~~~~~~~
                                    NFULA_GID
  ulogd_inppkt_NFLOG.c:346:34: note: each undeclared identifier is reported only once for each function it appears in
  ulogd_inppkt_NFLOG.c: In function 'start':
  ulogd_inppkt_NFLOG.c:669:12: error: 'NFULNL_CFG_F_CONNTRACK' undeclared (first use in this function); did you mean 'NFULNL_CFG_F_SEQ'?
     flags |= NFULNL_CFG_F_CONNTRACK;
              ^~~~~~~~~~~~~~~~~~~~~~
              NFULNL_CFG_F_SEQ

Bump the pkg-config version accordingly.

Fixes: f6a615587a10 ("NFLOG: attach struct nf_conntrack")
Fixes: e513a04cd925 ("NFLOG: add NFULNL_CFG_F_CONNTRACK flag")
Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooutput: SQLITE3: fix memory-leak in error-handling
Jeremy Sowden [Tue, 30 Nov 2021 10:55:47 +0000 (10:55 +0000)] 
output: SQLITE3: fix memory-leak in error-handling

When mapping DB column names to input-keys, if we cannot find a key to
match a column, the newly allocated `struct field` is leaked.  Free it,
and log an error message.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooutput: SQLITE3: fix possible buffer overruns
Jeremy Sowden [Tue, 30 Nov 2021 10:55:46 +0000 (10:55 +0000)] 
output: SQLITE3: fix possible buffer overruns

There is a an off-by-one error in the size of some of the buffers used
to hold key-names.  The maximum length of a name is `ULOGD_MAX_KEYLEN`,
and so declare the buffers with size `ULOGD_MAX_KEYLEN + 1`.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooutput: PGSQL: fix non-`connstring` configuration of DB connection
Jeremy Sowden [Tue, 30 Nov 2021 10:55:45 +0000 (10:55 +0000)] 
output: PGSQL: fix non-`connstring` configuration of DB connection

In `open_db_pgsql`, we test whether various config-settings are defined
by comparing their string values to `NULL`.  However, the `u.string`
member of `struct config_entry` is an array, not a pointer, so it is
never `NULL`.  Instead, check whether the string is empty.

Use a pointer to the end of the `connstr` buffer and `sprintf`, rather
than repeated `strcat`s.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooutput: PGSQL: improve mapping of DB columns to input-keys
Jeremy Sowden [Tue, 30 Nov 2021 10:55:44 +0000 (10:55 +0000)] 
output: PGSQL: improve mapping of DB columns to input-keys

Currently, we copy the column-name to a buffer, iterate over it to
replace the underscores with full-stops, using `strchr` from the start
of the buffer on each iteration, then copy the buffer to the input-key's
`name` member.

Apart from the inefficiency, `strncpy` is used to do the copies, which
leads gcc to complain:

  ulogd_output_PGSQL.c:204:17: warning: `strncpy` output may be truncated copying 31 bytes from a string of length 31

Furthermore, the buffer is not initialized, which means that there is
also a possible buffer overrun if the column-name is too long, since
`strncpy` will not append a NUL.

Instead, copy the column-name directly to the input-key using
`snprintf`, and run `strchr` from the last underscore on each iteration.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooutput: MYSQL: improve mapping of DB columns to input-keys
Jeremy Sowden [Tue, 30 Nov 2021 10:55:43 +0000 (10:55 +0000)] 
output: MYSQL: improve mapping of DB columns to input-keys

Currently, we copy the column-name to a buffer, iterate over it to
replace the underscores with full-stops, using `strchr` from the start
of the buffer on each iteration, then copy the buffer to the input-key's
`name` member.

Apart from the inefficiency, `strncpy` is used to do the copies, which
leads gcc to complain:

  ulogd_output_MYSQL.c:149:17: warning: `strncpy` output may be truncated copying 31 bytes from a string of length 31

Furthermore, the buffer is not initialized, which means that there is
also a possible buffer overrun if the column-name is too long, since
`strncpy` will not append a NUL.

Instead, copy the column-name directly to the input-key using
`snprintf`, and run `strchr` from the last underscore on each iteration.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooutput: DBI: fix configuration of DB connection
Jeremy Sowden [Tue, 30 Nov 2021 10:55:42 +0000 (10:55 +0000)] 
output: DBI: fix configuration of DB connection

In `open_db_dbi`, we test whether various config-settings are defined
by comparing their string values to `NULL`.  However, the `u.string`
member of `struct config_entry` is an array, not a pointer, so it is
never `NULL`.  Instead, check whether the string is empty.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooutput: DBI: fix NUL-termination of escaped SQL string
Jeremy Sowden [Tue, 30 Nov 2021 10:55:41 +0000 (10:55 +0000)] 
output: DBI: fix NUL-termination of escaped SQL string

On error, `dbi_conn_quote_string_copy` returns zero.  In this case, we
need to set `*dst` to NUL.  Handle a return-value of `2` as normal
below.  `1` is never returned.

Replace `strncpy` with `memcpy`: using `strncpy` is nearly always a
mistake, and we don't need its special behaviour here.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooutput: DBI: improve mapping of DB columns to input-keys
Jeremy Sowden [Tue, 30 Nov 2021 10:55:40 +0000 (10:55 +0000)] 
output: DBI: improve mapping of DB columns to input-keys

Currently, we copy the column-name to a buffer, iterate over it to
replace the underscores with full-stops, using `strchr` from the start
of the buffer on each iteration, iterate over it a second time to
lower-case all letters, and finally copy the buffer to the input-key's
`name` member.

In addition to being inefficient, `strncpy` is used to do the copies,
which leads gcc to complain:

  ulogd_output_DBI.c:160:17: warning: `strncpy` output may be truncated copying 31 bytes from a string of length 31

Furthermore, the buffer is not initialized, which means that there is
also a possible buffer overrun if the column-name is too long, since
`strncpy` will not append a NUL.

Instead, copy the column-name directly to the input-key using
`snprintf`, and then iterate over it once to replace underscores and
lower-case letters.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooutput: DBI: fix deprecation warnings
Jeremy Sowden [Tue, 30 Nov 2021 10:55:39 +0000 (10:55 +0000)] 
output: DBI: fix deprecation warnings

The DBI output plugin uses some libdbi functions which have been
deprecated in favour of re-entrant equivalents.  Switch to the
re-entrant functions.

Remove superfluous `init` declaration.

Add destructor to clean up DBI instance on exit.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoinput: UNIXSOCK: prevent unaligned pointer access
Jeremy Sowden [Tue, 30 Nov 2021 10:55:38 +0000 (10:55 +0000)] 
input: UNIXSOCK: prevent unaligned pointer access

`struct ulogd_unixsock_packet_t` is packed, so taking the address of its
`struct iphdr payload` member may yield an unaligned pointer value.  We
only actually dereference the pointer to get the IP version, so replace
the pointer with a version variable and elsewhere use `pkt.payload`
directly.

Remove a couple of stray semicolons.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoinput: UNIXSOCK: fix possible truncation of socket path
Jeremy Sowden [Tue, 30 Nov 2021 10:55:37 +0000 (10:55 +0000)] 
input: UNIXSOCK: fix possible truncation of socket path

Verify that the socket path is short enough, and replace `strncpy` with
`strcpy`.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoinput: UNIXSOCK: remove stat of socket-path
Jeremy Sowden [Tue, 30 Nov 2021 10:55:36 +0000 (10:55 +0000)] 
input: UNIXSOCK: remove stat of socket-path

When creating the UNIX socket, there is a TOCTOU race between the
stat(2) and bind(2) calls, and if the path is already bound, the bind(2)
call will fail in any case.  Remove the stat(2) call.

Tidy up a couple of error message.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agofilter: PWSNIFF: replace malloc+strncpy with strndup
Jeremy Sowden [Tue, 30 Nov 2021 10:55:35 +0000 (10:55 +0000)] 
filter: PWSNIFF: replace malloc+strncpy with strndup

There are a couple of instances of allocating memory with `malloc`,
followed by copying a string to it with `strncpy` and adding an explicit
assignment of `\0` to terminate the string.  Replace them with
`strndup`.

Add an enum to name indices of output keys.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoReplace malloc+memset with calloc
Jeremy Sowden [Tue, 30 Nov 2021 10:55:34 +0000 (10:55 +0000)] 
Replace malloc+memset with calloc

There are a number of places where we `malloc` some memory and then
`memset` it to zero.  Use `calloc` instead.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agofilter: HWHDR: remove zero-initialization of MAC type
Jeremy Sowden [Tue, 30 Nov 2021 10:55:33 +0000 (10:55 +0000)] 
filter: HWHDR: remove zero-initialization of MAC type

We don't need to initialize `type`, and even if we did the right value
would be `ARPHDR_VOID`, not `0`, which is a valid MAC type
(`ARPHDR_NETROM`).

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agofilter: HWHDR: re-order KEY_RAW_MAC checks
Jeremy Sowden [Tue, 30 Nov 2021 10:55:32 +0000 (10:55 +0000)] 
filter: HWHDR: re-order KEY_RAW_MAC checks

Currently, in `interp_mac2str` we have:

  if (/* KEY_RAW_MAC is valid */) {
    /*
     * set mac type
     */
  }

  if (/* mac type is ethernet */)
    // parse ethernet

  if (/* KEY_RAW_MAC is not valid */)
    // return early.

The MAC type will not be set to ethernet unless KEY_RAW_MAC is valid,
so we can move the last check up and drop the first one:

  if (/* KEY_RAW_MAC is not valid */)
    // return early.

  /*
   * set mac type
   */

  if (/* mac type is ethernet */)
    // parse ethernet

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agofilter: HWHDR: simplify flow-control
Jeremy Sowden [Tue, 30 Nov 2021 10:55:31 +0000 (10:55 +0000)] 
filter: HWHDR: simplify flow-control

The `interp_mac2str` function concludes with a `switch` followed by a
`return` statement.

The `switch` has one case falling through to a default:

  switch (expr) {
  case X:
    // ... X code ...
  default:
    // ... default code ...
  }

This is equivalent to the simpler and more readily comprehensible:

  if (expr == X) {
    // ... X code ...
  }
  // ... default code ...

Replace the former with the latter.

Doing so makes it obvious that the following `return` statement is never
reached.  Remove it.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agodb: add missing `break` to switch case
Jeremy Sowden [Tue, 30 Nov 2021 10:55:30 +0000 (10:55 +0000)] 
db: add missing `break` to switch case

When formatting DB queries, if we get a input key of type `RAW`, we log
a message indicating that `RAW` is unsupported, then fall through to the
default case, which logs another message that the key type is unknown.
Add the missing `break` statement to prevent the fall-through.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agojhash: add "fall through" comments to switch cases
Jeremy Sowden [Tue, 30 Nov 2021 10:55:29 +0000 (10:55 +0000)] 
jhash: add "fall through" comments to switch cases

gcc warns about undocumented fall-throughs in switches.  In this case,
the fall-throughs are intended, so add commnts to indicate this to the
compiler.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoXML: show both nflog packet and conntrack
Ken-ichirou MATSUZAWA [Tue, 12 Oct 2021 11:17:07 +0000 (20:17 +0900)] 
XML: show both nflog packet and conntrack

This patch enables to show "ct" as well as "raw" if output type is
ULOGD_DTYPE_RAW and "ct" input exists.

Signed-off-by: Ken-ichirou MATSUZAWA <chamas@h4.dion.ne.jp>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoNFLOG: attach struct nf_conntrack
Ken-ichirou MATSUZAWA [Thu, 18 Nov 2021 11:09:19 +0000 (20:09 +0900)] 
NFLOG: attach struct nf_conntrack

put nf_conntrack in ct outputkey when "attach_conntrack" is specified.
But there is no way to show both nflog "raw" and "ct" now.

Signed-off-by: Ken-ichirou MATSUZAWA <chamas@h4.dion.ne.jp>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoNFLOG: add NFULNL_CFG_F_CONNTRACK flag
Ken-ichirou MATSUZAWA [Thu, 18 Nov 2021 11:07:24 +0000 (20:07 +0900)] 
NFLOG: add NFULNL_CFG_F_CONNTRACK flag

acquiring conntrack information by specifying "attack_conntrack=1"

Signed-off-by: Ken-ichirou MATSUZAWA <chamas@h4.dion.ne.jp>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agooutput: IPFIX: correct format specifiers
Jeremy Sowden [Sun, 21 Nov 2021 20:41:39 +0000 (20:41 +0000)] 
output: IPFIX: correct format specifiers

There are a couple of logging calls which use the wrong specifiers for
their integer arguments.  Change the specifiers to match the arguments.

Use the correct type for the variable holding the return-value of
`send(2)`.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoinput: UNIXSOCK: correct format specifiers
Jeremy Sowden [Sun, 21 Nov 2021 20:41:38 +0000 (20:41 +0000)] 
input: UNIXSOCK: correct format specifiers

There are a couple of logging calls which use the wrong specifiers for
their integer arguments.  Change the specifiers to match the arguments.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoulogd: fix order of log arguments
Jeremy Sowden [Sun, 21 Nov 2021 20:41:37 +0000 (20:41 +0000)] 
ulogd: fix order of log arguments

If `daemon` fails during start-up, ulogd attempts to print `errno` and
`strerror(errno)` to the log.  However, the arguments are the wrong way
round.  Swap them.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoulogd: remove empty log-line
Jeremy Sowden [Sun, 21 Nov 2021 20:41:36 +0000 (20:41 +0000)] 
ulogd: remove empty log-line

There is a `strdup` at the beginning of `create_stack`.  If it fails, an
empty log-line is printed.  It's not useful, so remove it.  This is
consistent with the error-handling of the `malloc` which immediately
follows it.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoinclude: add `format` attribute to `__ulogd_log` declaration
Jeremy Sowden [Sun, 21 Nov 2021 20:41:35 +0000 (20:41 +0000)] 
include: add `format` attribute to `__ulogd_log` declaration

`__ulogd_log` takes a printf-style format string and matching arguments.
Add the gcc `format` attribute to its declaration in order to allow the
compiler to type-check the function arguments against the specifiers in
the format string.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: missing ipfix.h header when running make distcheck
Pablo Neira Ayuso [Tue, 16 Nov 2021 11:35:01 +0000 (12:35 +0100)] 
build: missing ipfix.h header when running make distcheck

make distcheck reports ipfix.h is not included in the tarball file.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: use `AS_IF` consistently in configure.ac
Jeremy Sowden [Sun, 14 Nov 2021 15:52:31 +0000 (15:52 +0000)] 
build: use `AS_IF` consistently in configure.ac

configure.ac contains a mix of `AS_IF` and `if` conditionals.  Prefer
the portable M4sh `AS_IF` macro.  In some cases, where there are both
`AS_IF` and `if` conditionals evaluating the same predicates, the latter
are merged into the former.

Replace three instance of `test -n "$var"` with the usual, more portable,
autoconf idiom: `test "x$var" != "x"`.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: quote autoconf macro arguments
Jeremy Sowden [Sun, 14 Nov 2021 15:52:30 +0000 (15:52 +0000)] 
build: quote autoconf macro arguments

Arguments are supposed to be quoted in square brackets.  Fix several that
weren't.

Sort and reformat the `AC_OUTPUT_FILES` argument list while we're at it.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: remove commented-out code
Jeremy Sowden [Sun, 14 Nov 2021 15:52:29 +0000 (15:52 +0000)] 
build: remove commented-out code

There are a couple of blocks of macros in configure.ac which were
commented out in 2006.  Remove them.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: update obsolete autoconf macros
Jeremy Sowden [Sun, 14 Nov 2021 15:52:28 +0000 (15:52 +0000)] 
build: update obsolete autoconf macros

`AC_CONFIG_HEADER` has been superseded by `AC_CONFIG_HEADERS`.

`AC_PROG_LIBTOOL` has been superseded by `LT_INIT`.

`AC_DISABLE_STATIC` can be replaced by an argument to `LT_INIT`.

`AC_HEADER_STDC` is obsolete.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: use correct automake variable for library dependencies
Jeremy Sowden [Sun, 14 Nov 2021 15:52:27 +0000 (15:52 +0000)] 
build: use correct automake variable for library dependencies

A couple of library dependencies are specified in `_LDFLAGS` variables.
They are supposed to be specified in `_LIBADD` variables.  Move them.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: delete commented-out code
Jeremy Sowden [Sun, 14 Nov 2021 15:52:26 +0000 (15:52 +0000)] 
build: delete commented-out code

There are a few of commented-out variable definitions left over from
the introduction of Automake.  Remove them.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: group `*_la_*` variables with their libraries
Jeremy Sowden [Sun, 14 Nov 2021 15:52:25 +0000 (15:52 +0000)] 
build: group `*_la_*` variables with their libraries

Move the `_SOURCES`, `_LIBADD` and `_LDFLAGS` variables for each
input-packet library alongside the matching `.la` definition.  In
particular, move the `NFLOG` and `ULOG` variables inside the
conditionals controlling whether the libraries get built.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: skip sub-directories containing disabled plugins
Jeremy Sowden [Sun, 14 Nov 2021 15:52:24 +0000 (15:52 +0000)] 
build: skip sub-directories containing disabled plugins

Currently, make enters all sub-directories containing source-code, even
if they only contain optional targets which are not configured to be
built.  Instead, change the Makefiles so that the sub-directories are
optional, rather than the targets.

Group sub-directory definitions consistently at the top of the Makefiles
that contain them.

Trim a few leading and trailing blank lines.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: use `dist_man_MANS` to declare man-pages
Jeremy Sowden [Sun, 14 Nov 2021 15:52:23 +0000 (15:52 +0000)] 
build: use `dist_man_MANS` to declare man-pages

By using `dist_man_MANS`, instead of `man_MANS`, we no longer need to
include the man-pages in `EXTRA_DIST`.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: add Make_global.am for common flags
Jeremy Sowden [Sun, 14 Nov 2021 15:52:22 +0000 (15:52 +0000)] 
build: add Make_global.am for common flags

Move `${regular_CFLAGS}` from configure.ac to Make_global.am, renaming
it to `AM_CFLAGS`.  Add `AM_CPPFGLAGS` to include
`$(top_srcdir)/include`.  Include the new file in the Makefiles that
require it.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: move CPP `-D` flag.
Jeremy Sowden [Sun, 14 Nov 2021 15:52:21 +0000 (15:52 +0000)] 
build: move CPP `-D` flag.

The `ULOGD2_LIBDIR` macro is only used in one place, so move the flag
defining it out of the common `regular_CFLAGS` variable to the
`AM_CPPFLAGS` variable in the Makefile where it is needed.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: remove empty filter sub-directory
Jeremy Sowden [Sun, 14 Nov 2021 15:52:20 +0000 (15:52 +0000)] 
build: remove empty filter sub-directory

The only file in filter/packet2flow is an empty Makefile.am.  Remove it.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agobuild: remove unused Makefile fragment
Jeremy Sowden [Sun, 14 Nov 2021 15:52:19 +0000 (15:52 +0000)] 
build: remove unused Makefile fragment

Rules.make.in contains a number of variables defined by configure.  It
is left-over from the pre-Automake build-system, in which it used to
fill a similar role to Make_global.am.  It is no longer used anywhere.
Remove it.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agogitignore: ignore .dirstamp
Jeremy Sowden [Sun, 14 Nov 2021 15:52:18 +0000 (15:52 +0000)] 
gitignore: ignore .dirstamp

It's created by automake while making sure that build directories (utils/
and utils/.deps/, in this case) exist if the `subdir-objects` option is
enabled.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agogitignore: add Emacs artefacts
Jeremy Sowden [Sun, 14 Nov 2021 15:52:17 +0000 (15:52 +0000)] 
gitignore: add Emacs artefacts

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoNFLOG: fix seq global flag setting
Ken-ichirou MATSUZAWA [Fri, 17 Sep 2021 22:09:29 +0000 (07:09 +0900)] 
NFLOG: fix seq global flag setting

Otherwise this is incorrectly setting on NFULNL_CFG_F_SEQ_GLOBAL if
local sequence number via NFULNL_CFG_F_SEQ is requested.

Signed-off-by: Ken-ichirou MATSUZAWA <chamas@h4.dion.ne.jp>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
3 years agoXML: support nflog pkt output
Ken-ichirou MATSUZAWA [Fri, 17 Sep 2021 22:08:23 +0000 (07:08 +0900)] 
XML: support nflog pkt output

plugin input type ULOGD_DTYPE_RAW was missing

Signed-off-by: Ken-ichirou MATSUZAWA <chamas@h4.dion.ne.jp>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
4 years agoprintpkt: print pkt mark like kernel
Cole Dishington [Mon, 24 May 2021 20:59:13 +0000 (08:59 +1200)] 
printpkt: print pkt mark like kernel

Print the pkt mark in hex with a preceding '0x', like the kernel prints
pkts logged by netfilter.

Signed-off-by: Cole Dishington <Cole.Dishington@alliedtelesis.co.nz>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
4 years agoraw2packet: fix comma instead of semicolon
Timon Ulrich [Fri, 30 Oct 2020 14:30:47 +0000 (15:30 +0100)] 
raw2packet: fix comma instead of semicolon

Signed-off-by: Timon Ulrich <t.ulrich@anapur.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>