diff --git a/board/common/rootfs/etc/bash.bashrc b/board/common/rootfs/etc/bash.bashrc index e4ea5d843..ce52f90e5 100644 --- a/board/common/rootfs/etc/bash.bashrc +++ b/board/common/rootfs/etc/bash.bashrc @@ -35,14 +35,14 @@ log() { local fn="/var/log/syslog" [ -n "$1" ] && fn="/var/log/$1" - less +G "$fn" + less +G -r "$fn" } follow() { local fn="/var/log/syslog" [ -n "$1" ] && fn="/var/log/$1" - tail -F "$fn" + less +F -r "$fn" } _logfile_completions() diff --git a/board/common/rootfs/etc/finit.d/available/netconf.conf b/board/common/rootfs/etc/finit.d/available/netconf.conf new file mode 100644 index 000000000..656c67422 --- /dev/null +++ b/board/common/rootfs/etc/finit.d/available/netconf.conf @@ -0,0 +1,3 @@ +service name:netopeer notify:none log env:/etc/default/confd \ + [12345] netopeer2-server -F -t $CONFD_TIMEOUT -v 1 \ + -- NETCONF server diff --git a/board/common/rootfs/etc/finit.d/available/sysklogd.conf b/board/common/rootfs/etc/finit.d/available/sysklogd.conf index 6b7a5da1a..a6bf71035 100644 --- a/board/common/rootfs/etc/finit.d/available/sysklogd.conf +++ b/board/common/rootfs/etc/finit.d/available/sysklogd.conf @@ -1,4 +1,4 @@ # Use as barrier for other system tasks and service that # rely on modules, firmware, and device nodes to be ready. service if:udevd nowarn env:-/etc/default/sysklogd \ - [S0123456789] syslogd -F $SYSLOGD_ARGS -- System log daemon + [S0123456789] syslogd -8 -F $SYSLOGD_ARGS -- System log daemon diff --git a/board/common/rootfs/etc/finit.d/enabled/netconf.conf b/board/common/rootfs/etc/finit.d/enabled/netconf.conf new file mode 120000 index 000000000..aad09b82b --- /dev/null +++ b/board/common/rootfs/etc/finit.d/enabled/netconf.conf @@ -0,0 +1 @@ +../available/netconf.conf \ No newline at end of file diff --git a/board/common/rootfs/usr/bin/pager b/board/common/rootfs/usr/bin/pager index cea4c3ecb..ac5cd8ed3 100755 --- a/board/common/rootfs/usr/bin/pager +++ b/board/common/rootfs/usr/bin/pager @@ -5,10 +5,11 @@ # -K :: exit immediately when an interrupt character (usually ^C) is typed # -R :: Almost raw control charachters, only ANSI color escape sequences and # OSC 8 hyperlink sequences are output. Allows veritcal scrolling +# -r :: Causes "raw" control characters to be displayed, including unicode. # -X :: No termcap initialization and deinitialization set to the terminal. # This is what leaves the contents of the output on screen. export LESS="-P %f (press h for help or q to quit)" export LANG=en_US.UTF-8 -less -RIKd -FX "$@" +less -rIKd -FX "$@" diff --git a/doc/ChangeLog.md b/doc/ChangeLog.md index a89d89451..73a21f3c4 100644 --- a/doc/ChangeLog.md +++ b/doc/ChangeLog.md @@ -17,6 +17,7 @@ All notable changes to the project are documented in this file. - Add neofetch system information tool for system introspection, issue #1143 - Add mtr and iperf3 network diagnostic tools, issue #1144 - Improve default bash settings with better history handling and tab completion +- cli: new `terminal reset` and `terminal resize` convenience commands ### Fixes - Fix #1100: Reduce DHCP client logging verbosity by 70% and include interface @@ -24,6 +25,7 @@ All notable changes to the project are documented in this file. - Fix #1119: CLI UX regression, restore proper behavior for `no enabled` command - Fix #1155: `show ospf` commands regression - Fix #1150: show-legacy wrapper permissions +- Fixes for unicode translation in log and pager outputs as well as `syslogd` [BPI-R3]: https://wiki.banana-pi.org/Banana_Pi_BPI-R3 diff --git a/package/confd/confd.conf b/package/confd/confd.conf index f7a5bb496..482ee26e8 100644 --- a/package/confd/confd.conf +++ b/package/confd/confd.conf @@ -25,7 +25,3 @@ run name:failure log:prio:user.crit norestart env:/etc/default/confd \ run name:error :2 log:console norestart \ if: \ [S] /usr/libexec/confd/error -- - -service name:netopeer notify:none log env:/etc/default/confd \ - [12345] netopeer2-server -F -t $CONFD_TIMEOUT -v 1 \ - -- NETCONF server diff --git a/package/nghttp2-asio/Config.in b/package/nghttp2-asio/Config.in index 3f966b111..5321fec6a 100644 --- a/package/nghttp2-asio/Config.in +++ b/package/nghttp2-asio/Config.in @@ -5,3 +5,8 @@ config BR2_PACKAGE_NGHTTP2_ASIO select BR2_PACKAGE_BOOST help C++ bindings for nghttp2 + + This is the CESNET fork of nghttp2-asio, introduced here: + https://github.com/CESNET/rousette/commit/fff3429 + + https://github.com/CESNET/nghttp2-asio diff --git a/package/nghttp2-asio/nghttp2-asio.hash b/package/nghttp2-asio/nghttp2-asio.hash index 0ede0b451..f5c10bf7e 100644 --- a/package/nghttp2-asio/nghttp2-asio.hash +++ b/package/nghttp2-asio/nghttp2-asio.hash @@ -1,4 +1,3 @@ # Locally calculated sha256 6b94f3abc1aabd0c72a7c7d92a77f79dda7c8a0cb3df839a97890b4116a2de2a COPYING -sha256 d971c538a31eae5714d2434d90f86794f267615e85e8d2bb0c383e83c300e1ce nghttp2-asio-e877868abe06a83ed0a6ac6e245c07f6f20866b5-git4.tar.gz - +sha256 883af672c1d210398170749a8ccda30103b2894bcd4eccd80f36771aad0b15c3 nghttp2-asio-2173b82e6caa85950c769eecc5da6809faadf61a-git4.tar.gz diff --git a/package/nghttp2-asio/nghttp2-asio.mk b/package/nghttp2-asio/nghttp2-asio.mk index 410fb4938..ad7a43e97 100644 --- a/package/nghttp2-asio/nghttp2-asio.mk +++ b/package/nghttp2-asio/nghttp2-asio.mk @@ -4,8 +4,8 @@ # ################################################################################ -NGHTTP2_ASIO_VERSION = e877868abe06a83ed0a6ac6e245c07f6f20866b5 -NGHTTP2_ASIO_SITE = https://github.com/kernelkit/nghttp2-asio.git +NGHTTP2_ASIO_VERSION = 2173b82e6caa85950c769eecc5da6809faadf61a +NGHTTP2_ASIO_SITE = https://github.com/CESNET/nghttp2-asio NGHTTP2_ASIO_SITE_METHOD = git NGHTTP2_ASIO_LICENSE = MIT NGHTTP2_ASIO_LICENSE_FILES = COPYING diff --git a/package/rousette/0001-Log-HTTP-headers-and-the-input-data-payload.patch b/package/rousette/0001-Log-HTTP-headers-and-the-input-data-payload.patch index ec9e1889c..e4a1f7dd9 100644 --- a/package/rousette/0001-Log-HTTP-headers-and-the-input-data-payload.patch +++ b/package/rousette/0001-Log-HTTP-headers-and-the-input-data-payload.patch @@ -1,7 +1,7 @@ -From a4136d889237dadb9253ea7eb668a525dd779e6d Mon Sep 17 00:00:00 2001 +From c0d13b8e426608a30b1eea382f908fb6447fd01d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Kundr=C3=A1t?= Date: Thu, 12 Jun 2025 10:33:42 +0100 -Subject: [PATCH 01/17] Log HTTP headers and the input data payload +Subject: [PATCH 01/13] Log HTTP headers and the input data payload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @@ -11,7 +11,7 @@ Organization: Wires Hažlinský just found. Change-Id: I2a930a02c7d30c051390fe73e6af9849edd580b4 -Signed-off-by: Mattias Walström +Signed-off-by: Joachim Wiberg --- src/restconf/Server.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/package/rousette/0002-restconf-prevent-throwing-exception-in-withRestconfE.patch b/package/rousette/0002-restconf-prevent-throwing-exception-in-withRestconfE.patch index 3b3c8ac9d..e11b63663 100644 --- a/package/rousette/0002-restconf-prevent-throwing-exception-in-withRestconfE.patch +++ b/package/rousette/0002-restconf-prevent-throwing-exception-in-withRestconfE.patch @@ -1,11 +1,8 @@ -From 6c5b482ea5c9fbc1149a0864b05d1bb1fa7100bf Mon Sep 17 00:00:00 2001 +From 027a47ac3ff6c369caab7c007a5a171a68270829 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pecka?= Date: Fri, 13 Jun 2025 10:47:55 +0200 -Subject: [PATCH 02/17] restconf: prevent throwing exception in +Subject: [PATCH 02/13] restconf: prevent throwing exception in withRestconfExceptions wrapper -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit Organization: Wires In case the catch block of withRestconfExceptions is reached and an @@ -22,7 +19,7 @@ handle such situations. Bug: https://github.com/CESNET/rousette/issues/19 Change-Id: Ifbd74b9bdc0ca66c4e5449a7673ef2f12ae9215e -Signed-off-by: Mattias Walström +Signed-off-by: Joachim Wiberg --- src/restconf/Server.cpp | 2 +- tests/restconf-plain-patch.cpp | 24 ++++++++++++++++++++++++ diff --git a/package/rousette/0003-CI-switch-to-the-new-cloud-s-Swift-URL.patch b/package/rousette/0003-CI-switch-to-the-new-cloud-s-Swift-URL.patch deleted file mode 100644 index 202864fee..000000000 --- a/package/rousette/0003-CI-switch-to-the-new-cloud-s-Swift-URL.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 41c9d9cab47a88ee6c70ab8009b789226c0982fe Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Jan=20Kundr=C3=A1t?= -Date: Tue, 17 Jun 2025 12:46:27 +0200 -Subject: [PATCH 03/17] CI: switch to the new cloud's Swift URL -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit -Organization: Wires - -Change-Id: I69f8351394262a2a9b691422592741bfb40a8e38 -Signed-off-by: Mattias Walström ---- - ci/build.sh | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/ci/build.sh b/ci/build.sh -index d49bd56..59b31ab 100755 ---- a/ci/build.sh -+++ b/ci/build.sh -@@ -67,7 +67,7 @@ if [[ -z "${ARTIFACT_URL}" ]]; then - # nothing ahead in the pipeline -> fallback to the latest promoted artifact - DEPSRCDIR=$(jq < ~/zuul-env.json -e -r ".projects[] | select(.name == \"CzechLight/dependencies\").src_dir") - DEP_SUBMODULE_COMMIT=$(git --git-dir ${HOME}/${DEPSRCDIR}/.git rev-parse HEAD) -- ARTIFACT_URL="https://object-store.cloud.muni.cz/swift/v1/ci-artifacts-${ZUUL_TENANT}/${ZUUL_GERRIT_HOSTNAME}/CzechLight/dependencies/deps-${ZUUL_JOB_NAME_NO_PROJECT%%-cover?(-previous)}/${DEP_SUBMODULE_COMMIT}.tar.zst" -+ ARTIFACT_URL="https://object-store.brno.openstack.cloud.e-infra.cz/swift/v1/KEY_b637b9c937414b29b3e277b4a85cc658/ci-artifacts-${ZUUL_TENANT}/${ZUUL_GERRIT_HOSTNAME}/CzechLight/dependencies/deps-${ZUUL_JOB_NAME_NO_PROJECT%%-cover?(-previous)}/${DEP_SUBMODULE_COMMIT}.tar.zst" - fi - - curl ${ARTIFACT_URL} | unzstd --stdout | tar -C ${PREFIX} -xf - --- -2.43.0 - diff --git a/package/rousette/0004-restconf-crash-instead-of-a-deadlock-when-the-handle.patch b/package/rousette/0003-restconf-crash-instead-of-a-deadlock-when-the-handle.patch similarity index 97% rename from package/rousette/0004-restconf-crash-instead-of-a-deadlock-when-the-handle.patch rename to package/rousette/0003-restconf-crash-instead-of-a-deadlock-when-the-handle.patch index 452f90395..bb0bb2c06 100644 --- a/package/rousette/0004-restconf-crash-instead-of-a-deadlock-when-the-handle.patch +++ b/package/rousette/0003-restconf-crash-instead-of-a-deadlock-when-the-handle.patch @@ -1,7 +1,7 @@ -From ec8673126929b6459fcd99c84a79993a725b40e1 Mon Sep 17 00:00:00 2001 +From d1c56f14b54b113df8fba759924bb47cfa27366c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pecka?= Date: Fri, 13 Jun 2025 10:47:55 +0200 -Subject: [PATCH 04/17] restconf: crash instead of a deadlock when the handler +Subject: [PATCH 03/13] restconf: crash instead of a deadlock when the handler throws MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 @@ -37,7 +37,7 @@ called twice [3]. Signed-off-by: Jan Kundrát Bug: https://github.com/CESNET/rousette/issues/19 Change-Id: I2c090b9a76b062101ba422a7d50e8e699779e203 -Signed-off-by: Mattias Walström +Signed-off-by: Joachim Wiberg --- src/restconf/Server.cpp | 28 ++++++++++++++++++++++++++++ src/restconf/Server.h | 4 ++++ diff --git a/package/rousette/0006-close-long-lived-connections-on-SIGTERM.patch b/package/rousette/0004-close-long-lived-connections-on-SIGTERM.patch similarity index 98% rename from package/rousette/0006-close-long-lived-connections-on-SIGTERM.patch rename to package/rousette/0004-close-long-lived-connections-on-SIGTERM.patch index 57179a318..6bff80ac4 100644 --- a/package/rousette/0006-close-long-lived-connections-on-SIGTERM.patch +++ b/package/rousette/0004-close-long-lived-connections-on-SIGTERM.patch @@ -1,10 +1,7 @@ -From 4eae6200aa812950ebbac1660a1899f4edf41e11 Mon Sep 17 00:00:00 2001 +From db64d7b3fc0a0373067e6c5ac9e41b93351778a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Kundr=C3=A1t?= Date: Wed, 7 Aug 2024 19:07:35 +0200 -Subject: [PATCH 06/17] close long-lived connections on SIGTERM -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit +Subject: [PATCH 04/13] close long-lived connections on SIGTERM Organization: Wires Without this patch, all the ongoing SSE streams would be left alive for @@ -23,7 +20,7 @@ hope it is). Change-Id: If442134783ba1d699de47c51a9068378f53e8339 Co-authored-by: Tomas Pecka -Signed-off-by: Mattias Walström +Signed-off-by: Joachim Wiberg --- CMakeLists.txt | 1 + src/clock.cpp | 7 +-- diff --git a/package/rousette/0005-doc-let-s-stop-calling-this-an-almost-RESTCONF-serve.patch b/package/rousette/0005-doc-let-s-stop-calling-this-an-almost-RESTCONF-serve.patch deleted file mode 100644 index 9985c857d..000000000 --- a/package/rousette/0005-doc-let-s-stop-calling-this-an-almost-RESTCONF-serve.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 37ca95c387d76c3f296a4e44b211772a1ca155ab Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Jan=20Kundr=C3=A1t?= -Date: Wed, 18 Jun 2025 12:01:04 +0200 -Subject: [PATCH 05/17] doc: let's stop calling this "an almost-RESTCONF - server" -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit -Organization: Wires - -Change-Id: If55ace481c78d838a811ded76a564f8fb59f9233 -Signed-off-by: Mattias Walström ---- - README.md | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/README.md b/README.md -index 0796dce..a42c64d 100644 ---- a/README.md -+++ b/README.md -@@ -1,4 +1,4 @@ --# An almost-RESTCONF server -+# A RESTCONF server for sysrepo - - ![License](https://img.shields.io/github/license/cesnet/rousette) - [![Gerrit](https://img.shields.io/badge/patches-via%20Gerrit-blue)](https://gerrit.cesnet.cz/q/project:CzechLight/rousette) --- -2.43.0 - diff --git a/package/rousette/0007-restconf-refactor-server-stop.patch b/package/rousette/0005-restconf-refactor-server-stop.patch similarity index 87% rename from package/rousette/0007-restconf-refactor-server-stop.patch rename to package/rousette/0005-restconf-refactor-server-stop.patch index 328b16826..1830546fc 100644 --- a/package/rousette/0007-restconf-refactor-server-stop.patch +++ b/package/rousette/0005-restconf-refactor-server-stop.patch @@ -1,10 +1,7 @@ -From ca2894d4888c673d227fc196a25f83ded20e8f04 Mon Sep 17 00:00:00 2001 +From 5c8a139d04d9b3dfb28b8c0e1a4aa7b945a1e8fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pecka?= Date: Mon, 30 Jun 2025 15:38:02 +0200 -Subject: [PATCH 07/17] restconf: refactor server stop -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit +Subject: [PATCH 05/13] restconf: refactor server stop Organization: Wires In 94b24795 ("server: simplify listening/stopping") we needed to call @@ -20,7 +17,7 @@ does not seem like it should be called from *every* io_service.) [2] https://www.boost.org/doc/libs/1_85_0/doc/html/boost_asio/reference/post.html Change-Id: I2f33c38a78dce4081a03326c9a9bb25817fc9d2f -Signed-off-by: Mattias Walström +Signed-off-by: Joachim Wiberg --- src/restconf/Server.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/package/rousette/0010-http-send-keep-alive-pings-from-EventStream.patch b/package/rousette/0006-http-send-keep-alive-pings-from-EventStream.patch similarity index 98% rename from package/rousette/0010-http-send-keep-alive-pings-from-EventStream.patch rename to package/rousette/0006-http-send-keep-alive-pings-from-EventStream.patch index 6dd69f960..d26a23a3e 100644 --- a/package/rousette/0010-http-send-keep-alive-pings-from-EventStream.patch +++ b/package/rousette/0006-http-send-keep-alive-pings-from-EventStream.patch @@ -1,10 +1,7 @@ -From 5becffe8a1dd47c8836ce1800a1b72acdf86021f Mon Sep 17 00:00:00 2001 +From 086cfe1847e406df90852dc3cb52ece3d0cbe22b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pecka?= Date: Mon, 12 May 2025 14:56:54 +0200 -Subject: [PATCH 10/17] http: send keep-alive pings from EventStream -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit +Subject: [PATCH 06/13] http: send keep-alive pings from EventStream Organization: Wires The nghttp2-asio server disconnects client after 60 seconds of no @@ -31,7 +28,7 @@ to the server when the server sends these "keep-alive comments". [3] https://html.spec.whatwg.org/multipage/server-sent-events.html#authoring-notes Change-Id: I57e510d0b61ac7ed032c582779780c64768b7d53 -Signed-off-by: Mattias Walström +Signed-off-by: Joachim Wiberg --- src/clock.cpp | 4 +- src/http/EventStream.cpp | 44 +++++++++++++-- diff --git a/package/rousette/0011-refactor-event-streams-use-named-constructors.patch b/package/rousette/0007-refactor-event-streams-use-named-constructors.patch similarity index 97% rename from package/rousette/0011-refactor-event-streams-use-named-constructors.patch rename to package/rousette/0007-refactor-event-streams-use-named-constructors.patch index fc507e627..abe346d58 100644 --- a/package/rousette/0011-refactor-event-streams-use-named-constructors.patch +++ b/package/rousette/0007-refactor-event-streams-use-named-constructors.patch @@ -1,10 +1,7 @@ -From ff4ff1c193083feca76d9f0f4485e4b175c373c2 Mon Sep 17 00:00:00 2001 +From 06e2751e4da052195db96aaa90549fba398208bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pecka?= Date: Wed, 23 Jul 2025 14:27:26 +0200 -Subject: [PATCH 11/17] refactor: event streams use named constructors -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit +Subject: [PATCH 07/13] refactor: event streams use named constructors Organization: Wires This commit refactors the EventStream and NotificationStream to use @@ -17,7 +14,7 @@ named constructors which perform the double initialization themselves. This way, the code is more readable and the intention should be clearer. Change-Id: Iac96c49c20670dfe924d7c8db33328ed9c2fc9dd -Signed-off-by: Mattias Walström +Signed-off-by: Joachim Wiberg --- src/clock.cpp | 3 +-- src/http/EventStream.cpp | 20 ++++++++++++++++++++ diff --git a/package/rousette/0012-refactor-a-better-convention-for-weak_from_this-lock.patch b/package/rousette/0008-refactor-a-better-convention-for-weak_from_this-lock.patch similarity index 93% rename from package/rousette/0012-refactor-a-better-convention-for-weak_from_this-lock.patch rename to package/rousette/0008-refactor-a-better-convention-for-weak_from_this-lock.patch index 8bdd105c1..d02e90562 100644 --- a/package/rousette/0012-refactor-a-better-convention-for-weak_from_this-lock.patch +++ b/package/rousette/0008-refactor-a-better-convention-for-weak_from_this-lock.patch @@ -1,16 +1,13 @@ -From f4602a03adc9134a9b7a9d338e900b40557da6c4 Mon Sep 17 00:00:00 2001 +From e98e079d0fdedf48facbfcf187950946c1ffed7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Kundr=C3=A1t?= Date: Thu, 7 Aug 2025 12:14:02 +0200 -Subject: [PATCH 12/17] refactor: a better convention for weak_from_this->lock -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit +Subject: [PATCH 08/13] refactor: a better convention for weak_from_this->lock Organization: Wires It is not a "client", so let's stop calling it a "client". My bad. Change-Id: Id8dc4d92c3ade8d86697366d0102e84bd466f504 -Signed-off-by: Mattias Walström +Signed-off-by: Joachim Wiberg --- src/http/EventStream.cpp | 44 ++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/package/rousette/0008-tests-use-std-string-starts_with.patch b/package/rousette/0008-tests-use-std-string-starts_with.patch deleted file mode 100644 index 8c07b9243..000000000 --- a/package/rousette/0008-tests-use-std-string-starts_with.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 9961430bacdd8dbac64a01b2a2ffb6a4b7e806b6 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pecka?= -Date: Tue, 13 May 2025 13:48:35 +0200 -Subject: [PATCH 08/17] tests: use std::string::starts_with -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit -Organization: Wires - -We are C++20, so we can use line, which is more readable. - -Change-Id: I40d4038b421f6bc1fcf320f609b50d5ce7018a45 -Signed-off-by: Mattias Walström ---- - tests/restconf_utils.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/tests/restconf_utils.cpp b/tests/restconf_utils.cpp -index cbfce2c..08b9623 100644 ---- a/tests/restconf_utils.cpp -+++ b/tests/restconf_utils.cpp -@@ -228,7 +228,7 @@ std::vector SSEClient::parseEvents(const std::string& msg) - std::string event; - - while (std::getline(iss, line)) { -- if (line.compare(0, prefix.size(), prefix) == 0) { -+ if (line.starts_with(prefix)) { - event += line.substr(prefix.size()); - } else if (line.empty()) { - res.emplace_back(std::move(event)); --- -2.43.0 - diff --git a/package/rousette/0013-fix-a-possible-bad_weak_ptr-exception.patch b/package/rousette/0009-fix-a-possible-bad_weak_ptr-exception.patch similarity index 79% rename from package/rousette/0013-fix-a-possible-bad_weak_ptr-exception.patch rename to package/rousette/0009-fix-a-possible-bad_weak_ptr-exception.patch index 3c3968133..99cbeade5 100644 --- a/package/rousette/0013-fix-a-possible-bad_weak_ptr-exception.patch +++ b/package/rousette/0009-fix-a-possible-bad_weak_ptr-exception.patch @@ -1,15 +1,12 @@ -From 4e9b535a59861f25c0602eaa1fc39126d7cd9899 Mon Sep 17 00:00:00 2001 +From de7c55a1e8d3dda20ee3dc408612f2ddb309e888 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Kundr=C3=A1t?= Date: Thu, 7 Aug 2025 12:21:54 +0200 -Subject: [PATCH 13/17] fix a possible bad_weak_ptr exception -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit +Subject: [PATCH 09/13] fix a possible bad_weak_ptr exception Organization: Wires Change-Id: I8c7f7a943a1d848f15527988cb76c2a0a10089e6 Fixes: 4eae6200 (close long-lived connections on SIGTERM) -Signed-off-by: Mattias Walström +Signed-off-by: Joachim Wiberg --- src/http/EventStream.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/rousette/0009-tests-add-SSE-event-watcher-for-comments.patch b/package/rousette/0009-tests-add-SSE-event-watcher-for-comments.patch deleted file mode 100644 index e83c58684..000000000 --- a/package/rousette/0009-tests-add-SSE-event-watcher-for-comments.patch +++ /dev/null @@ -1,172 +0,0 @@ -From 746c0cdfef6808f393be7946630b8acbb0636706 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pecka?= -Date: Tue, 22 Jul 2025 17:47:50 +0200 -Subject: [PATCH 09/17] tests: add SSE event watcher for comments -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit -Organization: Wires - -I want to test whether client receives even the Server Sent Events -which should be ignored, i.e., lines starting with colon. - -Change-Id: If54f0af05b4884aab01325f12fd0a6859791b41b -Signed-off-by: Mattias Walström ---- - tests/event_watchers.cpp | 7 ++++++- - tests/event_watchers.h | 4 +++- - tests/restconf_utils.cpp | 36 ++++++++++++++++++++---------------- - tests/restconf_utils.h | 12 +++++++++--- - 4 files changed, 38 insertions(+), 21 deletions(-) - -diff --git a/tests/event_watchers.cpp b/tests/event_watchers.cpp -index 690338e..26ba951 100644 ---- a/tests/event_watchers.cpp -+++ b/tests/event_watchers.cpp -@@ -64,7 +64,7 @@ void RestconfNotificationWatcher::setDataFormat(const libyang::DataFormat dataFo - this->dataFormat = dataFormat; - } - --void RestconfNotificationWatcher::operator()(const std::string& msg) const -+void RestconfNotificationWatcher::dataEvent(const std::string& msg) const - { - spdlog::trace("Client received data: {}", msg); - auto notifDataNode = ctx.parseOp(msg, -@@ -79,3 +79,8 @@ void RestconfNotificationWatcher::operator()(const std::string& msg) const - - data(*dataRoot->printStr(libyang::DataFormat::JSON, libyang::PrintFlags::Shrink)); - } -+ -+void RestconfNotificationWatcher::commentEvent(const std::string& msg) const -+{ -+ comment(msg); -+} -diff --git a/tests/event_watchers.h b/tests/event_watchers.h -index 3b533ba..7022b64 100644 ---- a/tests/event_watchers.h -+++ b/tests/event_watchers.h -@@ -39,8 +39,10 @@ struct RestconfNotificationWatcher { - - RestconfNotificationWatcher(const libyang::Context& ctx); - void setDataFormat(const libyang::DataFormat dataFormat); -- void operator()(const std::string& msg) const; -+ void dataEvent(const std::string& msg) const; -+ void commentEvent(const std::string& msg) const; - -+ MAKE_CONST_MOCK1(comment, void(const std::string&)); - MAKE_CONST_MOCK1(data, void(const std::string&)); - }; - -diff --git a/tests/restconf_utils.cpp b/tests/restconf_utils.cpp -index 08b9623..5b1ebe3 100644 ---- a/tests/restconf_utils.cpp -+++ b/tests/restconf_utils.cpp -@@ -169,10 +169,11 @@ SSEClient::SSEClient( - const std::string& server_address, - const std::string& server_port, - std::binary_semaphore& requestSent, -- const RestconfNotificationWatcher& notification, -+ const RestconfNotificationWatcher& eventWatcher, - const std::string& uri, - const std::map& headers, -- const boost::posix_time::seconds silenceTimeout) -+ const boost::posix_time::seconds silenceTimeout, -+ const ReportIgnoredLines reportIgnoredLines) - : client(std::make_shared(io, server_address, server_port)) - , t(io, silenceTimeout) - { -@@ -191,17 +192,15 @@ SSEClient::SSEClient( - } - }); - -- client->on_connect([&, uri, reqHeaders, silenceTimeout, server_address, server_port](auto) { -+ client->on_connect([&, uri, reqHeaders, silenceTimeout, server_address, server_port, reportIgnoredLines](auto) { - boost::system::error_code ec; - - auto req = client->submit(ec, "GET", serverAddressAndPort(server_address, server_port) + uri, "", reqHeaders); -- req->on_response([&, silenceTimeout](const ng_client::response& res) { -+ req->on_response([&, silenceTimeout, reportIgnoredLines](const ng_client::response& res) { - requestSent.release(); -- res.on_data([&, silenceTimeout](const uint8_t* data, std::size_t len) { -+ res.on_data([&, silenceTimeout, reportIgnoredLines](const uint8_t* data, std::size_t len) { - // not a production-ready code. In real-life condition the data received in one callback might probably be incomplete -- for (const auto& event : parseEvents(std::string(reinterpret_cast(data), len))) { -- notification(event); -- } -+ parseEvents(std::string(reinterpret_cast(data), len), eventWatcher, reportIgnoredLines); - t.expires_from_now(silenceTimeout); - }); - }); -@@ -218,25 +217,30 @@ SSEClient::SSEClient( - }); - } - --std::vector SSEClient::parseEvents(const std::string& msg) -+void SSEClient::parseEvents(const std::string& msg, const RestconfNotificationWatcher& eventWatcher, const ReportIgnoredLines reportIgnoredLines) - { -- static const std::string prefix = "data:"; -+ static const std::string dataPrefix = "data:"; -+ static const std::string ignorePrefix = ":"; - -- std::vector res; - std::istringstream iss(msg); - std::string line; - std::string event; - - while (std::getline(iss, line)) { -- if (line.starts_with(prefix)) { -- event += line.substr(prefix.size()); -- } else if (line.empty()) { -- res.emplace_back(std::move(event)); -+ if (line.starts_with(ignorePrefix) && reportIgnoredLines == ReportIgnoredLines::Yes) { -+ eventWatcher.commentEvent(line); -+ } else if (line.starts_with(ignorePrefix)) { -+ continue; -+ } else if (line.starts_with(dataPrefix)) { -+ event += line.substr(dataPrefix.size()); -+ } else if (line.empty() && !event.empty()) { -+ eventWatcher.dataEvent(event); - event.clear(); -+ } else if (line.empty()) { -+ continue; - } else { - CAPTURE(msg); - FAIL("Unprefixed response"); - } - } -- return res; - } -diff --git a/tests/restconf_utils.h b/tests/restconf_utils.h -index 9efe398..9dde10b 100644 ---- a/tests/restconf_utils.h -+++ b/tests/restconf_utils.h -@@ -88,17 +88,23 @@ struct SSEClient { - std::shared_ptr client; - boost::asio::deadline_timer t; - -+ enum class ReportIgnoredLines { -+ No, -+ Yes, -+ }; -+ - SSEClient( - boost::asio::io_service& io, - const std::string& server_address, - const std::string& server_port, - std::binary_semaphore& requestSent, -- const RestconfNotificationWatcher& notification, -+ const RestconfNotificationWatcher& eventWatcher, - const std::string& uri, - const std::map& headers, -- const boost::posix_time::seconds silenceTimeout = boost::posix_time::seconds(1)); // test code; the server should respond "soon" -+ const boost::posix_time::seconds silenceTimeout = boost::posix_time::seconds(1), // test code; the server should respond "soon" -+ const ReportIgnoredLines reportIgnoredLines = ReportIgnoredLines::No); - -- static std::vector parseEvents(const std::string& msg); -+ static void parseEvents(const std::string& msg, const RestconfNotificationWatcher& eventWatcher, const ReportIgnoredLines reportIgnoredLines); - }; - - #define PREPARE_LOOP_WITH_EXCEPTIONS \ --- -2.43.0 - diff --git a/package/rousette/0014-http-add-optional-callbacks-to-EventStream.patch b/package/rousette/0010-http-add-optional-callbacks-to-EventStream.patch similarity index 95% rename from package/rousette/0014-http-add-optional-callbacks-to-EventStream.patch rename to package/rousette/0010-http-add-optional-callbacks-to-EventStream.patch index efab0a1d6..5ffb3beea 100644 --- a/package/rousette/0014-http-add-optional-callbacks-to-EventStream.patch +++ b/package/rousette/0010-http-add-optional-callbacks-to-EventStream.patch @@ -1,10 +1,7 @@ -From 6bca750f866b5b14c4d9c3da68e5c8f1e4eee36c Mon Sep 17 00:00:00 2001 +From 0f034d6da3e6d0a91bbe09717cb33aaf3a3ed747 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pecka?= Date: Mon, 19 May 2025 12:11:09 +0200 -Subject: [PATCH 14/17] http: add optional callbacks to EventStream -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit +Subject: [PATCH 10/13] http: add optional callbacks to EventStream Organization: Wires In some cases, it might be useful to have a callback that is called when @@ -14,7 +11,7 @@ implementation where we would like to clean up stuff after client disconnects. Change-Id: Icfc2959e38b812b7c18f45976415209b29151c7b -Signed-off-by: Mattias Walström +Signed-off-by: Joachim Wiberg --- src/http/EventStream.cpp | 18 +++++++++++++++--- src/http/EventStream.h | 10 ++++++++-- diff --git a/package/rousette/0015-restconf-add-internal-RPC-handler-dispatcher.patch b/package/rousette/0011-restconf-add-internal-RPC-handler-dispatcher.patch similarity index 93% rename from package/rousette/0015-restconf-add-internal-RPC-handler-dispatcher.patch rename to package/rousette/0011-restconf-add-internal-RPC-handler-dispatcher.patch index 6d703c2db..4aa75f32d 100644 --- a/package/rousette/0015-restconf-add-internal-RPC-handler-dispatcher.patch +++ b/package/rousette/0011-restconf-add-internal-RPC-handler-dispatcher.patch @@ -1,10 +1,7 @@ -From f6ee629de8abef42a24c42b185052b0c8e78bd6b Mon Sep 17 00:00:00 2001 +From d72adb3da31cb509e64c8f33174e375fa9468b0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pecka?= Date: Mon, 19 May 2025 12:23:16 +0200 -Subject: [PATCH 15/17] restconf: add internal RPC handler dispatcher -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit +Subject: [PATCH 11/13] restconf: add internal RPC handler dispatcher Organization: Wires This code adds a new internal RPC handler dispatcher that checks if user @@ -14,7 +11,7 @@ So far, there are no RPCs processed, but support for the ietf-subscribed-notifications:establish-subscription RPC is coming soon. Change-Id: I99121a511011229e4098f95e91601b39d333444a -Signed-off-by: Mattias Walström +Signed-off-by: Joachim Wiberg --- src/restconf/Server.cpp | 24 ++++++++++++++++++++---- tests/restconf-rpc.cpp | 18 ++++++++++++++++++ diff --git a/package/rousette/0017-EventStream-fix-possible-heap-use-after-free.patch b/package/rousette/0012-EventStream-fix-possible-heap-use-after-free.patch similarity index 98% rename from package/rousette/0017-EventStream-fix-possible-heap-use-after-free.patch rename to package/rousette/0012-EventStream-fix-possible-heap-use-after-free.patch index 205af21b4..e0069edef 100644 --- a/package/rousette/0017-EventStream-fix-possible-heap-use-after-free.patch +++ b/package/rousette/0012-EventStream-fix-possible-heap-use-after-free.patch @@ -1,10 +1,7 @@ -From 1067e05674633b97d64b428686aff44822230c5f Mon Sep 17 00:00:00 2001 +From 86ea8a1fdc2cb8baa1edbd32bd4f8b45acdef816 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pecka?= Date: Mon, 8 Sep 2025 20:24:15 +0200 -Subject: [PATCH 17/17] EventStream: fix possible heap-use-after-free -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit +Subject: [PATCH 12/13] EventStream: fix possible heap-use-after-free Organization: Wires I have started getting heap-use-after-free errors from sanitizers (see @@ -64,7 +61,7 @@ before actually resuming the response. (...) Change-Id: Ifdb1f8610cacffca3bb49da17aa9b1d267cdd472 -Signed-off-by: Mattias Walström +Signed-off-by: Joachim Wiberg --- src/http/EventStream.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/package/rousette/0013-Add-log-level-LEVEL-command-line-option.patch b/package/rousette/0013-Add-log-level-LEVEL-command-line-option.patch new file mode 100644 index 000000000..b2c24d5e8 --- /dev/null +++ b/package/rousette/0013-Add-log-level-LEVEL-command-line-option.patch @@ -0,0 +1,78 @@ +From ba43271df7cc83806a08d6937719544786fd331d Mon Sep 17 00:00:00 2001 +From: Joachim Wiberg +Date: Sun, 28 Sep 2025 06:04:12 +0200 +Subject: [PATCH 13/13] Add '--log-level LEVEL' command line option +Organization: Wires + +The default 'trace' log level is quite verbose for production systems. +This commit changes the default to 'info' and adds a command line option +to control the log level. + +Signed-off-by: Joachim Wiberg +--- + src/restconf/main.cpp | 27 +++++++++++++++++++++++++-- + 1 file changed, 25 insertions(+), 2 deletions(-) + +diff --git a/src/restconf/main.cpp b/src/restconf/main.cpp +index 477e846..f253421 100644 +--- a/src/restconf/main.cpp ++++ b/src/restconf/main.cpp +@@ -26,11 +26,12 @@ + static const char usage[] = + R"(Rousette - RESTCONF server + Usage: +- rousette [--syslog] [--timeout ] [--help] ++ rousette [--syslog] [--timeout ] [--log-level ] [--help] + Options: + -h --help Show this screen. + -t --timeout Change default timeout in sysrepo (if not set, use sysrepo internal). + --syslog Log to syslog. ++ --log-level Set log level (trace, debug, info, warn, error, critical, off) [default: info]. + )"; + #ifdef HAVE_SYSTEMD + +@@ -75,10 +76,32 @@ int main(int argc, char* argv []) + { + auto args = docopt::docopt(usage, {argv + 1, argv + argc}, true,""/* version */, true); + auto timeout = std::chrono::milliseconds{0}; ++ auto logLevel = spdlog::level::info; + + if (args["--timeout"]) { + timeout = std::chrono::milliseconds{args["--timeout"].asLong() * 1000}; + } ++ ++ if (args["--log-level"]) { ++ auto levelStr = args["--log-level"].asString(); ++ if (levelStr == "trace") { ++ logLevel = spdlog::level::trace; ++ } else if (levelStr == "debug") { ++ logLevel = spdlog::level::debug; ++ } else if (levelStr == "info") { ++ logLevel = spdlog::level::info; ++ } else if (levelStr == "warn" || levelStr == "warning") { ++ logLevel = spdlog::level::warn; ++ } else if (levelStr == "error" || levelStr == "err") { ++ logLevel = spdlog::level::err; ++ } else if (levelStr == "critical") { ++ logLevel = spdlog::level::critical; ++ } else if (levelStr == "off") { ++ logLevel = spdlog::level::off; ++ } else { ++ throw std::runtime_error("Invalid log level: " + levelStr + ". Valid levels: trace, debug, info, warn, error, critical, off"); ++ } ++ } + if (args["--syslog"].asBool()) { + auto syslog_sink = std::make_shared("rousette", LOG_PID, LOG_USER, true); + auto logger = std::make_shared("rousette", syslog_sink); +@@ -94,7 +117,7 @@ int main(int argc, char* argv []) + auto logger = std::make_shared("rousette", stdout_sink); + spdlog::set_default_logger(logger); + } +- spdlog::set_level(spdlog::level::trace); ++ spdlog::set_level(logLevel); + + /* We will parse URIs using boost::spirit's alnum/alpha/... matchers which are locale-dependent. + * Let's use something stable no matter what the system is using +-- +2.43.0 + diff --git a/package/rousette/0016-tests-processing-incomplete-events-in-SSE-client.patch b/package/rousette/0016-tests-processing-incomplete-events-in-SSE-client.patch deleted file mode 100644 index 916aede42..000000000 --- a/package/rousette/0016-tests-processing-incomplete-events-in-SSE-client.patch +++ /dev/null @@ -1,120 +0,0 @@ -From b7966613b43b01402c9f0af286a0b3237161779d Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pecka?= -Date: Tue, 2 Sep 2025 15:33:43 +0200 -Subject: [PATCH 16/17] tests: processing incomplete events in SSE client -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit -Organization: Wires - -During my testing I noticed that I obtained incomplete message in -on_data callback. The message was split into two callbacks. -This commit fixes the FIXME by buffering the data and processing -a complete event, once available. - -Change-Id: Ied07e69e8b518f20fcc82134a4c041e7ec3a06d6 -Signed-off-by: Mattias Walström ---- - tests/restconf_utils.cpp | 53 +++++++++++++++++++++++----------------- - tests/restconf_utils.h | 3 ++- - 2 files changed, 33 insertions(+), 23 deletions(-) - -diff --git a/tests/restconf_utils.cpp b/tests/restconf_utils.cpp -index 5b1ebe3..740b1fa 100644 ---- a/tests/restconf_utils.cpp -+++ b/tests/restconf_utils.cpp -@@ -199,8 +199,8 @@ SSEClient::SSEClient( - req->on_response([&, silenceTimeout, reportIgnoredLines](const ng_client::response& res) { - requestSent.release(); - res.on_data([&, silenceTimeout, reportIgnoredLines](const uint8_t* data, std::size_t len) { -- // not a production-ready code. In real-life condition the data received in one callback might probably be incomplete -- parseEvents(std::string(reinterpret_cast(data), len), eventWatcher, reportIgnoredLines); -+ dataBuffer.append(std::string(reinterpret_cast(data), len)); -+ parseEvents(eventWatcher, reportIgnoredLines); - t.expires_from_now(silenceTimeout); - }); - }); -@@ -217,30 +217,39 @@ SSEClient::SSEClient( - }); - } - --void SSEClient::parseEvents(const std::string& msg, const RestconfNotificationWatcher& eventWatcher, const ReportIgnoredLines reportIgnoredLines) -+void SSEClient::parseEvents(const RestconfNotificationWatcher& eventWatcher, const ReportIgnoredLines reportIgnoredLines) - { - static const std::string dataPrefix = "data:"; - static const std::string ignorePrefix = ":"; - -- std::istringstream iss(msg); -- std::string line; -- std::string event; -- -- while (std::getline(iss, line)) { -- if (line.starts_with(ignorePrefix) && reportIgnoredLines == ReportIgnoredLines::Yes) { -- eventWatcher.commentEvent(line); -- } else if (line.starts_with(ignorePrefix)) { -- continue; -- } else if (line.starts_with(dataPrefix)) { -- event += line.substr(dataPrefix.size()); -- } else if (line.empty() && !event.empty()) { -- eventWatcher.dataEvent(event); -- event.clear(); -- } else if (line.empty()) { -- continue; -- } else { -- CAPTURE(msg); -- FAIL("Unprefixed response"); -+ std::size_t pos = 0; -+ constexpr auto EVENT_SEPARATOR = "\n\n"; // FIXME: Not a production-ready code; does not deal with all possible newline combinations of CR and LF -+ -+ while ((pos = dataBuffer.find(EVENT_SEPARATOR)) != std::string::npos) { -+ // extract event -+ auto rawEvent = dataBuffer.substr(0, pos + std::char_traits::length(EVENT_SEPARATOR)); -+ std::istringstream stream(rawEvent); -+ dataBuffer.erase(0, pos + std::char_traits::length(EVENT_SEPARATOR)); -+ -+ // split on newlines -+ std::string line; -+ std::string event; -+ while (std::getline(stream, line)) { -+ if (line.starts_with(ignorePrefix) && reportIgnoredLines == ReportIgnoredLines::Yes) { -+ eventWatcher.commentEvent(line); -+ } else if (line.starts_with(ignorePrefix)) { -+ continue; -+ } else if (line.starts_with(dataPrefix)) { -+ event += line.substr(dataPrefix.size()); -+ } else if (line.empty() && !event.empty()) { -+ eventWatcher.dataEvent(event); -+ event.clear(); -+ } else if (line.empty()) { -+ continue; -+ } else { -+ CAPTURE(rawEvent); -+ FAIL("Unprefixed response"); -+ } - } - } - } -diff --git a/tests/restconf_utils.h b/tests/restconf_utils.h -index 9dde10b..c35df54 100644 ---- a/tests/restconf_utils.h -+++ b/tests/restconf_utils.h -@@ -87,6 +87,7 @@ void setupRealNacm(sysrepo::Session session); - struct SSEClient { - std::shared_ptr client; - boost::asio::deadline_timer t; -+ std::string dataBuffer; - - enum class ReportIgnoredLines { - No, -@@ -104,7 +105,7 @@ struct SSEClient { - const boost::posix_time::seconds silenceTimeout = boost::posix_time::seconds(1), // test code; the server should respond "soon" - const ReportIgnoredLines reportIgnoredLines = ReportIgnoredLines::No); - -- static void parseEvents(const std::string& msg, const RestconfNotificationWatcher& eventWatcher, const ReportIgnoredLines reportIgnoredLines); -+ void parseEvents(const RestconfNotificationWatcher& eventWatcher, const ReportIgnoredLines reportIgnoredLines); - }; - - #define PREPARE_LOOP_WITH_EXCEPTIONS \ --- -2.43.0 - diff --git a/package/rousette/Config.in b/package/rousette/Config.in index ae104321e..b5da8bc60 100644 --- a/package/rousette/Config.in +++ b/package/rousette/Config.in @@ -13,4 +13,6 @@ config BR2_PACKAGE_ROUSETTE select BR2_PACKAGE_SYSREPO_CPP select BR2_PACKAGE_DATE help - RESTconf server + A RESTCONF server for sysrepo + + https://github.com/CESNET/rousette diff --git a/patches/libyang/3.12.2/0001-lyd_validate_obsolete-change-log-level-warning-debug.patch b/patches/libyang/3.13.5/0001-lyd_validate_obsolete-change-log-level-warning-debug.patch similarity index 100% rename from patches/libyang/3.12.2/0001-lyd_validate_obsolete-change-log-level-warning-debug.patch rename to patches/libyang/3.13.5/0001-lyd_validate_obsolete-change-log-level-warning-debug.patch diff --git a/patches/sysklogd/2.7.0/0001-Drop-redundant-initial-call-to-localtime_r.patch b/patches/sysklogd/2.7.0/0001-Drop-redundant-initial-call-to-localtime_r.patch deleted file mode 100644 index 7ebea3f1c..000000000 --- a/patches/sysklogd/2.7.0/0001-Drop-redundant-initial-call-to-localtime_r.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 8e230d3f2e1e33691998862e99ab4e13410527b9 Mon Sep 17 00:00:00 2001 -From: Joachim Wiberg -Date: Wed, 8 Jan 2025 07:49:06 +0100 -Subject: [PATCH 01/16] Drop redundant initial call to localtime_r() -Organization: Wires - -Fixes #94 - -Signed-off-by: Joachim Wiberg ---- - src/syslogd.c | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/src/syslogd.c b/src/syslogd.c -index 17115fc..5ad4dbc 100644 ---- a/src/syslogd.c -+++ b/src/syslogd.c -@@ -1508,7 +1508,6 @@ void printsys(char *msg) - */ - if (KeepKernTime || !sys_seqno_init) { - now = boot_time + ustime / 1000000; -- localtime_r(&now, &buffer.timestamp.tm); - } else { - struct timeval tv; - --- -2.43.0 - diff --git a/patches/sysklogd/2.7.0/0002-fix-local-hostname-support.patch b/patches/sysklogd/2.7.0/0002-fix-local-hostname-support.patch deleted file mode 100644 index 274d646a6..000000000 --- a/patches/sysklogd/2.7.0/0002-fix-local-hostname-support.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 13c8071821ad27247061dbf4efe5a34505520bc1 Mon Sep 17 00:00:00 2001 -From: Patrick Oppenlander -Date: Thu, 23 Jan 2025 15:22:57 +1100 -Subject: [PATCH 02/16] fix local hostname '+@', '-@' support -Organization: Wires - -Signed-off-by: Patrick Oppenlander -Signed-off-by: Joachim Wiberg ---- - src/syslogd.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/syslogd.c b/src/syslogd.c -index 5ad4dbc..c07e143 100644 ---- a/src/syslogd.c -+++ b/src/syslogd.c -@@ -3895,7 +3895,7 @@ static int cfparse(FILE *fp, struct files *newf) - char *local = LocalHostName; - - while (i < sizeof(host) - 1 && *local) -- host[i++] = *local; -+ host[i++] = *local++; - p++; - } else if (!isprint(*p) || isblank(*p)) - break; --- -2.43.0 - diff --git a/patches/sysklogd/2.7.0/0003-Fix-95-printsys-minor-code-simplification.patch b/patches/sysklogd/2.7.0/0003-Fix-95-printsys-minor-code-simplification.patch deleted file mode 100644 index e41beceef..000000000 --- a/patches/sysklogd/2.7.0/0003-Fix-95-printsys-minor-code-simplification.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 979edb2515d24174fe9a3e2d6402d62172028c52 Mon Sep 17 00:00:00 2001 -From: Joachim Wiberg -Date: Sat, 1 Feb 2025 20:33:19 +0100 -Subject: [PATCH 03/16] Fix #95: printsys(), minor code simplification -Organization: Wires - -Signed-off-by: Joachim Wiberg ---- - src/syslogd.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/syslogd.c b/src/syslogd.c -index c07e143..f812d9e 100644 ---- a/src/syslogd.c -+++ b/src/syslogd.c -@@ -1511,11 +1511,11 @@ void printsys(char *msg) - } else { - struct timeval tv; - -- now = time(NULL); - if (gettimeofday(&tv, NULL) == -1) { - tv.tv_sec = time(NULL); - tv.tv_usec = 0; - } -+ now = tv.tv_sec; - ustime = tv.tv_usec; - } - --- -2.43.0 - diff --git a/patches/sysklogd/2.7.0/0004-Fix-98-fprintlog_first-drop-superfluous-call.patch b/patches/sysklogd/2.7.0/0004-Fix-98-fprintlog_first-drop-superfluous-call.patch deleted file mode 100644 index e491ac156..000000000 --- a/patches/sysklogd/2.7.0/0004-Fix-98-fprintlog_first-drop-superfluous-call.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 360dfe4b6b17378990daef797a7e6a551c799b98 Mon Sep 17 00:00:00 2001 -From: Joachim Wiberg -Date: Sun, 2 Feb 2025 06:34:16 +0100 -Subject: [PATCH 04/16] Fix #98: fprintlog_first(), drop superfluous call -Organization: Wires - -The call to check_timestamp() is not needed (anymore) already called in -logmsg(), which is the only way of entering this function (today). - -Signed-off-by: Joachim Wiberg ---- - src/syslogd.c | 3 --- - 1 file changed, 3 deletions(-) - -diff --git a/src/syslogd.c b/src/syslogd.c -index f812d9e..6748cc6 100644 ---- a/src/syslogd.c -+++ b/src/syslogd.c -@@ -2424,9 +2424,6 @@ static void fprintlog_first(struct filed *f, struct buf_msg *buffer) - - logit("Called fprintlog_first(), "); - -- /* Messages generated by syslogd itself may not have a timestamp */ -- check_timestamp(buffer); -- - if (f->f_type != F_FORW_SUSP && f->f_type != F_FORW_UNKN) { - f->f_time = timer_now(); - f->f_prevcount = 0; --- -2.43.0 - diff --git a/patches/sysklogd/2.7.0/0005-Fix-100-parsing-of-userspace-messages-in-dev-kmsg.patch b/patches/sysklogd/2.7.0/0005-Fix-100-parsing-of-userspace-messages-in-dev-kmsg.patch deleted file mode 100644 index c4121312f..000000000 --- a/patches/sysklogd/2.7.0/0005-Fix-100-parsing-of-userspace-messages-in-dev-kmsg.patch +++ /dev/null @@ -1,118 +0,0 @@ -From 472c3d6a24e43f8186ce069da267e9ae52c18699 Mon Sep 17 00:00:00 2001 -From: Joachim Wiberg -Date: Thu, 27 Feb 2025 19:07:11 +0100 -Subject: [PATCH 05/16] Fix #100: parsing of userspace messages in /dev/kmsg -Organization: Wires - -Some applications that inject log messages to /dev/kmsg do not use a -space separating the APP_NAME (and optional PID), while some do. So we -need to support the following variants for the human readable payload, -as defined in [1]: - - 1. APP: MESG - 2. APP:MESG - 3. APP MESG - 4. APP[PID]: MESG - 5. APP[PID]:MESG - 6. APP[PID] MESG - -Prior to this change, 4 & 5 were treated the same, causing #100, and the -other alternatives were not supported at all. This patch drops the bad -local implementation in printsys() in favor of the generic parsemsg() -helper function for RFC3164 messages, which properly extracts both the -application name and PID if present. - -This helper's ': ' separator check is relaxed since some clients only -send ':' (no space) before the message. The RFC can be interpreted -either way, so we now allow either/or or no separator. - -[1]: https://www.kernel.org/doc/Documentation/ABI/testing/dev-kmsg - -Signed-off-by: Joachim Wiberg ---- - src/syslogd.c | 55 +++++++++++++++++++++++++++------------------------ - 1 file changed, 29 insertions(+), 26 deletions(-) - -diff --git a/src/syslogd.c b/src/syslogd.c -index 6748cc6..b52af73 100644 ---- a/src/syslogd.c -+++ b/src/syslogd.c -@@ -1242,16 +1242,38 @@ parsemsg_rfc3164_app_name_procid(char **msg, char **app_name, char **procid) - procid_length = 0; - } - -- /* Separator. */ -- if (m[0] != ':' || m[1] != ' ') -- goto bad; -+ /* -+ * Relaxed separator check. This function is used both for -+ * incoming remote/local syslog messages, and the /dev/kmsg -+ * printsys() function. -+ * -+ * RFC3164 sec. 4.1.3 states that: "the conclusion of the TAG -+ * field has been seen to be the left square bracket character -+ * ('['), a colon character (':'), or a space character". This -+ * uncertainty continues in sec. 5.3: "a colon and a space -+ * character *usually* follow the TAG" (emphasis added). -+ * -+ * Hence, we should be prepared for any of: -+ * - APP: msg -+ * - APP:msg -+ * - APP msg -+ * - APP[PID]: msg -+ * - APP[PID]:msg -+ * - APP[PID] msg -+ */ -+ if (*m == ':') { -+ m++; -+ if (isblank(*m)) -+ m++; -+ } else if (isblank(*m)) -+ m++; - - /* Split strings from input. */ - app_name_begin[app_name_length] = '\0'; - if (procid_begin != 0) - procid_begin[procid_length] = '\0'; - -- *msg = m + 2; -+ *msg = m; - *app_name = app_name_begin; - *procid = procid_begin; - return; -@@ -1630,29 +1652,10 @@ void printsys(char *msg) - /* - * Check for user writing to /dev/kmsg before /dev/log - * is up. Syntax to write: APP_NAME[PROC_ID]:msg -+ * Kernel facility is 0, anything != 0 is userspace. - */ -- if (buffer.pri & LOG_FACMASK) { -- for (q = p; *q && !isspace(*q) && *q != '['; q++) -- ; -- -- if (*q == '[') { -- char *ptr = &q[1]; -- -- while (*ptr && isdigit(*ptr)) -- ptr++; -- -- if (ptr[0] == ']' && ptr[1] == ':') { -- *ptr++ = 0; -- *q++ = 0; -- -- buffer.app_name = p; -- buffer.proc_id = q; -- -- /* user log message cont. here */ -- p = &ptr[1]; -- } -- } -- } -+ if (buffer.pri & LOG_FACMASK) -+ parsemsg_rfc3164_app_name_procid(&p, &buffer.app_name, &buffer.proc_id); - - q = lp; - while (*p != '\0' && (c = *p++) != '\n' && q < &line[MAXLINE]) --- -2.43.0 - diff --git a/patches/sysklogd/2.7.0/0006-Fix-93-update-documentation-on-behavior-of-T-flag.patch b/patches/sysklogd/2.7.0/0006-Fix-93-update-documentation-on-behavior-of-T-flag.patch deleted file mode 100644 index ea55e66a5..000000000 --- a/patches/sysklogd/2.7.0/0006-Fix-93-update-documentation-on-behavior-of-T-flag.patch +++ /dev/null @@ -1,99 +0,0 @@ -From 8cdf4b0c4b9914b8b7aa1c1c1d76dad0fa429115 Mon Sep 17 00:00:00 2001 -From: Joachim Wiberg -Date: Sat, 1 Mar 2025 09:23:01 +0100 -Subject: [PATCH 06/16] Fix #93: update documentation on behavior of -T flag -Organization: Wires - -Signed-off-by: Joachim Wiberg ---- - man/syslogd.8 | 17 ++++++++++------- - src/syslogd.c | 10 +++++----- - 2 files changed, 15 insertions(+), 12 deletions(-) - -diff --git a/man/syslogd.8 b/man/syslogd.8 -index f3e6ad2..7534529 100644 ---- a/man/syslogd.8 -+++ b/man/syslogd.8 -@@ -411,10 +411,13 @@ the command line option always wins, so it must be removed for - .Nm - to consider the .conf file option instead. - .It Fl T --Always use the local time and date for messages received from the network, --instead of the timestamp field supplied in the message by the remote host. --This is useful if some of the originating hosts cannot keep time properly --or are unable to generate a correct timestamp. -+Always use the local time and date for messages instead of the timestamp -+field in the log message. This applies to both messages received from a -+remote syslog server and locally originated. Useful if the originating -+hosts cannot keep time properly or are unable to generate a correct -+timestamp. See -+.Fl t -+for details on the timestamp of (local) kernel messages. - .It Fl t - Keep (trust) kernel timestamp. - .Pp -@@ -472,9 +475,9 @@ API included with the - .Nm sysklogd - project. - .Pp --The date and time are taken from the received message. If the format of --the timestamp field is incorrect, time obtained from the local host is --used instead. This can be overridden by the -+The date and time for a log message are by default read from the -+received message. If the format of the timestamp field is incorrect, -+the time of reception is used instead. See also the - .Fl T - flag. - .Sh SECURITY -diff --git a/src/syslogd.c b/src/syslogd.c -index b52af73..5a40732 100644 ---- a/src/syslogd.c -+++ b/src/syslogd.c -@@ -148,7 +148,7 @@ static int no_compress; /* don't compress messages (1=pipes, 2=all) */ - static int secure_opt; /* sink for others, log to remote, or only unix domain socks */ - static int secure_mode; /* same as above but from syslog.conf, only if cmdline unset */ - --static int RemoteAddDate; /* Always set the date on remote messages */ -+static int AlwaysAddDate; /* Always use our timestamp for log messages */ - static int RemoteHostname; /* Log remote hostname from the message */ - - static int KernLog = 1; /* Track kernel logs by default */ -@@ -458,7 +458,7 @@ int usage(int code) - " If specified twice, no socket at all will be opened, which also\n" - " disables support for logging to remote machines.\n" - " -t Keep kernel timestamp, even after initial ring buffer emptying\n" -- " -T Use local time and date for messages received from remote hosts\n" -+ " -T Use local time and date for log messages (both local and remote)\n" - " -? Show this help text\n" - " -v Show program version and exit\n" - "\n" -@@ -585,7 +585,7 @@ int main(int argc, char *argv[]) - break; - - case 'T': -- RemoteAddDate = 1; -+ AlwaysAddDate = 1; - break; - - case 't': /* keep/trust kernel timestamp always */ -@@ -1129,7 +1129,7 @@ parsemsg_rfc5424(const char *from, int pri, char *msg) - } - #undef PARSE_NUMBER - PARSE_CHAR("TIMESTAMP", ' '); -- if (!RemoteAddDate) -+ if (!AlwaysAddDate) - timestamp = ×tamp_remote; - } - -@@ -1311,7 +1311,7 @@ parsemsg_rfc3164(const char *from, int pri, char *msg) - - msg += RFC3164_DATELEN + 1; - -- if (!RemoteAddDate) { -+ if (!AlwaysAddDate) { - struct timeval tv; - time_t t_remote; - struct tm tm_now; --- -2.43.0 - diff --git a/patches/sysklogd/2.7.0/0007-Update-internal-timer-consistently.patch b/patches/sysklogd/2.7.0/0007-Update-internal-timer-consistently.patch deleted file mode 100644 index 7bd236a9b..000000000 --- a/patches/sysklogd/2.7.0/0007-Update-internal-timer-consistently.patch +++ /dev/null @@ -1,44 +0,0 @@ -From b5b4a4ecb893dd643fb25763fb9c6f6ca972725e Mon Sep 17 00:00:00 2001 -From: Joachim Wiberg -Date: Sun, 2 Mar 2025 13:56:46 +0100 -Subject: [PATCH 07/16] Update internal timer consistently -Organization: Wires - -Timer is already updated by parsemsg() before calling logmsg(). For -consistency, add explicit update also to printsys() (kernel) and -flog() (internally originated) messages. - -Issue #70 - -Signed-off-by: Joachim Wiberg ---- - src/syslogd.c | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/src/syslogd.c b/src/syslogd.c -index 5a40732..1737f7c 100644 ---- a/src/syslogd.c -+++ b/src/syslogd.c -@@ -1467,6 +1467,9 @@ void printsys(char *msg) - char *lp, *p, *q; - int c; - -+ /* Update current time before logging */ -+ timer_update(); -+ - lp = line; - for (p = msg; *p != '\0';) { - memset(&buffer, 0, sizeof(buffer)); -@@ -2669,6 +2672,9 @@ void flog(int pri, char *fmt, ...) - char proc_id[10]; - va_list ap; - -+ /* Update current time before logging */ -+ timer_update(); -+ - va_start(ap, fmt); - (void)vsnprintf(buf, sizeof(buf), fmt, ap); - va_end(ap); --- -2.43.0 - diff --git a/patches/sysklogd/2.7.0/0008-Update-ChangeLog-and-bump-version-for-upcoming-v2.7..patch b/patches/sysklogd/2.7.0/0008-Update-ChangeLog-and-bump-version-for-upcoming-v2.7..patch deleted file mode 100644 index eddea4afc..000000000 --- a/patches/sysklogd/2.7.0/0008-Update-ChangeLog-and-bump-version-for-upcoming-v2.7..patch +++ /dev/null @@ -1,61 +0,0 @@ -From d3362a104b414af2b352a15a6d1e92f823bdb9b6 Mon Sep 17 00:00:00 2001 -From: Joachim Wiberg -Date: Sun, 2 Mar 2025 14:06:37 +0100 -Subject: [PATCH 08/16] Update ChangeLog and bump version for upcoming v2.7.1 - release -Organization: Wires - -Signed-off-by: Joachim Wiberg ---- - ChangeLog.md | 14 ++++++++++++++ - configure.ac | 2 +- - 2 files changed, 15 insertions(+), 1 deletion(-) - -diff --git a/ChangeLog.md b/ChangeLog.md -index b96857f..aa3e793 100644 ---- a/ChangeLog.md -+++ b/ChangeLog.md -@@ -4,6 +4,19 @@ Change Log - All relevant changes to the project are documented in this file. - - -+[v2.7.1][UNRELEASED] - 2025-03-xx -+----------------------- -+ -+### Changes -+- Update `syslogd -T` documentation, it applies to messages originating -+ both locally and from both remote syslog servers, issue #93 -+ -+### Fixes -+- Fix #99: hostname filtering support, introduced in v2.7.0, broken -+- Fix #100: parsing of userspace messages in `/dev/kmsg` inserted an -+ extra space before the message payload -+ -+ - [v2.7.0][] - 2025-01-06 - ----------------------- - -@@ -667,6 +680,7 @@ and a replacement for `syslog.h` to enable new features in RFC5424. - - - [UNRELEASED]: https://github.com/troglobit/sysklogd/compare/v2.7.0...HEAD -+[v2.7.1]: https://github.com/troglobit/sysklogd/compare/v2.7.0...v2.7.1 - [v2.7.0]: https://github.com/troglobit/sysklogd/compare/v2.6.2...v2.7.0 - [v2.6.2]: https://github.com/troglobit/sysklogd/compare/v2.6.1...v2.6.2 - [v2.6.1]: https://github.com/troglobit/sysklogd/compare/v2.6.0...v2.6.1 -diff --git a/configure.ac b/configure.ac -index f387800..64de416 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -25,7 +25,7 @@ - # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - # SUCH DAMAGE. - --AC_INIT([sysklogd], [2.7.0], -+AC_INIT([sysklogd], [2.7.1-rc1], - [https://github.com/troglobit/sysklogd/issues],, - [https://github.com/troglobit/sysklogd]) - AC_CONFIG_AUX_DIR(aux) --- -2.43.0 - diff --git a/patches/sysklogd/2.7.0/0009-Bump-version-and-update-ChangeLog-for-v2.7.1-release.patch b/patches/sysklogd/2.7.0/0009-Bump-version-and-update-ChangeLog-for-v2.7.1-release.patch deleted file mode 100644 index ad46ff6af..000000000 --- a/patches/sysklogd/2.7.0/0009-Bump-version-and-update-ChangeLog-for-v2.7.1-release.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 5552a3ea0d025573a5e212d62ee3e04bd376c7c4 Mon Sep 17 00:00:00 2001 -From: Joachim Wiberg -Date: Mon, 3 Mar 2025 03:17:39 +0100 -Subject: [PATCH 09/16] Bump version and update ChangeLog for v2.7.1 release -Organization: Wires - -Signed-off-by: Joachim Wiberg ---- - ChangeLog.md | 4 ++-- - configure.ac | 2 +- - 2 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/ChangeLog.md b/ChangeLog.md -index aa3e793..12829c0 100644 ---- a/ChangeLog.md -+++ b/ChangeLog.md -@@ -4,12 +4,12 @@ Change Log - All relevant changes to the project are documented in this file. - - --[v2.7.1][UNRELEASED] - 2025-03-xx -+[v2.7.1][] - 2025-03-03 - ----------------------- - - ### Changes - - Update `syslogd -T` documentation, it applies to messages originating -- both locally and from both remote syslog servers, issue #93 -+ both locally and from remote syslog servers, issue #93 - - ### Fixes - - Fix #99: hostname filtering support, introduced in v2.7.0, broken -diff --git a/configure.ac b/configure.ac -index 64de416..a2cf9be 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -25,7 +25,7 @@ - # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - # SUCH DAMAGE. - --AC_INIT([sysklogd], [2.7.1-rc1], -+AC_INIT([sysklogd], [2.7.1], - [https://github.com/troglobit/sysklogd/issues],, - [https://github.com/troglobit/sysklogd]) - AC_CONFIG_AUX_DIR(aux) --- -2.43.0 - diff --git a/patches/sysklogd/2.7.0/0010-Fix-various-typos.patch b/patches/sysklogd/2.7.0/0010-Fix-various-typos.patch deleted file mode 100644 index e962942f1..000000000 --- a/patches/sysklogd/2.7.0/0010-Fix-various-typos.patch +++ /dev/null @@ -1,162 +0,0 @@ -From 64cd26232e598f902cf93b540152df5f7d8991e8 Mon Sep 17 00:00:00 2001 -From: Luz Paz -Date: Mon, 3 Mar 2025 07:16:35 -0500 -Subject: [PATCH 10/16] Fix various typos Fixes user-facing and non-user-facing - typos Found via `codespell -q 3 -L bootup,clen,nd,servent,siz,tast,unx` -Organization: Wires - -Signed-off-by: Joachim Wiberg ---- - ChangeLog.md | 2 +- - README.md | 2 +- - man/syslog.conf.5 | 2 +- - src/logger.c | 2 +- - src/syslog.h | 2 +- - src/syslogd.c | 4 ++-- - src/syslogd.h | 2 +- - syslog.conf | 4 ++-- - test/listen.sh | 4 ++-- - 9 files changed, 12 insertions(+), 12 deletions(-) - -diff --git a/ChangeLog.md b/ChangeLog.md -index 12829c0..da44e01 100644 ---- a/ChangeLog.md -+++ b/ChangeLog.md -@@ -508,7 +508,7 @@ and a replacement for `syslog.h` to enable new features in RFC5424. - - New `syslogp()` API from NetBSD, for applications wanting to use - RFC5424 features like MsgID or structured data - - Many *incompatible changes* to command line options in `syslogd` and -- `klogd` for compatiblity with FreeBSD and NetBSD syslogd. Examples: -+ `klogd` for compatibility with FreeBSD and NetBSD syslogd. Examples: - - In syslogd: `-b` and `-c` have been replaced with `-r` for global - log rotation, `-a` has been replaced with the new `-p` support. The - `-r` flag and `-s HOST` has also been dropped in favor of the BSD -diff --git a/README.md b/README.md -index eff6b03..12ce92c 100644 ---- a/README.md -+++ b/README.md -@@ -63,7 +63,7 @@ Main differences from the original sysklogd package are: - - - The separate `klogd` daemon is no longer part of the sysklogd project, - syslogd now natively supports logging kernel messages as well --- *Major* command line changes to `syslogd`, for compatibilty with *BSD -+- *Major* command line changes to `syslogd`, for compatibility with *BSD - - Supports `include /etc/syslog.d/*.conf` directive, see example .conf - - Built-in log-rotation support, with compression by default, useful for - embedded systems. No need for cron and/or a separate log rotate daemon -diff --git a/man/syslog.conf.5 b/man/syslog.conf.5 -index f7d9ea1..64a7260 100644 ---- a/man/syslog.conf.5 -+++ b/man/syslog.conf.5 -@@ -704,7 +704,7 @@ This example shows one combination of program and hostname filters. - !-ppp - *.* /var/log/syslog - --# Local pppd messages of severity info, or higer, go to its own log file -+# Local pppd messages of severity info, or higher, go to its own log file - !+ppp - *.info /var/log/ppp.log - -diff --git a/src/logger.c b/src/logger.c -index ffdb9e1..8fcb42a 100644 ---- a/src/logger.c -+++ b/src/logger.c -@@ -286,7 +286,7 @@ static int usage(int code) - " -h HOST Send (UDP) message to this remote syslog server (IP or DNS name)\n" - " -H NAME Use NAME instead of system hostname in message header\n" - " -i Log process ID of the logger process with each line (LOG_PID)\n" -- " -I PID Log process ID using PID, recommed using PID $$ for shell scripts\n" -+ " -I PID Log process ID using PID, recommend using PID $$ for shell scripts\n" - #ifdef __linux__ - " -k Log to kernel /dev/kmsg if /dev/log doesn't exist yet\n" - #endif -diff --git a/src/syslog.h b/src/syslog.h -index 9c33967..4f35ad0 100644 ---- a/src/syslog.h -+++ b/src/syslog.h -@@ -191,7 +191,7 @@ CODE facilitynames[] = { - #define LOG_NDELAY 0x008 /* don't delay open */ - #define LOG_NOWAIT 0x010 /* don't wait for console forks: DEPRECATED */ - #define LOG_PERROR 0x020 /* log to stderr as well */ --#define LOG_PTRIM 0x040 /* trim anything syslog addded when writing to stderr */ -+#define LOG_PTRIM 0x040 /* trim anything syslog added when writing to stderr */ - #define LOG_NLOG 0x080 /* don't write to the system log */ - #define LOG_STDOUT 0x100 /* like nlog, for debugging syslogp() API */ - #define LOG_RFC3164 0x200 /* Log to remote/ipc socket in old BSD format */ -diff --git a/src/syslogd.c b/src/syslogd.c -index 1737f7c..9128e7f 100644 ---- a/src/syslogd.c -+++ b/src/syslogd.c -@@ -177,7 +177,7 @@ static TAILQ_HEAD(notifiers, notifier) nothead = TAILQ_HEAD_INITIALIZER(nothead) - static TAILQ_HEAD(peers, peer) pqueue = TAILQ_HEAD_INITIALIZER(pqueue); - - /* -- * List fo peers allowed to log to us. -+ * List of peers allowed to log to us. - */ - static SIMPLEQ_HEAD(allowed, allowedpeer) aphead = SIMPLEQ_HEAD_INITIALIZER(aphead); - -@@ -4456,7 +4456,7 @@ static void notifier_free_all(void) - } - - /* -- * The following function is resposible for handling a SIGHUP signal. Since -+ * The following function is responsible for handling a SIGHUP signal. Since - * we are now doing mallocs/free as part of init we had better not being - * doing this during a signal handler. Instead this function simply sets - * a flag variable which will tell the main loop to go through a restart. -diff --git a/src/syslogd.h b/src/syslogd.h -index ff97a0a..511e3e8 100644 ---- a/src/syslogd.h -+++ b/src/syslogd.h -@@ -224,7 +224,7 @@ - #define F_PIPE 9 /* named pipe */ - - /* -- * Stuct to hold property-based filters -+ * Struct to hold property-based filters - */ - struct prop_filter { - uint8_t prop_type; -diff --git a/syslog.conf b/syslog.conf -index 581fc32..3426c25 100644 ---- a/syslog.conf -+++ b/syslog.conf -@@ -44,7 +44,7 @@ mail.err /var/log/mail.err - - # - # Store all critical events, except kernel logs, in critical RFC5424 format. --# Overide global log rotation settings, rotate every 10MiB, keep 5 old logs, -+# Override global log rotation settings, rotate every 10MiB, keep 5 old logs, - # - #*.=crit;kern.none /var/log/critical ;rotate=10M:5,RFC5424 - -@@ -68,7 +68,7 @@ mail.err /var/log/mail.err - # Secure mode, same as -s, none(0), on(1), full(2). When enabled - # only logging to remote syslog server possible, with full secure - # mode, not even that is possible. We default to prevent syslogd --# from opening UDP/514 and receving messages from other systems. -+# from opening UDP/514 and receiving messages from other systems. - # - secure_mode 1 - -diff --git a/test/listen.sh b/test/listen.sh -index 1b706e8..7665261 100755 ---- a/test/listen.sh -+++ b/test/listen.sh -@@ -99,10 +99,10 @@ run_step "Verify listen off - no remote no ports" verify_secure_daem - run_step "Verify listen off - only send to remote, no ports" verify_safe_daemon - run_step "Verify listen on, default" verify_default_daemon - --run_step "Verfiy listen on 127.0.0.1:510" verify_local_daemon -+run_step "Verify listen on 127.0.0.1:510" verify_local_daemon - run_step "Verify port 514 is closed" check_not_open 514 - --run_step "Verfiy listen on 10.0.0.1:512" verify_bind -+run_step "Verify listen on 10.0.0.1:512" verify_bind - run_step "Verify port 510 is closed" check_not_open 510 - - run_step "Verify delayed bind to new address 10.0.0.2:513" verify_delayed_bind --- -2.43.0 - diff --git a/patches/sysklogd/2.7.0/0011-test-update-tag.sh-include-dots-in-name-and-verify-t.patch b/patches/sysklogd/2.7.0/0011-test-update-tag.sh-include-dots-in-name-and-verify-t.patch deleted file mode 100644 index 10f73ee0f..000000000 --- a/patches/sysklogd/2.7.0/0011-test-update-tag.sh-include-dots-in-name-and-verify-t.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 2fbac9e54b60e813a5ecfb4ff4177b6351bfbffd Mon Sep 17 00:00:00 2001 -From: Joachim Wiberg -Date: Tue, 18 Mar 2025 06:32:27 +0100 -Subject: [PATCH 11/16] test: update tag.sh, include dots in name and verify - tag in logfile -Organization: Wires - -Issue #102 - -Signed-off-by: Joachim Wiberg ---- - test/tag.sh | 11 +++++++++-- - 1 file changed, 9 insertions(+), 2 deletions(-) - -diff --git a/test/tag.sh b/test/tag.sh -index 3e1c598..bfc409a 100755 ---- a/test/tag.sh -+++ b/test/tag.sh -@@ -1,16 +1,20 @@ - #!/bin/sh - # Verify log filtering based on ident/tag. -+#DEBUG=true - . "${srcdir:-.}/lib.sh" - - TG1=pimd - TG2=mrouted -+TG3=in.tftpd - MSG="Multicast, a perfect weapon for an imperfect time." - UNX="In UNIX we trust" -+DOT="We bring 512 byte block gifts" - - LOGDIR="$DIR/log" - SYSLOG="${LOGDIR}/syslog" - TG1LOG="${LOGDIR}/$TG1.log" - TG2LOG="${LOGDIR}/$TG2.log" -+TG3LOG="${LOGDIR}/$TG3.log" - - setup_syslogd() - { -@@ -22,6 +26,8 @@ setup_syslogd() - *.* $TG1LOG - #!$TG2 - *.* $TG2LOG -+ #!$TG3 -+ *.* $TG3LOG - EOF - setup -m0 - } -@@ -32,8 +38,8 @@ verify_tag() - log="$1"; shift - msg="$*" - -- logger -t "$tag" "$msg" -- grep "$msg" "$log" -+ logger -ip user.debug -t "$tag" "$msg" -+ grep "$msg" "$log" |grep "$tag" - } - - verify_log() -@@ -52,6 +58,7 @@ verify_not() - run_step "Set up property based filtering syslogd" setup_syslogd - run_step "Verify basic tag based filtering (1)" verify_tag "$TG1" "$TG1LOG" "$MSG" - run_step "Verify basic tag based filtering (2)" verify_tag "$TG2" "$TG2LOG" "$MSG" -+run_step "Verify basic tag based filtering (3)" verify_tag "$TG3" "$TG3LOG" "$DOT" - run_step "Verify not in syslog" verify_not "$SYSLOG" "$MSG" - - run_step "Verify unfiltered tag logging" verify_tag "foo" "$SYSLOG" "$UNX" --- -2.43.0 - diff --git a/patches/sysklogd/2.7.0/0012-test-further-extend-tag-test-to-check-RFC3164-code-p.patch b/patches/sysklogd/2.7.0/0012-test-further-extend-tag-test-to-check-RFC3164-code-p.patch deleted file mode 100644 index 1a630a1e8..000000000 --- a/patches/sysklogd/2.7.0/0012-test-further-extend-tag-test-to-check-RFC3164-code-p.patch +++ /dev/null @@ -1,72 +0,0 @@ -From ff09758a63f100d5e611d28b1f219ea10f2ca996 Mon Sep 17 00:00:00 2001 -From: Joachim Wiberg -Date: Wed, 19 Mar 2025 06:08:45 +0100 -Subject: [PATCH 12/16] test: further extend tag test to check RFC3164 code - path as well -Organization: Wires - -Reproduces issue #102 - -Signed-off-by: Joachim Wiberg ---- - test/tag.sh | 33 +++++++++++++++++++++++++++++---- - 1 file changed, 29 insertions(+), 4 deletions(-) - -diff --git a/test/tag.sh b/test/tag.sh -index bfc409a..53aa745 100755 ---- a/test/tag.sh -+++ b/test/tag.sh -@@ -1,6 +1,11 @@ - #!/bin/sh --# Verify log filtering based on ident/tag. --#DEBUG=true -+# Verify log filtering based on ident/tag for both RFC3154 (BSD) -+# and RFC5424 formatted log messages sent to syslogd. A logged -+# message can also contain a [PID], so the combinations of various -+# tags + pid are also covered. -+# -+# Regression test for issue #102. -+# - . "${srcdir:-.}/lib.sh" - - TG1=pimd -@@ -32,14 +37,34 @@ setup_syslogd() - setup -m0 - } - -+# Verify both RFC3164 (BSD) log format and RFC5424, because -+# they have different format parsers in syslogd. Generates -+# three additional variants of the given log message: rev, -+# rot13, and alphabetically sorted. - verify_tag() - { - tag="$1"; shift - log="$1"; shift - msg="$*" -+ rev=$(echo "$msg" | rev) -+ rot=$(echo "$msg" | tr 'a-zA-Z' 'n-za-mN-ZA-M') -+ bin=$(echo "$msg" | sed 's/./&\n/g' | sort | tr -d '\n') - -- logger -ip user.debug -t "$tag" "$msg" -- grep "$msg" "$log" |grep "$tag" -+ # BSD log format (with -b) -+ logger -b -ip user.debug -t "$tag" "$msg" -+ verify_log "$log" "$msg" | grep "$tag" || return 1 -+ -+ # RFC5424 (default) -+ logger -ip user.debug -t "$tag" "$rev" -+ verify_log "$log" "$rev" | grep "$tag" || return 1 -+ -+ # BSD without -p flag -+ logger -b -i -t "$tag" "$rot" -+ verify_log "$log" "$rot" | grep "$tag" || return 1 -+ -+ # RFC5424 without -p flag -+ logger -i -t "$tag" "$bin" -+ verify_log "$log" "$bin" | grep "$tag" || return 1 - } - - verify_log() --- -2.43.0 - diff --git a/patches/sysklogd/2.7.0/0013-Fix-102-allow-.-in-tag-names-regression-in-v2.7.1.patch b/patches/sysklogd/2.7.0/0013-Fix-102-allow-.-in-tag-names-regression-in-v2.7.1.patch deleted file mode 100644 index c8bd159e7..000000000 --- a/patches/sysklogd/2.7.0/0013-Fix-102-allow-.-in-tag-names-regression-in-v2.7.1.patch +++ /dev/null @@ -1,40 +0,0 @@ -From c0622119d6baf45dcaef01897f6c686f2eb92ee4 Mon Sep 17 00:00:00 2001 -From: Joachim Wiberg -Date: Wed, 19 Mar 2025 06:35:39 +0100 -Subject: [PATCH 13/16] Fix #102: allow '.' in tag names, regression in v2.7.1 -Organization: Wires - -RFC3164 specifies; "The TAG is a string of ABNF alphanumeric characters - that MUST NOT exceed 32 characters. Any non-alphanumeric character - will terminate the TAG field and will be assumed to be the starting - character of the CONTENT field." - -Strictly speaking, ABNF (Augmented Backus-Naur Form) only includes the -alphanumeric characters, meaning just be letters and digits. - -However, in real-life scenarios, and per previous behavior, we should -definitely allow '.' as well. The existing argument to `strspn()` is -from FreeBSD, which for some reason do *not* allow '.', but they do -also allow '_-/' ... '/' seems like the real outlier here. - -Signed-off-by: Joachim Wiberg ---- - src/syslogd.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/syslogd.c b/src/syslogd.c -index 9128e7f..07abdf9 100644 ---- a/src/syslogd.c -+++ b/src/syslogd.c -@@ -1223,7 +1223,7 @@ parsemsg_rfc3164_app_name_procid(char **msg, char **app_name, char **procid) - "abcdefghijklmnopqrstuvwxyz" - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "0123456789" -- "_-/"); -+ "._-/"); - if (app_name_length == 0) - goto bad; - m += app_name_length; --- -2.43.0 - diff --git a/patches/sysklogd/2.7.0/0014-Prepare-for-upcoming-v2.7.2.patch b/patches/sysklogd/2.7.0/0014-Prepare-for-upcoming-v2.7.2.patch deleted file mode 100644 index aa852dcb1..000000000 --- a/patches/sysklogd/2.7.0/0014-Prepare-for-upcoming-v2.7.2.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 93f9cd74856be4b9a77c72b8e4c55a49c32ce26e Mon Sep 17 00:00:00 2001 -From: Joachim Wiberg -Date: Mon, 24 Mar 2025 06:01:46 +0100 -Subject: [PATCH 14/16] Prepare for upcoming v2.7.2 -Organization: Wires - -Signed-off-by: Joachim Wiberg ---- - ChangeLog.md | 14 +++++++++++++- - configure.ac | 2 +- - 2 files changed, 14 insertions(+), 2 deletions(-) - -diff --git a/ChangeLog.md b/ChangeLog.md -index da44e01..140cfc4 100644 ---- a/ChangeLog.md -+++ b/ChangeLog.md -@@ -4,6 +4,17 @@ Change Log - All relevant changes to the project are documented in this file. - - -+[v2.7.2][UNRELEASED] -+----------------------- -+ -+### Changes -+- Increased code coverage testing of tag parser -+ -+### Fixes -+- Fix #102: allow `.` in tag names, regression in v2.7.1 -+- Fix various typos in documentation, by Luz Paz -+ -+ - [v2.7.1][] - 2025-03-03 - ----------------------- - -@@ -679,7 +690,8 @@ and a replacement for `syslog.h` to enable new features in RFC5424. - - Several bugfixes and improvements, please refer to the .c files - - --[UNRELEASED]: https://github.com/troglobit/sysklogd/compare/v2.7.0...HEAD -+[UNRELEASED]: https://github.com/troglobit/sysklogd/compare/v2.7.1...HEAD -+[v2.7.2]: https://github.com/troglobit/sysklogd/compare/v2.7.1...v2.7.2 - [v2.7.1]: https://github.com/troglobit/sysklogd/compare/v2.7.0...v2.7.1 - [v2.7.0]: https://github.com/troglobit/sysklogd/compare/v2.6.2...v2.7.0 - [v2.6.2]: https://github.com/troglobit/sysklogd/compare/v2.6.1...v2.6.2 -diff --git a/configure.ac b/configure.ac -index a2cf9be..13dadfa 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -25,7 +25,7 @@ - # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - # SUCH DAMAGE. - --AC_INIT([sysklogd], [2.7.1], -+AC_INIT([sysklogd], [2.7.2-beta1], - [https://github.com/troglobit/sysklogd/issues],, - [https://github.com/troglobit/sysklogd]) - AC_CONFIG_AUX_DIR(aux) --- -2.43.0 - diff --git a/patches/sysklogd/2.7.0/0015-logger-show-invalid-option-arguments-if-p-and-o-pars.patch b/patches/sysklogd/2.7.0/0015-logger-show-invalid-option-arguments-if-p-and-o-pars.patch deleted file mode 100644 index 3976a4dcc..000000000 --- a/patches/sysklogd/2.7.0/0015-logger-show-invalid-option-arguments-if-p-and-o-pars.patch +++ /dev/null @@ -1,57 +0,0 @@ -From debc8c337b3e7d8c76701991a4566714b78c1846 Mon Sep 17 00:00:00 2001 -From: Joachim Wiberg -Date: Mon, 31 Mar 2025 13:22:47 +0200 -Subject: [PATCH 15/16] logger: show invalid option arguments if -p and -o - parsing fail -Organization: Wires - -Instead of just showing the usage instructions, include information -about the option and its argument failing. Useful when debugging -faulty calls to the logger program deep in an operating system. - -Signed-off-by: Joachim Wiberg ---- - src/logger.c | 14 +++++++++++--- - 1 file changed, 11 insertions(+), 3 deletions(-) - -diff --git a/src/logger.c b/src/logger.c -index 8fcb42a..5bf263f 100644 ---- a/src/logger.c -+++ b/src/logger.c -@@ -393,13 +393,17 @@ int main(int argc, char *argv[]) - break; - - case 'o': -- if (parse_opts(optarg, &iface, &ttl)) -+ if (parse_opts(optarg, &iface, &ttl)) { -+ printf("Invalid option argument '-%c %s'\n", c, optarg); - return usage(1); -+ } - break; - - case 'p': -- if (parse_prio(optarg, &facility, &severity)) -+ if (parse_prio(optarg, &facility, &severity)) { -+ printf("Invalid option argument '-%c %s'\n", c, optarg); - return usage(1); -+ } - break; - - case 'P': -@@ -428,8 +432,12 @@ int main(int argc, char *argv[]) - printf("%s\n", version_info); - return 0; - -- default: -+ case '?': - return usage(0); -+ -+ default: -+ printf("Unsupported option '-%c'\n", c); -+ return usage(1); - } - } - --- -2.43.0 - diff --git a/patches/sysklogd/2.7.0/0016-Update-ChangeLog-and-bump-version-for-v2.7.2-release.patch b/patches/sysklogd/2.7.0/0016-Update-ChangeLog-and-bump-version-for-v2.7.2-release.patch deleted file mode 100644 index b1424ccc3..000000000 --- a/patches/sysklogd/2.7.0/0016-Update-ChangeLog-and-bump-version-for-v2.7.2-release.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 5fb314cb9060afa3bd4eed2f0be3200f02f729e9 Mon Sep 17 00:00:00 2001 -From: Joachim Wiberg -Date: Mon, 31 Mar 2025 13:26:13 +0200 -Subject: [PATCH 16/16] Update ChangeLog and bump version for v2.7.2 release -Organization: Wires - -Signed-off-by: Joachim Wiberg ---- - ChangeLog.md | 4 +++- - configure.ac | 2 +- - 2 files changed, 4 insertions(+), 2 deletions(-) - -diff --git a/ChangeLog.md b/ChangeLog.md -index 140cfc4..8d8bb43 100644 ---- a/ChangeLog.md -+++ b/ChangeLog.md -@@ -4,11 +4,13 @@ Change Log - All relevant changes to the project are documented in this file. - - --[v2.7.2][UNRELEASED] -+[v2.7.2][] - 2025-03-31 - ----------------------- - - ### Changes - - Increased code coverage testing of tag parser -+- Improved error handling in `logger` when invalid arguments to -+ `-p` and `-o` are encountered - - ### Fixes - - Fix #102: allow `.` in tag names, regression in v2.7.1 -diff --git a/configure.ac b/configure.ac -index 13dadfa..fe79595 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -25,7 +25,7 @@ - # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - # SUCH DAMAGE. - --AC_INIT([sysklogd], [2.7.2-beta1], -+AC_INIT([sysklogd], [2.7.2], - [https://github.com/troglobit/sysklogd/issues],, - [https://github.com/troglobit/sysklogd]) - AC_CONFIG_AUX_DIR(aux) --- -2.43.0 - diff --git a/patches/sysklogd/2.7.2/0001-syslogd-fix-UTF-8-handling-with-8-flag-for-RFC5424-c.patch b/patches/sysklogd/2.7.2/0001-syslogd-fix-UTF-8-handling-with-8-flag-for-RFC5424-c.patch new file mode 100644 index 000000000..25968b5fe --- /dev/null +++ b/patches/sysklogd/2.7.2/0001-syslogd-fix-UTF-8-handling-with-8-flag-for-RFC5424-c.patch @@ -0,0 +1,146 @@ +From 31dfe0d16461d2852f3fc56cb82aed3a23db022f Mon Sep 17 00:00:00 2001 +From: Joachim Wiberg +Date: Thu, 25 Sep 2025 16:48:31 +0200 +Subject: [PATCH] syslogd: fix UTF-8 handling with -8 flag, for RFC5424 + compliance +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +Organization: Wires + +The -8 flag was designed to preserve 8-bit data but failed with multi-byte +UTF-8 sequences like em-dash (—). The parsemsg_remove_unsafe_characters() +function processed UTF-8 byte-by-byte, corrupting sequences even with -8. + +Changes: +- Add UTF-8 sequence detection and validation functions +- Preserve complete valid UTF-8 sequences when -8 flag is used +- Support UTF-8 BOM per RFC5424 requirements +- Maintain backward compatibility and security filtering + +Fixes #105 + +Signed-off-by: Joachim Wiberg +--- + src/syslogd.c | 95 +++++++++++++++++++++++++++++++++++++++++++++++++-- + 1 file changed, 93 insertions(+), 2 deletions(-) + +diff --git a/src/syslogd.c b/src/syslogd.c +index 07abdf9..fa82d98 100644 +--- a/src/syslogd.c ++++ b/src/syslogd.c +@@ -997,18 +997,109 @@ void untty(void) + #endif + } + ++/* ++ * Returns the length of a UTF-8 sequence starting at *in, or 0 if invalid. ++ * Does not validate the entire sequence, just checks the start byte. ++ */ ++static size_t ++utf8_len(const unsigned char *in) ++{ ++ unsigned char c = *in; ++ ++ if ((c & 0x80) == 0x00) return 1; /* ASCII: 0xxxxxxx */ ++ if ((c & 0xE0) == 0xC0) return 2; /* 110xxxxx */ ++ if ((c & 0xF0) == 0xE0) return 3; /* 1110xxxx */ ++ if ((c & 0xF8) == 0xF0) return 4; /* 11110xxx */ ++ ++ return 0; /* Invalid start byte */ ++} ++ ++/* ++ * Validates a complete UTF-8 sequence of given length. ++ * Returns 1 if valid, 0 if invalid. ++ */ ++static int ++utf8_valid(const unsigned char *in, size_t len) ++{ ++ size_t i; ++ ++ switch (len) { ++ case 1: ++ if ((*in & 0x80) != 0x00) ++ return 0; ++ break; ++ case 2: ++ if ((*in & 0xE0) != 0xC0) ++ return 0; ++ if (*in < 0xC2) ++ return 0; /* Overlong encoding */ ++ break; ++ case 3: ++ if ((*in & 0xF0) != 0xE0) ++ return 0; ++ break; ++ case 4: ++ if ((*in & 0xF8) != 0xF0) ++ return 0; ++ if (*in > 0xF4) ++ return 0; /* Beyond Unicode range */ ++ break; ++ default: ++ return 0; ++ } ++ ++ /* Check continuation bytes */ ++ for (i = 1; i < len; i++) { ++ if ((in[i] & 0xC0) != 0x80) ++ return 0; ++ } ++ ++ /* Check for overlong encodings and surrogates */ ++ if (len == 3 && *in == 0xE0 && (in[1] & 0xE0) == 0x80) return 0; ++ if (len == 4 && *in == 0xF0 && (in[1] & 0xF0) == 0x80) return 0; ++ if (len == 3 && *in == 0xED && (in[1] & 0xE0) == 0xA0) return 0; /* Surrogates */ ++ ++ return 1; ++} ++ + /* + * Removes characters from log messages that are unsafe to display. +- * TODO: Permit UTF-8 strings that include a BOM per RFC 5424? ++ * Preserves valid UTF-8 sequences, including BOM, with -8 flag. + */ + static void + parsemsg_remove_unsafe_characters(const char *in, char *out, size_t outlen) + { ++ const unsigned char *p = (const unsigned char *)in; + char *q; + int c; + + q = out; +- while ((c = (unsigned char)*in++) != '\0' && q < out + outlen - 4) { ++ while (*p && q < out + outlen - 4) { ++ /* When -8 flag is used, try UTF-8 processing first */ ++ if (!mask_C1 && (*p & 0x80)) { ++ size_t len = utf8_len(p); ++ ++ /* Check if we have a complete UTF-8 sequence */ ++ if (len > 0 && q + len < out + outlen) { ++ size_t i = 0; ++ ++ /* Ensure we have enough input bytes */ ++ while (i < len && p[i] != '\0') ++ i++; ++ ++ if (i == len && utf8_valid(p, len)) { ++ /* Copy the entire valid UTF-8 sequence */ ++ for (i = 0; i < len; i++) ++ *q++ = *p++; ++ continue; ++ } ++ } ++ /* Fall through to byte-by-byte processing for invalid UTF-8 */ ++ } ++ ++ /* Byte-by-byte processing */ ++ c = *p++; ++ + if (mask_C1 && (c & 0x80) && c < 0xA0) { + c &= 0x7F; + *q++ = 'M'; +-- +2.43.0 + diff --git a/src/confd/src/infix-dhcp-server.c b/src/confd/src/infix-dhcp-server.c index a942ddf11..a0bce16f9 100644 --- a/src/confd/src/infix-dhcp-server.c +++ b/src/confd/src/infix-dhcp-server.c @@ -398,7 +398,7 @@ static int change(sr_session_ctx_t *session, uint32_t sub_id, const char *module static int cand(sr_session_ctx_t *session, uint32_t sub_id, const char *module, const char *path, sr_event_t event, unsigned request_id, void *priv) { - const char *fmt = "/infix-dhcp-server:dhcp-server/option[id='%s']/address"; + const char *fmt = CFG_XPATH "/option[id='%s']/address"; sr_val_t inferred = { .type = SR_STRING_T }; const char *opt[] = { "router", @@ -409,7 +409,7 @@ static int cand(sr_session_ctx_t *session, uint32_t sub_id, const char *module, if (event != SR_EV_UPDATE && event != SR_EV_CHANGE) return 0; - if (srx_nitems(session, &cnt, "/infix-dhcp-server:dhcp-server/option") || cnt) + if (srx_nitems(session, &cnt, CFG_XPATH "/option") || cnt) return 0; for (i = 0; i < NELEMS(opt); i++) { @@ -422,7 +422,7 @@ static int cand(sr_session_ctx_t *session, uint32_t sub_id, const char *module, static int clear_stats(sr_session_ctx_t *session, uint32_t sub_id, const char *xpath, const sr_val_t *input, const size_t input_cnt, sr_event_t event, - unsigned request_id, sr_val_t **output, size_t *output_cnt, void *priv) + uint32_t request_id, sr_val_t **output, size_t *output_cnt, void *priv) { if (systemf("dbus-send --system --dest=uk.org.thekelleys.dnsmasq " "/uk/org/thekelleys/dnsmasq uk.org.thekelleys.dnsmasq.ClearMetrics")) @@ -436,7 +436,7 @@ int infix_dhcp_server_init(struct confd *confd) int rc; REGISTER_CHANGE(confd->session, MODULE, CFG_XPATH, 0, change, confd, &confd->sub); - REGISTER_CHANGE(confd->cand, MODULE, CFG_XPATH"//.", SR_SUBSCR_UPDATE, cand, confd, &confd->sub); + REGISTER_CHANGE(confd->cand, MODULE, CFG_XPATH "//.", SR_SUBSCR_UPDATE, cand, confd, &confd->sub); REGISTER_RPC(confd->session, CFG_XPATH "/statistics/clear", clear_stats, NULL, &confd->sub); return SR_ERR_OK; diff --git a/src/klish-plugin-infix/xml/infix.xml b/src/klish-plugin-infix/xml/infix.xml index 8da12d07a..e12f9e753 100644 --- a/src/klish-plugin-infix/xml/infix.xml +++ b/src/klish-plugin-infix/xml/infix.xml @@ -317,8 +317,7 @@ - - + @@ -389,8 +388,7 @@ - - + @@ -555,6 +553,19 @@ + + + + reset + + + + + resize >/dev/null + + + + diff --git a/test/case/ietf_interfaces/igmp_vlan/test.adoc b/test/case/ietf_interfaces/igmp_vlan/test.adoc index 56fcc737a..4b8bc8569 100644 --- a/test/case/ietf_interfaces/igmp_vlan/test.adoc +++ b/test/case/ietf_interfaces/igmp_vlan/test.adoc @@ -4,23 +4,19 @@ ifdef::topdoc[:imagesdir: {topdoc}../../test/case/ietf_interfaces/igmp_vlan] ==== Description -Test tagged IGMP control traffic and that VLAN separation is respected for multicast +Verify VLAN tagged IGMP control traffic and that VLAN separation is respected for multicast. .... - VLAN55 VLAN77 VLAN55 VLAN77 - 10.0.1.1 10.0.2.1 10.0.1.2 10.0.2.2 +vlan55 10.0.1.1 vlan77 10.0.2.1 vlan55 10.0.1.2 vlan77 10.0.2.2 \ / \ / - \--------------/ VLAN 1,2 T \---------------/ - | DUT1 +---------------------------------+ DUT2 | - | |dut1:link dut2:link| | - +--------------+ +-----+---------+ - dut1:data1| |dut1:data2 dut2:data1| |dut2:data2 - VLAN55 U | | VLAN77 U VLAN55 U | | VLAN77 U - | | | | -+-------+ | +----------+ +------------+ +--------+ -| msend +--+ | mreceive | | mreceive | | msend | -+-------+ +----------+ +------------+ +--------+ - 10.0.1.11 10.0.2.11 10.0.1.22 10.0.2.22 + .--------------. VLAN 1,2 T .---------------. + | DUT1 link +--------------------------------+ link DUT2 | + '-+----------+-' '-+-----------+-' + data1 | 55U 77U | data2 data1 | 55U 77U | data2 + .-------' '---. | '-------. +.----+--. .-+--------. .-------+--. .--+----. +| msend | 10.0.1.11 | mreceive | 10.0.2.11 | mreceive | 10.0.1.22 | msend | 10.0.2.22 +'-------' '----------' '----------' '-------' .... ==== Topology @@ -31,8 +27,7 @@ image::topology.svg[IGMP VLAN topology, align=center, scaledwidth=75%] . Set up topology and attach to target DUT . Configure device -. Start multicast sender on host:data11, group 224.2.2.2 -. Start multicast sender on host:data22, group 224.1.1.1 +. Start multicast senders on host:data11, group 224.2.2.2, and host:data22, group 224.1.1.1 . Verify group 224.2.2.2 is flooded to host:data21 . Verify group 224.1.1.1 is flooded to host:data12 . Verify group 224.2.2.2 on host:data11, 224.1.1.1 on host:data21, 224.2.2.2 on host:data12 and 224.1.1.1 on host:data22 is not received diff --git a/test/case/ietf_interfaces/igmp_vlan/test.py b/test/case/ietf_interfaces/igmp_vlan/test.py index cd25a85b5..46c27b7d9 100755 --- a/test/case/ietf_interfaces/igmp_vlan/test.py +++ b/test/case/ietf_interfaces/igmp_vlan/test.py @@ -1,26 +1,20 @@ #!/usr/bin/env python3 -r""" -IGMP VLAN +r"""IGMP VLAN -Test tagged IGMP control traffic and that VLAN separation is respected for multicast +Verify VLAN tagged IGMP control traffic and that VLAN separation is respected for multicast. .... - VLAN55 VLAN77 VLAN55 VLAN77 - 10.0.1.1 10.0.2.1 10.0.1.2 10.0.2.2 +vlan55 10.0.1.1 vlan77 10.0.2.1 vlan55 10.0.1.2 vlan77 10.0.2.2 \ / \ / - \--------------/ VLAN 1,2 T \---------------/ - | DUT1 +---------------------------------+ DUT2 | - | |dut1:link dut2:link| | - +--------------+ +-----+---------+ - dut1:data1| |dut1:data2 dut2:data1| |dut2:data2 - VLAN55 U | | VLAN77 U VLAN55 U | | VLAN77 U - | | | | -+-------+ | +----------+ +------------+ +--------+ -| msend +--+ | mreceive | | mreceive | | msend | -+-------+ +----------+ +------------+ +--------+ - 10.0.1.11 10.0.2.11 10.0.1.22 10.0.2.22 + .--------------. VLAN 1,2 T .---------------. + | DUT1 link +--------------------------------+ link DUT2 | + '-+----------+-' '-+-----------+-' + data1 | 55U 77U | data2 data1 | 55U 77U | data2 + .-------' '---. | '-------. +.----+--. .-+--------. .-------+--. .--+----. +| msend | 10.0.1.11 | mreceive | 10.0.2.11 | mreceive | 10.0.1.22 | msend | 10.0.2.22 +'-------' '----------' '----------' '-------' .... - """ import infamy @@ -262,11 +256,9 @@ d2send_ns.addip("10.0.2.22") d1send_ns.must_reach("10.0.1.2") d1receive_ns.must_reach("10.0.2.2") - with test.step("Start multicast sender on host:data11, group 224.2.2.2"): + with test.step("Start multicast senders on host:data11, group 224.2.2.2, and host:data22, group 224.1.1.1"): vlan55_sender = mcast.MCastSender(d2send_ns, "224.2.2.2") - with test.step("Start multicast sender on host:data22, group 224.1.1.1"): - vlan77_sender= mcast.MCastSender(d1send_ns, "224.1.1.1") - + vlan77_sender = mcast.MCastSender(d1send_ns, "224.1.1.1") with vlan55_sender, vlan77_sender: with test.step("Verify group 224.2.2.2 is flooded to host:data21"): diff --git a/test/case/infix_containers/container_basic/test.py b/test/case/infix_containers/container_basic/test.py index 7c67a9fa4..e28b4bb8e 100755 --- a/test/case/infix_containers/container_basic/test.py +++ b/test/case/infix_containers/container_basic/test.py @@ -1,6 +1,5 @@ #!/usr/bin/env python3 -""" -Container basic +"""Container Basic Verify that a simple web server container can be configured to run with host networking, on port 80. Operation is verified using a diff --git a/test/case/infix_containers/container_firewall_basic/test.adoc b/test/case/infix_containers/container_firewall_basic/test.adoc index 45d288abe..1f986fa67 100644 --- a/test/case/infix_containers/container_firewall_basic/test.adoc +++ b/test/case/infix_containers/container_firewall_basic/test.adoc @@ -5,7 +5,7 @@ ifdef::topdoc[:imagesdir: {topdoc}../../test/case/infix_containers/container_fir ==== Description Verify that an nftables container can be used for IP masquerading and -port forwarding to another container running a basic web server. +port forwarding to another container. .... <--- Docker containers ---> @@ -24,10 +24,9 @@ network, using a VETH pair, serving HTTP on port 91. The firewall container sets up a port forward with IP masquerding to/from `ext0:8080` to 10.0.0.2:91. -Correct operation is verified using HTTP GET requests for internal port -91 and external port 8080, to ensure the web page, with a known key -phrase, is only reachable from the public interface `ext0`, on -192.168.0.1:8080. +Operation is verified using HTTP GET requests for internal port 91 and +external port 8080 to ensure the web page, with a known key phrase, is +only reachable from the public interface `ext0`, on 192.168.0.1:8080. ==== Topology diff --git a/test/case/infix_containers/container_firewall_basic/test.py b/test/case/infix_containers/container_firewall_basic/test.py index d9252a702..d9c90d75e 100755 --- a/test/case/infix_containers/container_firewall_basic/test.py +++ b/test/case/infix_containers/container_firewall_basic/test.py @@ -2,7 +2,7 @@ r"""Basic Firewall Container Verify that an nftables container can be used for IP masquerading and -port forwarding to another container running a basic web server. +port forwarding to another container. .... <--- Docker containers ---> @@ -21,11 +21,9 @@ The firewall container sets up a port forward with IP masquerding to/from `ext0:8080` to 10.0.0.2:91. -Correct operation is verified using HTTP GET requests for internal port -91 and external port 8080, to ensure the web page, with a known key -phrase, is only reachable from the public interface `ext0`, on -192.168.0.1:8080. - +Operation is verified using HTTP GET requests for internal port 91 and +external port 8080 to ensure the web page, with a known key phrase, is +only reachable from the public interface `ext0`, on 192.168.0.1:8080. """ import infamy from infamy.util import until, to_binary diff --git a/test/case/repo/defconfig.sh b/test/case/repo/defconfig.sh index e8d0768a3..abd0f16cd 100755 --- a/test/case/repo/defconfig.sh +++ b/test/case/repo/defconfig.sh @@ -23,21 +23,25 @@ disabled_root_login() # For all defconfigs check() { - local total=$# - local num=1 - local base= + total=$# + num=1 + base= echo "1..$total" for defconfig in "$@"; do + # Skip UNIX backup files + case "$defconfig" in + *~|*.bak|'#'*'#'|.#*) + continue + ;; + esac base=$(basename "$defconfig") - if disabled_root_login "$defconfig"; then + if whitelist "$base"; then + echo "ok $num - $base is exempted # skip" + elif disabled_root_login "$defconfig"; then echo "ok $num - $base disables root logins" else - if whitelist "$base"; then - echo "ok $num - $base is exempted # skip" - else - echo "not ok $num - $base has not disabled root login" - fi + echo "not ok $num - $base has not disabled root login" fi num=$((num + 1)) done diff --git a/utils/srload b/utils/srload index 65d9a14a1..11bcbae40 100755 --- a/utils/srload +++ b/utils/srload @@ -84,7 +84,7 @@ enable() { local module=$1 local feature=$2 - echo "*** Enable feature $feature in $module." + #echo "*** Enable feature $feature in $module." $SYSREPOCTL -c $module -e $feature -v2 local rc=$? if [ $rc -ne 0 ]; then @@ -119,7 +119,7 @@ for module in "${MODULES[@]}"; do if [ -z "$SCTL_MODULE" ]; then # prepare command to install module with all its features - echo "*** Installing YANG model $name ..." + #echo "*** Installing YANG model $name ..." install "$module" continue fi @@ -164,7 +164,7 @@ done # install all the new modules if [ -n "${CMD_INSTALL}" ]; then - printf "*** Installing YANG models ...\n%s" "$CMD_INSTALL" + printf "*** Installing YANG models from %s ...\n%s" "$(basename "$1")" "$CMD_INSTALL" eval $CMD_INSTALL rc=$? if [ $rc -ne 0 ]; then