aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cfg.mk8
-rw-r--r--src/Makefile.am3
-rw-r--r--src/datatypes.h2
-rw-r--r--src/driver.h2
-rw-r--r--src/esx/esx_driver.c5
-rw-r--r--src/esx/esx_util.c2
-rw-r--r--src/esx/esx_util.h4
-rw-r--r--src/hyperv/hyperv_util.c2
-rw-r--r--src/hyperv/hyperv_util.h5
-rw-r--r--src/libvirt.c10
-rw-r--r--src/libvirt_private.syms5
-rw-r--r--src/libxl/libxl_driver.c3
-rw-r--r--src/lxc/lxc_driver.c3
-rw-r--r--src/openvz/openvz_driver.c3
-rw-r--r--src/qemu/qemu_driver.c2
-rw-r--r--src/qemu/qemu_migration.c9
-rw-r--r--src/remote/remote_driver.c9
-rw-r--r--src/uml/uml_driver.c3
-rw-r--r--src/util/qparams.c3
-rw-r--r--src/util/viruri.c93
-rw-r--r--src/util/viruri.h22
-rw-r--r--src/vbox/vbox_tmpl.c3
-rw-r--r--src/vmx/vmx.c6
-rw-r--r--src/xen/xen_driver.c4
-rw-r--r--src/xen/xen_hypervisor.h3
-rw-r--r--src/xen/xend_internal.c4
-rw-r--r--src/xen/xend_internal.h2
-rw-r--r--src/xenapi/xenapi_driver.c2
-rw-r--r--src/xenapi/xenapi_utils.c4
-rw-r--r--src/xenapi/xenapi_utils.h4
30 files changed, 181 insertions, 49 deletions
diff --git a/cfg.mk b/cfg.mk
index dcf44bb8c..9759d8737 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -457,6 +457,12 @@ sc_prohibit_xmlGetProp:
halt='use virXMLPropString, not xmlGetProp' \
$(_sc_search_regexp)
+# xml(ParseURI|SaveUri) doesn't handle IPv6 URIs well
+sc_prohibit_xmlURI:
+ @prohibit='\<xml(ParseURI|SaveUri) *\(' \
+ halt='use virURI(Parse|Format), not xml(ParseURI|SaveUri)' \
+ $(_sc_search_regexp)
+
# ATTRIBUTE_UNUSED should only be applied in implementations, not
# header declarations
sc_avoid_attribute_unused_in_header:
@@ -758,6 +764,8 @@ exclude_file_name_regexp--sc_prohibit_strncpy = \
exclude_file_name_regexp--sc_prohibit_xmlGetProp = ^src/util/xml\.c$$
+exclude_file_name_regexp--sc_prohibit_xmlURI = ^src/util/viruri\.c$$
+
exclude_file_name_regexp--sc_require_config_h = ^examples/
exclude_file_name_regexp--sc_require_config_h_first = ^examples/
diff --git a/src/Makefile.am b/src/Makefile.am
index 9b1921d40..376e66517 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -104,7 +104,8 @@ UTIL_SOURCES = \
util/virnetlink.c util/virnetlink.h \
util/virrandom.h util/virrandom.c \
util/virsocketaddr.h util/virsocketaddr.c \
- util/virtime.h util/virtime.c
+ util/virtime.h util/virtime.c \
+ util/viruri.h util/viruri.c
EXTRA_DIST += $(srcdir)/util/virkeymaps.h $(srcdir)/util/keymaps.csv \
$(srcdir)/util/virkeycode-mapgen.py
diff --git a/src/datatypes.h b/src/datatypes.h
index 47058ed13..fc284d281 100644
--- a/src/datatypes.h
+++ b/src/datatypes.h
@@ -151,7 +151,7 @@ struct _virConnect {
*/
unsigned int magic; /* specific value to check */
unsigned int flags; /* a set of connection flags */
- xmlURIPtr uri; /* connection URI */
+ virURIPtr uri; /* connection URI */
/* The underlying hypervisor driver and network driver. */
virDriverPtr driver;
diff --git a/src/driver.h b/src/driver.h
index d27fa99e8..b04b25464 100644
--- a/src/driver.h
+++ b/src/driver.h
@@ -9,9 +9,9 @@
# include "config.h"
# include <unistd.h>
-# include <libxml/uri.h>
# include "internal.h"
+# include "viruri.h"
/*
* List of registered drivers numbers
*/
diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
index f5e1cc73d..b6b22f8d4 100644
--- a/src/esx/esx_driver.c
+++ b/src/esx/esx_driver.c
@@ -44,6 +44,7 @@
#include "esx_vi.h"
#include "esx_vi_methods.h"
#include "esx_util.h"
+#include "viruri.h"
#define VIR_FROM_THIS VIR_FROM_ESX
@@ -3945,7 +3946,7 @@ esxDomainMigratePerform(virDomainPtr domain,
{
int result = -1;
esxPrivate *priv = domain->conn->privateData;
- xmlURIPtr parsedUri = NULL;
+ virURIPtr parsedUri = NULL;
char *saveptr;
char *path_resourcePool;
char *path_hostSystem;
@@ -3976,7 +3977,7 @@ esxDomainMigratePerform(virDomainPtr domain,
}
/* Parse migration URI */
- parsedUri = xmlParseURI(uri);
+ parsedUri = virURIParse(uri);
if (parsedUri == NULL) {
virReportOOMError();
diff --git a/src/esx/esx_util.c b/src/esx/esx_util.c
index 2c5ac1add..7d4b9080e 100644
--- a/src/esx/esx_util.c
+++ b/src/esx/esx_util.c
@@ -42,7 +42,7 @@
int
-esxUtil_ParseUri(esxUtil_ParsedUri **parsedUri, xmlURIPtr uri)
+esxUtil_ParseUri(esxUtil_ParsedUri **parsedUri, virURIPtr uri)
{
int result = -1;
struct qparam_set *queryParamSet = NULL;
diff --git a/src/esx/esx_util.h b/src/esx/esx_util.h
index 2bee51051..a69b3f459 100644
--- a/src/esx/esx_util.h
+++ b/src/esx/esx_util.h
@@ -22,9 +22,9 @@
#ifndef __ESX_UTIL_H__
# define __ESX_UTIL_H__
-# include <libxml/uri.h>
# include <netdb.h>
# include "internal.h"
+# include "viruri.h"
typedef struct _esxUtil_ParsedUri esxUtil_ParsedUri;
@@ -40,7 +40,7 @@ struct _esxUtil_ParsedUri {
char *path;
};
-int esxUtil_ParseUri(esxUtil_ParsedUri **parsedUri, xmlURIPtr uri);
+int esxUtil_ParseUri(esxUtil_ParsedUri **parsedUri, virURIPtr uri);
void esxUtil_FreeParsedUri(esxUtil_ParsedUri **parsedUri);
diff --git a/src/hyperv/hyperv_util.c b/src/hyperv/hyperv_util.c
index 298cfe0ee..2e6a2d472 100644
--- a/src/hyperv/hyperv_util.c
+++ b/src/hyperv/hyperv_util.c
@@ -37,7 +37,7 @@
int
-hypervParseUri(hypervParsedUri **parsedUri, xmlURIPtr uri)
+hypervParseUri(hypervParsedUri **parsedUri, virURIPtr uri)
{
int result = -1;
struct qparam_set *queryParamSet = NULL;
diff --git a/src/hyperv/hyperv_util.h b/src/hyperv/hyperv_util.h
index 9057f55c1..d9d1c8424 100644
--- a/src/hyperv/hyperv_util.h
+++ b/src/hyperv/hyperv_util.h
@@ -23,9 +23,8 @@
#ifndef __HYPERV_UTIL_H__
# define __HYPERV_UTIL_H__
-# include <libxml/uri.h>
-
# include "internal.h"
+# include "viruri.h"
typedef struct _hypervParsedUri hypervParsedUri;
@@ -33,7 +32,7 @@ struct _hypervParsedUri {
char *transport;
};
-int hypervParseUri(hypervParsedUri **parsedUri, xmlURIPtr uri);
+int hypervParseUri(hypervParsedUri **parsedUri, virURIPtr uri);
void hypervFreeParsedUri(hypervParsedUri **parsedUri);
diff --git a/src/libvirt.c b/src/libvirt.c
index a3bd4f48a..cbb41194c 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -23,7 +23,6 @@
#include <libxml/parser.h>
#include <libxml/xpath.h>
-#include <libxml/uri.h>
#include "getpass.h"
#ifdef HAVE_WINSOCK2_H
@@ -44,6 +43,7 @@
#include "command.h"
#include "virnodesuspend.h"
#include "virrandom.h"
+#include "viruri.h"
#ifndef WITH_DRIVER_MODULES
# ifdef WITH_TEST
@@ -1127,7 +1127,7 @@ do_open (const char *name,
virConnectOpenResolveURIAlias(name, &alias) < 0)
goto failed;
- ret->uri = xmlParseURI (alias ? alias : name);
+ ret->uri = virURIParse (alias ? alias : name);
if (!ret->uri) {
virLibConnError(VIR_ERR_INVALID_ARG,
_("could not parse connection URI %s"),
@@ -1729,7 +1729,7 @@ virConnectGetURI (virConnectPtr conn)
return NULL;
}
- name = (char *)xmlSaveUri(conn->uri);
+ name = virURIFormat(conn->uri);
if (!name) {
virReportOOMError();
goto error;
@@ -4952,7 +4952,7 @@ virDomainMigratePeer2Peer (virDomainPtr domain,
const char *uri,
unsigned long bandwidth)
{
- xmlURIPtr tempuri = NULL;
+ virURIPtr tempuri = NULL;
VIR_DOMAIN_DEBUG(domain, "xmlin=%s, flags=%lx, dname=%s, "
"dconnuri=%s, uri=%s, bandwidth=%lu",
NULLSTR(xmlin), flags, NULLSTR(dname),
@@ -4964,7 +4964,7 @@ virDomainMigratePeer2Peer (virDomainPtr domain,
return -1;
}
- tempuri = xmlParseURI(dconnuri);
+ tempuri = virURIParse(dconnuri);
if (!tempuri) {
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
virDispatchError(domain->conn);
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 18a24e485..310cd7d91 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1431,6 +1431,11 @@ virTypedParameterArrayValidate;
virTypedParameterAssign;
+# viruri.h
+virURIFormat;
+virURIParse;
+
+
# xml.h
virXMLChildElementCount;
virXMLParseHelper;
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index 6cfc5eb0b..6db33c25e 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -44,6 +44,7 @@
#include "libxl_conf.h"
#include "xen_xm.h"
#include "virtypedparam.h"
+#include "viruri.h"
#define VIR_FROM_THIS VIR_FROM_LIBXL
@@ -1043,7 +1044,7 @@ libxlOpen(virConnectPtr conn,
if (libxl_driver == NULL)
return VIR_DRV_OPEN_DECLINED;
- conn->uri = xmlParseURI("xen:///");
+ conn->uri = virURIParse("xen:///");
if (!conn->uri) {
virReportOOMError();
return VIR_DRV_OPEN_ERROR;
diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
index b6962cf79..d77afcc4c 100644
--- a/src/lxc/lxc_driver.c
+++ b/src/lxc/lxc_driver.c
@@ -60,6 +60,7 @@
#include "virnodesuspend.h"
#include "virtime.h"
#include "virtypedparam.h"
+#include "viruri.h"
#define VIR_FROM_THIS VIR_FROM_LXC
@@ -139,7 +140,7 @@ static virDrvOpenStatus lxcOpen(virConnectPtr conn,
if (lxc_driver == NULL)
return VIR_DRV_OPEN_DECLINED;
- conn->uri = xmlParseURI("lxc:///");
+ conn->uri = virURIParse("lxc:///");
if (!conn->uri) {
virReportOOMError();
return VIR_DRV_OPEN_ERROR;
diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c
index 833a98d34..aef14915f 100644
--- a/src/openvz/openvz_driver.c
+++ b/src/openvz/openvz_driver.c
@@ -56,6 +56,7 @@
#include "virfile.h"
#include "logging.h"
#include "command.h"
+#include "viruri.h"
#define VIR_FROM_THIS VIR_FROM_OPENVZ
@@ -1335,7 +1336,7 @@ static virDrvOpenStatus openvzOpen(virConnectPtr conn,
if (access("/proc/vz", W_OK) < 0)
return VIR_DRV_OPEN_DECLINED;
- conn->uri = xmlParseURI("openvz:///system");
+ conn->uri = virURIParse("openvz:///system");
if (conn->uri == NULL) {
virReportOOMError();
return VIR_DRV_OPEN_ERROR;
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index d3cf9ac5f..b11d04916 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -857,7 +857,7 @@ static virDrvOpenStatus qemudOpen(virConnectPtr conn,
if (qemu_driver == NULL)
return VIR_DRV_OPEN_DECLINED;
- conn->uri = xmlParseURI(qemu_driver->privileged ?
+ conn->uri = virURIParse(qemu_driver->privileged ?
"qemu:///system" :
"qemu:///session");
if (!conn->uri) {
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index 3f50136e2..7df2d4f8c 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -1,7 +1,7 @@
/*
* qemu_migration.c: QEMU migration handling
*
- * Copyright (C) 2006-2011 Red Hat, Inc.
+ * Copyright (C) 2006-2012 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -46,6 +46,7 @@
#include "locking/domain_lock.h"
#include "rpc/virnetsocket.h"
#include "storage_file.h"
+#include "viruri.h"
#define VIR_FROM_THIS VIR_FROM_QEMU
@@ -1792,7 +1793,7 @@ static int doNativeMigrate(struct qemud_driver *driver,
virConnectPtr dconn)
{
qemuDomainObjPrivatePtr priv = vm->privateData;
- xmlURIPtr uribits = NULL;
+ virURIPtr uribits = NULL;
int ret = -1;
qemuMigrationSpec spec;
@@ -1808,10 +1809,10 @@ static int doNativeMigrate(struct qemud_driver *driver,
virReportOOMError();
return -1;
}
- uribits = xmlParseURI(tmp);
+ uribits = virURIParse(tmp);
VIR_FREE(tmp);
} else {
- uribits = xmlParseURI(uri);
+ uribits = virURIParse(uri);
}
if (!uribits) {
qemuReportError(VIR_ERR_INTERNAL_ERROR,
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
index 2dacb70f6..bcd78eedb 100644
--- a/src/remote/remote_driver.c
+++ b/src/remote/remote_driver.c
@@ -26,8 +26,6 @@
#include <unistd.h>
#include <assert.h>
-#include <libxml/uri.h>
-
#include "virnetclient.h"
#include "virnetclientprogram.h"
#include "virnetclientstream.h"
@@ -47,6 +45,7 @@
#include "command.h"
#include "intprops.h"
#include "virtypedparam.h"
+#include "viruri.h"
#define VIR_FROM_THIS VIR_FROM_REMOTE
@@ -488,7 +487,7 @@ doRemoteOpen (virConnectPtr conn,
/* Allow remote serve to probe */
name = strdup("");
} else {
- xmlURI tmpuri = {
+ virURI tmpuri = {
.scheme = conn->uri->scheme,
#ifdef HAVE_XMLURI_QUERY_RAW
.query_raw = qparam_get_query (vars),
@@ -505,7 +504,7 @@ doRemoteOpen (virConnectPtr conn,
transport_str[-1] = '\0';
}
- name = (char *) xmlSaveUri (&tmpuri);
+ name = virURIFormat(&tmpuri);
#ifdef HAVE_XMLURI_QUERY_RAW
VIR_FREE(tmpuri.query_raw);
@@ -719,7 +718,7 @@ doRemoteOpen (virConnectPtr conn,
goto failed;
VIR_DEBUG("Auto-probed URI is %s", uriret.uri);
- conn->uri = xmlParseURI(uriret.uri);
+ conn->uri = virURIParse(uriret.uri);
VIR_FREE(uriret.uri);
if (!conn->uri) {
virReportOOMError();
diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c
index a4cf9452a..cbb2c0ed4 100644
--- a/src/uml/uml_driver.c
+++ b/src/uml/uml_driver.c
@@ -63,6 +63,7 @@
#include "configmake.h"
#include "virnetdevtap.h"
#include "virnodesuspend.h"
+#include "viruri.h"
#define VIR_FROM_THIS VIR_FROM_UML
@@ -1138,7 +1139,7 @@ static virDrvOpenStatus umlOpen(virConnectPtr conn,
if (uml_driver == NULL)
return VIR_DRV_OPEN_DECLINED;
- conn->uri = xmlParseURI(uml_driver->privileged ?
+ conn->uri = virURIParse(uml_driver->privileged ?
"uml:///system" :
"uml:///session");
if (!conn->uri) {
diff --git a/src/util/qparams.c b/src/util/qparams.c
index f6d0713cc..83b568e3d 100644
--- a/src/util/qparams.c
+++ b/src/util/qparams.c
@@ -26,12 +26,11 @@
#include <stdlib.h>
#include <stdarg.h>
-#include <libxml/uri.h>
-
#include "virterror_internal.h"
#include "buf.h"
#include "memory.h"
#include "qparams.h"
+#include "viruri.h"
#define VIR_FROM_THIS VIR_FROM_NONE
diff --git a/src/util/viruri.c b/src/util/viruri.c
new file mode 100644
index 000000000..6c4dfe3c0
--- /dev/null
+++ b/src/util/viruri.c
@@ -0,0 +1,93 @@
+/*
+ * viruri.c: URI parsing wrappers for libxml2 functions
+ *
+ * Copyright (C) 2012 Red Hat, Inc.
+ *
+ * See COPYING.LIB for the License of this software
+ */
+
+#include <config.h>
+
+#include "viruri.h"
+
+#include "memory.h"
+#include "util.h"
+
+/**
+ * virURIParse:
+ * @uri: URI to parse
+ *
+ * Wrapper for xmlParseURI
+ *
+ * Unfortunately there are few things that should be managed after
+ * parsing the URI. Fortunately there is only one thing now and its
+ * removing of square brackets around IPv6 addresses.
+ *
+ * @returns the parsed uri object with some fixes
+ */
+virURIPtr
+virURIParse(const char *uri)
+{
+ virURIPtr ret = xmlParseURI(uri);
+
+ /* First check: does it even make sense to jump inside */
+ if (ret != NULL &&
+ ret->server != NULL &&
+ ret->server[0] == '[') {
+ size_t length = strlen(ret->server);
+
+ /* We want to modify the server string only if there are
+ * square brackets on both ends and inside there is IPv6
+ * address. Otherwise we could make a mistake by modifying
+ * something other than an IPv6 address. */
+ if (ret->server[length - 1] == ']' && strchr(ret->server, ':')) {
+ memmove(&ret->server[0], &ret->server[1], length - 2);
+ ret->server[length - 2] = '\0';
+ }
+ /* Even after such modification, it is completely ok to free
+ * the uri with xmlFreeURI() */
+ }
+
+ return ret;
+}
+
+/**
+ * virURIFormat:
+ * @uri: URI to format
+ *
+ * Wrapper for xmlSaveUri
+ *
+ * This function constructs back everything that @ref virURIParse
+ * changes after parsing
+ *
+ * @returns the constructed uri as a string
+ */
+char *
+virURIFormat(xmlURIPtr uri)
+{
+ char *backupserver = NULL;
+ char *tmpserver = NULL;
+ char *ret;
+
+ /* First check: does it make sense to do anything */
+ if (uri != NULL &&
+ uri->server != NULL &&
+ strchr(uri->server, ':') != NULL) {
+
+ backupserver = uri->server;
+ if (virAsprintf(&tmpserver, "[%s]", uri->server) < 0)
+ return NULL;
+
+ uri->server = tmpserver;
+ }
+
+ ret = (char *) xmlSaveUri(uri);
+
+ /* Put the fixed version back */
+ if (tmpserver) {
+ uri->server = backupserver;
+ VIR_FREE(tmpserver);
+ }
+
+ return ret;
+}
diff --git a/src/util/viruri.h b/src/util/viruri.h
new file mode 100644
index 000000000..5215e42d4
--- /dev/null
+++ b/src/util/viruri.h
@@ -0,0 +1,22 @@
+/*
+ * viruri.h: internal definitions used for URI parsing.
+ *
+ * Copyright (C) 2012 Red Hat, Inc.
+ *
+ * See COPYING.LIB for the License of this software
+ */
+
+#ifndef __VIR_URI_H__
+# define __VIR_URI_H__
+
+# include <libxml/uri.h>
+
+# include "internal.h"
+
+typedef xmlURI virURI;
+typedef xmlURIPtr virURIPtr;
+
+virURIPtr virURIParse(const char *uri);
+char *virURIFormat(virURIPtr uri);
+
+#endif /* __VIR_URI_H__ */
diff --git a/src/vbox/vbox_tmpl.c b/src/vbox/vbox_tmpl.c
index b168c7db3..a39b5677b 100644
--- a/src/vbox/vbox_tmpl.c
+++ b/src/vbox/vbox_tmpl.c
@@ -56,6 +56,7 @@
#include "configmake.h"
#include "virfile.h"
#include "fdstream.h"
+#include "viruri.h"
/* This one changes from version to version. */
#if VBOX_API_VERSION == 2002
@@ -980,7 +981,7 @@ static virDrvOpenStatus vboxOpen(virConnectPtr conn,
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
if (conn->uri == NULL) {
- conn->uri = xmlParseURI(uid ? "vbox:///session" : "vbox:///system");
+ conn->uri = virURIParse(uid ? "vbox:///session" : "vbox:///system");
if (conn->uri == NULL) {
virReportOOMError();
return VIR_DRV_OPEN_ERROR;
diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c
index 910bb0eb6..5a1aebd8e 100644
--- a/src/vmx/vmx.c
+++ b/src/vmx/vmx.c
@@ -24,7 +24,6 @@
#include <config.h>
#include <c-ctype.h>
-#include <libxml/uri.h>
#include "internal.h"
#include "virterror_internal.h"
@@ -33,6 +32,7 @@
#include "logging.h"
#include "uuid.h"
#include "vmx.h"
+#include "viruri.h"
/*
@@ -2525,7 +2525,7 @@ virVMXParseSerial(virVMXContext *ctx, virConfPtr conf, int port,
char network_endPoint_name[48] = "";
char *network_endPoint = NULL;
- xmlURIPtr parsedUri = NULL;
+ virURIPtr parsedUri = NULL;
if (def == NULL || *def != NULL) {
VMX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
@@ -2615,7 +2615,7 @@ virVMXParseSerial(virVMXContext *ctx, virConfPtr conf, int port,
(*def)->target.port = port;
(*def)->source.type = VIR_DOMAIN_CHR_TYPE_TCP;
- parsedUri = xmlParseURI(fileName);
+ parsedUri = virURIParse(fileName);
if (parsedUri == NULL) {
virReportOOMError();
diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
index 635f4685b..19ce7dae6 100644
--- a/src/xen/xen_driver.c
+++ b/src/xen/xen_driver.c
@@ -26,7 +26,6 @@
#include <sys/types.h>
#include <fcntl.h>
#include <xen/dom0_ops.h>
-#include <libxml/uri.h>
#include "virterror_internal.h"
#include "logging.h"
@@ -50,6 +49,7 @@
#include "uuid.h"
#include "fdstream.h"
#include "virfile.h"
+#include "viruri.h"
#include "command.h"
#include "virnodesuspend.h"
@@ -270,7 +270,7 @@ xenUnifiedOpen (virConnectPtr conn, virConnectAuthPtr auth, unsigned int flags)
if (!xenUnifiedProbe())
return VIR_DRV_OPEN_DECLINED;
- conn->uri = xmlParseURI("xen:///");
+ conn->uri = virURIParse("xen:///");
if (!conn->uri) {
virReportOOMError();
return VIR_DRV_OPEN_ERROR;
diff --git a/src/xen/xen_hypervisor.h b/src/xen/xen_hypervisor.h
index 77c6f7472..55a99f15c 100644
--- a/src/xen/xen_hypervisor.h
+++ b/src/xen/xen_hypervisor.h
@@ -11,11 +11,10 @@
#ifndef __VIR_XEN_INTERNAL_H__
# define __VIR_XEN_INTERNAL_H__
-# include <libxml/uri.h>
-
# include "internal.h"
# include "capabilities.h"
# include "driver.h"
+# include "viruri.h"
/* See xenHypervisorInit() for details. */
struct xenHypervisorVersions {
diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
index 5c3838fe6..83bfac0f2 100644
--- a/src/xen/xend_internal.c
+++ b/src/xen/xend_internal.c
@@ -27,7 +27,6 @@
#include <netinet/tcp.h>
#include <arpa/inet.h>
#include <netdb.h>
-#include <libxml/uri.h>
#include <errno.h>
#include "virterror_internal.h"
@@ -46,6 +45,7 @@
#include "memory.h"
#include "count-one-bits.h"
#include "virfile.h"
+#include "viruri.h"
/* required for cpumap_t */
#include <xen/dom0_ops.h>
@@ -3224,7 +3224,7 @@ xenDaemonDomainMigratePerform (virDomainPtr domain,
* "hostname", "hostname:port" or "xenmigr://hostname[:port]/".
*/
if (strstr (uri, "//")) { /* Full URI. */
- xmlURIPtr uriptr = xmlParseURI (uri);
+ virURIPtr uriptr = virURIParse (uri);
if (!uriptr) {
virXendError(VIR_ERR_INVALID_ARG,
"%s", _("xenDaemonDomainMigrate: invalid URI"));
diff --git a/src/xen/xend_internal.h b/src/xen/xend_internal.h
index eee67b5a1..3f0b63d6a 100644
--- a/src/xen/xend_internal.h
+++ b/src/xen/xend_internal.h
@@ -18,13 +18,13 @@
# include <sys/types.h>
# include <stdint.h>
-# include <libxml/uri.h>
# include "internal.h"
# include "capabilities.h"
# include "domain_conf.h"
# include "driver.h"
# include "buf.h"
+# include "viruri.h"
int
xenDaemonOpen_unix(virConnectPtr conn, const char *path);
diff --git a/src/xenapi/xenapi_driver.c b/src/xenapi/xenapi_driver.c
index f877f671f..94644ae02 100644
--- a/src/xenapi/xenapi_driver.c
+++ b/src/xenapi/xenapi_driver.c
@@ -25,7 +25,6 @@
#include <limits.h>
#include <stdint.h>
#include <string.h>
-#include <libxml/uri.h>
#include <curl/curl.h>
#include <xen/api/xen_all.h>
#include "internal.h"
@@ -37,6 +36,7 @@
#include "uuid.h"
#include "memory.h"
#include "buf.h"
+#include "viruri.h"
#include "xenapi_driver.h"
#include "xenapi_driver_private.h"
#include "xenapi_utils.h"
diff --git a/src/xenapi/xenapi_utils.c b/src/xenapi/xenapi_utils.c
index ddc77366a..943b6c0d2 100644
--- a/src/xenapi/xenapi_utils.c
+++ b/src/xenapi/xenapi_utils.c
@@ -25,7 +25,6 @@
#include <stdio.h>
#include <string.h>
#include <stdint.h>
-#include <libxml/uri.h>
#include <xen/api/xen_all.h>
#include "internal.h"
#include "domain_conf.h"
@@ -37,6 +36,7 @@
#include "buf.h"
#include "logging.h"
#include "qparams.h"
+#include "viruri.h"
#include "xenapi_driver_private.h"
#include "xenapi_utils.h"
@@ -94,7 +94,7 @@ xenapiUtil_RequestPassword(virConnectAuthPtr auth, const char *username,
}
int
-xenapiUtil_ParseQuery(virConnectPtr conn, xmlURIPtr uri, int *noVerify)
+xenapiUtil_ParseQuery(virConnectPtr conn, virURIPtr uri, int *noVerify)
{
int result = 0;
int i;
diff --git a/src/xenapi/xenapi_utils.h b/src/xenapi/xenapi_utils.h
index 40506d5c3..aa1ff740d 100644
--- a/src/xenapi/xenapi_utils.h
+++ b/src/xenapi/xenapi_utils.h
@@ -23,9 +23,9 @@
# define __VIR_XENAPI_UTILS__
# include <stdint.h>
-# include <libxml/uri.h>
# include <xen/api/xen_all.h>
# include "internal.h"
+# include "viruri.h"
# include "domain_conf.h"
# define NETWORK_DEVID_SIZE (12)
@@ -40,7 +40,7 @@ xenapiUtil_RequestPassword(virConnectAuthPtr auth, const char *username,
const char *hostname);
int
-xenapiUtil_ParseQuery(virConnectPtr conn, xmlURIPtr uri, int *noVerify);
+xenapiUtil_ParseQuery(virConnectPtr conn, virURIPtr uri, int *noVerify);
enum xen_on_normal_exit
actionShutdownLibvirt2XenapiEnum(enum virDomainLifecycleAction action);