[libvirt] [PATCH 3/6] Add virtualization type in audit messages

Daniel P. Berrange berrange at redhat.com
Mon Jul 4 11:33:34 UTC 2011


Since a host can run several different virtualization types at
the same time, audit messages should allow domains to be identified.
Add a 'virt={qemu,kvm,uml,lxc,...}' key to domain audit messages

* src/conf/domain_audit.c: Identify virt type of guest
---
 src/conf/domain_audit.c |   89 ++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 72 insertions(+), 17 deletions(-)

diff --git a/src/conf/domain_audit.c b/src/conf/domain_audit.c
index 20f6ddc..9b7ced7 100644
--- a/src/conf/domain_audit.c
+++ b/src/conf/domain_audit.c
@@ -67,6 +67,7 @@ virDomainAuditDisk(virDomainObjPtr vm,
     char *vmname;
     char *oldsrc = NULL;
     char *newsrc = NULL;
+    const char *virt;
 
     virUUIDFormat(vm->def->uuid, uuidstr);
     if (!(vmname = virAuditEncode("vm", vm->def->name))) {
@@ -74,6 +75,11 @@ virDomainAuditDisk(virDomainObjPtr vm,
         return;
     }
 
+    if (!(virt = virDomainVirtTypeToString(vm->def->virtType))) {
+        VIR_WARN("Unexpected virt type %d while encoding audit message", vm->def->virtType);
+        virt = "?";
+    }
+
     if (!(oldsrc = virAuditEncode("old-disk",
                                   oldDef && oldDef->src ?
                                   oldDef->src : "?"))) {
@@ -88,8 +94,8 @@ virDomainAuditDisk(virDomainObjPtr vm,
     }
 
     VIR_AUDIT(VIR_AUDIT_RECORD_RESOURCE, success,
-              "resrc=disk reason=%s %s uuid=%s %s %s",
-              reason, vmname, uuidstr,
+              "virt=%s resrc=disk reason=%s %s uuid=%s %s %s",
+              virt, reason, vmname, uuidstr,
               oldsrc, newsrc);
 
 cleanup:
@@ -108,6 +114,7 @@ virDomainAuditFS(virDomainObjPtr vm,
     char *vmname;
     char *oldsrc = NULL;
     char *newsrc = NULL;
+    const char *virt;
 
     virUUIDFormat(vm->def->uuid, uuidstr);
     if (!(vmname = virAuditEncode("vm", vm->def->name))) {
@@ -115,6 +122,11 @@ virDomainAuditFS(virDomainObjPtr vm,
         return;
     }
 
+    if (!(virt = virDomainVirtTypeToString(vm->def->virtType))) {
+        VIR_WARN("Unexpected virt type %d while encoding audit message", vm->def->virtType);
+        virt = "?";
+    }
+
     if (!(oldsrc = virAuditEncode("old-fs",
                                   oldDef && oldDef->src ?
                                   oldDef->src : "?"))) {
@@ -129,8 +141,8 @@ virDomainAuditFS(virDomainObjPtr vm,
     }
 
     VIR_AUDIT(VIR_AUDIT_RECORD_RESOURCE, success,
-              "resrc=fs reason=%s %s uuid=%s %s %s",
-              reason, vmname, uuidstr,
+              "virt=%s resrc=fs reason=%s %s uuid=%s %s %s",
+              virt, reason, vmname, uuidstr,
               oldsrc, newsrc);
 
 cleanup:
@@ -149,6 +161,7 @@ virDomainAuditNet(virDomainObjPtr vm,
     char newMacstr[VIR_MAC_STRING_BUFLEN];
     char oldMacstr[VIR_MAC_STRING_BUFLEN];
     char *vmname;
+    const char *virt;
 
     virUUIDFormat(vm->def->uuid, uuidstr);
     if (oldDef)
@@ -160,9 +173,14 @@ virDomainAuditNet(virDomainObjPtr vm,
         return;
     }
 
+    if (!(virt = virDomainVirtTypeToString(vm->def->virtType))) {
+        VIR_WARN("Unexpected virt type %d while encoding audit message", vm->def->virtType);
+        virt = "?";
+    }
+
     VIR_AUDIT(VIR_AUDIT_RECORD_RESOURCE, success,
-              "resrc=net reason=%s %s uuid=%s old-net='%s' new-net='%s'",
-              reason, vmname, uuidstr,
+              "virt=%s resrc=net reason=%s %s uuid=%s old-net='%s' new-net='%s'",
+              virt, reason, vmname, uuidstr,
               oldDef ? oldMacstr : "?",
               newDef ? newMacstr : "?");
 
@@ -190,6 +208,7 @@ virDomainAuditNetDevice(virDomainDefPtr vmDef, virDomainNetDefPtr netDef,
     char *vmname;
     char *devname;
     char *rdev;
+    const char *virt;
 
     virUUIDFormat(vmDef->uuid, uuidstr);
     virFormatMacAddr(netDef->mac, macstr);
@@ -201,9 +220,14 @@ virDomainAuditNetDevice(virDomainDefPtr vmDef, virDomainNetDefPtr netDef,
         goto cleanup;
     }
 
+    if (!(virt = virDomainVirtTypeToString(vmDef->virtType))) {
+        VIR_WARN("Unexpected virt type %d while encoding audit message", vmDef->virtType);
+        virt = "?";
+    }
+
     VIR_AUDIT(VIR_AUDIT_RECORD_RESOURCE, success,
-              "resrc=net reason=open %s uuid=%s net='%s' %s rdev=%s",
-              vmname, uuidstr, macstr, devname, VIR_AUDIT_STR(rdev));
+              "virt=%s resrc=net reason=open %s uuid=%s net='%s' %s rdev=%s",
+              virt, vmname, uuidstr, macstr, devname, VIR_AUDIT_STR(rdev));
 
 cleanup:
     VIR_FREE(vmname);
@@ -228,6 +252,7 @@ virDomainAuditHostdev(virDomainObjPtr vm, virDomainHostdevDefPtr hostdev,
     char *vmname;
     char *address;
     char *device;
+    const char *virt;
 
     virUUIDFormat(vm->def->uuid, uuidstr);
     if (!(vmname = virAuditEncode("vm", vm->def->name))) {
@@ -235,6 +260,11 @@ virDomainAuditHostdev(virDomainObjPtr vm, virDomainHostdevDefPtr hostdev,
         return;
     }
 
+    if (!(virt = virDomainVirtTypeToString(vm->def->virtType))) {
+        VIR_WARN("Unexpected virt type %d while encoding audit message", vm->def->virtType);
+        virt = "?";
+    }
+
     switch (hostdev->source.subsys.type) {
     case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI:
         if (virAsprintf(&address, "%.4x:%.2x:%.2x.%.1x",
@@ -266,8 +296,8 @@ virDomainAuditHostdev(virDomainObjPtr vm, virDomainHostdevDefPtr hostdev,
     }
 
     VIR_AUDIT(VIR_AUDIT_RECORD_RESOURCE, success,
-              "resrc=dev reason=%s %s uuid=%s bus=%s %s",
-              reason, vmname, uuidstr,
+              "virt=%s resrc=dev reason=%s %s uuid=%s bus=%s %s",
+              virt, reason, vmname, uuidstr,
               virDomainHostdevSubsysTypeToString(hostdev->source.subsys.type),
               device);
 
@@ -299,6 +329,7 @@ virDomainAuditCgroup(virDomainObjPtr vm, virCgroupPtr cgroup,
     char *vmname;
     char *controller = NULL;
     char *detail;
+    const char *virt;
 
     virUUIDFormat(vm->def->uuid, uuidstr);
     if (!(vmname = virAuditEncode("vm", vm->def->name))) {
@@ -306,14 +337,19 @@ virDomainAuditCgroup(virDomainObjPtr vm, virCgroupPtr cgroup,
         return;
     }
 
+    if (!(virt = virDomainVirtTypeToString(vm->def->virtType))) {
+        VIR_WARN("Unexpected virt type %d while encoding audit message", vm->def->virtType);
+        virt = "?";
+    }
+
     ignore_value(virCgroupPathOfController(cgroup,
                                            VIR_CGROUP_CONTROLLER_DEVICES,
                                            NULL, &controller));
     detail = virAuditEncode("cgroup", VIR_AUDIT_STR(controller));
 
     VIR_AUDIT(VIR_AUDIT_RECORD_RESOURCE, success,
-              "resrc=cgroup reason=%s %s uuid=%s %s class=%s",
-              reason, vmname, uuidstr,
+              "virt=%s resrc=cgroup reason=%s %s uuid=%s %s class=%s",
+              virt, reason, vmname, uuidstr,
               detail ? detail : "cgroup=?", extra);
 
     VIR_FREE(vmname);
@@ -411,6 +447,7 @@ virDomainAuditResource(virDomainObjPtr vm, const char *resource,
 {
     char uuidstr[VIR_UUID_STRING_BUFLEN];
     char *vmname;
+    const char *virt;
 
     virUUIDFormat(vm->def->uuid, uuidstr);
     if (!(vmname = virAuditEncode("vm", vm->def->name))) {
@@ -418,9 +455,14 @@ virDomainAuditResource(virDomainObjPtr vm, const char *resource,
         return;
     }
 
+    if (!(virt = virDomainVirtTypeToString(vm->def->virtType))) {
+        VIR_WARN("Unexpected virt type %d while encoding audit message", vm->def->virtType);
+        virt = "?";
+    }
+
     VIR_AUDIT(VIR_AUDIT_RECORD_RESOURCE, success,
-              "resrc=%s reason=%s %s uuid=%s old-%s=%lld new-%s=%lld",
-              resource, reason, vmname, uuidstr,
+              "virt=%s resrc=%s reason=%s %s uuid=%s old-%s=%lld new-%s=%lld",
+              virt, resource, reason, vmname, uuidstr,
               resource, oldval, resource, newval);
 
     VIR_FREE(vmname);
@@ -448,6 +490,7 @@ virDomainAuditLifecycle(virDomainObjPtr vm, const char *op,
 {
     char uuidstr[VIR_UUID_STRING_BUFLEN];
     char *vmname;
+    const char *virt;
 
     virUUIDFormat(vm->def->uuid, uuidstr);
 
@@ -456,8 +499,14 @@ virDomainAuditLifecycle(virDomainObjPtr vm, const char *op,
         return;
     }
 
+    if (!(virt = virDomainVirtTypeToString(vm->def->virtType))) {
+        VIR_WARN("Unexpected virt type %d while encoding audit message", vm->def->virtType);
+        virt = "?";
+    }
+
     VIR_AUDIT(VIR_AUDIT_RECORD_MACHINE_CONTROL, success,
-              "op=%s reason=%s %s uuid=%s", op, reason, vmname, uuidstr);
+              "virt=%s op=%s reason=%s %s uuid=%s",
+              virt, op, reason, vmname, uuidstr);
 
     VIR_FREE(vmname);
 }
@@ -507,6 +556,7 @@ virDomainAuditSecurityLabel(virDomainObjPtr vm, bool success)
 {
     char uuidstr[VIR_UUID_STRING_BUFLEN];
     char *vmname;
+    const char *virt;
 
     virUUIDFormat(vm->def->uuid, uuidstr);
     if (!(vmname = virAuditEncode("vm", vm->def->name))) {
@@ -514,9 +564,14 @@ virDomainAuditSecurityLabel(virDomainObjPtr vm, bool success)
         return;
     }
 
+    if (!(virt = virDomainVirtTypeToString(vm->def->virtType))) {
+        VIR_WARN("Unexpected virt type %d while encoding audit message", vm->def->virtType);
+        virt = "?";
+    }
+
     VIR_AUDIT(VIR_AUDIT_RECORD_MACHINE_ID, success,
-              "%s uuid=%s vm-ctx=%s img-ctx=%s",
-              vmname, uuidstr,
+              "virt=%s %s uuid=%s vm-ctx=%s img-ctx=%s",
+              virt, vmname, uuidstr,
               VIR_AUDIT_STR(vm->def->seclabel.label),
               VIR_AUDIT_STR(vm->def->seclabel.imagelabel));
 
-- 
1.7.4.4




More information about the libvir-list mailing list