summaryrefslogtreecommitdiff
path: root/src/core/core-varlink.c
diff options
context:
space:
mode:
authorAnita Zhang <the.anitazha@gmail.com>2022-10-05 00:12:53 -0700
committerAnita Zhang <the.anitazha@gmail.com>2022-10-14 01:59:12 -0700
commit658138f3af58b53c07a9b2f8cbb222c1eb4c7da9 (patch)
treed451783a743f76c2b9823c0a67e0536ecbb1bf31 /src/core/core-varlink.c
parent536827e05ab4bd45302b77178ec7bb7d792c04b0 (diff)
downloadsystemd-658138f3af58b53c07a9b2f8cbb222c1eb4c7da9.tar.gz
core: refactor manager varlink init
Split out per-socket code into a separate function to use as part of serialize/deserialize in the next commit.
Diffstat (limited to 'src/core/core-varlink.c')
-rw-r--r--src/core/core-varlink.c49
1 files changed, 32 insertions, 17 deletions
diff --git a/src/core/core-varlink.c b/src/core/core-varlink.c
index 1fdcf885b8..031514ead0 100644
--- a/src/core/core-varlink.c
+++ b/src/core/core-varlink.c
@@ -482,24 +482,9 @@ static int manager_varlink_init_system(Manager *m) {
if (!MANAGER_IS_SYSTEM(m))
return 0;
- r = varlink_server_new(&s, VARLINK_SERVER_ACCOUNT_UID|VARLINK_SERVER_INHERIT_USERDATA);
- if (r < 0)
- return log_error_errno(r, "Failed to allocate varlink server object: %m");
-
- varlink_server_set_userdata(s, m);
-
- r = varlink_server_bind_method_many(
- s,
- "io.systemd.UserDatabase.GetUserRecord", vl_method_get_user_record,
- "io.systemd.UserDatabase.GetGroupRecord", vl_method_get_group_record,
- "io.systemd.UserDatabase.GetMemberships", vl_method_get_memberships,
- "io.systemd.ManagedOOM.SubscribeManagedOOMCGroups", vl_method_subscribe_managed_oom_cgroups);
+ r = manager_setup_varlink_server(m, &s);
if (r < 0)
- return log_error_errno(r, "Failed to register varlink methods: %m");
-
- r = varlink_server_bind_disconnect(s, vl_disconnect);
- if (r < 0)
- return log_error_errno(r, "Failed to register varlink disconnect handler: %m");
+ return log_error_errno(r, "Failed to set up varlink server: %m");
if (!MANAGER_IS_TEST_RUN(m)) {
(void) mkdir_p_label("/run/systemd/userdb", 0755);
@@ -582,6 +567,36 @@ static int manager_varlink_init_user(Manager *m) {
return 1;
}
+int manager_setup_varlink_server(Manager *m, VarlinkServer **ret) {
+ _cleanup_(varlink_server_unrefp) VarlinkServer *s = NULL;
+ int r;
+
+ assert(m);
+ assert(ret);
+
+ r = varlink_server_new(&s, VARLINK_SERVER_ACCOUNT_UID|VARLINK_SERVER_INHERIT_USERDATA);
+ if (r < 0)
+ return log_debug_errno(r, "Failed to allocate varlink server object: %m");
+
+ varlink_server_set_userdata(s, m);
+
+ r = varlink_server_bind_method_many(
+ s,
+ "io.systemd.UserDatabase.GetUserRecord", vl_method_get_user_record,
+ "io.systemd.UserDatabase.GetGroupRecord", vl_method_get_group_record,
+ "io.systemd.UserDatabase.GetMemberships", vl_method_get_memberships,
+ "io.systemd.ManagedOOM.SubscribeManagedOOMCGroups", vl_method_subscribe_managed_oom_cgroups);
+ if (r < 0)
+ return log_debug_errno(r, "Failed to register varlink methods: %m");
+
+ r = varlink_server_bind_disconnect(s, vl_disconnect);
+ if (r < 0)
+ return log_debug_errno(r, "Failed to register varlink disconnect handler: %m");
+
+ *ret = TAKE_PTR(s);
+ return 0;
+}
+
int manager_varlink_init(Manager *m) {
return MANAGER_IS_SYSTEM(m) ? manager_varlink_init_system(m) : manager_varlink_init_user(m);
}