mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 11:22:23 +00:00
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
|
void
|
||||||
virDomainAuditDisk(virDomainObjPtr vm,
|
virDomainAuditDisk(virDomainObjPtr vm,
|
||||||
virDomainDiskDefPtr oldDef, virDomainDiskDefPtr newDef,
|
const char *oldDef, const char *newDef,
|
||||||
const char *reason, bool success)
|
const char *reason, bool success)
|
||||||
{
|
{
|
||||||
char uuidstr[VIR_UUID_STRING_BUFLEN];
|
char uuidstr[VIR_UUID_STRING_BUFLEN];
|
||||||
@ -80,15 +80,11 @@ virDomainAuditDisk(virDomainObjPtr vm,
|
|||||||
virt = "?";
|
virt = "?";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(oldsrc = virAuditEncode("old-disk",
|
if (!(oldsrc = virAuditEncode("old-disk", VIR_AUDIT_STR(oldDef)))) {
|
||||||
oldDef && oldDef->src ?
|
|
||||||
oldDef->src : "?"))) {
|
|
||||||
VIR_WARN("OOM while encoding audit message");
|
VIR_WARN("OOM while encoding audit message");
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
if (!(newsrc = virAuditEncode("new-disk",
|
if (!(newsrc = virAuditEncode("new-disk", VIR_AUDIT_STR(newDef)))) {
|
||||||
newDef && newDef->src ?
|
|
||||||
newDef->src : "?"))) {
|
|
||||||
VIR_WARN("OOM while encoding audit message");
|
VIR_WARN("OOM while encoding audit message");
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
@ -580,7 +576,7 @@ virDomainAuditStart(virDomainObjPtr vm, const char *reason, bool success)
|
|||||||
for (i = 0 ; i < vm->def->ndisks ; i++) {
|
for (i = 0 ; i < vm->def->ndisks ; i++) {
|
||||||
virDomainDiskDefPtr disk = vm->def->disks[i];
|
virDomainDiskDefPtr disk = vm->def->disks[i];
|
||||||
if (disk->src) /* Skips CDROM without media initially inserted */
|
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++) {
|
for (i = 0 ; i < vm->def->nfss ; i++) {
|
||||||
|
@ -35,8 +35,8 @@ void virDomainAuditStop(virDomainObjPtr vm,
|
|||||||
const char *reason)
|
const char *reason)
|
||||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
|
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
|
||||||
void virDomainAuditDisk(virDomainObjPtr vm,
|
void virDomainAuditDisk(virDomainObjPtr vm,
|
||||||
virDomainDiskDefPtr oldDef,
|
const char *oldDef,
|
||||||
virDomainDiskDefPtr newDef,
|
const char *newDef,
|
||||||
const char *reason,
|
const char *reason,
|
||||||
bool success)
|
bool success)
|
||||||
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(4);
|
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(4);
|
||||||
|
@ -114,7 +114,7 @@ int qemuDomainChangeEjectableMedia(struct qemud_driver *driver,
|
|||||||
}
|
}
|
||||||
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
||||||
|
|
||||||
virDomainAuditDisk(vm, origdisk, disk, "update", ret >= 0);
|
virDomainAuditDisk(vm, origdisk->src, disk->src, "update", ret >= 0);
|
||||||
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto error;
|
goto error;
|
||||||
@ -224,7 +224,7 @@ int qemuDomainAttachPciDiskDevice(struct qemud_driver *driver,
|
|||||||
}
|
}
|
||||||
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
||||||
|
|
||||||
virDomainAuditDisk(vm, NULL, disk, "attach", ret >= 0);
|
virDomainAuditDisk(vm, NULL, disk->src, "attach", ret >= 0);
|
||||||
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto error;
|
goto error;
|
||||||
@ -476,7 +476,7 @@ int qemuDomainAttachSCSIDisk(struct qemud_driver *driver,
|
|||||||
}
|
}
|
||||||
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
||||||
|
|
||||||
virDomainAuditDisk(vm, NULL, disk, "attach", ret >= 0);
|
virDomainAuditDisk(vm, NULL, disk->src, "attach", ret >= 0);
|
||||||
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto error;
|
goto error;
|
||||||
@ -568,7 +568,7 @@ int qemuDomainAttachUsbMassstorageDevice(struct qemud_driver *driver,
|
|||||||
}
|
}
|
||||||
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
||||||
|
|
||||||
virDomainAuditDisk(vm, NULL, disk, "attach", ret >= 0);
|
virDomainAuditDisk(vm, NULL, disk->src, "attach", ret >= 0);
|
||||||
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto error;
|
goto error;
|
||||||
@ -1328,14 +1328,14 @@ int qemuDomainDetachPciDiskDevice(struct qemud_driver *driver,
|
|||||||
if (qemuCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) {
|
if (qemuCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) {
|
||||||
if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) {
|
if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) {
|
||||||
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
||||||
virDomainAuditDisk(vm, detach, NULL, "detach", false);
|
virDomainAuditDisk(vm, detach->src, NULL, "detach", false);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (qemuMonitorRemovePCIDevice(priv->mon,
|
if (qemuMonitorRemovePCIDevice(priv->mon,
|
||||||
&detach->info.addr.pci) < 0) {
|
&detach->info.addr.pci) < 0) {
|
||||||
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
||||||
virDomainAuditDisk(vm, detach, NULL, "detach", false);
|
virDomainAuditDisk(vm, detach->src, NULL, "detach", false);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1345,7 +1345,7 @@ int qemuDomainDetachPciDiskDevice(struct qemud_driver *driver,
|
|||||||
|
|
||||||
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
||||||
|
|
||||||
virDomainAuditDisk(vm, detach, NULL, "detach", true);
|
virDomainAuditDisk(vm, detach->src, NULL, "detach", true);
|
||||||
|
|
||||||
if (qemuCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE) &&
|
if (qemuCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE) &&
|
||||||
qemuDomainPCIAddressReleaseSlot(priv->pciaddrs,
|
qemuDomainPCIAddressReleaseSlot(priv->pciaddrs,
|
||||||
@ -1423,7 +1423,7 @@ int qemuDomainDetachDiskDevice(struct qemud_driver *driver,
|
|||||||
qemuDomainObjEnterMonitorWithDriver(driver, vm);
|
qemuDomainObjEnterMonitorWithDriver(driver, vm);
|
||||||
if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) {
|
if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) {
|
||||||
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
||||||
virDomainAuditDisk(vm, detach, NULL, "detach", false);
|
virDomainAuditDisk(vm, detach->src, NULL, "detach", false);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1432,7 +1432,7 @@ int qemuDomainDetachDiskDevice(struct qemud_driver *driver,
|
|||||||
|
|
||||||
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
||||||
|
|
||||||
virDomainAuditDisk(vm, detach, NULL, "detach", true);
|
virDomainAuditDisk(vm, detach->src, NULL, "detach", true);
|
||||||
|
|
||||||
virDomainDiskRemove(vm->def, i);
|
virDomainDiskRemove(vm->def, i);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user