提交 6ef0b034 编写于 作者: P Peter Krempa

virsh: Check whether found volume is member of the specified storage pool

When looking up storage volumes virsh uses multiple lookup steps. Some
of the steps don't require a pool name specified. This resulted into a
possibility that a volume would be part of a different pool than the
user specified:

Let's have a /var/lib/libvirt/images/test.qcow image in the 'default'
pool and a second pool 'emptypool':

Currently we'd return:
  $ virsh vol-info --pool emptypool /var/lib/libvirt/images/test.qcow
  Name:           test.qcow
  Type:           file
  Capacity:       100.00 MiB
  Allocation:     212.00 KiB

After the fix:
 $ tools/virsh vol-info --pool emptypool /var/lib/libvirt/images/test.qcow
 error: Requested volume '/var/lib/libvirt/images/test.qcow' is not in pool 'emptypool'

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1088667
上级 359d9941
......@@ -104,6 +104,25 @@ vshCommandOptVolBy(vshControl *ctl, const vshCmd *cmd,
"might help"), n, pooloptname);
}
/* If the pool was specified, then make sure that the returned
* volume is from the given pool */
if (pool && vol) {
virStoragePoolPtr volpool = NULL;
if ((volpool = virStoragePoolLookupByVolume(vol))) {
if (STRNEQ(virStoragePoolGetName(volpool),
virStoragePoolGetName(pool))) {
vshResetLibvirtError();
vshError(ctl,
_("Requested volume '%s' is not in pool '%s'"),
n, virStoragePoolGetName(pool));
virStorageVolFree(vol);
vol = NULL;
}
virStoragePoolFree(volpool);
}
}
if (pool)
virStoragePoolFree(pool);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册