]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
audit: disk: Refactor disk auditing to avoid auditing remote storage
authorPeter Krempa <pkrempa@redhat.com>
Thu, 3 Jul 2014 08:28:12 +0000 (10:28 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 4 Jul 2014 09:17:54 +0000 (11:17 +0200)
Pass the virStorageSource struct to the auditing function and check if
storage is local before auditing.

src/conf/domain_audit.c
src/conf/domain_audit.h
src/lxc/lxc_driver.c
src/qemu/qemu_driver.c
src/qemu/qemu_hotplug.c

index 2326791bb4f92c05ac54d35fff90c3d997af8ba2..6e11f3914671d16be43cf7050a449107eb919409 100644 (file)
@@ -156,10 +156,21 @@ virDomainAuditGenericDev(virDomainObjPtr vm,
 
 void
 virDomainAuditDisk(virDomainObjPtr vm,
-                   const char *oldDef, const char *newDef,
-                   const char *reason, bool success)
+                   virStorageSourcePtr oldDef,
+                   virStorageSourcePtr newDef,
+                   const char *reason,
+                   bool success)
 {
-    virDomainAuditGenericDev(vm, "disk", oldDef, newDef, reason, success);
+    const char *oldsrc = NULL;
+    const char *newsrc = NULL;
+
+    if (oldDef && virStorageSourceIsLocalStorage(oldDef))
+        oldsrc = oldDef->path;
+
+    if (newDef && virStorageSourceIsLocalStorage(newDef))
+        newsrc = newDef->path;
+
+    virDomainAuditGenericDev(vm, "disk", oldsrc, newsrc, reason, success);
 }
 
 
@@ -738,12 +749,8 @@ virDomainAuditStart(virDomainObjPtr vm, const char *reason, bool success)
 {
     size_t i;
 
-    for (i = 0; i < vm->def->ndisks; i++) {
-        const char *src = virDomainDiskGetSource(vm->def->disks[i]);
-
-        if (src) /* Skips CDROM without media initially inserted */
-            virDomainAuditDisk(vm, NULL, src, "start", true);
-    }
+    for (i = 0; i < vm->def->ndisks; i++)
+        virDomainAuditDisk(vm, NULL, vm->def->disks[i]->src, "start", true);
 
     for (i = 0; i < vm->def->nfss; i++) {
         virDomainFSDefPtr fs = vm->def->fss[i];
index 70b09e5aa9d725ddbd024f2d8b087015efaa27c1..58d25a494c8ad91737e153bf24b0a51ba8f2fadb 100644 (file)
@@ -39,8 +39,8 @@ void virDomainAuditStop(virDomainObjPtr vm,
                         const char *reason)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
 void virDomainAuditDisk(virDomainObjPtr vm,
-                        const char *oldDef,
-                        const char *newDef,
+                        virStorageSourcePtr oldDef,
+                        virStorageSourcePtr newDef,
                         const char *reason,
                         bool success)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(4);
index 79c3b4a4b109ff280a3711326d7e10a0e449160e..fce16f2d04ab61e5ac97648fd42c9d703e9364db 100644 (file)
@@ -4099,7 +4099,7 @@ lxcDomainAttachDeviceDiskLive(virLXCDriverPtr driver,
 
  cleanup:
     if (src)
-        virDomainAuditDisk(vm, NULL, src, "attach", ret == 0);
+        virDomainAuditDisk(vm, NULL, def->src, "attach", ret == 0);
     VIR_FREE(file);
     return ret;
 }
@@ -4587,10 +4587,10 @@ lxcDomainDetachDeviceDiskLive(virDomainObjPtr vm,
     }
 
     if (lxcDomainAttachDeviceUnlink(vm, dst) < 0) {
-        virDomainAuditDisk(vm, src, NULL, "detach", false);
+        virDomainAuditDisk(vm, def->src, NULL, "detach", false);
         goto cleanup;
     }
-    virDomainAuditDisk(vm, src, NULL, "detach", true);
+    virDomainAuditDisk(vm, def->src, NULL, "detach", true);
 
     if (virCgroupDenyDevicePath(priv->cgroup, src, VIR_CGROUP_DEVICE_RWM) != 0)
         VIR_WARN("cannot deny device %s for domain %s",
index 112a9bf0cc2888cd23c1d191cd04a2c94113a603..fcb318808d64381e99ed2b58a31955bdbb028766 100644 (file)
@@ -12947,7 +12947,7 @@ qemuDomainSnapshotCreateSingleDiskActive(virQEMUDriverPtr driver,
         }
     }
 
-    virDomainAuditDisk(vm, disk->src->path, source, "snapshot", ret >= 0);
+    virDomainAuditDisk(vm, disk->src, snap->src, "snapshot", ret >= 0);
     if (ret < 0)
         goto cleanup;
 
@@ -15378,7 +15378,7 @@ qemuDomainBlockCopy(virDomainObjPtr vm,
     qemuDomainObjEnterMonitor(driver, vm);
     ret = qemuMonitorDriveMirror(priv->mon, device, dest, format, bandwidth,
                                  flags);
-    virDomainAuditDisk(vm, NULL, dest, "mirror", ret >= 0);
+    virDomainAuditDisk(vm, NULL, mirror, "mirror", ret >= 0);
     qemuDomainObjExitMonitor(driver, vm);
     if (ret < 0) {
         qemuDomainPrepareDiskChainElementPath(driver, vm, disk, dest,
index 3060dbcad1fcfd3497849fcba63db9be65532318..b6033df065a2cae7dbba6d970e27ee4e671263a9 100644 (file)
@@ -154,9 +154,7 @@ int qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver,
         qemuDomainObjExitMonitor(driver, vm);
     }
  audit:
-    if (src)
-        virDomainAuditDisk(vm, virDomainDiskGetSource(origdisk),
-                           src, "update", ret >= 0);
+    virDomainAuditDisk(vm, origdisk->src, disk->src, "update", ret >= 0);
 
     if (ret < 0)
         goto error;
@@ -330,7 +328,7 @@ qemuDomainAttachVirtioDiskDevice(virConnectPtr conn,
     }
     qemuDomainObjExitMonitor(driver, vm);
 
-    virDomainAuditDisk(vm, NULL, src, "attach", ret >= 0);
+    virDomainAuditDisk(vm, NULL, disk->src, "attach", ret >= 0);
 
     if (ret < 0)
         goto error;
@@ -583,7 +581,7 @@ qemuDomainAttachSCSIDisk(virConnectPtr conn,
     }
     qemuDomainObjExitMonitor(driver, vm);
 
-    virDomainAuditDisk(vm, NULL, src, "attach", ret >= 0);
+    virDomainAuditDisk(vm, NULL, disk->src, "attach", ret >= 0);
 
     if (ret < 0)
         goto error;
@@ -677,7 +675,7 @@ qemuDomainAttachUSBMassstorageDevice(virConnectPtr conn,
     }
     qemuDomainObjExitMonitor(driver, vm);
 
-    virDomainAuditDisk(vm, NULL, src, "attach", ret >= 0);
+    virDomainAuditDisk(vm, NULL, disk->src, "attach", ret >= 0);
 
     if (ret < 0)
         goto error;
@@ -2487,7 +2485,7 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver,
     qemuDomainObjExitMonitor(driver, vm);
     VIR_FREE(drivestr);
 
-    virDomainAuditDisk(vm, src, NULL, "detach", true);
+    virDomainAuditDisk(vm, disk->src, NULL, "detach", true);
 
     event = virDomainEventDeviceRemovedNewFromObj(vm, disk->info.alias);
     if (event)
@@ -2940,16 +2938,14 @@ qemuDomainDetachVirtioDiskDevice(virQEMUDriverPtr driver,
     if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DEVICE)) {
         if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) {
             qemuDomainObjExitMonitor(driver, vm);
-            virDomainAuditDisk(vm, virDomainDiskGetSource(detach),
-                               NULL, "detach", false);
+            virDomainAuditDisk(vm, detach->src, NULL, "detach", false);
             goto cleanup;
         }
     } else {
         if (qemuMonitorRemovePCIDevice(priv->mon,
                                        &detach->info.addr.pci) < 0) {
             qemuDomainObjExitMonitor(driver, vm);
-            virDomainAuditDisk(vm, virDomainDiskGetSource(detach),
-                               NULL, "detach", false);
+            virDomainAuditDisk(vm, detach->src, NULL, "detach", false);
             goto cleanup;
         }
     }
@@ -2994,8 +2990,7 @@ qemuDomainDetachDiskDevice(virQEMUDriverPtr driver,
     qemuDomainObjEnterMonitor(driver, vm);
     if (qemuMonitorDelDevice(priv->mon, detach->info.alias) < 0) {
         qemuDomainObjExitMonitor(driver, vm);
-        virDomainAuditDisk(vm, virDomainDiskGetSource(detach),
-                           NULL, "detach", false);
+        virDomainAuditDisk(vm, detach->src, NULL, "detach", false);
         goto cleanup;
     }
     qemuDomainObjExitMonitor(driver, vm);