From: Lennart Poettering Date: Thu, 28 Aug 2025 08:53:12 +0000 (+0200) Subject: creds: modernize varlink server setup a bit X-Git-Tag: v259-rc1~502^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bd610b2253bf50fdbc24eae2760697b0f5ed8582;p=thirdparty%2Fsystemd.git creds: modernize varlink server setup a bit Let's make use of the userdata parameter of varlink_server_new(), and split out the code into its own helper function. --- diff --git a/src/creds/creds.c b/src/creds/creds.c index a121d0695b9..f890593ea5c 100644 --- a/src/creds/creds.c +++ b/src/creds/creds.c @@ -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); }