]> xenbits.xensource.com Git - libvirt.git/commitdiff
snapshot: make it possible to audit external snapshot
authorEric Blake <eblake@redhat.com>
Mon, 22 Aug 2011 19:49:10 +0000 (13:49 -0600)
committerEric Blake <eblake@redhat.com>
Mon, 5 Sep 2011 13:03:05 +0000 (07:03 -0600)
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.

src/conf/domain_audit.c
src/conf/domain_audit.h
src/qemu/qemu_hotplug.c

index ef0f47ab8b72d8065798b08bd9b237ff5549927e..3d079bd8406fbca42d150b66bfaa9b771f7e516b 100644 (file)
@@ -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++) {
index 9ea9d6dd2e9cb0dd2a7d94a9502b9ca59a7c7cd9..eaa26d0d052619f8677377c779fbc746c143a375 100644 (file)
@@ -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);
index 6ae834c0b0699be06f0a5c46736df0a8aa82fcae..ebea50f8edb8d7f0d230e0a9dee221f0f9def091 100644 (file)
@@ -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);