mirror of
https://github.com/troglobit/finit.git
synced 2026-09-30 13:02:37 +07:00
Finit had no way to answer the question every service manager gets asked: what is running, and change it. D-Bus is how the rest of userspace asks, but linking libdbus, sd-bus or GIO into PID 1 buys a dependency, an allocator and a main loop we do not control. So libink: the wire format, an object tree, and a bus of Finit's own at /run/finit/bus, gated like INIT_SOCKET. It speaks the standard org.freedesktop.DBus, .Peer, .Introspectable interfaces, and Finit's own Manager1, Service1 and Cond1 on top. Methods that change something are marked privileged and answered only for a caller the kernel vouched for, via SO_PEERCRED. Server and client both, since initctl is the first thing that needs to talk to it, and its Start/Stop/Restart/Reload now go over the bus rather than the legacy socket. Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
22 lines
770 B
C
22 lines
770 B
C
/* libink — D-Bus object-path encoding for arbitrary identifiers.
|
|
*
|
|
* Copyright (c) 2026 Joachim Wiberg <troglobit@gmail.com>
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
#ifndef LIBINK_PATH_H_
|
|
#define LIBINK_PATH_H_
|
|
|
|
#include <stddef.h>
|
|
|
|
/* Encode `in` as a D-Bus path segment. Bytes in [A-Za-z0-9] pass
|
|
* through unchanged; everything else (including '_' itself) becomes
|
|
* "_HH" with lowercase hex, mirroring systemd's escape_path.
|
|
*
|
|
* Returns the encoded length (excluding the terminating nul), or -1
|
|
* if the output buffer cannot fit the result. `outsz` must
|
|
* accommodate the encoded bytes plus a trailing nul; the worst-case
|
|
* size for an N-byte input is 3*N + 1. */
|
|
int link_path_encode(const char *in, char *out, size_t outsz);
|
|
|
|
#endif /* LIBINK_PATH_H_ */
|