]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-varlink: add sd_varlink_server_listen_name (#35697)
authorThorsten Kukuk <kukuk@suse.com>
Sat, 21 Dec 2024 07:53:07 +0000 (08:53 +0100)
committerLuca Boccassi <luca.boccassi@gmail.com>
Sun, 22 Dec 2024 17:25:55 +0000 (17:25 +0000)
src/libsystemd/libsystemd.sym
src/libsystemd/sd-varlink/sd-varlink.c
src/systemd/sd-varlink.h

index 6fbe621c3ddf8ffe35245c3b348b158645b246a6..d2747537e69ec4e2cb85eefefcb3eeeae1da104a 100644 (file)
@@ -1065,5 +1065,6 @@ global:
         sd_json_variant_type_from_string;
         sd_json_variant_type_to_string;
         sd_varlink_reset_fds;
+        sd_varlink_server_listen_name;
         sd_device_enumerator_add_all_parents;
 } LIBSYSTEMD_257;
index 5568388c372c0c34ee7b0bb088e69a76130d205b..208304d6f1a589b58ef06d9ef586eb4f750fddc9 100644 (file)
@@ -3660,13 +3660,14 @@ _public_ int sd_varlink_server_add_connection_stdio(sd_varlink_server *s, sd_var
         return 0;
 }
 
-_public_ int sd_varlink_server_listen_auto(sd_varlink_server *s) {
+_public_ int sd_varlink_server_listen_name(sd_varlink_server *s, const char *name) {
         _cleanup_strv_free_ char **names = NULL;
         int r, n = 0;
 
         assert_return(s, -EINVAL);
+        assert_return(name, -EINVAL);
 
-        /* Adds all passed fds marked as "varlink" to our varlink server. These fds can either refer to a
+        /* Adds all passed fds marked as "name" to our varlink server. These fds can either refer to a
          * listening socket or to a connection socket.
          *
          * See https://varlink.org/#activation for the environment variables this is backed by and the
@@ -3680,7 +3681,7 @@ _public_ int sd_varlink_server_listen_auto(sd_varlink_server *s) {
                 int b, fd;
                 socklen_t l = sizeof(b);
 
-                if (!streq(names[i], "varlink"))
+                if (!streq(names[i], name))
                         continue;
 
                 fd = SD_LISTEN_FDS_START + i;
@@ -3700,6 +3701,16 @@ _public_ int sd_varlink_server_listen_auto(sd_varlink_server *s) {
                 n++;
         }
 
+        return n;
+}
+
+_public_ int sd_varlink_server_listen_auto(sd_varlink_server *s) {
+        int r, n;
+
+        assert_return(s, -EINVAL);
+
+        n = sd_varlink_server_listen_name(s, "varlink");
+
         /* Let's listen on an explicitly specified address */
         const char *e = secure_getenv("SYSTEMD_VARLINK_LISTEN");
         if (e) {
index 816b9b0ebfe8617f50cee6434321f69d348500c0..083be6598d6458efe7cb177ac8ed9fbae9f2a2aa 100644 (file)
@@ -230,6 +230,7 @@ int sd_varlink_server_set_info(
 int sd_varlink_server_listen_address(sd_varlink_server *s, const char *address, mode_t mode);
 int sd_varlink_server_listen_fd(sd_varlink_server *s, int fd);
 int sd_varlink_server_listen_auto(sd_varlink_server *s);
+int sd_varlink_server_listen_name(sd_varlink_server *s, const char *name);
 int sd_varlink_server_add_connection(sd_varlink_server *s, int fd, sd_varlink **ret);
 int sd_varlink_server_add_connection_pair(sd_varlink_server *s, int input_fd, int output_fd, const struct ucred *ucred_override, sd_varlink **ret);
 int sd_varlink_server_add_connection_stdio(sd_varlink_server *s, sd_varlink **ret);