From 63ee71ce64bc2f404ab5f775fa5b10e24adf6830 Mon Sep 17 00:00:00 2001
From: Daniel Baumann <daniel.baumann@progress-linux.org>
Date: Wed, 26 Jun 2024 07:36:20 +0200
Subject: Merging upstream version 3.3.7.

Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
---
 .../pkg/el-7/05-revert-mod-dnstap-TCP-sink.patch   | 160 +++++++++++++++++++++
 1 file changed, 160 insertions(+)
 create mode 100644 distro/pkg/el-7/05-revert-mod-dnstap-TCP-sink.patch

(limited to 'distro/pkg/el-7/05-revert-mod-dnstap-TCP-sink.patch')

diff --git a/distro/pkg/el-7/05-revert-mod-dnstap-TCP-sink.patch b/distro/pkg/el-7/05-revert-mod-dnstap-TCP-sink.patch
new file mode 100644
index 0000000..dae0fac
--- /dev/null
+++ b/distro/pkg/el-7/05-revert-mod-dnstap-TCP-sink.patch
@@ -0,0 +1,160 @@
+From d236d2b7fcd5fa607f7bfd38044eb6f510fac7ce Mon Sep 17 00:00:00 2001
+From: Daniel Salzman <daniel.salzman@nic.cz>
+Date: Wed, 12 Jun 2024 11:18:31 +0200
+Subject: [PATCH] Revert "mod-dnstap: add sink for TCP connection"
+
+This reverts commit 2ffd7dfa58ddcd1b860f0c9980fd082c3852d3e6.
+---
+ src/knot/modules/dnstap/dnstap.c   | 74 +++++-------------------------
+ src/knot/modules/dnstap/dnstap.rst |  9 ++--
+ 2 files changed, 15 insertions(+), 68 deletions(-)
+
+diff --git a/src/knot/modules/dnstap/dnstap.c b/src/knot/modules/dnstap/dnstap.c
+index 612e48869..c8c82eaa4 100644
+--- a/src/knot/modules/dnstap/dnstap.c
++++ b/src/knot/modules/dnstap/dnstap.c
+@@ -1,4 +1,4 @@
+-/*  Copyright (C) 2024 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
++/*  Copyright (C) 2023 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz>
+ 
+     This program is free software: you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published by
+@@ -185,33 +185,6 @@ finish:
+ 	return writer;
+ }
+ 
+-static struct fstrm_writer* dnstap_tcp_writer(const char *address, const char *port)
+-{
+-	struct fstrm_tcp_writer_options *opt = NULL;
+-	struct fstrm_writer_options *wopt = NULL;
+-	struct fstrm_writer *writer = NULL;
+-
+-	opt =  fstrm_tcp_writer_options_init();
+-	if (opt == NULL) {
+-		goto finish;
+-	}
+-
+-	fstrm_tcp_writer_options_set_socket_address(opt, address);
+-	fstrm_tcp_writer_options_set_socket_port(opt, port);
+-
+-	wopt = fstrm_writer_options_init();
+-	if (wopt == NULL) {
+-		goto finish;
+-	}
+-	fstrm_writer_options_add_content_type(wopt, DNSTAP_CONTENT_TYPE,
+-	                                      strlen(DNSTAP_CONTENT_TYPE));
+-	writer = fstrm_tcp_writer_init(opt, wopt);
+-finish:
+-	fstrm_tcp_writer_options_destroy(&opt);
+-	fstrm_writer_options_destroy(&wopt);
+-	return writer;
+-}
+-
+ /*! \brief Create a basic file writer sink. */
+ static struct fstrm_writer* dnstap_file_writer(const char *path)
+ {
+@@ -240,42 +213,17 @@ finish:
+ }
+ 
+ /*! \brief Create a log sink according to the path string. */
+-static struct fstrm_writer* dnstap_writer(knotd_mod_t *mod, const char *path)
++static struct fstrm_writer* dnstap_writer(const char *path)
+ {
+-	const char *unix_prefix = "unix:";
+-	const size_t unix_prefix_len = strlen(unix_prefix);
+-
+-	const char *tcp_prefix = "tcp:";
+-	const size_t tcp_prefix_len = strlen(tcp_prefix);
+-
+-	const size_t path_len = strlen(path);
++	const char *prefix = "unix:";
++	const size_t prefix_len = strlen(prefix);
+ 
+ 	/* UNIX socket prefix. */
+-	if (path_len > unix_prefix_len &&
+-	    strncmp(path, unix_prefix, unix_prefix_len) == 0) {
+-		knotd_mod_log(mod, LOG_DEBUG, "using sink UNIX socket '%s'", path);
+-		return dnstap_unix_writer(path + unix_prefix_len);
+-	/* TCP socket prefix. */
+-	} else if (path_len > tcp_prefix_len &&
+-	           strncmp(path, tcp_prefix, tcp_prefix_len) == 0) {
+-		char addr[INET6_ADDRSTRLEN] = { 0 };
+-		const char *delimiter = strchr(path + tcp_prefix_len, '@');
+-		if (delimiter == NULL) {
+-			return NULL;
+-		}
+-		size_t addr_len = delimiter - path - tcp_prefix_len;
+-		if (addr_len >= sizeof(addr)) {
+-			return NULL;
+-		}
+-		memcpy(addr, path + tcp_prefix_len, addr_len);
+-		knotd_mod_log(mod, LOG_DEBUG, "using sink TCP address '%s' port '%s'",
+-		              addr, delimiter + 1);
+-		return dnstap_tcp_writer(addr, delimiter + 1);
+-	/* File path. */
+-	} else {
+-		knotd_mod_log(mod, LOG_DEBUG, "using sink file '%s'", path);
+-		return dnstap_file_writer(path);
++	if (strlen(path) > prefix_len && strncmp(path, prefix, prefix_len) == 0) {
++		return dnstap_unix_writer(path + prefix_len);
+ 	}
++
++	return dnstap_file_writer(path);
+ }
+ 
+ int dnstap_load(knotd_mod_t *mod)
+@@ -325,7 +273,7 @@ int dnstap_load(knotd_mod_t *mod)
+ 	const bool log_responses = conf.single.boolean;
+ 
+ 	/* Initialize the writer and the options. */
+-	struct fstrm_writer *writer = dnstap_writer(mod, sink);
++	struct fstrm_writer *writer = dnstap_writer(sink);
+ 	if (writer == NULL) {
+ 		goto fail;
+ 	}
+@@ -359,13 +307,13 @@ int dnstap_load(knotd_mod_t *mod)
+ 
+ 	return KNOT_EOK;
+ fail:
+-	knotd_mod_log(mod, LOG_ERR, "failed to initialize sink '%s'", sink);
++	knotd_mod_log(mod, LOG_ERR, "failed to init sink '%s'", sink);
+ 
+ 	free(ctx->identity);
+ 	free(ctx->version);
+ 	free(ctx);
+ 
+-	return KNOT_EINVAL;
++	return KNOT_ENOMEM;
+ }
+ 
+ void dnstap_unload(knotd_mod_t *mod)
+diff --git a/src/knot/modules/dnstap/dnstap.rst b/src/knot/modules/dnstap/dnstap.rst
+index 05eac09ab..358977da0 100644
+--- a/src/knot/modules/dnstap/dnstap.rst
++++ b/src/knot/modules/dnstap/dnstap.rst
+@@ -11,7 +11,7 @@ Example
+ -------
+ 
+ The configuration comprises only a :ref:`mod-dnstap_sink` path parameter,
+-which can be either a file, a UNIX socket, or a TCP address::
++which can be either a file or a UNIX socket::
+ 
+    mod-dnstap:
+      - id: capture_all
+@@ -60,10 +60,9 @@ A module identifier.
+ sink
+ ....
+ 
+-A sink path, which can be either a file, a UNIX socket when prefixed with
+-``unix:``, or a TCP `address@port` when prefixed with ``tcp:``. The file may
+-be specified as an absolute path or a path relative to
+-the :doc:`knotd<man_knotd>` startup directory.
++A sink path, which can be either a file or a UNIX socket when prefixed with
++``unix:``. The file may be specified as an absolute path or a path relative
++to the :doc:`knotd<man_knotd>` startup directory.
+ 
+ *Required*
+ 
+-- 
+2.34.1
+
-- 
cgit v1.2.3