pkgsrc-WIP-changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

basu: import package



Module Name:	pkgsrc-wip
Committed By:	kikadf <kikadf.01%gmail.com@localhost>
Pushed By:	kikadf
Date:		Thu Dec 11 17:31:23 2025 +0100
Changeset:	b98c8eb80f053756efbb0efb18cdd1a5213b3e5c

Modified Files:
	Makefile
Added Files:
	basu/DESCR
	basu/Makefile
	basu/PLIST
	basu/distinfo
	basu/patches/patch-src_basic_alloc-util.h
	basu/patches/patch-src_basic_fileio.h
	basu/patches/patch-src_basic_log.h
	basu/patches/patch-src_basic_macro.h
	basu/patches/patch-src_basic_memfd-util.c
	basu/patches/patch-src_basic_missing.h
	basu/patches/patch-src_basic_socket-util.c
	basu/patches/patch-src_basic_socket-util.h
	basu/patches/patch-src_busctl_busctl.c
	basu/patches/patch-src_libsystemd_sd-bus_bus-control.c
	basu/patches/patch-src_libsystemd_sd-bus_bus-dump.c
	basu/patches/patch-src_libsystemd_sd-bus_bus-gvariant.c
	basu/patches/patch-src_libsystemd_sd-bus_bus-message.h
	basu/patches/patch-src_libsystemd_sd-bus_bus-protocol.h
	basu/patches/patch-src_libsystemd_sd-bus_bus-socket.c
	basu/patches/patch-src_libsystemd_sd-bus_bus-track.c
	basu/patches/patch-src_libsystemd_sd-bus_test-bus-chat.c
	basu/patches/patch-src_libsystemd_sd-bus_test-bus-creds.c
	basu/patches/patch-src_libsystemd_sd-bus_test-bus-objects.c
	basu/patches/patch-src_libsystemd_sd-bus_test-bus-server.c
	basu/patches/patch-src_test_tests.c

Log Message:
basu: import package

To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=b98c8eb80f053756efbb0efb18cdd1a5213b3e5c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

diffstat:
 Makefile                                           |   1 +
 basu/DESCR                                         |   4 +
 basu/Makefile                                      |  22 ++
 basu/PLIST                                         |  10 +
 basu/distinfo                                      |  26 ++
 basu/patches/patch-src_basic_alloc-util.h          |  13 +
 basu/patches/patch-src_basic_fileio.h              |  15 +
 basu/patches/patch-src_basic_log.h                 |  16 +
 basu/patches/patch-src_basic_macro.h               |  33 ++
 basu/patches/patch-src_basic_memfd-util.c          |  13 +
 basu/patches/patch-src_basic_missing.h             |  30 ++
 basu/patches/patch-src_basic_socket-util.c         |  27 ++
 basu/patches/patch-src_basic_socket-util.h         |  14 +
 basu/patches/patch-src_busctl_busctl.c             | 419 +++++++++++++++++++++
 .../patch-src_libsystemd_sd-bus_bus-control.c      |  35 ++
 .../patches/patch-src_libsystemd_sd-bus_bus-dump.c |  49 +++
 .../patch-src_libsystemd_sd-bus_bus-gvariant.c     |  13 +
 .../patch-src_libsystemd_sd-bus_bus-message.h      |  22 ++
 .../patch-src_libsystemd_sd-bus_bus-protocol.h     |  15 +
 .../patch-src_libsystemd_sd-bus_bus-socket.c       |  97 +++++
 .../patch-src_libsystemd_sd-bus_bus-track.c        |  13 +
 .../patch-src_libsystemd_sd-bus_test-bus-chat.c    | 309 +++++++++++++++
 .../patch-src_libsystemd_sd-bus_test-bus-creds.c   |  13 +
 .../patch-src_libsystemd_sd-bus_test-bus-objects.c |  21 ++
 .../patch-src_libsystemd_sd-bus_test-bus-server.c  |  57 +++
 basu/patches/patch-src_test_tests.c                |  29 ++
 26 files changed, 1316 insertions(+)

diffs:
diff --git a/Makefile b/Makefile
index fed3484928..3607260b01 100644
--- a/Makefile
+++ b/Makefile
@@ -306,6 +306,7 @@ SUBDIR+=	bashdb
 SUBDIR+=	bashtop
 SUBDIR+=	basic-stats
 SUBDIR+=	bastard
+SUBDIR+=	basu
 SUBDIR+=	bats-core
 SUBDIR+=	bcf-score
 SUBDIR+=	bcftools
diff --git a/basu/DESCR b/basu/DESCR
new file mode 100644
index 0000000000..2b160646c8
--- /dev/null
+++ b/basu/DESCR
@@ -0,0 +1,4 @@
+The sd-bus library, extracted from systemd. Some projects
+rely on the sd-bus library for DBus support. However not
+all systems have systemd or elogind installed. This library
+provides just sd-bus (and the busctl utility).
diff --git a/basu/Makefile b/basu/Makefile
new file mode 100644
index 0000000000..b32e88143c
--- /dev/null
+++ b/basu/Makefile
@@ -0,0 +1,22 @@
+# $NetBSD$
+
+DISTNAME=	basu-0.2.1
+CATEGORIES=	devel
+MASTER_SITES=	https://git.sr.ht/~emersion/basu/archive/
+DISTFILES=	v${PKGVERSION_NOREV}${EXTRACT_SUFX}
+
+MAINTAINER=	kikadf.01%gmail.com@localhost
+HOMEPAGE=	https://sr.ht/~emersion/basu/
+COMMENT=	The sd-bus library, extracted from systemd
+LICENSE=	gnu-lgpl-v2.1
+
+USE_TOOLS+=	pkg-config
+TOOL_DEPENDS+=	gperf-[0-9]*:../../devel/gperf
+WRKSRC=		${WRKDIR}/basu-v${PKGVERSION_NOREV}
+REPLACE_PYTHON=	src/basic/generate-gperfs.py
+MESON_ARGS+=	-Daudit=disabled
+MESON_ARGS+=	-Dlibcap=disabled
+
+.include "../../devel/meson/build.mk"
+.include "../../lang/python/application.mk"
+.include "../../mk/bsd.pkg.mk"
diff --git a/basu/PLIST b/basu/PLIST
new file mode 100644
index 0000000000..dffd2da477
--- /dev/null
+++ b/basu/PLIST
@@ -0,0 +1,10 @@
+@comment $NetBSD$
+bin/basuctl
+include/basu/_sd-common.h
+include/basu/sd-bus-protocol.h
+include/basu/sd-bus-vtable.h
+include/basu/sd-bus.h
+include/basu/sd-id128.h
+lib/libbasu.so
+lib/libbasu.so.0
+lib/pkgconfig/basu.pc
diff --git a/basu/distinfo b/basu/distinfo
new file mode 100644
index 0000000000..2c0cdeba72
--- /dev/null
+++ b/basu/distinfo
@@ -0,0 +1,26 @@
+$NetBSD$
+
+BLAKE2s (v0.2.1.tar.gz) = f7b340b81f7fb9952b58129cb7dd95da20d7f3f8d9a3b11003360fc943e51bd7
+SHA512 (v0.2.1.tar.gz) = b1f6a35e4d93d099c5c92a8ea68f8a93429a614f1a63de7346e256437525bee5b87c1a5ad2e0dad2ff0bdc88b525cf1931f048e032bd1f1ff007b4d5eee90c59
+Size (v0.2.1.tar.gz) = 239042 bytes
+SHA1 (patch-src_basic_alloc-util.h) = 8f5f75d00485581a1fa23c1e8434bc21b68700e7
+SHA1 (patch-src_basic_fileio.h) = 7cae8213adfb4a639544ff9f4c283e5b87690885
+SHA1 (patch-src_basic_log.h) = 1ac89dd1a58c4021b3344b7538549790bf25f992
+SHA1 (patch-src_basic_macro.h) = b13a71ef8fa30770962776469001b406d2c3210e
+SHA1 (patch-src_basic_memfd-util.c) = 99d5ab110d10826246400ee59b53b8988099c66e
+SHA1 (patch-src_basic_missing.h) = c4665544b082e61154bd915d0d2ec1e95b6f7637
+SHA1 (patch-src_basic_socket-util.c) = 13d7327c2a0f187d55212f7a7e9e4a8b2e44c3e3
+SHA1 (patch-src_basic_socket-util.h) = 0bf7e0052b24efb3f7e455444be4deaaf4293e09
+SHA1 (patch-src_busctl_busctl.c) = 63e4b28608b675c01769cd46969f53c3dcf63c8c
+SHA1 (patch-src_libsystemd_sd-bus_bus-control.c) = 0c91b1382af5802ed0d69f225bc2ba8261033647
+SHA1 (patch-src_libsystemd_sd-bus_bus-dump.c) = 53f15df308ab7d80fecf4620a90963de6decf4e8
+SHA1 (patch-src_libsystemd_sd-bus_bus-gvariant.c) = 7f27d17b62d298f151657264d39c2a4df826a62d
+SHA1 (patch-src_libsystemd_sd-bus_bus-message.h) = 8dda2cf848234b8f9324da03939624cd79a0e7c1
+SHA1 (patch-src_libsystemd_sd-bus_bus-protocol.h) = 2f488c0a2ebb18f97ccd0bc9474b2be64a79e47e
+SHA1 (patch-src_libsystemd_sd-bus_bus-socket.c) = f31072a0388f6606772b631e1a2dab4c64be8a68
+SHA1 (patch-src_libsystemd_sd-bus_bus-track.c) = 4b063a1b7e703c04389fc200f75ab5ff80a70cdd
+SHA1 (patch-src_libsystemd_sd-bus_test-bus-chat.c) = 2ac6d37be8ad546f55cd8830f5e0e27d03ce5bd5
+SHA1 (patch-src_libsystemd_sd-bus_test-bus-creds.c) = 83b1d362713d5b5474211a2c60fb232de132c3e5
+SHA1 (patch-src_libsystemd_sd-bus_test-bus-objects.c) = ea8e5ddb3c59c3c84d2762a20f1abaf30c664539
+SHA1 (patch-src_libsystemd_sd-bus_test-bus-server.c) = 21d9b263e58d1d760105813afcd8ea8c4afcfa3b
+SHA1 (patch-src_test_tests.c) = 6f0edf8d0c555e60d28502f200add1860e386482
diff --git a/basu/patches/patch-src_basic_alloc-util.h b/basu/patches/patch-src_basic_alloc-util.h
new file mode 100644
index 0000000000..c9c6a4b71c
--- /dev/null
+++ b/basu/patches/patch-src_basic_alloc-util.h
@@ -0,0 +1,13 @@
+$NetBSD$
+
+--- src/basic/alloc-util.h.orig	2022-12-16 10:13:02.000000000 +0000
++++ src/basic/alloc-util.h
+@@ -38,7 +38,7 @@ static inline void *mfree(void *memory) 
+                 0;                              \
+         })
+ 
+-#ifdef __FreeBSD__
++#if defined(__FreeBSD__) || defined(__NetBSD__)
+ #define mempcpy __builtin_mempcpy
+ #endif
+ 
diff --git a/basu/patches/patch-src_basic_fileio.h b/basu/patches/patch-src_basic_fileio.h
new file mode 100644
index 0000000000..19b8aa9dbb
--- /dev/null
+++ b/basu/patches/patch-src_basic_fileio.h
@@ -0,0 +1,15 @@
+$NetBSD$
+
+--- src/basic/fileio.h.orig	2025-12-11 13:03:38.102655025 +0000
++++ src/basic/fileio.h
+@@ -3,6 +3,10 @@
+ 
+ #include <stddef.h>
+ #include <stdio.h>
++#ifdef __NetBSD__
++#define ferror_unlocked(fp) ferror(fp)
++#endif
++
+ 
+ int read_one_line_file(const char *fn, char **line);
+ int read_full_file(const char *fn, char **contents, size_t *size);
diff --git a/basu/patches/patch-src_basic_log.h b/basu/patches/patch-src_basic_log.h
new file mode 100644
index 0000000000..27e062fd1e
--- /dev/null
+++ b/basu/patches/patch-src_basic_log.h
@@ -0,0 +1,16 @@
+$NetBSD$
+
+--- src/basic/log.h.orig	2022-12-16 10:13:02.000000000 +0000
++++ src/basic/log.h
+@@ -103,3 +103,11 @@ void log_assert_failed_return_realm(
+ #define log_error_errno(error, ...)     log_full_errno(LOG_ERR,     error, __VA_ARGS__)
+ 
+ #define log_oom() log_oom_internal(LOG_REALM, __FILE__, __LINE__, __func__)
++
++#ifdef __NetBSD__
++#include <string.h>
++#include <errno.h>
++#define LOG_ERR_FMT(fmt, err, ...) fmt ": %s", ##__VA_ARGS__, strerror(-(err))
++#else
++#define LOG_ERR_FMT(fmt, err, ...) fmt ": %m", ##__VA_ARGS__
++#endif
diff --git a/basu/patches/patch-src_basic_macro.h b/basu/patches/patch-src_basic_macro.h
new file mode 100644
index 0000000000..66195f9fd0
--- /dev/null
+++ b/basu/patches/patch-src_basic_macro.h
@@ -0,0 +1,33 @@
+$NetBSD$
+
+--- src/basic/macro.h.orig	2022-12-16 10:13:02.000000000 +0000
++++ src/basic/macro.h
+@@ -70,7 +70,7 @@
+ #define ALIGN4(l) (((l) + 3) & ~3)
+ #define ALIGN8(l) (((l) + 7) & ~7)
+ 
+-#ifdef __FreeBSD__
++#ifdef ALIGN
+ #undef ALIGN
+ #endif
+ 
+@@ -121,6 +121,9 @@ static inline size_t ALIGN_TO(size_t l, 
+         })
+ 
+ #undef MAX
++#ifdef __MAX
++#undef __MAX
++#endif
+ #define MAX(a, b) __MAX(UNIQ, (a), UNIQ, (b))
+ #define __MAX(aq, a, bq, b)                             \
+         ({                                              \
+@@ -130,6 +133,9 @@ static inline size_t ALIGN_TO(size_t l, 
+         })
+ 
+ #undef MIN
++#ifdef __MIN
++#undef __MIN
++#endif
+ #define MIN(a, b) __MIN(UNIQ, (a), UNIQ, (b))
+ #define __MIN(aq, a, bq, b)                             \
+         ({                                              \
diff --git a/basu/patches/patch-src_basic_memfd-util.c b/basu/patches/patch-src_basic_memfd-util.c
new file mode 100644
index 0000000000..8f7874542b
--- /dev/null
+++ b/basu/patches/patch-src_basic_memfd-util.c
@@ -0,0 +1,13 @@
+$NetBSD$
+
+--- src/basic/memfd-util.c.orig	2025-12-11 16:20:23.258634161 +0000
++++ src/basic/memfd-util.c
+@@ -9,7 +9,7 @@
+ #include "memfd-util.h"
+ 
+ int memfd_set_sealed(int fd) {
+-#if defined(__FreeBSD__) && __FreeBSD__ < 13
++#if (defined(__FreeBSD__) && __FreeBSD__ < 13) || (defined(__NetBSD__) && __NetBSD__ < 11)
+         return 0;
+ #else
+         int r;
diff --git a/basu/patches/patch-src_basic_missing.h b/basu/patches/patch-src_basic_missing.h
new file mode 100644
index 0000000000..f6c31a43f0
--- /dev/null
+++ b/basu/patches/patch-src_basic_missing.h
@@ -0,0 +1,30 @@
+$NetBSD$
+
+--- src/basic/missing.h.orig	2022-12-16 10:13:02.000000000 +0000
++++ src/basic/missing.h
+@@ -70,10 +70,24 @@
+ #define TASK_COMM_LEN 16
+ #endif
+ 
+-#ifdef __FreeBSD__
++#include <errno.h>
++
++#ifndef ENOMEDIUM
+ #define ENOMEDIUM       (INT_MAX - 1)
++#endif
++
++#ifndef ENOPKG
+ #define ENOPKG          (INT_MAX - 2)
++#endif
++
++#ifndef EUNATCH
+ #define EUNATCH         (INT_MAX - 3)
++#endif
++
++#ifndef ENODATA
+ #define ENODATA         (INT_MAX - 4)
++#endif
++
++#ifndef ELNRNG
+ #define ELNRNG          (INT_MAX - 5)
+ #endif
diff --git a/basu/patches/patch-src_basic_socket-util.c b/basu/patches/patch-src_basic_socket-util.c
new file mode 100644
index 0000000000..5a6de85ef1
--- /dev/null
+++ b/basu/patches/patch-src_basic_socket-util.c
@@ -0,0 +1,27 @@
+$NetBSD$
+
+--- src/basic/socket-util.c.orig	2022-12-16 10:13:02.000000000 +0000
++++ src/basic/socket-util.c
+@@ -63,8 +63,13 @@ int getpeercred(int fd, struct ucred *uc
+                 return -EIO;
+ 
+         /* Check if the data is actually useful and not suppressed due to namespacing issues */
++#ifdef __NetBSD__
++        if (!pid_is_valid(u.unp_pid))
++                return -ENODATA;
++#else
+         if (!pid_is_valid(u.pid))
+                 return -ENODATA;
++#endif
+ 
+         /* Note that we don't check UID/GID here, as namespace translation works differently there: instead of
+          * receiving in "invalid" user/group we get the overflow UID/GID. */
+@@ -75,7 +80,7 @@ int getpeercred(int fd, struct ucred *uc
+ }
+ 
+ int getpeersec(int fd, char **ret) {
+-#ifdef __FreeBSD__
++#if defined(__FreeBSD__) || defined(__NetBSD__)
+         return -EOPNOTSUPP;
+ #else
+         _cleanup_free_ char *s = NULL;
diff --git a/basu/patches/patch-src_basic_socket-util.h b/basu/patches/patch-src_basic_socket-util.h
new file mode 100644
index 0000000000..17943dfeb6
--- /dev/null
+++ b/basu/patches/patch-src_basic_socket-util.h
@@ -0,0 +1,14 @@
+$NetBSD$
+
+--- src/basic/socket-util.h.orig	2022-12-16 10:13:02.000000000 +0000
++++ src/basic/socket-util.h
+@@ -29,6 +29,9 @@ struct ucred {
+         uint32_t uid;
+         uint32_t gid;
+ };
++#elif defined(__NetBSD__)
++#define ucred unpcbid
++#define SO_PEERCRED LOCAL_PEEREID
+ #endif
+ 
+ int fd_inc_sndbuf(int fd, size_t n);
diff --git a/basu/patches/patch-src_busctl_busctl.c b/basu/patches/patch-src_busctl_busctl.c
new file mode 100644
index 0000000000..b35e172cae
--- /dev/null
+++ b/basu/patches/patch-src_busctl_busctl.c
@@ -0,0 +1,419 @@
+$NetBSD$
+
+--- src/busctl/busctl.c.orig	2025-12-11 12:22:33.149441917 +0000
++++ src/busctl/busctl.c
+@@ -57,11 +57,11 @@ static usec_t arg_timeout = 0;
+ #define NAME_IS_ACTIVATABLE INT_TO_PTR(2)
+ 
+ static int bus_log_parse_error(int r) {
+-        return log_error_errno(r, "Failed to parse bus message: %m");
++        return log_error_errno(r, LOG_ERR_FMT("Failed to parse bus message", r));
+ }
+ 
+ static int bus_log_create_error(int r) {
+-        return log_error_errno(r, "Failed to create bus message: %m");
++        return log_error_errno(r, LOG_ERR_FMT("Failed to create bus message", r));
+ }
+ 
+ static int acquire_bus(bool set_monitor, sd_bus **ret) {
+@@ -70,33 +70,33 @@ static int acquire_bus(bool set_monitor,
+ 
+         r = sd_bus_new(&bus);
+         if (r < 0)
+-                return log_error_errno(r, "Failed to allocate bus: %m");
++                return log_error_errno(r, LOG_ERR_FMT("Failed to allocate bus", r));
+ 
+         if (set_monitor) {
+                 r = sd_bus_set_monitor(bus, true);
+                 if (r < 0)
+-                        return log_error_errno(r, "Failed to set monitor mode: %m");
++                        return log_error_errno(r, LOG_ERR_FMT("Failed to set monitor mode", r));
+ 
+                 r = sd_bus_negotiate_creds(bus, true, _SD_BUS_CREDS_ALL);
+                 if (r < 0)
+-                        return log_error_errno(r, "Failed to enable credentials: %m");
++                        return log_error_errno(r, LOG_ERR_FMT("Failed to enable credentials", r));
+ 
+                 r = sd_bus_negotiate_timestamp(bus, true);
+                 if (r < 0)
+-                        return log_error_errno(r, "Failed to enable timestamps: %m");
++                        return log_error_errno(r, LOG_ERR_FMT("Failed to enable timestamps", r));
+ 
+                 r = sd_bus_negotiate_fds(bus, true);
+                 if (r < 0)
+-                        return log_error_errno(r, "Failed to enable fds: %m");
++                        return log_error_errno(r, LOG_ERR_FMT("Failed to enable fds", r));
+         }
+ 
+         r = sd_bus_set_bus_client(bus, true);
+         if (r < 0)
+-                return log_error_errno(r, "Failed to set bus client: %m");
++                return log_error_errno(r, LOG_ERR_FMT("Failed to set bus client", r));
+ 
+         r = sd_bus_set_watch_bind(bus, arg_watch_bind);
+         if (r < 0)
+-                return log_error_errno(r, "Failed to set watch-bind setting to '%s': %m", yes_no(arg_watch_bind));
++                return log_error_errno(r, LOG_ERR_FMT("Failed to set watch-bind setting to '%s'", r, yes_no(arg_watch_bind)));
+ 
+         if (arg_address)
+                 r = sd_bus_set_address(bus, arg_address);
+@@ -118,11 +118,11 @@ static int acquire_bus(bool set_monitor,
+                 }
+         }
+         if (r < 0)
+-                return log_error_errno(r, "Failed to set address: %m");
++                return log_error_errno(r, LOG_ERR_FMT("Failed to set address", r));
+ 
+         r = sd_bus_start(bus);
+         if (r < 0)
+-                return log_error_errno(r, "Failed to connect to bus: %m");
++                return log_error_errno(r, LOG_ERR_FMT("Failed to connect to bus", r));
+ 
+         *ret = TAKE_PTR(bus);
+ 
+@@ -151,7 +151,7 @@ static int list_bus_names(int argc, char
+ 
+         r = sd_bus_list_names(bus, (arg_acquired || arg_unique) ? &acquired : NULL, arg_activatable ? &activatable : NULL);
+         if (r < 0)
+-                return log_error_errno(r, "Failed to list names: %m");
++                return log_error_errno(r, LOG_ERR_FMT("Failed to list names", r));
+ 
+         names = hashmap_new(&string_hash_ops);
+         if (!names)
+@@ -162,7 +162,7 @@ static int list_bus_names(int argc, char
+ 
+                 r = hashmap_put(names, *i, NAME_IS_ACQUIRED);
+                 if (r < 0)
+-                        return log_error_errno(r, "Failed to add to hashmap: %m");
++                        return log_error_errno(r, LOG_ERR_FMT("Failed to add to hashmap", r));
+         }
+ 
+         STRV_FOREACH(i, activatable) {
+@@ -170,7 +170,7 @@ static int list_bus_names(int argc, char
+ 
+                 r = hashmap_put(names, *i, NAME_IS_ACTIVATABLE);
+                 if (r < 0 && r != -EEXIST)
+-                        return log_error_errno(r, "Failed to add to hashmap: %m");
++                        return log_error_errno(r, LOG_ERR_FMT("Failed to add to hashmap", r));
+         }
+ 
+         merged = new(char*, hashmap_size(names) + 1);
+@@ -496,7 +496,7 @@ static int tree(int argc, char **argv, v
+ 
+                 r = sd_bus_list_names(bus, &names, NULL);
+                 if (r < 0)
+-                        return log_error_errno(r, "Failed to get name list: %m");
++                        return log_error_errno(r, LOG_ERR_FMT("Failed to get name list", r));
+ 
+                 STRV_FOREACH(i, names) {
+                         int q;
+@@ -1180,7 +1180,7 @@ static int monitor(int argc, char **argv
+ 
+         r = sd_bus_get_unique_name(bus, &unique_name);
+         if (r < 0)
+-                return log_error_errno(r, "Failed to get unique name: %m");
++                return log_error_errno(r, LOG_ERR_FMT("Failed to get unique name", r));
+ 
+         log_info("Monitoring bus message stream.");
+ 
+@@ -1189,7 +1189,7 @@ static int monitor(int argc, char **argv
+ 
+                 r = sd_bus_process(bus, &m);
+                 if (r < 0)
+-                        return log_error_errno(r, "Failed to process bus: %m");
++                        return log_error_errno(r, LOG_ERR_FMT("Failed to process bus", r));
+ 
+                 if (!is_monitor) {
+                         const char *name;
+@@ -1200,7 +1200,7 @@ static int monitor(int argc, char **argv
+ 
+                         r = sd_bus_message_read(m, "s", &name);
+                         if (r < 0)
+-                                return log_error_errno(r, "Failed to read lost name: %m");
++                                return log_error_errno(r, LOG_ERR_FMT("Failed to read lost name", r));
+ 
+                         if (streq(name, unique_name))
+                                 is_monitor = true;
+@@ -1225,7 +1225,7 @@ static int monitor(int argc, char **argv
+ 
+                 r = sd_bus_wait(bus, (uint64_t) -1);
+                 if (r < 0)
+-                        return log_error_errno(r, "Failed to wait for bus: %m");
++                        return log_error_errno(r, LOG_ERR_FMT("Failed to wait for bus", r));
+         }
+ }
+ 
+@@ -1279,7 +1279,7 @@ static int status(int argc, char **argv,
+         }
+ 
+         if (r < 0)
+-                return log_error_errno(r, "Failed to get credentials: %m");
++                return log_error_errno(r, LOG_ERR_FMT("Failed to get credentials", r));
+ 
+         bus_creds_dump(creds, NULL, false);
+         return 0;
+@@ -1318,7 +1318,7 @@ static int message_append_cmdline(sd_bus
+ 
+                         r = parse_boolean(v);
+                         if (r < 0)
+-                                return log_error_errno(r, "Failed to parse '%s' as boolean: %m", v);
++                                return log_error_errno(r, LOG_ERR_FMT("Failed to parse '%s' as boolean", r, v));
+ 
+                         r = sd_bus_message_append_basic(m, t, &r);
+                         break;
+@@ -1328,7 +1328,7 @@ static int message_append_cmdline(sd_bus
+ 
+                         r = safe_atou8(v, &z);
+                         if (r < 0)
+-                                return log_error_errno(r, "Failed to parse '%s' as byte (unsigned 8bit integer): %m", v);
++                                return log_error_errno(r, LOG_ERR_FMT("Failed to parse '%s' as byte (unsigned 8bit integer)", r, v));
+ 
+                         r = sd_bus_message_append_basic(m, t, &z);
+                         break;
+@@ -1339,7 +1339,7 @@ static int message_append_cmdline(sd_bus
+ 
+                         r = safe_atoi16(v, &z);
+                         if (r < 0)
+-                                return log_error_errno(r, "Failed to parse '%s' as signed 16bit integer: %m", v);
++                                return log_error_errno(r, LOG_ERR_FMT("Failed to parse '%s' as signed 16bit integer", r, v));
+ 
+                         r = sd_bus_message_append_basic(m, t, &z);
+                         break;
+@@ -1350,7 +1350,7 @@ static int message_append_cmdline(sd_bus
+ 
+                         r = safe_atou16(v, &z);
+                         if (r < 0)
+-                                return log_error_errno(r, "Failed to parse '%s' as unsigned 16bit integer: %m", v);
++                                return log_error_errno(r, LOG_ERR_FMT("Failed to parse '%s' as unsigned 16bit integer", r, v));
+ 
+                         r = sd_bus_message_append_basic(m, t, &z);
+                         break;
+@@ -1361,7 +1361,7 @@ static int message_append_cmdline(sd_bus
+ 
+                         r = safe_atoi32(v, &z);
+                         if (r < 0)
+-                                return log_error_errno(r, "Failed to parse '%s' as signed 32bit integer: %m", v);
++                                return log_error_errno(r, LOG_ERR_FMT("Failed to parse '%s' as signed 32bit integer", r, v));
+ 
+                         r = sd_bus_message_append_basic(m, t, &z);
+                         break;
+@@ -1372,7 +1372,7 @@ static int message_append_cmdline(sd_bus
+ 
+                         r = safe_atou32(v, &z);
+                         if (r < 0)
+-                                return log_error_errno(r, "Failed to parse '%s' as unsigned 32bit integer: %m", v);
++                                return log_error_errno(r, LOG_ERR_FMT("Failed to parse '%s' as unsigned 32bit integer", r, v));
+ 
+                         r = sd_bus_message_append_basic(m, t, &z);
+                         break;
+@@ -1383,7 +1383,7 @@ static int message_append_cmdline(sd_bus
+ 
+                         r = safe_atoi64(v, &z);
+                         if (r < 0)
+-                                return log_error_errno(r, "Failed to parse '%s' as signed 64bit integer: %m", v);
++                                return log_error_errno(r, LOG_ERR_FMT("Failed to parse '%s' as signed 64bit integer", r, v));
+ 
+                         r = sd_bus_message_append_basic(m, t, &z);
+                         break;
+@@ -1394,7 +1394,7 @@ static int message_append_cmdline(sd_bus
+ 
+                         r = safe_atou64(v, &z);
+                         if (r < 0)
+-                                return log_error_errno(r, "Failed to parse '%s' as unsigned 64bit integer: %m", v);
++                                return log_error_errno(r, LOG_ERR_FMT("Failed to parse '%s' as unsigned 64bit integer", r, v));
+ 
+                         r = sd_bus_message_append_basic(m, t, &z);
+                         break;
+@@ -1405,7 +1405,7 @@ static int message_append_cmdline(sd_bus
+ 
+                         r = safe_atod(v, &z);
+                         if (r < 0)
+-                                return log_error_errno(r, "Failed to parse '%s' as double precision floating point: %m", v);
++                                return log_error_errno(r, LOG_ERR_FMT("Failed to parse '%s' as double precision floating point", r, v));
+ 
+                         r = sd_bus_message_append_basic(m, t, &z);
+                         break;
+@@ -1424,11 +1424,11 @@ static int message_append_cmdline(sd_bus
+ 
+                         r = safe_atou32(v, &n);
+                         if (r < 0)
+-                                return log_error_errno(r, "Failed to parse '%s' number of array entries: %m", v);
++                                return log_error_errno(r, LOG_ERR_FMT("Failed to parse '%s' number of array entries", r, v));
+ 
+                         r = signature_element_length(signature, &k);
+                         if (r < 0)
+-                                return log_error_errno(r, "Invalid array signature: %m");
++                                return log_error_errno(r, LOG_ERR_FMT("Invalid array signature", r));
+ 
+                         {
+                                 unsigned i;
+@@ -1474,7 +1474,7 @@ static int message_append_cmdline(sd_bus
+ 
+                         r = signature_element_length(signature, &k);
+                         if (r < 0)
+-                                return log_error_errno(r, "Invalid struct/dict entry signature: %m");
++                                return log_error_errno(r, LOG_ERR_FMT("Invalid struct/dict entry signature", r));
+ 
+                         {
+                                 char s[k-1];
+@@ -1662,7 +1662,7 @@ static int json_transform_one(sd_bus_mes
+ 
+                 r = json_variant_new_unsigned(&v, b);
+                 if (r < 0)
+-                        return log_error_errno(r, "Failed to transform byte: %m");
++                        return log_error_errno(r, LOG_ERR_FMT("Failed to transform byte", r));
+ 
+                 break;
+         }
+@@ -1676,7 +1676,7 @@ static int json_transform_one(sd_bus_mes
+ 
+                 r = json_variant_new_boolean(&v, b);
+                 if (r < 0)
+-                        return log_error_errno(r, "Failed to transform boolean: %m");
++                        return log_error_errno(r, LOG_ERR_FMT("Failed to transform boolean", r));
+ 
+                 break;
+         }
+@@ -1690,7 +1690,7 @@ static int json_transform_one(sd_bus_mes
+ 
+                 r = json_variant_new_integer(&v, b);
+                 if (r < 0)
+-                        return log_error_errno(r, "Failed to transform int16: %m");
++                        return log_error_errno(r, LOG_ERR_FMT("Failed to transform int16", r));
+ 
+                 break;
+         }
+@@ -1704,7 +1704,7 @@ static int json_transform_one(sd_bus_mes
+ 
+                 r = json_variant_new_unsigned(&v, b);
+                 if (r < 0)
+-                        return log_error_errno(r, "Failed to transform uint16: %m");
++                        return log_error_errno(r, LOG_ERR_FMT("Failed to transform uint16", r));
+ 
+                 break;
+         }
+@@ -1718,7 +1718,7 @@ static int json_transform_one(sd_bus_mes
+ 
+                 r = json_variant_new_integer(&v, b);
+                 if (r < 0)
+-                        return log_error_errno(r, "Failed to transform int32: %m");
++                        return log_error_errno(r, LOG_ERR_FMT("Failed to transform int32", r));
+ 
+                 break;
+         }
+@@ -1732,7 +1732,7 @@ static int json_transform_one(sd_bus_mes
+ 
+                 r = json_variant_new_unsigned(&v, b);
+                 if (r < 0)
+-                        return log_error_errno(r, "Failed to transform uint32: %m");
++                        return log_error_errno(r, LOG_ERR_FMT("Failed to transform uint32", r));
+ 
+                 break;
+         }
+@@ -1746,7 +1746,7 @@ static int json_transform_one(sd_bus_mes
+ 
+                 r = json_variant_new_integer(&v, b);
+                 if (r < 0)
+-                        return log_error_errno(r, "Failed to transform int64: %m");
++                        return log_error_errno(r, LOG_ERR_FMT("Failed to transform int64", r));
+ 
+                 break;
+         }
+@@ -1760,7 +1760,7 @@ static int json_transform_one(sd_bus_mes
+ 
+                 r = json_variant_new_unsigned(&v, b);
+                 if (r < 0)
+-                        return log_error_errno(r, "Failed to transform uint64: %m");
++                        return log_error_errno(r, LOG_ERR_FMT("Failed to transform uint64", r));
+ 
+                 break;
+         }
+@@ -1774,7 +1774,7 @@ static int json_transform_one(sd_bus_mes
+ 
+                 r = json_variant_new_real(&v, d);
+                 if (r < 0)
+-                        return log_error_errno(r, "Failed to transform double: %m");
++                        return log_error_errno(r, LOG_ERR_FMT("Failed to transform double", r));
+ 
+                 break;
+         }
+@@ -1790,7 +1790,7 @@ static int json_transform_one(sd_bus_mes
+ 
+                 r = json_variant_new_string(&v, s);
+                 if (r < 0)
+-                        return log_error_errno(r, "Failed to transform double: %m");
++                        return log_error_errno(r, LOG_ERR_FMT("Failed to transform double", r));
+ 
+                 break;
+         }
+@@ -1802,7 +1802,7 @@ static int json_transform_one(sd_bus_mes
+ 
+                 r = json_variant_new_null(&v);
+                 if (r < 0)
+-                        return log_error_errno(r, "Failed to transform fd: %m");
++                        return log_error_errno(r, LOG_ERR_FMT("Failed to transform fd", r));
+ 
+                 break;
+ 
+@@ -1910,7 +1910,7 @@ static int call(int argc, char **argv, v
+         if (!arg_expect_reply) {
+                 r = sd_bus_send(bus, m, NULL);
+                 if (r < 0)
+-                        return log_error_errno(r, "Failed to send message: %m");
++                        return log_error_errno(r, LOG_ERR_FMT("Failed to send message", r));
+ 
+                 return 0;
+         }
+@@ -2227,7 +2227,7 @@ static int parse_argv(int argc, char *ar
+                 case ARG_EXPECT_REPLY:
+                         r = parse_boolean(optarg);
+                         if (r < 0)
+-                                return log_error_errno(r, "Failed to parse --expect-reply= parameter '%s': %m", optarg);
++                                return log_error_errno(r, LOG_ERR_FMT("Failed to parse --expect-reply= parameter '%s'", r, optarg));
+ 
+                         arg_expect_reply = r;
+                         break;
+@@ -2235,7 +2235,7 @@ static int parse_argv(int argc, char *ar
+                 case ARG_AUTO_START:
+                         r = parse_boolean(optarg);
+                         if (r < 0)
+-                                return log_error_errno(r, "Failed to parse --auto-start= parameter '%s': %m", optarg);
++                                return log_error_errno(r, LOG_ERR_FMT("Failed to parse --auto-start= parameter '%s'", r, optarg));
+ 
+                         arg_auto_start = r;
+                         break;
+@@ -2243,7 +2243,7 @@ static int parse_argv(int argc, char *ar
+                 case ARG_ALLOW_INTERACTIVE_AUTHORIZATION:
+                         r = parse_boolean(optarg);
+                         if (r < 0)
+-                                return log_error_errno(r, "Failed to parse --allow-interactive-authorization= parameter '%s': %m", optarg);
++                                return log_error_errno(r, LOG_ERR_FMT("Failed to parse --allow-interactive-authorization= parameter '%s'", r, optarg));
+ 
+                         arg_allow_interactive_authorization = r;
+                         break;
+@@ -2251,14 +2251,14 @@ static int parse_argv(int argc, char *ar
+                 case ARG_TIMEOUT:
+                         r = parse_sec(optarg, &arg_timeout);
+                         if (r < 0)
+-                                return log_error_errno(r, "Failed to parse --timeout= parameter '%s': %m", optarg);
++                                return log_error_errno(r, LOG_ERR_FMT("Failed to parse --timeout= parameter '%s'", r, optarg));
+ 
+                         break;
+ 
+                 case ARG_AUGMENT_CREDS:
+                         r = parse_boolean(optarg);
+                         if (r < 0)
+-                                return log_error_errno(r, "Failed to parse --augment-creds= parameter '%s': %m", optarg);
++                                return log_error_errno(r, LOG_ERR_FMT("Failed to parse --augment-creds= parameter '%s'", r, optarg));
+ 
+                         arg_augment_creds = r;
+                         break;
+@@ -2266,7 +2266,7 @@ static int parse_argv(int argc, char *ar
+                 case ARG_WATCH_BIND:
+                         r = parse_boolean(optarg);
+                         if (r < 0)
+-                                return log_error_errno(r, "Failed to parse --watch-bind= parameter '%s': %m", optarg);
++                                return log_error_errno(r, LOG_ERR_FMT("Failed to parse --watch-bind= parameter '%s'", r, optarg));
+ 
+                         arg_watch_bind = r;
+                         break;
diff --git a/basu/patches/patch-src_libsystemd_sd-bus_bus-control.c b/basu/patches/patch-src_libsystemd_sd-bus_bus-control.c
new file mode 100644
index 0000000000..ae8221451f
--- /dev/null
+++ b/basu/patches/patch-src_libsystemd_sd-bus_bus-control.c
@@ -0,0 +1,35 @@
+$NetBSD$
+
+--- src/libsystemd/sd-bus/bus-control.c.orig	2025-12-11 10:18:56.189627357 +0000
++++ src/libsystemd/sd-bus/bus-control.c
+@@ -743,6 +743,22 @@ _public_ int sd_bus_get_owner_creds(sd_b
+                 return -ENOMEM;
+ 
+         if (bus->ucred_valid) {
++#if defined(__NetBSD__)
++                if (pid_is_valid(bus->ucred.unp_pid)) {
++                        pid = c->pid = bus->ucred.unp_pid;
++                        c->mask |= SD_BUS_CREDS_PID & mask;
++                }
++
++                if (uid_is_valid(bus->ucred.unp_euid)) {
++                        c->euid = bus->ucred.unp_euid;
++                        c->mask |= SD_BUS_CREDS_EUID & mask;
++                }
++
++                if (gid_is_valid(bus->ucred.unp_egid)) {
++                        c->egid = bus->ucred.unp_egid;
++                        c->mask |= SD_BUS_CREDS_EGID & mask;
++                }
++#else
+                 if (pid_is_valid(bus->ucred.pid)) {
+                         pid = c->pid = bus->ucred.pid;
+                         c->mask |= SD_BUS_CREDS_PID & mask;
+@@ -757,6 +773,7 @@ _public_ int sd_bus_get_owner_creds(sd_b
+                         c->egid = bus->ucred.gid;
+                         c->mask |= SD_BUS_CREDS_EGID & mask;
+                 }
++#endif
+         }
+ 
+         if (do_label) {
diff --git a/basu/patches/patch-src_libsystemd_sd-bus_bus-dump.c b/basu/patches/patch-src_libsystemd_sd-bus_bus-dump.c
new file mode 100644
index 0000000000..92bdcd73f9
--- /dev/null
+++ b/basu/patches/patch-src_libsystemd_sd-bus_bus-dump.c
@@ -0,0 +1,49 @@
+$NetBSD$
+
+--- src/libsystemd/sd-bus/bus-dump.c.orig	2025-12-11 10:50:35.716500038 +0000
++++ src/libsystemd/sd-bus/bus-dump.c
+@@ -121,7 +121,7 @@ int bus_message_dump(sd_bus_message *m, 
+ 
+         r = sd_bus_message_rewind(m, !(flags & BUS_MESSAGE_DUMP_SUBTREE_ONLY));
+         if (r < 0)
+-                return log_error_errno(r, "Failed to rewind: %m");
++                return log_error_errno(r, LOG_ERR_FMT("Failed to rewind", r));
+ 
+         if (!(flags & BUS_MESSAGE_DUMP_SUBTREE_ONLY)) {
+                 _cleanup_free_ char *prefix = NULL;
+@@ -152,7 +152,7 @@ int bus_message_dump(sd_bus_message *m, 
+ 
+                 r = sd_bus_message_peek_type(m, &type, &contents);
+                 if (r < 0)
+-                        return log_error_errno(r, "Failed to peek type: %m");
++                        return log_error_errno(r, LOG_ERR_FMT("Failed to peek type", r));
+ 
+                 if (r == 0) {
+                         if (level <= 1)
+@@ -160,7 +160,7 @@ int bus_message_dump(sd_bus_message *m, 
+ 
+                         r = sd_bus_message_exit_container(m);
+                         if (r < 0)
+-                                return log_error_errno(r, "Failed to exit container: %m");
++                                return log_error_errno(r, LOG_ERR_FMT("Failed to exit container", r));
+ 
+                         level--;
+ 
+@@ -179,7 +179,7 @@ int bus_message_dump(sd_bus_message *m, 
+                 if (bus_type_is_container(type) > 0) {
+                         r = sd_bus_message_enter_container(m, type, contents);
+                         if (r < 0)
+-                                return log_error_errno(r, "Failed to enter container: %m");
++                                return log_error_errno(r, LOG_ERR_FMT("Failed to enter container", r));
+ 
+                         if (type == SD_BUS_TYPE_ARRAY)
+                                 fprintf(f, "%sARRAY \"%s\" {\n", prefix, contents);
+@@ -197,7 +197,7 @@ int bus_message_dump(sd_bus_message *m, 
+ 
+                 r = sd_bus_message_read_basic(m, type, &basic);
+                 if (r < 0)
+-                        return log_error_errno(r, "Failed to get basic: %m");
++                        return log_error_errno(r, LOG_ERR_FMT("Failed to get basic", r));
+ 
+                 assert(r > 0);
+ 
diff --git a/basu/patches/patch-src_libsystemd_sd-bus_bus-gvariant.c b/basu/patches/patch-src_libsystemd_sd-bus_bus-gvariant.c
new file mode 100644
index 0000000000..dc2d2d1938
--- /dev/null
+++ b/basu/patches/patch-src_libsystemd_sd-bus_bus-gvariant.c
@@ -0,0 +1,13 @@
+$NetBSD$
+
+--- src/libsystemd/sd-bus/bus-gvariant.c.orig	2022-12-16 10:13:02.000000000 +0000
++++ src/libsystemd/sd-bus/bus-gvariant.c
+@@ -2,6 +2,8 @@
+ 
+ #ifdef __FreeBSD__
+ #include <sys/endian.h>
++#elif defined(__NetBSD__)
++#include <endian.h>
+ #endif
+ 
+ #include <errno.h>
diff --git a/basu/patches/patch-src_libsystemd_sd-bus_bus-message.h b/basu/patches/patch-src_libsystemd_sd-bus_bus-message.h
new file mode 100644
index 0000000000..bd7aa082c2
--- /dev/null
+++ b/basu/patches/patch-src_libsystemd_sd-bus_bus-message.h
@@ -0,0 +1,22 @@
+$NetBSD$
+
+--- src/libsystemd/sd-bus/bus-message.h.orig	2022-12-16 10:13:02.000000000 +0000
++++ src/libsystemd/sd-bus/bus-message.h
+@@ -3,6 +3,8 @@
+ 
+ #ifdef __FreeBSD__
+ #include <sys/endian.h>
++#elif defined(__NetBSD__)
++#include <endian.h>
+ #else
+ #include <byteswap.h>
+ #endif
+@@ -129,7 +131,7 @@ static inline bool BUS_MESSAGE_NEED_BSWA
+         return m->header->endian != BUS_NATIVE_ENDIAN;
+ }
+ 
+-#ifdef __FreeBSD__
++#if defined(__FreeBSD__) || defined(__NetBSD__)
+ #define bswap_16 bswap16
+ #define bswap_32 bswap32
+ #define bswap_64 bswap64
diff --git a/basu/patches/patch-src_libsystemd_sd-bus_bus-protocol.h b/basu/patches/patch-src_libsystemd_sd-bus_bus-protocol.h
new file mode 100644
index 0000000000..45ac0c1a1e
--- /dev/null
+++ b/basu/patches/patch-src_libsystemd_sd-bus_bus-protocol.h
@@ -0,0 +1,15 @@
+$NetBSD$
+
+--- src/libsystemd/sd-bus/bus-protocol.h.orig	2022-12-16 10:13:02.000000000 +0000
++++ src/libsystemd/sd-bus/bus-protocol.h
+@@ -46,7 +46,9 @@ enum {
+         _BUS_INVALID_ENDIAN = 0,
+         BUS_LITTLE_ENDIAN   = 'l',
+         BUS_BIG_ENDIAN      = 'B',
+-#if (defined(__FreeBSD__) && _BYTE_ORDER == _BIG_ENDIAN) || (defined(__linux__) && __BYTE_ORDER == __BIG_ENDIAN)
++#if (defined(__FreeBSD__) && _BYTE_ORDER == _BIG_ENDIAN) \
++        || (defined(__NetBSD__) && _BYTE_ORDER == _BIG_ENDIAN) \
++        || (defined(__linux__) && __BYTE_ORDER == __BIG_ENDIAN)
+         BUS_NATIVE_ENDIAN   = BUS_BIG_ENDIAN,
+         BUS_REVERSE_ENDIAN  = BUS_LITTLE_ENDIAN
+ #else
diff --git a/basu/patches/patch-src_libsystemd_sd-bus_bus-socket.c b/basu/patches/patch-src_libsystemd_sd-bus_bus-socket.c
new file mode 100644
index 0000000000..27af235405
--- /dev/null
+++ b/basu/patches/patch-src_libsystemd_sd-bus_bus-socket.c
@@ -0,0 +1,97 @@
+$NetBSD$
+
+--- src/libsystemd/sd-bus/bus-socket.c.orig	2022-12-16 10:13:02.000000000 +0000
++++ src/libsystemd/sd-bus/bus-socket.c
+@@ -20,6 +20,11 @@
+ #include "user-util.h"
+ #include "utf8.h"
+ 
++#if defined(__NetBSD__)
++#include <sys/un.h>
++#include <sys/socket.h>
++#endif
++
+ #define SNDBUF_SIZE (8*1024*1024)
+ 
+ static void iovec_advance(struct iovec iov[], unsigned *idx, size_t size) {
+@@ -129,6 +134,9 @@ static int bus_socket_write_null_byte(sd
+ #elif defined(__FreeBSD__)
+ #define SOCKET_CRED_OPTION SCM_CREDS
+         struct cmsgcred creds = { 0 };
++#elif defined(__NetBSD__)
++#define SOCKET_CRED_OPTION SCM_CREDS
++        struct unpcbid creds = { 0 };
+ #else
+ #error auth not implemented for this OS
+ #endif
+@@ -344,8 +352,13 @@ static int verify_external_token(sd_bus 
+ 
+         /* We ignore the passed value if anonymous authentication is
+          * on anyway. */
++#if defined(__NetBSD__)
++        if (!b->anonymous_auth && u != b->ucred.unp_euid)
++                return 0;
++#else
+         if (!b->anonymous_auth && u != b->ucred.uid)
+                 return 0;
++#endif
+ 
+         return 1;
+ }
+@@ -537,6 +550,19 @@ static int bus_socket_process_creds(sd_b
+         b->ucred.gid = creds.cmcred_gid;
+         b->ucred_valid = true;
+         return 0;
++#elif defined(__NetBSD__)
++        if (cmsg->cmsg_level != SOL_SOCKET ||
++            cmsg->cmsg_type != SCM_CREDS) {
++                return -ENOSYS;
++        }
++        struct unpcbid creds;
++        memcpy(&creds, CMSG_DATA(cmsg), sizeof(struct unpcbid));
++
++        b->ucred.unp_pid = creds.unp_pid;
++        b->ucred.unp_euid = creds.unp_euid;
++        b->ucred.unp_egid = creds.unp_egid;
++        b->ucred_valid = true;
++        return 0;
+ #else
+         return -ENOSYS;
+ #endif
+@@ -556,6 +582,8 @@ static int bus_socket_read_auth(sd_bus *
+                 char creds[CMSG_SPACE(sizeof(struct ucred))];
+ #elif defined(__FreeBSD__)
+                 char creds[CMSG_SPACE(sizeof(struct cmsgcred))];
++#elif defined(__NetBSD__)
++                char creds[CMSG_SPACE(sizeof(struct unpcbid))];
+ #endif
+         } control;
+ 
+@@ -617,7 +645,7 @@ static int bus_socket_read_auth(sd_bus *
+                         log_debug("Got unexpected auxiliary data with level=%d and type=%d",
+                                   cmsg->cmsg_level, cmsg->cmsg_type);
+                 else if (r < 0)
+-                        log_error_errno(r, "Could not process credentials: %m");
++                        log_error_errno(r, LOG_ERR_FMT("Could not process credentials", r));
+         }
+ 
+         r = bus_socket_auth_verify(b);
+@@ -658,15 +686,15 @@ static void bus_get_peercred(sd_bus *b) 
+ 
+         /* Get the SELinux context of the peer */
+         r = getpeersec(b->input_fd, &b->label);
+-        if (r < 0 && !IN_SET(r, -EOPNOTSUPP, -ENOPROTOOPT))
+-                log_debug_errno(r, "Failed to determine peer security context: %m");
++        if (r < 0 && !IN_SET(r, -EOPNOTSUPP, -ENOPROTOOPT)) 
++                log_debug_errno(r, LOG_ERR_FMT("Failed to determine peer security context", r));
+ 
+         /* Get the list of auxiliary groups of the peer */
+         r = getpeergroups(b->input_fd, &b->groups);
+         if (r >= 0)
+                 b->n_groups = (size_t) r;
+         else if (!IN_SET(r, -EOPNOTSUPP, -ENOPROTOOPT))
+-                log_debug_errno(r, "Failed to determine peer's group list: %m");
++                log_debug_errno(r, LOG_ERR_FMT("Failed to determine peer's group list", r));
+ }
+ 
+ static int bus_socket_start_auth_client(sd_bus *b) {
diff --git a/basu/patches/patch-src_libsystemd_sd-bus_bus-track.c b/basu/patches/patch-src_libsystemd_sd-bus_bus-track.c
new file mode 100644
index 0000000000..40558392a4
--- /dev/null
+++ b/basu/patches/patch-src_libsystemd_sd-bus_bus-track.c
@@ -0,0 +1,13 @@
+$NetBSD$
+
+--- src/libsystemd/sd-bus/bus-track.c.orig	2025-12-11 10:48:49.464837646 +0000
++++ src/libsystemd/sd-bus/bus-track.c
+@@ -373,7 +373,7 @@ void bus_track_dispatch(sd_bus_track *tr
+ 
+         r = track->handler(track, track->userdata);
+         if (r < 0)
+-                log_debug_errno(r, "Failed to process track handler: %m");
++                log_debug_errno(r, LOG_ERR_FMT("Failed to process track handler", r));
+         else if (r == 0)
+                 bus_track_add_to_queue(track);
+ 
diff --git a/basu/patches/patch-src_libsystemd_sd-bus_test-bus-chat.c b/basu/patches/patch-src_libsystemd_sd-bus_test-bus-chat.c
new file mode 100644
index 0000000000..d1b659f93b
--- /dev/null
+++ b/basu/patches/patch-src_libsystemd_sd-bus_test-bus-chat.c
@@ -0,0 +1,309 @@
+$NetBSD$
+
+--- src/libsystemd/sd-bus/test-bus-chat.c.orig	2025-12-11 11:56:24.257167499 +0000
++++ src/libsystemd/sd-bus/test-bus-chat.c
+@@ -30,7 +30,7 @@ static int object_callback(sd_bus_messag
+ 
+                 r = sd_bus_reply_method_return(m, NULL);
+                 if (r < 0)
+-                        return log_error_errno(r, "Failed to send reply: %m");
++                        return log_error_errno(r, LOG_ERR_FMT("Failed to send reply", r));
+ 
+                 return 1;
+         }
+@@ -48,19 +48,19 @@ static int server_init(sd_bus **_bus) {
+ 
+         r = sd_bus_open_user_with_description(&bus, "my bus!");
+         if (r < 0) {
+-                log_error_errno(r, "Failed to connect to user bus: %m");
++                log_error_errno(r, LOG_ERR_FMT("Failed to connect to user bus", r));
+                 goto fail;
+         }
+ 
+         r = sd_bus_get_bus_id(bus, &id);
+         if (r < 0) {
+-                log_error_errno(r, "Failed to get server ID: %m");
++                log_error_errno(r, LOG_ERR_FMT("Failed to get server ID", r));
+                 goto fail;
+         }
+ 
+         r = sd_bus_get_unique_name(bus, &unique);
+         if (r < 0) {
+-                log_error_errno(r, "Failed to get unique name: %m");
++                log_error_errno(r, LOG_ERR_FMT("Failed to get unique name", r));
+                 goto fail;
+         }
+ 
+@@ -73,25 +73,25 @@ static int server_init(sd_bus **_bus) {
+ 
+         r = sd_bus_request_name(bus, "org.freedesktop.systemd.test", 0);
+         if (r < 0) {
+-                log_error_errno(r, "Failed to acquire name: %m");
++                log_error_errno(r, LOG_ERR_FMT("Failed to acquire name", r));
+                 goto fail;
+         }
+ 
+         r = sd_bus_add_fallback(bus, NULL, "/foo/bar", object_callback, NULL);
+         if (r < 0) {
+-                log_error_errno(r, "Failed to add object: %m");
++                log_error_errno(r, LOG_ERR_FMT("Failed to add object", r));
+                 goto fail;
+         }
+ 
+         r = sd_bus_match_signal(bus, NULL, NULL, NULL, "foo.bar", "Notify", match_callback, NULL);
+         if (r < 0) {
+-                log_error_errno(r, "Failed to request match: %m");
++                log_error_errno(r, LOG_ERR_FMT("Failed to request match", r));
+                 goto fail;
+         }
+ 
+         r = sd_bus_add_match(bus, NULL, "type='signal',interface='org.freedesktop.DBus',member='NameOwnerChanged'", match_callback, NULL);
+         if (r < 0) {
+-                log_error_errno(r, "Failed to add match: %m");
++                log_error_errno(r, LOG_ERR_FMT("Failed to add match", r));
+                 goto fail;
+         }
+ 
+@@ -116,14 +116,14 @@ static int server(sd_bus *bus) {
+ 
+                 r = sd_bus_process(bus, &m);
+                 if (r < 0) {
+-                        log_error_errno(r, "Failed to process requests: %m");
++                        log_error_errno(r, LOG_ERR_FMT("Failed to process requests", r));
+                         goto fail;
+                 }
+ 
+                 if (r == 0) {
+                         r = sd_bus_wait(bus, (uint64_t) -1);
+                         if (r < 0) {
+-                                log_error_errno(r, "Failed to wait: %m");
++                                log_error_errno(r, LOG_ERR_FMT("Failed to wait", r));
+                                 goto fail;
+                         }
+ 
+@@ -148,7 +148,7 @@ static int server(sd_bus *bus) {
+ 
+                         r = sd_bus_message_read(m, "s", &hello);
+                         if (r < 0) {
+-                                log_error_errno(r, "Failed to get parameter: %m");
++                                log_error_errno(r, LOG_ERR_FMT("Failed to get parameter", r));
+                                 goto fail;
+                         }
+ 
+@@ -162,14 +162,14 @@ static int server(sd_bus *bus) {
+ 
+                         r = sd_bus_reply_method_return(m, "s", lowercase);
+                         if (r < 0) {
+-                                log_error_errno(r, "Failed to send reply: %m");
++                                log_error_errno(r, LOG_ERR_FMT("Failed to send reply", r));
+                                 goto fail;
+                         }
+                 } else if (sd_bus_message_is_method_call(m, "org.freedesktop.systemd.test", "ExitClient1")) {
+ 
+                         r = sd_bus_reply_method_return(m, NULL);
+                         if (r < 0) {
+-                                log_error_errno(r, "Failed to send reply: %m");
++                                log_error_errno(r, LOG_ERR_FMT("Failed to send reply", r));
+                                 goto fail;
+                         }
+ 
+@@ -178,7 +178,7 @@ static int server(sd_bus *bus) {
+ 
+                         r = sd_bus_reply_method_return(m, NULL);
+                         if (r < 0) {
+-                                log_error_errno(r, "Failed to send reply: %m");
++                                log_error_errno(r, LOG_ERR_FMT("Failed to send reply", r));
+                                 goto fail;
+                         }
+ 
+@@ -189,7 +189,7 @@ static int server(sd_bus *bus) {
+ 
+                         r = sd_bus_reply_method_return(m, NULL);
+                         if (r < 0) {
+-                                log_error_errno(r, "Failed to send reply: %m");
++                                log_error_errno(r, LOG_ERR_FMT("Failed to send reply", r));
+                                 goto fail;
+                         }
+ 
+@@ -199,21 +199,21 @@ static int server(sd_bus *bus) {
+ 
+                         r = sd_bus_message_read(m, "h", &fd);
+                         if (r < 0) {
+-                                log_error_errno(r, "Failed to get parameter: %m");
++                                log_error_errno(r, LOG_ERR_FMT("Failed to get parameter", r));
+                                 goto fail;
+                         }
+ 
+                         log_info("Received fd=%d", fd);
+ 
+                         if (write(fd, &x, 1) < 0) {
+-                                log_error_errno(errno, "Failed to write to fd: %m");
++                                log_error_errno(errno, LOG_ERR_FMT("Failed to write to fd", r));
+                                 safe_close(fd);
+                                 goto fail;
+                         }
+ 
+                         r = sd_bus_reply_method_return(m, NULL);
+                         if (r < 0) {
+-                                log_error_errno(r, "Failed to send reply: %m");
++                                log_error_errno(r, LOG_ERR_FMT("Failed to send reply", r));
+                                 goto fail;
+                         }
+ 
+@@ -223,7 +223,7 @@ static int server(sd_bus *bus) {
+                                         m,
+                                         &SD_BUS_ERROR_MAKE_CONST(SD_BUS_ERROR_UNKNOWN_METHOD, "Unknown method."));
+                         if (r < 0) {
+-                                log_error_errno(r, "Failed to send reply: %m");
++                                log_error_errno(r, LOG_ERR_FMT("Failed to send reply", r));
+                                 goto fail;
+                         }
+                 }
+@@ -251,7 +251,7 @@ static void* client1(void*p) {
+ 
+         r = sd_bus_open_user(&bus);
+         if (r < 0) {
+-                log_error_errno(r, "Failed to connect to user bus: %m");
++                log_error_errno(r, LOG_ERR_FMT("Failed to connect to user bus", r));
+                 goto finish;
+         }
+ 
+@@ -266,20 +266,20 @@ static void* client1(void*p) {
+                         "s",
+                         "HELLO");
+         if (r < 0) {
+-                log_error_errno(r, "Failed to issue method call: %m");
++                log_error_errno(r, LOG_ERR_FMT("Failed to issue method call", r));
+                 goto finish;
+         }
+ 
+         r = sd_bus_message_read(reply, "s", &hello);
+         if (r < 0) {
+-                log_error_errno(r, "Failed to get string: %m");
++                log_error_errno(r, LOG_ERR_FMT("Failed to get string", r));
+                 goto finish;
+         }
+ 
+         assert_se(streq(hello, "hello"));
+ 
+         if (pipe2(pp, O_CLOEXEC|O_NONBLOCK) < 0) {
+-                log_error_errno(errno, "Failed to allocate pipe: %m");
++                log_error_errno(errno, LOG_ERR_FMT("Failed to allocate pipe", errno));
+                 r = -errno;
+                 goto finish;
+         }
+@@ -297,7 +297,7 @@ static void* client1(void*p) {
+                         "h",
+                         pp[1]);
+         if (r < 0) {
+-                log_error_errno(r, "Failed to issue method call: %m");
++                log_error_errno(r, LOG_ERR_FMT("Failed to issue method call", r));
+                 goto finish;
+         }
+ 
+@@ -321,7 +321,7 @@ finish:
+                                 "org.freedesktop.systemd.test",
+                                 "ExitClient1");
+                 if (r < 0)
+-                        log_error_errno(r, "Failed to allocate method call: %m");
++                        log_error_errno(r, LOG_ERR_FMT("Failed to allocate method call", r));
+                 else
+                         sd_bus_send(bus, q, NULL);
+ 
+@@ -333,7 +333,7 @@ finish:
+ static int quit_callback(sd_bus_message *m, void *userdata, sd_bus_error *ret_error) {
+         bool *x = userdata;
+ 
+-        log_error_errno(sd_bus_message_get_errno(m), "Quit callback: %m");
++        log_error_errno(sd_bus_message_get_errno(m), LOG_ERR_FMT("Quit callback", sd_bus_message_get_errno(m)));
+ 
+         *x = 1;
+         return 1;
+@@ -349,7 +349,7 @@ static void* client2(void*p) {
+ 
+         r = sd_bus_open_user(&bus);
+         if (r < 0) {
+-                log_error_errno(r, "Failed to connect to user bus: %m");
++                log_error_errno(r, LOG_ERR_FMT("Failed to connect to user bus", r));
+                 goto finish;
+         }
+ 
+@@ -361,7 +361,7 @@ static void* client2(void*p) {
+                         "org.object.test",
+                         "Foobar");
+         if (r < 0) {
+-                log_error_errno(r, "Failed to allocate method call: %m");
++                log_error_errno(r, LOG_ERR_FMT("Failed to allocate method call", r));
+                 goto finish;
+         }
+ 
+@@ -380,7 +380,7 @@ static void* client2(void*p) {
+                         "foo.bar",
+                         "Notify");
+         if (r < 0) {
+-                log_error_errno(r, "Failed to allocate signal: %m");
++                log_error_errno(r, LOG_ERR_FMT("Failed to allocate signal", r));
+                 goto finish;
+         }
+ 
+@@ -400,7 +400,7 @@ static void* client2(void*p) {
+                         "org.freedesktop.DBus.Peer",
+                         "GetMachineId");
+         if (r < 0) {
+-                log_error_errno(r, "Failed to allocate method call: %m");
++                log_error_errno(r, LOG_ERR_FMT("Failed to allocate method call", r));
+                 goto finish;
+         }
+ 
+@@ -412,7 +412,7 @@ static void* client2(void*p) {
+ 
+         r = sd_bus_message_read(reply, "s", &mid);
+         if (r < 0) {
+-                log_error_errno(r, "Failed to parse machine ID: %m");
++                log_error_errno(r, LOG_ERR_FMT("Failed to parse machine ID", r));
+                 goto finish;
+         }
+ 
+@@ -428,7 +428,7 @@ static void* client2(void*p) {
+                         "org.freedesktop.systemd.test",
+                         "Slow");
+         if (r < 0) {
+-                log_error_errno(r, "Failed to allocate method call: %m");
++                log_error_errno(r, LOG_ERR_FMT("Failed to allocate method call", r));
+                 goto finish;
+         }
+ 
+@@ -450,7 +450,7 @@ static void* client2(void*p) {
+                         "org.freedesktop.systemd.test",
+                         "Slow");
+         if (r < 0) {
+-                log_error_errno(r, "Failed to allocate method call: %m");
++                log_error_errno(r, LOG_ERR_FMT("Failed to allocate method call", r));
+                 goto finish;
+         }
+ 
+@@ -463,13 +463,13 @@ static void* client2(void*p) {
+         while (!quit) {
+                 r = sd_bus_process(bus, NULL);
+                 if (r < 0) {
+-                        log_error_errno(r, "Failed to process requests: %m");
++                        log_error_errno(r, LOG_ERR_FMT("Failed to process requests", r));
+                         goto finish;
+                 }
+                 if (r == 0) {
+                         r = sd_bus_wait(bus, (uint64_t) -1);
+                         if (r < 0) {
+-                                log_error_errno(r, "Failed to wait: %m");
++                                log_error_errno(r, LOG_ERR_FMT("Failed to wait", r));
+                                 goto finish;
+                         }
+                 }
+@@ -489,7 +489,7 @@ finish:
+                                 "org.freedesktop.systemd.test",
+                                 "ExitClient2");
+                 if (r < 0) {
+-                        log_error_errno(r, "Failed to allocate method call: %m");
++                        log_error_errno(r, LOG_ERR_FMT("Failed to allocate method call", r));
+                         goto finish;
+                 }
+ 
diff --git a/basu/patches/patch-src_libsystemd_sd-bus_test-bus-creds.c b/basu/patches/patch-src_libsystemd_sd-bus_test-bus-creds.c
new file mode 100644
index 0000000000..56e4dd7a5a
--- /dev/null
+++ b/basu/patches/patch-src_libsystemd_sd-bus_test-bus-creds.c
@@ -0,0 +1,13 @@
+$NetBSD$
+
+--- src/libsystemd/sd-bus/test-bus-creds.c.orig	2025-12-11 12:18:32.959056564 +0000
++++ src/libsystemd/sd-bus/test-bus-creds.c
+@@ -14,7 +14,7 @@ int main(int argc, char *argv[]) {
+         test_setup_logging(LOG_DEBUG);
+ 
+         r = sd_bus_creds_new_from_pid(&creds, 0, _SD_BUS_CREDS_ALL);
+-        log_full_errno(r < 0 ? LOG_ERR : LOG_DEBUG, r, "sd_bus_creds_new_from_pid: %m");
++        log_full_errno(r < 0 ? LOG_ERR : LOG_DEBUG, r, LOG_ERR_FMT("sd_bus_creds_new_from_pid", r));
+         assert_se(r >= 0);
+ 
+         bus_creds_dump(creds, NULL, true);
diff --git a/basu/patches/patch-src_libsystemd_sd-bus_test-bus-objects.c b/basu/patches/patch-src_libsystemd_sd-bus_test-bus-objects.c
new file mode 100644
index 0000000000..bb962755f0
--- /dev/null
+++ b/basu/patches/patch-src_libsystemd_sd-bus_test-bus-objects.c
@@ -0,0 +1,21 @@
+$NetBSD$
+
+--- src/libsystemd/sd-bus/test-bus-objects.c.orig	2025-12-11 12:20:54.789852232 +0000
++++ src/libsystemd/sd-bus/test-bus-objects.c
+@@ -247,14 +247,14 @@ static void *server(void *p) {
+ 
+                 r = sd_bus_process(bus, NULL);
+                 if (r < 0) {
+-                        log_error_errno(r, "Failed to process requests: %m");
++                        log_error_errno(r, LOG_ERR_FMT("Failed to process requests", r));
+                         goto fail;
+                 }
+ 
+                 if (r == 0) {
+                         r = sd_bus_wait(bus, (uint64_t) -1);
+                         if (r < 0) {
+-                                log_error_errno(r, "Failed to wait: %m");
++                                log_error_errno(r, LOG_ERR_FMT("Failed to wait", r));
+                                 goto fail;
+                         }
+ 
diff --git a/basu/patches/patch-src_libsystemd_sd-bus_test-bus-server.c b/basu/patches/patch-src_libsystemd_sd-bus_test-bus-server.c
new file mode 100644
index 0000000000..11dee822a2
--- /dev/null
+++ b/basu/patches/patch-src_libsystemd_sd-bus_test-bus-server.c
@@ -0,0 +1,57 @@
+$NetBSD$
+
+--- src/libsystemd/sd-bus/test-bus-server.c.orig	2025-12-11 11:23:13.067603048 +0000
++++ src/libsystemd/sd-bus/test-bus-server.c
+@@ -39,14 +39,14 @@ static void *server(void *p) {
+ 
+                 r = sd_bus_process(bus, &m);
+                 if (r < 0) {
+-                        log_error_errno(r, "Failed to process requests: %m");
++                        log_error_errno(r, LOG_ERR_FMT("Failed to process requests", r));
+                         goto fail;
+                 }
+ 
+                 if (r == 0) {
+                         r = sd_bus_wait(bus, (uint64_t) -1);
+                         if (r < 0) {
+-                                log_error_errno(r, "Failed to wait: %m");
++                                log_error_errno(r, LOG_ERR_FMT("Failed to wait", r));
+                                 goto fail;
+                         }
+ 
+@@ -65,7 +65,7 @@ static void *server(void *p) {
+ 
+                         r = sd_bus_message_new_method_return(m, &reply);
+                         if (r < 0) {
+-                                log_error_errno(r, "Failed to allocate return: %m");
++                                log_error_errno(r, LOG_ERR_FMT("Failed to allocate return", r));
+                                 goto fail;
+                         }
+ 
+@@ -77,7 +77,7 @@ static void *server(void *p) {
+                                         &reply,
+                                         &SD_BUS_ERROR_MAKE_CONST(SD_BUS_ERROR_UNKNOWN_METHOD, "Unknown method."));
+                         if (r < 0) {
+-                                log_error_errno(r, "Failed to allocate return: %m");
++                                log_error_errno(r, LOG_ERR_FMT("Failed to allocate return", r));
+                                 goto fail;
+                         }
+                 }
+@@ -85,7 +85,7 @@ static void *server(void *p) {
+                 if (reply) {
+                         r = sd_bus_send(bus, reply, NULL);
+                         if (r < 0) {
+-                                log_error_errno(r, "Failed to send reply: %m");
++                                log_error_errno(r, LOG_ERR_FMT("Failed to send reply", r));
+                                 goto fail;
+                         }
+                 }
+@@ -122,7 +122,7 @@ static int client(struct context *c) {
+                         "org.freedesktop.systemd.test",
+                         "Exit");
+         if (r < 0)
+-                return log_error_errno(r, "Failed to allocate method call: %m");
++                return log_error_errno(r, LOG_ERR_FMT("Failed to allocate method call", r));
+ 
+         r = sd_bus_call(bus, m, 0, &error, &reply);
+         if (r < 0)
diff --git a/basu/patches/patch-src_test_tests.c b/basu/patches/patch-src_test_tests.c
new file mode 100644
index 0000000000..a3671b8672
--- /dev/null
+++ b/basu/patches/patch-src_test_tests.c
@@ -0,0 +1,29 @@
+$NetBSD$
+
+--- src/test/tests.c.orig	2022-12-16 10:13:02.000000000 +0000
++++ src/test/tests.c
+@@ -1,12 +1,13 @@
+ /* SPDX-License-Identifier: LGPL-2.1+ */
+ 
+ #include <stdlib.h>
++#include <string.h>
+ #include <util.h>
+ 
+ #include "env-util.h"
+ #include "tests.h"
+ 
+-#ifdef __FreeBSD__
++#if defined(__FreeBSD__) || defined(__NetBSD__)
+ #define program_invocation_short_name getprogname()
+ #endif
+ 
+@@ -22,7 +23,7 @@ int log_tests_skipped(const char *messag
+ }
+ 
+ int log_tests_skipped_errno(int r, const char *message) {
+-        log_notice_errno(r, "%s: %s, skipping tests: %m",
+-                         program_invocation_short_name, message);
++        log_notice_errno(r, LOG_ERR_FMT("%s: %s, skipping tests", r,
++                         program_invocation_short_name, message));
+         return EXIT_TEST_SKIP;
+ }


Home | Main Index | Thread Index | Old Index