提交 9f748277 编写于 作者: M Martin Kletzander 提交者: Eric Blake

Fixed URI parsing

Function xmlParseURI does not remove square brackets around IPv6
address when parsing. One of the solutions is making wrappers around
functions working with xmlURI*. This assures that uri->server will be
always properly assigned and it doesn't have to be changed when used
on some new place in the code.
For this purpose, functions virParseURI and virSaveURI were
added. These function are wrappers around xmlParseURI and xmlSaveUri
respectively.
Also there is one new syntax check function to prohibit these functions
anywhere else.

File changes:
 - src/util/viruri.h        -- declaration
 - src/util/viruri.c        -- definition
 - src/libvirt_private.syms -- symbol export
 - src/Makefile.am          -- added source and header files
 - cfg.mk                   -- added sc_prohibit_xmlURI
 - all others               -- ID name and include fixes
上级 801a60ff
...@@ -457,6 +457,12 @@ sc_prohibit_xmlGetProp: ...@@ -457,6 +457,12 @@ sc_prohibit_xmlGetProp:
halt='use virXMLPropString, not xmlGetProp' \ halt='use virXMLPropString, not xmlGetProp' \
$(_sc_search_regexp) $(_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 # ATTRIBUTE_UNUSED should only be applied in implementations, not
# header declarations # header declarations
sc_avoid_attribute_unused_in_header: sc_avoid_attribute_unused_in_header:
...@@ -758,6 +764,8 @@ exclude_file_name_regexp--sc_prohibit_strncpy = \ ...@@ -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_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 = ^examples/
exclude_file_name_regexp--sc_require_config_h_first = ^examples/ exclude_file_name_regexp--sc_require_config_h_first = ^examples/
......
...@@ -104,7 +104,8 @@ UTIL_SOURCES = \ ...@@ -104,7 +104,8 @@ UTIL_SOURCES = \
util/virnetlink.c util/virnetlink.h \ util/virnetlink.c util/virnetlink.h \
util/virrandom.h util/virrandom.c \ util/virrandom.h util/virrandom.c \
util/virsocketaddr.h util/virsocketaddr.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 \ EXTRA_DIST += $(srcdir)/util/virkeymaps.h $(srcdir)/util/keymaps.csv \
$(srcdir)/util/virkeycode-mapgen.py $(srcdir)/util/virkeycode-mapgen.py
......
...@@ -151,7 +151,7 @@ struct _virConnect { ...@@ -151,7 +151,7 @@ struct _virConnect {
*/ */
unsigned int magic; /* specific value to check */ unsigned int magic; /* specific value to check */
unsigned int flags; /* a set of connection flags */ unsigned int flags; /* a set of connection flags */
xmlURIPtr uri; /* connection URI */ virURIPtr uri; /* connection URI */
/* The underlying hypervisor driver and network driver. */ /* The underlying hypervisor driver and network driver. */
virDriverPtr driver; virDriverPtr driver;
......
...@@ -9,9 +9,9 @@ ...@@ -9,9 +9,9 @@
# include "config.h" # include "config.h"
# include <unistd.h> # include <unistd.h>
# include <libxml/uri.h>
# include "internal.h" # include "internal.h"
# include "viruri.h"
/* /*
* List of registered drivers numbers * List of registered drivers numbers
*/ */
......
...@@ -44,6 +44,7 @@ ...@@ -44,6 +44,7 @@
#include "esx_vi.h" #include "esx_vi.h"
#include "esx_vi_methods.h" #include "esx_vi_methods.h"
#include "esx_util.h" #include "esx_util.h"
#include "viruri.h"
#define VIR_FROM_THIS VIR_FROM_ESX #define VIR_FROM_THIS VIR_FROM_ESX
...@@ -3945,7 +3946,7 @@ esxDomainMigratePerform(virDomainPtr domain, ...@@ -3945,7 +3946,7 @@ esxDomainMigratePerform(virDomainPtr domain,
{ {
int result = -1; int result = -1;
esxPrivate *priv = domain->conn->privateData; esxPrivate *priv = domain->conn->privateData;
xmlURIPtr parsedUri = NULL; virURIPtr parsedUri = NULL;
char *saveptr; char *saveptr;
char *path_resourcePool; char *path_resourcePool;
char *path_hostSystem; char *path_hostSystem;
...@@ -3976,7 +3977,7 @@ esxDomainMigratePerform(virDomainPtr domain, ...@@ -3976,7 +3977,7 @@ esxDomainMigratePerform(virDomainPtr domain,
} }
/* Parse migration URI */ /* Parse migration URI */
parsedUri = xmlParseURI(uri); parsedUri = virURIParse(uri);
if (parsedUri == NULL) { if (parsedUri == NULL) {
virReportOOMError(); virReportOOMError();
......
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
int int
esxUtil_ParseUri(esxUtil_ParsedUri **parsedUri, xmlURIPtr uri) esxUtil_ParseUri(esxUtil_ParsedUri **parsedUri, virURIPtr uri)
{ {
int result = -1; int result = -1;
struct qparam_set *queryParamSet = NULL; struct qparam_set *queryParamSet = NULL;
......
...@@ -22,9 +22,9 @@ ...@@ -22,9 +22,9 @@
#ifndef __ESX_UTIL_H__ #ifndef __ESX_UTIL_H__
# define __ESX_UTIL_H__ # define __ESX_UTIL_H__
# include <libxml/uri.h>
# include <netdb.h> # include <netdb.h>
# include "internal.h" # include "internal.h"
# include "viruri.h"
typedef struct _esxUtil_ParsedUri esxUtil_ParsedUri; typedef struct _esxUtil_ParsedUri esxUtil_ParsedUri;
...@@ -40,7 +40,7 @@ struct _esxUtil_ParsedUri { ...@@ -40,7 +40,7 @@ struct _esxUtil_ParsedUri {
char *path; char *path;
}; };
int esxUtil_ParseUri(esxUtil_ParsedUri **parsedUri, xmlURIPtr uri); int esxUtil_ParseUri(esxUtil_ParsedUri **parsedUri, virURIPtr uri);
void esxUtil_FreeParsedUri(esxUtil_ParsedUri **parsedUri); void esxUtil_FreeParsedUri(esxUtil_ParsedUri **parsedUri);
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
int int
hypervParseUri(hypervParsedUri **parsedUri, xmlURIPtr uri) hypervParseUri(hypervParsedUri **parsedUri, virURIPtr uri)
{ {
int result = -1; int result = -1;
struct qparam_set *queryParamSet = NULL; struct qparam_set *queryParamSet = NULL;
......
...@@ -23,9 +23,8 @@ ...@@ -23,9 +23,8 @@
#ifndef __HYPERV_UTIL_H__ #ifndef __HYPERV_UTIL_H__
# define __HYPERV_UTIL_H__ # define __HYPERV_UTIL_H__
# include <libxml/uri.h>
# include "internal.h" # include "internal.h"
# include "viruri.h"
typedef struct _hypervParsedUri hypervParsedUri; typedef struct _hypervParsedUri hypervParsedUri;
...@@ -33,7 +32,7 @@ struct _hypervParsedUri { ...@@ -33,7 +32,7 @@ struct _hypervParsedUri {
char *transport; char *transport;
}; };
int hypervParseUri(hypervParsedUri **parsedUri, xmlURIPtr uri); int hypervParseUri(hypervParsedUri **parsedUri, virURIPtr uri);
void hypervFreeParsedUri(hypervParsedUri **parsedUri); void hypervFreeParsedUri(hypervParsedUri **parsedUri);
......
...@@ -23,7 +23,6 @@ ...@@ -23,7 +23,6 @@
#include <libxml/parser.h> #include <libxml/parser.h>
#include <libxml/xpath.h> #include <libxml/xpath.h>
#include <libxml/uri.h>
#include "getpass.h" #include "getpass.h"
#ifdef HAVE_WINSOCK2_H #ifdef HAVE_WINSOCK2_H
...@@ -44,6 +43,7 @@ ...@@ -44,6 +43,7 @@
#include "command.h" #include "command.h"
#include "virnodesuspend.h" #include "virnodesuspend.h"
#include "virrandom.h" #include "virrandom.h"
#include "viruri.h"
#ifndef WITH_DRIVER_MODULES #ifndef WITH_DRIVER_MODULES
# ifdef WITH_TEST # ifdef WITH_TEST
...@@ -1127,7 +1127,7 @@ do_open (const char *name, ...@@ -1127,7 +1127,7 @@ do_open (const char *name,
virConnectOpenResolveURIAlias(name, &alias) < 0) virConnectOpenResolveURIAlias(name, &alias) < 0)
goto failed; goto failed;
ret->uri = xmlParseURI (alias ? alias : name); ret->uri = virURIParse (alias ? alias : name);
if (!ret->uri) { if (!ret->uri) {
virLibConnError(VIR_ERR_INVALID_ARG, virLibConnError(VIR_ERR_INVALID_ARG,
_("could not parse connection URI %s"), _("could not parse connection URI %s"),
...@@ -1729,7 +1729,7 @@ virConnectGetURI (virConnectPtr conn) ...@@ -1729,7 +1729,7 @@ virConnectGetURI (virConnectPtr conn)
return NULL; return NULL;
} }
name = (char *)xmlSaveUri(conn->uri); name = virURIFormat(conn->uri);
if (!name) { if (!name) {
virReportOOMError(); virReportOOMError();
goto error; goto error;
...@@ -4952,7 +4952,7 @@ virDomainMigratePeer2Peer (virDomainPtr domain, ...@@ -4952,7 +4952,7 @@ virDomainMigratePeer2Peer (virDomainPtr domain,
const char *uri, const char *uri,
unsigned long bandwidth) unsigned long bandwidth)
{ {
xmlURIPtr tempuri = NULL; virURIPtr tempuri = NULL;
VIR_DOMAIN_DEBUG(domain, "xmlin=%s, flags=%lx, dname=%s, " VIR_DOMAIN_DEBUG(domain, "xmlin=%s, flags=%lx, dname=%s, "
"dconnuri=%s, uri=%s, bandwidth=%lu", "dconnuri=%s, uri=%s, bandwidth=%lu",
NULLSTR(xmlin), flags, NULLSTR(dname), NULLSTR(xmlin), flags, NULLSTR(dname),
...@@ -4964,7 +4964,7 @@ virDomainMigratePeer2Peer (virDomainPtr domain, ...@@ -4964,7 +4964,7 @@ virDomainMigratePeer2Peer (virDomainPtr domain,
return -1; return -1;
} }
tempuri = xmlParseURI(dconnuri); tempuri = virURIParse(dconnuri);
if (!tempuri) { if (!tempuri) {
virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__); virLibConnError(VIR_ERR_INVALID_ARG, __FUNCTION__);
virDispatchError(domain->conn); virDispatchError(domain->conn);
......
...@@ -1431,6 +1431,11 @@ virTypedParameterArrayValidate; ...@@ -1431,6 +1431,11 @@ virTypedParameterArrayValidate;
virTypedParameterAssign; virTypedParameterAssign;
# viruri.h
virURIFormat;
virURIParse;
# xml.h # xml.h
virXMLChildElementCount; virXMLChildElementCount;
virXMLParseHelper; virXMLParseHelper;
......
...@@ -44,6 +44,7 @@ ...@@ -44,6 +44,7 @@
#include "libxl_conf.h" #include "libxl_conf.h"
#include "xen_xm.h" #include "xen_xm.h"
#include "virtypedparam.h" #include "virtypedparam.h"
#include "viruri.h"
#define VIR_FROM_THIS VIR_FROM_LIBXL #define VIR_FROM_THIS VIR_FROM_LIBXL
...@@ -1043,7 +1044,7 @@ libxlOpen(virConnectPtr conn, ...@@ -1043,7 +1044,7 @@ libxlOpen(virConnectPtr conn,
if (libxl_driver == NULL) if (libxl_driver == NULL)
return VIR_DRV_OPEN_DECLINED; return VIR_DRV_OPEN_DECLINED;
conn->uri = xmlParseURI("xen:///"); conn->uri = virURIParse("xen:///");
if (!conn->uri) { if (!conn->uri) {
virReportOOMError(); virReportOOMError();
return VIR_DRV_OPEN_ERROR; return VIR_DRV_OPEN_ERROR;
......
...@@ -60,6 +60,7 @@ ...@@ -60,6 +60,7 @@
#include "virnodesuspend.h" #include "virnodesuspend.h"
#include "virtime.h" #include "virtime.h"
#include "virtypedparam.h" #include "virtypedparam.h"
#include "viruri.h"
#define VIR_FROM_THIS VIR_FROM_LXC #define VIR_FROM_THIS VIR_FROM_LXC
...@@ -139,7 +140,7 @@ static virDrvOpenStatus lxcOpen(virConnectPtr conn, ...@@ -139,7 +140,7 @@ static virDrvOpenStatus lxcOpen(virConnectPtr conn,
if (lxc_driver == NULL) if (lxc_driver == NULL)
return VIR_DRV_OPEN_DECLINED; return VIR_DRV_OPEN_DECLINED;
conn->uri = xmlParseURI("lxc:///"); conn->uri = virURIParse("lxc:///");
if (!conn->uri) { if (!conn->uri) {
virReportOOMError(); virReportOOMError();
return VIR_DRV_OPEN_ERROR; return VIR_DRV_OPEN_ERROR;
......
...@@ -56,6 +56,7 @@ ...@@ -56,6 +56,7 @@
#include "virfile.h" #include "virfile.h"
#include "logging.h" #include "logging.h"
#include "command.h" #include "command.h"
#include "viruri.h"
#define VIR_FROM_THIS VIR_FROM_OPENVZ #define VIR_FROM_THIS VIR_FROM_OPENVZ
...@@ -1335,7 +1336,7 @@ static virDrvOpenStatus openvzOpen(virConnectPtr conn, ...@@ -1335,7 +1336,7 @@ static virDrvOpenStatus openvzOpen(virConnectPtr conn,
if (access("/proc/vz", W_OK) < 0) if (access("/proc/vz", W_OK) < 0)
return VIR_DRV_OPEN_DECLINED; return VIR_DRV_OPEN_DECLINED;
conn->uri = xmlParseURI("openvz:///system"); conn->uri = virURIParse("openvz:///system");
if (conn->uri == NULL) { if (conn->uri == NULL) {
virReportOOMError(); virReportOOMError();
return VIR_DRV_OPEN_ERROR; return VIR_DRV_OPEN_ERROR;
......
...@@ -857,7 +857,7 @@ static virDrvOpenStatus qemudOpen(virConnectPtr conn, ...@@ -857,7 +857,7 @@ static virDrvOpenStatus qemudOpen(virConnectPtr conn,
if (qemu_driver == NULL) if (qemu_driver == NULL)
return VIR_DRV_OPEN_DECLINED; return VIR_DRV_OPEN_DECLINED;
conn->uri = xmlParseURI(qemu_driver->privileged ? conn->uri = virURIParse(qemu_driver->privileged ?
"qemu:///system" : "qemu:///system" :
"qemu:///session"); "qemu:///session");
if (!conn->uri) { if (!conn->uri) {
......
/* /*
* qemu_migration.c: QEMU migration handling * 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 * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
#include "locking/domain_lock.h" #include "locking/domain_lock.h"
#include "rpc/virnetsocket.h" #include "rpc/virnetsocket.h"
#include "storage_file.h" #include "storage_file.h"
#include "viruri.h"
#define VIR_FROM_THIS VIR_FROM_QEMU #define VIR_FROM_THIS VIR_FROM_QEMU
...@@ -1792,7 +1793,7 @@ static int doNativeMigrate(struct qemud_driver *driver, ...@@ -1792,7 +1793,7 @@ static int doNativeMigrate(struct qemud_driver *driver,
virConnectPtr dconn) virConnectPtr dconn)
{ {
qemuDomainObjPrivatePtr priv = vm->privateData; qemuDomainObjPrivatePtr priv = vm->privateData;
xmlURIPtr uribits = NULL; virURIPtr uribits = NULL;
int ret = -1; int ret = -1;
qemuMigrationSpec spec; qemuMigrationSpec spec;
...@@ -1808,10 +1809,10 @@ static int doNativeMigrate(struct qemud_driver *driver, ...@@ -1808,10 +1809,10 @@ static int doNativeMigrate(struct qemud_driver *driver,
virReportOOMError(); virReportOOMError();
return -1; return -1;
} }
uribits = xmlParseURI(tmp); uribits = virURIParse(tmp);
VIR_FREE(tmp); VIR_FREE(tmp);
} else { } else {
uribits = xmlParseURI(uri); uribits = virURIParse(uri);
} }
if (!uribits) { if (!uribits) {
qemuReportError(VIR_ERR_INTERNAL_ERROR, qemuReportError(VIR_ERR_INTERNAL_ERROR,
......
...@@ -26,8 +26,6 @@ ...@@ -26,8 +26,6 @@
#include <unistd.h> #include <unistd.h>
#include <assert.h> #include <assert.h>
#include <libxml/uri.h>
#include "virnetclient.h" #include "virnetclient.h"
#include "virnetclientprogram.h" #include "virnetclientprogram.h"
#include "virnetclientstream.h" #include "virnetclientstream.h"
...@@ -47,6 +45,7 @@ ...@@ -47,6 +45,7 @@
#include "command.h" #include "command.h"
#include "intprops.h" #include "intprops.h"
#include "virtypedparam.h" #include "virtypedparam.h"
#include "viruri.h"
#define VIR_FROM_THIS VIR_FROM_REMOTE #define VIR_FROM_THIS VIR_FROM_REMOTE
...@@ -488,7 +487,7 @@ doRemoteOpen (virConnectPtr conn, ...@@ -488,7 +487,7 @@ doRemoteOpen (virConnectPtr conn,
/* Allow remote serve to probe */ /* Allow remote serve to probe */
name = strdup(""); name = strdup("");
} else { } else {
xmlURI tmpuri = { virURI tmpuri = {
.scheme = conn->uri->scheme, .scheme = conn->uri->scheme,
#ifdef HAVE_XMLURI_QUERY_RAW #ifdef HAVE_XMLURI_QUERY_RAW
.query_raw = qparam_get_query (vars), .query_raw = qparam_get_query (vars),
...@@ -505,7 +504,7 @@ doRemoteOpen (virConnectPtr conn, ...@@ -505,7 +504,7 @@ doRemoteOpen (virConnectPtr conn,
transport_str[-1] = '\0'; transport_str[-1] = '\0';
} }
name = (char *) xmlSaveUri (&tmpuri); name = virURIFormat(&tmpuri);
#ifdef HAVE_XMLURI_QUERY_RAW #ifdef HAVE_XMLURI_QUERY_RAW
VIR_FREE(tmpuri.query_raw); VIR_FREE(tmpuri.query_raw);
...@@ -719,7 +718,7 @@ doRemoteOpen (virConnectPtr conn, ...@@ -719,7 +718,7 @@ doRemoteOpen (virConnectPtr conn,
goto failed; goto failed;
VIR_DEBUG("Auto-probed URI is %s", uriret.uri); VIR_DEBUG("Auto-probed URI is %s", uriret.uri);
conn->uri = xmlParseURI(uriret.uri); conn->uri = virURIParse(uriret.uri);
VIR_FREE(uriret.uri); VIR_FREE(uriret.uri);
if (!conn->uri) { if (!conn->uri) {
virReportOOMError(); virReportOOMError();
......
...@@ -63,6 +63,7 @@ ...@@ -63,6 +63,7 @@
#include "configmake.h" #include "configmake.h"
#include "virnetdevtap.h" #include "virnetdevtap.h"
#include "virnodesuspend.h" #include "virnodesuspend.h"
#include "viruri.h"
#define VIR_FROM_THIS VIR_FROM_UML #define VIR_FROM_THIS VIR_FROM_UML
...@@ -1138,7 +1139,7 @@ static virDrvOpenStatus umlOpen(virConnectPtr conn, ...@@ -1138,7 +1139,7 @@ static virDrvOpenStatus umlOpen(virConnectPtr conn,
if (uml_driver == NULL) if (uml_driver == NULL)
return VIR_DRV_OPEN_DECLINED; return VIR_DRV_OPEN_DECLINED;
conn->uri = xmlParseURI(uml_driver->privileged ? conn->uri = virURIParse(uml_driver->privileged ?
"uml:///system" : "uml:///system" :
"uml:///session"); "uml:///session");
if (!conn->uri) { if (!conn->uri) {
......
...@@ -26,12 +26,11 @@ ...@@ -26,12 +26,11 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdarg.h> #include <stdarg.h>
#include <libxml/uri.h>
#include "virterror_internal.h" #include "virterror_internal.h"
#include "buf.h" #include "buf.h"
#include "memory.h" #include "memory.h"
#include "qparams.h" #include "qparams.h"
#include "viruri.h"
#define VIR_FROM_THIS VIR_FROM_NONE #define VIR_FROM_THIS VIR_FROM_NONE
......
/*
* 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;
}
/*
* 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__ */
...@@ -56,6 +56,7 @@ ...@@ -56,6 +56,7 @@
#include "configmake.h" #include "configmake.h"
#include "virfile.h" #include "virfile.h"
#include "fdstream.h" #include "fdstream.h"
#include "viruri.h"
/* This one changes from version to version. */ /* This one changes from version to version. */
#if VBOX_API_VERSION == 2002 #if VBOX_API_VERSION == 2002
...@@ -980,7 +981,7 @@ static virDrvOpenStatus vboxOpen(virConnectPtr conn, ...@@ -980,7 +981,7 @@ static virDrvOpenStatus vboxOpen(virConnectPtr conn,
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
if (conn->uri == NULL) { if (conn->uri == NULL) {
conn->uri = xmlParseURI(uid ? "vbox:///session" : "vbox:///system"); conn->uri = virURIParse(uid ? "vbox:///session" : "vbox:///system");
if (conn->uri == NULL) { if (conn->uri == NULL) {
virReportOOMError(); virReportOOMError();
return VIR_DRV_OPEN_ERROR; return VIR_DRV_OPEN_ERROR;
......
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
#include <config.h> #include <config.h>
#include <c-ctype.h> #include <c-ctype.h>
#include <libxml/uri.h>
#include "internal.h" #include "internal.h"
#include "virterror_internal.h" #include "virterror_internal.h"
...@@ -33,6 +32,7 @@ ...@@ -33,6 +32,7 @@
#include "logging.h" #include "logging.h"
#include "uuid.h" #include "uuid.h"
#include "vmx.h" #include "vmx.h"
#include "viruri.h"
/* /*
...@@ -2525,7 +2525,7 @@ virVMXParseSerial(virVMXContext *ctx, virConfPtr conf, int port, ...@@ -2525,7 +2525,7 @@ virVMXParseSerial(virVMXContext *ctx, virConfPtr conf, int port,
char network_endPoint_name[48] = ""; char network_endPoint_name[48] = "";
char *network_endPoint = NULL; char *network_endPoint = NULL;
xmlURIPtr parsedUri = NULL; virURIPtr parsedUri = NULL;
if (def == NULL || *def != NULL) { if (def == NULL || *def != NULL) {
VMX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument")); VMX_ERROR(VIR_ERR_INTERNAL_ERROR, "%s", _("Invalid argument"));
...@@ -2615,7 +2615,7 @@ virVMXParseSerial(virVMXContext *ctx, virConfPtr conf, int port, ...@@ -2615,7 +2615,7 @@ virVMXParseSerial(virVMXContext *ctx, virConfPtr conf, int port,
(*def)->target.port = port; (*def)->target.port = port;
(*def)->source.type = VIR_DOMAIN_CHR_TYPE_TCP; (*def)->source.type = VIR_DOMAIN_CHR_TYPE_TCP;
parsedUri = xmlParseURI(fileName); parsedUri = virURIParse(fileName);
if (parsedUri == NULL) { if (parsedUri == NULL) {
virReportOOMError(); virReportOOMError();
......
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
#include <sys/types.h> #include <sys/types.h>
#include <fcntl.h> #include <fcntl.h>
#include <xen/dom0_ops.h> #include <xen/dom0_ops.h>
#include <libxml/uri.h>
#include "virterror_internal.h" #include "virterror_internal.h"
#include "logging.h" #include "logging.h"
...@@ -50,6 +49,7 @@ ...@@ -50,6 +49,7 @@
#include "uuid.h" #include "uuid.h"
#include "fdstream.h" #include "fdstream.h"
#include "virfile.h" #include "virfile.h"
#include "viruri.h"
#include "command.h" #include "command.h"
#include "virnodesuspend.h" #include "virnodesuspend.h"
...@@ -270,7 +270,7 @@ xenUnifiedOpen (virConnectPtr conn, virConnectAuthPtr auth, unsigned int flags) ...@@ -270,7 +270,7 @@ xenUnifiedOpen (virConnectPtr conn, virConnectAuthPtr auth, unsigned int flags)
if (!xenUnifiedProbe()) if (!xenUnifiedProbe())
return VIR_DRV_OPEN_DECLINED; return VIR_DRV_OPEN_DECLINED;
conn->uri = xmlParseURI("xen:///"); conn->uri = virURIParse("xen:///");
if (!conn->uri) { if (!conn->uri) {
virReportOOMError(); virReportOOMError();
return VIR_DRV_OPEN_ERROR; return VIR_DRV_OPEN_ERROR;
......
...@@ -11,11 +11,10 @@ ...@@ -11,11 +11,10 @@
#ifndef __VIR_XEN_INTERNAL_H__ #ifndef __VIR_XEN_INTERNAL_H__
# define __VIR_XEN_INTERNAL_H__ # define __VIR_XEN_INTERNAL_H__
# include <libxml/uri.h>
# include "internal.h" # include "internal.h"
# include "capabilities.h" # include "capabilities.h"
# include "driver.h" # include "driver.h"
# include "viruri.h"
/* See xenHypervisorInit() for details. */ /* See xenHypervisorInit() for details. */
struct xenHypervisorVersions { struct xenHypervisorVersions {
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include <netinet/tcp.h> #include <netinet/tcp.h>
#include <arpa/inet.h> #include <arpa/inet.h>
#include <netdb.h> #include <netdb.h>
#include <libxml/uri.h>
#include <errno.h> #include <errno.h>
#include "virterror_internal.h" #include "virterror_internal.h"
...@@ -46,6 +45,7 @@ ...@@ -46,6 +45,7 @@
#include "memory.h" #include "memory.h"
#include "count-one-bits.h" #include "count-one-bits.h"
#include "virfile.h" #include "virfile.h"
#include "viruri.h"
/* required for cpumap_t */ /* required for cpumap_t */
#include <xen/dom0_ops.h> #include <xen/dom0_ops.h>
...@@ -3224,7 +3224,7 @@ xenDaemonDomainMigratePerform (virDomainPtr domain, ...@@ -3224,7 +3224,7 @@ xenDaemonDomainMigratePerform (virDomainPtr domain,
* "hostname", "hostname:port" or "xenmigr://hostname[:port]/". * "hostname", "hostname:port" or "xenmigr://hostname[:port]/".
*/ */
if (strstr (uri, "//")) { /* Full URI. */ if (strstr (uri, "//")) { /* Full URI. */
xmlURIPtr uriptr = xmlParseURI (uri); virURIPtr uriptr = virURIParse (uri);
if (!uriptr) { if (!uriptr) {
virXendError(VIR_ERR_INVALID_ARG, virXendError(VIR_ERR_INVALID_ARG,
"%s", _("xenDaemonDomainMigrate: invalid URI")); "%s", _("xenDaemonDomainMigrate: invalid URI"));
......
...@@ -18,13 +18,13 @@ ...@@ -18,13 +18,13 @@
# include <sys/types.h> # include <sys/types.h>
# include <stdint.h> # include <stdint.h>
# include <libxml/uri.h>
# include "internal.h" # include "internal.h"
# include "capabilities.h" # include "capabilities.h"
# include "domain_conf.h" # include "domain_conf.h"
# include "driver.h" # include "driver.h"
# include "buf.h" # include "buf.h"
# include "viruri.h"
int int
xenDaemonOpen_unix(virConnectPtr conn, const char *path); xenDaemonOpen_unix(virConnectPtr conn, const char *path);
......
...@@ -25,7 +25,6 @@ ...@@ -25,7 +25,6 @@
#include <limits.h> #include <limits.h>
#include <stdint.h> #include <stdint.h>
#include <string.h> #include <string.h>
#include <libxml/uri.h>
#include <curl/curl.h> #include <curl/curl.h>
#include <xen/api/xen_all.h> #include <xen/api/xen_all.h>
#include "internal.h" #include "internal.h"
...@@ -37,6 +36,7 @@ ...@@ -37,6 +36,7 @@
#include "uuid.h" #include "uuid.h"
#include "memory.h" #include "memory.h"
#include "buf.h" #include "buf.h"
#include "viruri.h"
#include "xenapi_driver.h" #include "xenapi_driver.h"
#include "xenapi_driver_private.h" #include "xenapi_driver_private.h"
#include "xenapi_utils.h" #include "xenapi_utils.h"
......
...@@ -25,7 +25,6 @@ ...@@ -25,7 +25,6 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <stdint.h> #include <stdint.h>
#include <libxml/uri.h>
#include <xen/api/xen_all.h> #include <xen/api/xen_all.h>
#include "internal.h" #include "internal.h"
#include "domain_conf.h" #include "domain_conf.h"
...@@ -37,6 +36,7 @@ ...@@ -37,6 +36,7 @@
#include "buf.h" #include "buf.h"
#include "logging.h" #include "logging.h"
#include "qparams.h" #include "qparams.h"
#include "viruri.h"
#include "xenapi_driver_private.h" #include "xenapi_driver_private.h"
#include "xenapi_utils.h" #include "xenapi_utils.h"
...@@ -94,7 +94,7 @@ xenapiUtil_RequestPassword(virConnectAuthPtr auth, const char *username, ...@@ -94,7 +94,7 @@ xenapiUtil_RequestPassword(virConnectAuthPtr auth, const char *username,
} }
int int
xenapiUtil_ParseQuery(virConnectPtr conn, xmlURIPtr uri, int *noVerify) xenapiUtil_ParseQuery(virConnectPtr conn, virURIPtr uri, int *noVerify)
{ {
int result = 0; int result = 0;
int i; int i;
......
...@@ -23,9 +23,9 @@ ...@@ -23,9 +23,9 @@
# define __VIR_XENAPI_UTILS__ # define __VIR_XENAPI_UTILS__
# include <stdint.h> # include <stdint.h>
# include <libxml/uri.h>
# include <xen/api/xen_all.h> # include <xen/api/xen_all.h>
# include "internal.h" # include "internal.h"
# include "viruri.h"
# include "domain_conf.h" # include "domain_conf.h"
# define NETWORK_DEVID_SIZE (12) # define NETWORK_DEVID_SIZE (12)
...@@ -40,7 +40,7 @@ xenapiUtil_RequestPassword(virConnectAuthPtr auth, const char *username, ...@@ -40,7 +40,7 @@ xenapiUtil_RequestPassword(virConnectAuthPtr auth, const char *username,
const char *hostname); const char *hostname);
int int
xenapiUtil_ParseQuery(virConnectPtr conn, xmlURIPtr uri, int *noVerify); xenapiUtil_ParseQuery(virConnectPtr conn, virURIPtr uri, int *noVerify);
enum xen_on_normal_exit enum xen_on_normal_exit
actionShutdownLibvirt2XenapiEnum(enum virDomainLifecycleAction action); actionShutdownLibvirt2XenapiEnum(enum virDomainLifecycleAction action);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册