From: Ivan Kruglov Date: Mon, 12 May 2025 11:18:00 +0000 (-0700) Subject: shared: varlink_server_contains_socket() X-Git-Tag: v258-rc1~636^2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c7728d2b46a2cc0e1b172024118970b8c4059f68;p=thirdparty%2Fsystemd.git shared: varlink_server_contains_socket() --- diff --git a/src/shared/varlink-serialize.c b/src/shared/varlink-serialize.c index 57a8d7908ea..075cb6cc5e1 100644 --- a/src/shared/varlink-serialize.c +++ b/src/shared/varlink-serialize.c @@ -2,6 +2,7 @@ #include "log.h" #include "parse-util.h" +#include "socket-util.h" #include "varlink-internal.h" #include "varlink-serialize.h" @@ -84,3 +85,20 @@ int varlink_server_deserialize_one(sd_varlink_server *s, const char *value, FDSe LIST_PREPEND(sockets, s->sockets, TAKE_PTR(ss)); return 0; } + +bool varlink_server_contains_socket(sd_varlink_server *s, const char *address) { + int r; + + assert(s); + assert(address); + + LIST_FOREACH(sockets, ss, s->sockets) { + r = socket_address_equal_unix(ss->address, address); + if (r < 0) + log_debug_errno(r, "Failed to compare '%s' and '%s', ignoring: %m", ss->address, address); + if (r > 0) + return true; + } + + return false; +} diff --git a/src/shared/varlink-serialize.h b/src/shared/varlink-serialize.h index 149aa88b112..4cc47aa0536 100644 --- a/src/shared/varlink-serialize.h +++ b/src/shared/varlink-serialize.h @@ -9,3 +9,5 @@ int varlink_server_serialize(sd_varlink_server *s, FILE *f, FDSet *fds); int varlink_server_deserialize_one(sd_varlink_server *s, const char *value, FDSet *fds); + +bool varlink_server_contains_socket(sd_varlink_server *s, const char *address);