Signed-off-by: Daniel P. Berrangé <berrange@xxxxxxxxxx> --- src/libvirt_private.syms | 1 + src/util/virsocketaddr.c | 42 ++++++++++++++++++++++++++++++++++++++++ src/util/virsocketaddr.h | 2 ++ 3 files changed, 45 insertions(+) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 34937adc5d..ce614e04bd 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -2903,6 +2903,7 @@ virSocketAddrFormat; virSocketAddrFormatFull; virSocketAddrGetIPPrefix; virSocketAddrGetNumNetmaskBits; +virSocketAddrGetPath; virSocketAddrGetPort; virSocketAddrGetRange; virSocketAddrIsNetmask; diff --git a/src/util/virsocketaddr.c b/src/util/virsocketaddr.c index 182e18aa8c..7a50cbe040 100644 --- a/src/util/virsocketaddr.c +++ b/src/util/virsocketaddr.c @@ -500,6 +500,7 @@ virSocketAddrSetPort(virSocketAddrPtr addr, int port) return 0; } + /* * virSocketGetPort: * @addr: an initialized virSocketAddrPtr @@ -522,6 +523,47 @@ virSocketAddrGetPort(virSocketAddrPtr addr) return -1; } + +/* + * virSocketGetPath: + * @addr: an initialized virSocketAddrPtr + * + * Returns the UNIX socket path of the given virtSocketAddr + * + * Returns -1 if @addr is invalid or does not refer to an + * address of type AF_UNIX; + */ +char * +virSocketAddrGetPath(virSocketAddrPtr addr ATTRIBUTE_UNUSED) +{ +#ifndef WIN32 + char *path = NULL; + if (addr == NULL) { + virReportError(VIR_ERR_INVALID_ARG, "%s", + _("No socket address provided")); + return NULL; + } + + if (addr->data.sa.sa_family != AF_UNIX) { + virReportError(VIR_ERR_INVALID_ARG, "%s", + _("UNIX socket address is required")); + return NULL; + } + + if (VIR_STRNDUP(path, + addr->data.un.sun_path, + sizeof(addr->data.un.sun_path)) < 0) + return NULL; + + return path; +#else + virReportError(VIR_ERR_NO_SUPPORT, "%s", + _("UNIX sockets not supported on this platform")); + return NULL; +#endif +} + + /** * virSocketAddrIsNetmask: * @netmask: the netmask address diff --git a/src/util/virsocketaddr.h b/src/util/virsocketaddr.h index b2ecb3c748..9dbd8caa0d 100644 --- a/src/util/virsocketaddr.h +++ b/src/util/virsocketaddr.h @@ -108,6 +108,8 @@ char *virSocketAddrFormatFull(const virSocketAddr *addr, bool withService, const char *separator); +char *virSocketAddrGetPath(virSocketAddrPtr addr); + int virSocketAddrSetPort(virSocketAddrPtr addr, int port); int virSocketAddrGetPort(virSocketAddrPtr addr); -- 2.21.0 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list