From: Guannan Ren Date: Tue, 31 Jul 2012 08:56:41 +0000 (+0800) Subject: storage: netfs and iscsi need option srcSpec for resource discovery X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=4057048891dc853da7793e7978e8c9c38a13934a;p=libvirt.git storage: netfs and iscsi need option srcSpec for resource discovery The option 'srcSpec' to virsh command find-storage-pool-sources is optional for logical type of storage pool, but mandatory for netfs and iscsi type. When missing the option for netfs and iscsi, libvirt reports XML parsing error due to null string option srcSpec. before error: Failed to find any netfs pool sources error: (storage_source_specification):1: Document is empty (null) after: error: pool type 'iscsi' requires option --srcSpec for source discovery --- diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c index 9ac27b2e07..9354cb4d12 100644 --- a/src/remote/remote_driver.c +++ b/src/remote/remote_driver.c @@ -2648,23 +2648,11 @@ remoteFindStoragePoolSources (virConnectPtr conn, remote_find_storage_pool_sources_args args; remote_find_storage_pool_sources_ret ret; struct private_data *priv = conn->storagePrivateData; - const char *emptyString = ""; remoteDriverLock(priv); args.type = (char*)type; - /* - * I'd think the following would work here: - * args.srcSpec = (char**)&srcSpec; - * since srcSpec is a remote_string (not a remote_nonnull_string). - * - * But when srcSpec is NULL, this yields: - * libvir: Remote error : marshaling args - * - * So for now I'm working around this by turning NULL srcSpecs - * into empty strings. - */ - args.srcSpec = srcSpec ? (char **)&srcSpec : (char **)&emptyString; + args.srcSpec = srcSpec ? (char **)&srcSpec : NULL; args.flags = flags; memset (&ret, 0, sizeof(ret)); diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c index 01b517ae2d..92a322810d 100644 --- a/src/storage/storage_backend_fs.c +++ b/src/storage/storage_backend_fs.c @@ -258,10 +258,15 @@ virStorageBackendFileSystemNetFindPoolSources(virConnectPtr conn ATTRIBUTE_UNUSE virCheckFlags(0, NULL); - source = virStoragePoolDefParseSourceString(srcSpec, - VIR_STORAGE_POOL_NETFS); - if (!source) - goto cleanup; + if (!srcSpec) { + virReportError(VIR_ERR_INVALID_ARG, + "%s", _("hostname must be specified for netfs sources")); + return NULL; + } + + if (!(source = virStoragePoolDefParseSourceString(srcSpec, + VIR_STORAGE_POOL_NETFS))) + return NULL; if (source->nhost != 1) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", diff --git a/src/storage/storage_backend_iscsi.c b/src/storage/storage_backend_iscsi.c index b2f0c6c91b..75c2e52da1 100644 --- a/src/storage/storage_backend_iscsi.c +++ b/src/storage/storage_backend_iscsi.c @@ -582,6 +582,13 @@ virStorageBackendISCSIFindPoolSources(virConnectPtr conn ATTRIBUTE_UNUSED, virCheckFlags(0, NULL); + if (!srcSpec) { + virReportError(VIR_ERR_INVALID_ARG, + "%s", _("hostname and device path " + "must be specified for iscsi sources")); + return NULL; + } + if (!(source = virStoragePoolDefParseSourceString(srcSpec, list.type))) return NULL;