]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
util: add helper API for getting UNIX path from socket address
authorDaniel P. Berrangé <berrange@redhat.com>
Mon, 24 Jun 2019 10:25:48 +0000 (11:25 +0100)
committerDaniel P. Berrangé <berrange@redhat.com>
Thu, 11 Jul 2019 13:13:03 +0000 (14:13 +0100)
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
src/libvirt_private.syms
src/util/virsocketaddr.c
src/util/virsocketaddr.h

index 0545c0842865f673e67a7285b475d6b6b60a6bd2..e226b85121980b5f83b99954bffb2bc4235b5267 100644 (file)
@@ -2887,6 +2887,7 @@ virSocketAddrFormat;
 virSocketAddrFormatFull;
 virSocketAddrGetIPPrefix;
 virSocketAddrGetNumNetmaskBits;
+virSocketAddrGetPath;
 virSocketAddrGetPort;
 virSocketAddrGetRange;
 virSocketAddrIsNetmask;
index 182e18aa8c7cd4298d2800a58957102ee5b09853..f961b413d33aa65b4af95b7bc0e6370bafc1f791 100644 (file)
@@ -522,6 +522,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
index b2ecb3c748272aee83d2ae12a68fdeadc9ca1645..9dbd8caa0d747d8c0ddd71de934809011c65e98f 100644 (file)
@@ -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);