]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
creds: modernize varlink server setup a bit
authorLennart Poettering <lennart@poettering.net>
Thu, 28 Aug 2025 08:53:12 +0000 (10:53 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 18 Sep 2025 20:01:25 +0000 (22:01 +0200)
Let's make use of the userdata parameter of varlink_server_new(), and
split out the code into its own helper function.

src/creds/creds.c

index a121d0695b9be7dd05135b203ba6c589191c87da..f890593ea5cc49ba5cb7cd7781feb8ecf74098f0 100644 (file)
@@ -1433,47 +1433,49 @@ static int vl_method_decrypt(sd_varlink *link, sd_json_variant *parameters, sd_v
         return sd_varlink_reply(link, reply);
 }
 
-static int run(int argc, char *argv[]) {
+static int vl_server(void) {
+        _cleanup_(sd_varlink_server_unrefp) sd_varlink_server *varlink_server = NULL;
+        _cleanup_hashmap_free_ Hashmap *polkit_registry = NULL;
         int r;
 
-        log_setup();
+        /* Invocation as Varlink service */
 
-        r = parse_argv(argc, argv);
-        if (r <= 0)
-                return r;
+        r = varlink_server_new(
+                        &varlink_server,
+                        SD_VARLINK_SERVER_ACCOUNT_UID|SD_VARLINK_SERVER_INHERIT_USERDATA|SD_VARLINK_SERVER_INPUT_SENSITIVE,
+                        &polkit_registry);
+        if (r < 0)
+                return log_error_errno(r, "Failed to allocate Varlink server: %m");
 
-        if (arg_varlink) {
-                _cleanup_(sd_varlink_server_unrefp) sd_varlink_server *varlink_server = NULL;
-                _cleanup_hashmap_free_ Hashmap *polkit_registry = NULL;
+        r = sd_varlink_server_add_interface(varlink_server, &vl_interface_io_systemd_Credentials);
+        if (r < 0)
+                return log_error_errno(r, "Failed to add Varlink interface: %m");
 
-                /* Invocation as Varlink service */
+        r = sd_varlink_server_bind_method_many(
+                        varlink_server,
+                        "io.systemd.Credentials.Encrypt", vl_method_encrypt,
+                        "io.systemd.Credentials.Decrypt", vl_method_decrypt);
+        if (r < 0)
+                return log_error_errno(r, "Failed to bind Varlink methods: %m");
 
-                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");
+        r = sd_varlink_server_loop_auto(varlink_server);
+        if (r < 0)
+                return log_error_errno(r, "Failed to run Varlink event loop: %m");
 
-                r = sd_varlink_server_add_interface(varlink_server, &vl_interface_io_systemd_Credentials);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to add Varlink interface: %m");
+        return 0;
+}
 
-                r = sd_varlink_server_bind_method_many(
-                                varlink_server,
-                                "io.systemd.Credentials.Encrypt", vl_method_encrypt,
-                                "io.systemd.Credentials.Decrypt", vl_method_decrypt);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to bind Varlink methods: %m");
+static int run(int argc, char *argv[]) {
+        int r;
 
-                sd_varlink_server_set_userdata(varlink_server, &polkit_registry);
+        log_setup();
 
-                r = sd_varlink_server_loop_auto(varlink_server);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to run Varlink event loop: %m");
+        r = parse_argv(argc, argv);
+        if (r <= 0)
+                return r;
 
-                return 0;
-        }
+        if (arg_varlink)
+                return vl_server();
 
         return creds_main(argc, argv);
 }