]> xenbits.xensource.com Git - libvirt.git/commitdiff
storage: Fix path check in storagePoolLookupByTargetPath
authorJohn Ferlan <jferlan@redhat.com>
Fri, 24 Nov 2017 13:17:02 +0000 (08:17 -0500)
committerJohn Ferlan <jferlan@redhat.com>
Wed, 13 Dec 2017 19:51:30 +0000 (14:51 -0500)
Commit id '5ab746b8' introduced the function as perhaps a copy
of storageVolLookupByPath; however, it did not use the @cleanpath
variable even though it used the virFileSanitizePath. So in essance
the only "check" being done for failure is whether it was possible
to strdup the path.

Looking at the virStoragePoolDefParseXML one will note that the
target.path is stored using the result of virFileSanitizePath.
Therefore, this function should sanitize and use the input @path
for the argument to storagePoolLookupByTargetPathCallback which
is comparing against stored target.path values.

Additionally, if there was an error we should use the proper error
of VIR_ERR_NO_STORAGE_POOL (instead of VIR_ERR_NO_STORAGE_VOL).

src/storage/storage_driver.c

index 561ca36f908dc707616bc16cd13038675abbd60e..699a382817ec18ea0e6ba33a06906c59f1258b0b 100644 (file)
@@ -1667,7 +1667,7 @@ storagePoolLookupByTargetPath(virConnectPtr conn,
     storageDriverLock();
     if ((obj = virStoragePoolObjListSearch(&driver->pools,
                                            storagePoolLookupByTargetPathCallback,
-                                           path))) {
+                                           cleanpath))) {
         def = virStoragePoolObjGetDef(obj);
         pool = virGetStoragePool(conn, def->name, def->uuid, NULL, NULL);
         virStoragePoolObjEndAPI(&obj);
@@ -1675,9 +1675,15 @@ storagePoolLookupByTargetPath(virConnectPtr conn,
     storageDriverUnlock();
 
     if (!pool) {
-        virReportError(VIR_ERR_NO_STORAGE_VOL,
-                       _("no storage pool with matching target path '%s'"),
-                       path);
+        if (STREQ(path, cleanpath)) {
+            virReportError(VIR_ERR_NO_STORAGE_POOL,
+                           _("no storage pool with matching target path '%s'"),
+                           path);
+        } else {
+            virReportError(VIR_ERR_NO_STORAGE_POOL,
+                           _("no storage pool with matching target path '%s' (%s)"),
+                           path, cleanpath);
+        }
     }
 
     VIR_FREE(cleanpath);