various: set info on varlink server object

The values that were previously hardcoded in sd-varlink.c are now defined
in new varlink_set_info_systemd() and that function is called everywhere
where we create a server.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2024-12-09 20:23:29 +01:00
parent 29f63c67b0
commit fd409ff0e0
21 changed files with 107 additions and 48 deletions

View File

@@ -27,6 +27,7 @@
#include "pretty-print.h"
#include "utf8.h"
#include "varlink-io.systemd.BootControl.h"
#include "varlink-util.h"
#include "verbs.h"
#include "virt.h"
@@ -656,7 +657,7 @@ static int run(int argc, char *argv[]) {
/* Invocation as Varlink service */
r = sd_varlink_server_new(&varlink_server, SD_VARLINK_SERVER_ROOT_ONLY);
r = varlink_server_new(&varlink_server, SD_VARLINK_SERVER_ROOT_ONLY, NULL);
if (r < 0)
return log_error_errno(r, "Failed to allocate Varlink server: %m");

View File

@@ -582,11 +582,9 @@ int manager_setup_varlink_server(Manager *m) {
if (!MANAGER_IS_SYSTEM(m))
return -EINVAL;
r = sd_varlink_server_new(&s, SD_VARLINK_SERVER_ACCOUNT_UID|SD_VARLINK_SERVER_INHERIT_USERDATA);
r = varlink_server_new(&s, SD_VARLINK_SERVER_ACCOUNT_UID|SD_VARLINK_SERVER_INHERIT_USERDATA, m);
if (r < 0)
return log_debug_errno(r, "Failed to allocate varlink server object: %m");
sd_varlink_server_set_userdata(s, m);
return log_debug_errno(r, "Failed to allocate Varlink server: %m");
r = sd_varlink_server_add_interface_many(
s,

View File

@@ -32,6 +32,7 @@
#include "user-util.h"
#include "varlink-io.systemd.Credentials.h"
#include "verbs.h"
#include "varlink-util.h"
typedef enum TranscodeMode {
TRANSCODE_OFF,
@@ -1378,7 +1379,10 @@ static int run(int argc, char *argv[]) {
/* Invocation as Varlink service */
r = sd_varlink_server_new(&varlink_server, SD_VARLINK_SERVER_ACCOUNT_UID|SD_VARLINK_SERVER_INHERIT_USERDATA|SD_VARLINK_SERVER_INPUT_SENSITIVE);
r = varlink_server_new(
&varlink_server,
SD_VARLINK_SERVER_ACCOUNT_UID|SD_VARLINK_SERVER_INHERIT_USERDATA|SD_VARLINK_SERVER_INPUT_SENSITIVE,
NULL);
if (r < 0)
return log_error_errno(r, "Failed to allocate Varlink server: %m");

View File

@@ -55,6 +55,7 @@
#include "user-record.h"
#include "user-util.h"
#include "varlink-io.systemd.UserDatabase.h"
#include "varlink-util.h"
/* Where to look for private/public keys that are used to sign the user records. We are not using
* CONF_PATHS_NULSTR() here since we want to insert /var/lib/systemd/home/ in the middle. And we insert that
@@ -1004,11 +1005,12 @@ static int manager_bind_varlink(Manager *m) {
assert(m);
assert(!m->varlink_server);
r = sd_varlink_server_new(&m->varlink_server, SD_VARLINK_SERVER_ACCOUNT_UID|SD_VARLINK_SERVER_INHERIT_USERDATA|SD_VARLINK_SERVER_INPUT_SENSITIVE);
r = varlink_server_new(
&m->varlink_server,
SD_VARLINK_SERVER_ACCOUNT_UID|SD_VARLINK_SERVER_INHERIT_USERDATA|SD_VARLINK_SERVER_INPUT_SENSITIVE,
m);
if (r < 0)
return log_error_errno(r, "Failed to allocate varlink server object: %m");
sd_varlink_server_set_userdata(m->varlink_server, m);
return log_error_errno(r, "Failed to allocate varlink server: %m");
r = sd_varlink_server_add_interface(m->varlink_server, &vl_interface_io_systemd_UserDatabase);
if (r < 0)

View File

@@ -40,6 +40,7 @@
#include "user-util.h"
#include "utf8.h"
#include "varlink-io.systemd.Hostname.h"
#include "varlink-util.h"
#include "virt.h"
#define VALID_DEPLOYMENT_CHARS (DIGITS LETTERS "-.:")
@@ -1648,12 +1649,13 @@ static int connect_varlink(Context *c) {
assert(c->event);
assert(!c->varlink_server);
r = sd_varlink_server_new(&c->varlink_server, SD_VARLINK_SERVER_ACCOUNT_UID|SD_VARLINK_SERVER_INHERIT_USERDATA);
r = varlink_server_new(
&c->varlink_server,
SD_VARLINK_SERVER_ACCOUNT_UID|SD_VARLINK_SERVER_INHERIT_USERDATA,
c);
if (r < 0)
return log_error_errno(r, "Failed to allocate Varlink server: %m");
sd_varlink_server_set_userdata(c->varlink_server, c);
r = sd_varlink_server_add_interface(c->varlink_server, &vl_interface_io_systemd_Hostname);
if (r < 0)
return log_error_errno(r, "Failed to add Hostname interface to Varlink server: %m");

View File

@@ -1969,11 +1969,11 @@ static int manager_connect_varlink(Manager *m) {
assert(m->event);
assert(!m->varlink_server);
r = sd_varlink_server_new(&m->varlink_server, SD_VARLINK_SERVER_ACCOUNT_UID|SD_VARLINK_SERVER_INHERIT_USERDATA);
r = varlink_server_new(&m->varlink_server,
SD_VARLINK_SERVER_ACCOUNT_UID|SD_VARLINK_SERVER_INHERIT_USERDATA,
m);
if (r < 0)
return log_error_errno(r, "Failed to allocate Varlink server: %m");
sd_varlink_server_set_userdata(m->varlink_server, m);
return log_error_errno(r, "Failed to allocate varlink server object: %m");
r = sd_varlink_server_add_interface(m->varlink_server, &vl_interface_io_systemd_Import);
if (r < 0)

View File

@@ -64,6 +64,7 @@
#include "uid-classification.h"
#include "user-util.h"
#include "varlink-io.systemd.Journal.h"
#include "varlink-util.h"
#define USER_JOURNALS_MAX 1024
@@ -2326,11 +2327,12 @@ static int server_open_varlink(Server *s, const char *socket, int fd) {
assert(s);
r = sd_varlink_server_new(&s->varlink_server, SD_VARLINK_SERVER_ROOT_ONLY|SD_VARLINK_SERVER_INHERIT_USERDATA);
r = varlink_server_new(
&s->varlink_server,
SD_VARLINK_SERVER_ROOT_ONLY|SD_VARLINK_SERVER_INHERIT_USERDATA,
s);
if (r < 0)
return r;
sd_varlink_server_set_userdata(s->varlink_server, s);
return log_error_errno(r, "Failed to allocate varlink server object: %m");
r = sd_varlink_server_add_interface(s->varlink_server, &vl_interface_io_systemd_Journal);
if (r < 0)

View File

@@ -1,8 +1,11 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include "alloc-util.h"
#include "errno-util.h"
#include "string-util.h"
#include "varlink-internal.h"
#include "varlink-util.h"
#include "version.h"
int varlink_get_peer_pidref(sd_varlink *v, PidRef *ret) {
int r;
@@ -133,3 +136,40 @@ int varlink_many_error(Set *s, const char *error_id, sd_json_variant *parameters
return r;
}
int varlink_set_info_systemd(sd_varlink_server *server) {
_cleanup_free_ char *product = NULL;
product = strjoin("systemd (", program_invocation_short_name, ")");
if (!product)
return -ENOMEM;
return sd_varlink_server_set_info(
server,
"The systemd Project",
product,
PROJECT_VERSION_FULL " (" GIT_VERSION ")",
"https://systemd.io/");
}
int varlink_server_new(
sd_varlink_server **ret,
sd_varlink_server_flags_t flags,
void *userdata) {
_cleanup_(sd_varlink_server_unrefp) sd_varlink_server *s = NULL;
int r;
r = sd_varlink_server_new(&s, flags);
if (r < 0)
return log_debug_errno(r, "Failed to allocate varlink server object: %m");
r = varlink_set_info_systemd(s);
if (r < 0)
return log_debug_errno(r, "Failed to configure varlink server object: %m");
sd_varlink_server_set_userdata(s, userdata);
*ret = TAKE_PTR(s);
return 0;
}

View File

@@ -18,3 +18,10 @@ int varlink_many_notifyb(Set *s, ...);
varlink_many_notifyb((s), SD_JSON_BUILD_OBJECT(__VA_ARGS__))
int varlink_many_reply(Set *s, sd_json_variant *parameters);
int varlink_many_error(Set *s, const char *error_id, sd_json_variant *parameters);
int varlink_set_info_systemd(sd_varlink_server *server);
int varlink_server_new(
sd_varlink_server **ret,
sd_varlink_server_flags_t flags,
void *userdata);

View File

@@ -17,6 +17,7 @@
#include "varlink-io.systemd.Machine.h"
#include "varlink-io.systemd.MachineImage.h"
#include "varlink-io.systemd.UserDatabase.h"
#include "varlink-util.h"
typedef struct LookupParameters {
const char *user_name;
@@ -712,12 +713,10 @@ static int manager_varlink_init_userdb(Manager *m) {
if (m->varlink_userdb_server)
return 0;
r = sd_varlink_server_new(&s, SD_VARLINK_SERVER_ACCOUNT_UID|SD_VARLINK_SERVER_INHERIT_USERDATA);
r = varlink_server_new(&s, SD_VARLINK_SERVER_ACCOUNT_UID|SD_VARLINK_SERVER_INHERIT_USERDATA, m);
if (r < 0)
return log_error_errno(r, "Failed to allocate varlink server object: %m");
sd_varlink_server_set_userdata(s, m);
r = sd_varlink_server_add_interface(s, &vl_interface_io_systemd_UserDatabase);
if (r < 0)
return log_error_errno(r, "Failed to add UserDatabase interface to varlink server: %m");
@@ -753,12 +752,10 @@ static int manager_varlink_init_machine(Manager *m) {
if (m->varlink_machine_server)
return 0;
r = sd_varlink_server_new(&s, SD_VARLINK_SERVER_ACCOUNT_UID|SD_VARLINK_SERVER_INHERIT_USERDATA);
r = varlink_server_new(&s, SD_VARLINK_SERVER_ACCOUNT_UID|SD_VARLINK_SERVER_INHERIT_USERDATA, m);
if (r < 0)
return log_error_errno(r, "Failed to allocate varlink server object: %m");
sd_varlink_server_set_userdata(s, m);
r = sd_varlink_server_add_interface_many(
s,
&vl_interface_io_systemd_Machine,

View File

@@ -23,6 +23,7 @@
#include "stat-util.h"
#include "user-util.h"
#include "varlink-io.systemd.MountFileSystem.h"
#include "varlink-util.h"
#define ITERATIONS_MAX 64U
#define RUNTIME_MAX_USEC (5 * USEC_PER_MINUTE)
@@ -595,7 +596,7 @@ static int run(int argc, char *argv[]) {
if (r < 0)
return log_error_errno(r, "Failed to turn off non-blocking mode for listening socket: %m");
r = sd_varlink_server_new(&server, SD_VARLINK_SERVER_INHERIT_USERDATA);
r = varlink_server_new(&server, SD_VARLINK_SERVER_INHERIT_USERDATA, NULL);
if (r < 0)
return log_error_errno(r, "Failed to allocate server: %m");

View File

@@ -12,6 +12,7 @@
#include "networkd-manager-varlink.h"
#include "stat-util.h"
#include "varlink-io.systemd.Network.h"
#include "varlink-util.h"
static int vl_method_get_states(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) {
Manager *m = ASSERT_PTR(userdata);
@@ -270,12 +271,10 @@ int manager_connect_varlink(Manager *m) {
if (m->varlink_server)
return 0;
r = sd_varlink_server_new(&s, SD_VARLINK_SERVER_ACCOUNT_UID|SD_VARLINK_SERVER_INHERIT_USERDATA);
r = varlink_server_new(&s, SD_VARLINK_SERVER_ACCOUNT_UID|SD_VARLINK_SERVER_INHERIT_USERDATA, m);
if (r < 0)
return log_error_errno(r, "Failed to allocate varlink server object: %m");
sd_varlink_server_set_userdata(s, m);
(void) sd_varlink_server_set_description(s, "varlink-api-network");
r = sd_varlink_server_add_interface(s, &vl_interface_io_systemd_Network);

View File

@@ -44,6 +44,7 @@
#include "userns-restrict.h"
#include "varlink-io.systemd.NamespaceResource.h"
#include "varlink-io.systemd.UserDatabase.h"
#include "varlink-util.h"
#define ITERATIONS_MAX 64U
#define RUNTIME_MAX_USEC (5 * USEC_PER_MINUTE)
@@ -1689,9 +1690,9 @@ static int run(int argc, char *argv[]) {
if (r < 0)
return log_error_errno(r, "Failed to turn off non-blocking mode for listening socket: %m");
r = sd_varlink_server_new(&server, SD_VARLINK_SERVER_INHERIT_USERDATA);
r = varlink_server_new(&server, SD_VARLINK_SERVER_INHERIT_USERDATA, NULL);
if (r < 0)
return log_error_errno(r, "Failed to allocate server: %m");
return log_error_errno(r, "Failed to allocate varlink server: %m");
r = sd_varlink_server_add_interface_many(
server,

View File

@@ -18,6 +18,7 @@
#include "path-util.h"
#include "percent-util.h"
#include "varlink-io.systemd.oom.h"
#include "varlink-util.h"
typedef struct ManagedOOMMessage {
ManagedOOMMode mode;
@@ -720,12 +721,10 @@ static int manager_varlink_init(Manager *m, int fd) {
assert(m);
assert(!m->varlink_server);
r = sd_varlink_server_new(&s, SD_VARLINK_SERVER_ACCOUNT_UID|SD_VARLINK_SERVER_INHERIT_USERDATA);
r = varlink_server_new(&s, SD_VARLINK_SERVER_ACCOUNT_UID|SD_VARLINK_SERVER_INHERIT_USERDATA, m);
if (r < 0)
return log_error_errno(r, "Failed to allocate varlink server object: %m");
sd_varlink_server_set_userdata(s, m);
r = sd_varlink_server_add_interface(s, &vl_interface_io_systemd_oom);
if (r < 0)
return log_error_errno(r, "Failed to add oom interface to varlink server: %m");

View File

@@ -20,6 +20,7 @@
#include "tpm2-pcr.h"
#include "tpm2-util.h"
#include "varlink-io.systemd.PCRExtend.h"
#include "varlink-util.h"
static bool arg_graceful = false;
static char *arg_tpm2_device = NULL;
@@ -312,7 +313,7 @@ static int run(int argc, char *argv[]) {
/* Invocation as Varlink service */
r = sd_varlink_server_new(&varlink_server, SD_VARLINK_SERVER_ROOT_ONLY);
r = varlink_server_new(&varlink_server, SD_VARLINK_SERVER_ROOT_ONLY, NULL);
if (r < 0)
return log_error_errno(r, "Failed to allocate Varlink server: %m");

View File

@@ -53,6 +53,7 @@
#include "unit-name.h"
#include "utf8.h"
#include "varlink-io.systemd.PCRLock.h"
#include "varlink-util.h"
#include "verbs.h"
typedef enum RecoveryPinMode {
@@ -5352,7 +5353,7 @@ static int run(int argc, char *argv[]) {
/* Invocation as Varlink service */
r = sd_varlink_server_new(&varlink_server, SD_VARLINK_SERVER_ROOT_ONLY);
r = varlink_server_new(&varlink_server, SD_VARLINK_SERVER_ROOT_ONLY, NULL);
if (r < 0)
return log_error_errno(r, "Failed to allocate Varlink server: %m");

View File

@@ -9,6 +9,7 @@
#include "socket-netlink.h"
#include "varlink-io.systemd.Resolve.h"
#include "varlink-io.systemd.Resolve.Monitor.h"
#include "varlink-util.h"
typedef struct LookupParameters {
int ifindex;
@@ -1361,12 +1362,10 @@ static int varlink_monitor_server_init(Manager *m) {
if (m->varlink_monitor_server)
return 0;
r = sd_varlink_server_new(&server, SD_VARLINK_SERVER_ACCOUNT_UID|SD_VARLINK_SERVER_INHERIT_USERDATA);
r = varlink_server_new(&server, SD_VARLINK_SERVER_ACCOUNT_UID|SD_VARLINK_SERVER_INHERIT_USERDATA, m);
if (r < 0)
return log_error_errno(r, "Failed to allocate varlink server object: %m");
sd_varlink_server_set_userdata(server, m);
r = sd_varlink_server_add_interface(server, &vl_interface_io_systemd_Resolve_Monitor);
if (r < 0)
return log_error_errno(r, "Failed to add Resolve.Monitor interface to varlink server: %m");
@@ -1407,12 +1406,10 @@ static int varlink_main_server_init(Manager *m) {
if (m->varlink_server)
return 0;
r = sd_varlink_server_new(&s, SD_VARLINK_SERVER_ACCOUNT_UID);
r = varlink_server_new(&s, SD_VARLINK_SERVER_ACCOUNT_UID, m);
if (r < 0)
return log_error_errno(r, "Failed to allocate varlink server object: %m");
sd_varlink_server_set_userdata(s, m);
r = sd_varlink_server_add_interface(s, &vl_interface_io_systemd_Resolve);
if (r < 0)
return log_error_errno(r, "Failed to add Resolve interface to varlink server: %m");

View File

@@ -52,6 +52,7 @@
#include "terminal-util.h"
#include "user-util.h"
#include "varlink-io.systemd.sysext.h"
#include "varlink-util.h"
#include "verbs.h"
typedef enum MutableMode {
@@ -2568,7 +2569,7 @@ static int run(int argc, char *argv[]) {
/* Invocation as Varlink service */
r = sd_varlink_server_new(&varlink_server, SD_VARLINK_SERVER_ROOT_ONLY);
r = varlink_server_new(&varlink_server, SD_VARLINK_SERVER_ROOT_ONLY, NULL);
if (r < 0)
return log_error_errno(r, "Failed to allocate Varlink server: %m");

View File

@@ -29,6 +29,7 @@
#include "varlink-io.systemd.service.h"
#include "varlink-io.systemd.sysext.h"
#include "varlink-org.varlink.service.h"
#include "varlink-util.h"
static SD_VARLINK_DEFINE_ENUM_TYPE(
EnumTest,
@@ -378,6 +379,7 @@ static void* server_thread(void *userdata) {
_cleanup_(sd_event_unrefp) sd_event *event = NULL;
assert_se(sd_varlink_server_new(&server, 0) >= 0);
assert_se(varlink_set_info_systemd(server) >= 0);
assert_se(sd_varlink_server_add_interface(server, &vl_interface_xyz) >= 0);
assert_se(sd_varlink_server_bind_method(server, "xyz.TestMethod", test_method) >= 0);
assert_se(sd_varlink_server_bind_method(server, "xyz.Done", done_method) >= 0);

View File

@@ -16,6 +16,7 @@
#include "tests.h"
#include "tmpfile-util.h"
#include "user-util.h"
#include "varlink-util.h"
/* Let's pick some high value, that is higher than the largest listen() backlog, but leaves enough room below
the typical RLIMIT_NOFILE value of 1024 so that we can process both sides of each socket in our
@@ -359,7 +360,9 @@ TEST(chat) {
assert_se(sd_event_source_set_priority(block_event, SD_EVENT_PRIORITY_IMPORTANT) >= 0);
block_write_fd = TAKE_FD(block_fds[1]);
assert_se(sd_varlink_server_new(&s, SD_VARLINK_SERVER_ACCOUNT_UID) >= 0);
assert_se(varlink_server_new(&s, SD_VARLINK_SERVER_ACCOUNT_UID, NULL) >= 0);
assert_se(sd_varlink_server_set_info(s, "Vendor", "Product", "Version", "URL") >= 0);
assert_se(varlink_set_info_systemd(s) >= 0);
assert_se(sd_varlink_server_set_description(s, "our-server") >= 0);
assert_se(sd_varlink_server_bind_method(s, "io.test.PassFD", method_passfd) >= 0);

View File

@@ -20,6 +20,7 @@
#include "user-util.h"
#include "userdb.h"
#include "varlink-io.systemd.UserDatabase.h"
#include "varlink-util.h"
#define ITERATIONS_MAX 64U
#define RUNTIME_MAX_USEC (5 * USEC_PER_MINUTE)
@@ -489,9 +490,9 @@ static int run(int argc, char *argv[]) {
if (r < 0)
return log_error_errno(r, "Failed to turn off non-blocking mode for listening socket: %m");
r = sd_varlink_server_new(&server, 0);
r = varlink_server_new(&server, 0, NULL);
if (r < 0)
return log_error_errno(r, "Failed to allocate server: %m");
return log_error_errno(r, "Failed to allocate varlink server: %m");
r = sd_varlink_server_add_interface(server, &vl_interface_io_systemd_UserDatabase);
if (r < 0)