mirror of https://gitee.com/openkylin/libvirt.git
snapshot: make it possible to audit external snapshot
Snapshots alter the set of disk image files opened by qemu, so they must be audited. But they don't involve a full disk definition structure, just the new filename. Make the next patch easier by refactoring the audit routines to just operate on file name. * src/conf/domain_audit.h (virDomainAuditDisk): Update prototype. * src/conf/domain_audit.c (virDomainAuditDisk): Act on strings, not definition structures. (virDomainAuditStart): Update caller. * src/qemu/qemu_hotplug.c (qemuDomainChangeEjectableMedia) (qemuDomainAttachPciDiskDevice, qemuDomainAttachSCSIDisk) (qemuDomainAttachUsbMassstorageDevice) (qemuDomainDetachPciDiskDevice, qemuDomainDetachDiskDevice): Likewise.
This commit is contained in:
parent
7807e05d43
commit
c111517a88
|
@ -60,7 +60,7 @@ virDomainAuditGetRdev(const char *path ATTRIBUTE_UNUSED)
|
|||
|
||||
void
|
||||
virDomainAuditDisk(virDomainObjPtr vm,
|
||||
virDomainDiskDefPtr oldDef, virDomainDiskDefPtr newDef,
|
||||
const char *oldDef, const char *newDef,
|
||||
const char *reason, bool success)
|
||||
{
|
||||
char uuidstr[VIR_UUID_STRING_BUFLEN];
|
||||
|
@ -80,15 +80,11 @@ virDomainAuditDisk(virDomainObjPtr vm,
|
|||
virt = "?";
|
||||
}
|
||||
|
||||
if (!(oldsrc = virAuditEncode("old-disk",
|
||||
oldDef && oldDef->src ?
|
||||
oldDef->src : "?"))) {
|
||||
if (!(oldsrc = virAuditEncode("old-disk", VIR_AUDIT_STR(oldDef)))) {
|
||||
VIR_WARN("OOM while encoding audit message");
|
||||
goto cleanup;
|
||||
}
|
||||
if (!(newsrc = virAuditEncode("new-disk",
|
||||
newDef && newDef->src ?
|
||||
newDef->src : "?"))) {
|
||||
if (!(newsrc = virAuditEncode("new-disk", VIR_AUDIT_STR(newDef)))) {
|
||||
VIR_WARN("OOM while encoding audit message");
|
||||
goto cleanup;
|
||||
}
|
||||
|
@ -580,7 +576,7 @@ virDomainAuditStart(virDomainObjPtr vm, const char *reason, bool success)
|
|||
for (i = 0 ; i < vm->def->ndisks ; i++) {
|
||||
virDomainDiskDefPtr disk = vm->def->disks[i];
|
||||
if (disk->src) /* Skips CDROM without media initially inserted */
|
||||
virDomainAuditDisk(vm, NULL, disk, "start", true);
|
||||
virDomainAuditDisk(vm, NULL, disk->src, "start", true);
|
||||
}
|
||||
|
||||
for (i = 0 ; i < vm->def->nfss ; i++) {
|
||||
|
|
|
@ -35,8 +35,8 @@ void virDomainAuditStop(virDomainObjPtr vm,
|
|||
const char *reason)
|
||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
|
||||
void virDomainAuditDisk(virDomainObjPtr vm,
|
||||
virDomainDiskDefPtr oldDef,
|
||||
virDomainDiskDefPtr newDef,
|
||||
const char *oldDef,
|
||||
const char *newDef,
|
||||
const char *reason,
|
||||
bool success)
|
||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(4);
|
||||
|
|
|
@ -114,7 +114,7 @@ int qemuDomainChangeEjectableMedia(struct qemud_driver *driver,
|
|||
}
|
||||
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
||||
|
||||
virDomainAuditDisk(vm, origdisk, disk, "update", ret >= 0);
|
||||
virDomainAuditDisk(vm, origdisk->src, disk->src, "update", ret >= 0);
|
||||
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
|
@ -224,7 +224,7 @@ int qemuDomainAttachPciDiskDevice(struct qemud_driver *driver,
|
|||
}
|
||||
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
||||
|
||||
virDomainAuditDisk(vm, NULL, disk, "attach", ret >= 0);
|
||||
virDomainAuditDisk(vm, NULL, disk->src, "attach", ret >= 0);
|
||||
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
|
@ -476,7 +476,7 @@ int qemuDomainAttachSCSIDisk(struct qemud_driver *driver,
|
|||
}
|
||||
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
||||
|
||||
virDomainAuditDisk(vm, NULL, disk, "attach", ret >= 0);
|
||||
virDomainAuditDisk(vm, NULL, disk->src, "attach", ret >= 0);
|
||||
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
|
@ -568,7 +568,7 @@ int qemuDomainAttachUsbMassstorageDevice(struct qemud_driver *driver,
|
|||
}
|
||||
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
||||
|
||||
virDomainAuditDisk(vm, NULL, disk, "attach", ret >= 0);
|
||||
virDomainAuditDisk(vm, NULL, disk->src, "attach", ret >= 0);
|
||||
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
|
@ -1328,14 +1328,14 @@ int qemuDomainDetachPciDiskDevice(struct qemud_driver *driver,
|
|||
if (qemuCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) {
|
||||
if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) {
|
||||
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
||||
virDomainAuditDisk(vm, detach, NULL, "detach", false);
|
||||
virDomainAuditDisk(vm, detach->src, NULL, "detach", false);
|
||||
goto cleanup;
|
||||
}
|
||||
} else {
|
||||
if (qemuMonitorRemovePCIDevice(priv->mon,
|
||||
&detach->info.addr.pci) < 0) {
|
||||
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
||||
virDomainAuditDisk(vm, detach, NULL, "detach", false);
|
||||
virDomainAuditDisk(vm, detach->src, NULL, "detach", false);
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
@ -1345,7 +1345,7 @@ int qemuDomainDetachPciDiskDevice(struct qemud_driver *driver,
|
|||
|
||||
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
||||
|
||||
virDomainAuditDisk(vm, detach, NULL, "detach", true);
|
||||
virDomainAuditDisk(vm, detach->src, NULL, "detach", true);
|
||||
|
||||
if (qemuCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE) &&
|
||||
qemuDomainPCIAddressReleaseSlot(priv->pciaddrs,
|
||||
|
@ -1423,7 +1423,7 @@ int qemuDomainDetachDiskDevice(struct qemud_driver *driver,
|
|||
qemuDomainObjEnterMonitorWithDriver(driver, vm);
|
||||
if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) {
|
||||
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
||||
virDomainAuditDisk(vm, detach, NULL, "detach", false);
|
||||
virDomainAuditDisk(vm, detach->src, NULL, "detach", false);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
|
@ -1432,7 +1432,7 @@ int qemuDomainDetachDiskDevice(struct qemud_driver *driver,
|
|||
|
||||
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
||||
|
||||
virDomainAuditDisk(vm, detach, NULL, "detach", true);
|
||||
virDomainAuditDisk(vm, detach->src, NULL, "detach", true);
|
||||
|
||||
virDomainDiskRemove(vm->def, i);
|
||||
|
||||
|
|
Loading…
Reference in New Issue