[libvirt] [PATCH 02/23] util: add helper API for getting UNIX path from socket address

Daniel P. Berrangé berrange at redhat.com
Thu Jun 27 09:54:31 UTC 2019


Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
---
 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




More information about the libvir-list mailing list