On 10/16/2015 02:12 PM, Erik Skultety wrote:
Since virt-admin should be able to connect to various admin servers
on hosted different daemons, we need to provide URI support to
libvirt-admin.
---
include/libvirt/libvirt-admin.h | 2 +
src/datatypes.c | 2 +
src/datatypes.h | 1 +
src/libvirt-admin.c | 132 +++++++++++++++++++++++++++++++---------
src/libvirt_admin_public.syms | 1 +
tools/virt-admin.c | 39 ++++++++++++
6 files changed, 147 insertions(+), 30 deletions(-)
Ran the series through the Coverity checks...
[...]
/**
* virAdmConnectOpen:
* @name: uri of the daemon to connect to, NULL for default
@@ -170,6 +199,7 @@ virAdmConnectOpen(const char *name, unsigned int flags)
{
char *sock_path = NULL;
virAdmConnectPtr conn = NULL;
+ virConfPtr conf = NULL;
if (virAdmInitialize() < 0)
goto error;
@@ -180,7 +210,18 @@ virAdmConnectOpen(const char *name, unsigned int flags)
if (!(conn = virAdmConnectNew()))
goto error;
- if (!(sock_path = getSocketPath(name)))
+ if (virGetLibvirtConfigFile(&conf) < 0)
+ goto error;
+
conf is allocated now and will need to be free'd/cleaned appropriately
via virConfFree() @ error:
John
+ if (!name) {
+ if (virAdmGetDefaultURI(conf, &conn->uri) < 0)
+ goto error;
+ } else {
+ if (!(conn->uri = virURIParse(name)))
+ goto error;
+ }
+
+ if (!(sock_path = getSocketPath(conn->uri)))
goto error;
if (!(conn->privateData = remoteAdminPrivNew(sock_path)))
@@ -304,3 +345,34 @@ virAdmConnectIsAlive(virAdmConnectPtr conn)
else
return 0;
}
+
+/**
+ * virAdmConnectGetURI:
+ * @conn: pointer to an admin connection
+ *
+ * String returned by this method is normally the same as the string passed
+ * to the virAdmConnectOpen. Even if NULL was passed to virAdmConnectOpen,
+ * this method returns a non-null URI string.
+ *
+ * Returns an URI string related to the connection or NULL in case of an error.
+ * Caller is responsible for freeing the string.
+ */
+char *
+virAdmConnectGetURI(virAdmConnectPtr conn)
+{
+ char *uri = NULL;
+ VIR_DEBUG("conn=%p", conn);
+
+ virResetLastError();
+
+ virCheckAdmConnectReturn(conn, NULL);
+
+ if (!(uri = virURIFormat(conn->uri)))
+ goto error;
+
+ return uri;
+
+ error:
+ virDispatchError(NULL);
+ return uri;
+}
[...]