* src/uml/uml_driver.c: Add audit hooks
---
src/uml/uml_driver.c | 17 +++++++++++++++--
1 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c
index a71ea21..b2d11b3 100644
--- a/src/uml/uml_driver.c
+++ b/src/uml/uml_driver.c
@@ -55,6 +55,7 @@
#include "memory.h"
#include "uuid.h"
#include "domain_conf.h"
+#include "domain_audit.h"
#include "datatypes.h"
#include "logging.h"
#include "domain_nwfilter.h"
@@ -157,8 +158,11 @@ umlAutostartDomain(void *payload, const void *name ATTRIBUTE_UNUSED,
void *opaqu
virDomainObjLock(vm);
if (vm->autostart &&
!virDomainObjIsActive(vm)) {
+ int ret;
virResetLastError();
- if (umlStartVMDaemon(data->conn, data->driver, vm) < 0) {
+ ret = umlStartVMDaemon(data->conn, data->driver, vm);
+ virDomainAuditStart(vm, "booted", ret >= 0);
+ if (ret < 0) {
virErrorPtr err = virGetLastError();
VIR_ERROR(_("Failed to autostart VM '%s': %s"),
vm->def->name, err ? err->message : _("unknown
error"));
@@ -306,6 +310,7 @@ reread:
}
umlShutdownVMDaemon(NULL, driver, dom, VIR_DOMAIN_SHUTOFF_SHUTDOWN);
+ virDomainAuditStop(dom, "shutdown");
} else if (e->mask & (IN_CREATE | IN_MODIFY)) {
VIR_DEBUG("Got inotify domain startup '%s'", name);
if (virDomainObjIsActive(dom)) {
@@ -326,10 +331,12 @@ reread:
VIR_WARN("Could not open monitor for new domain");
umlShutdownVMDaemon(NULL, driver, dom,
VIR_DOMAIN_SHUTOFF_FAILED);
+ virDomainAuditStop(dom, "failed");
} else if (umlIdentifyChrPTY(driver, dom) < 0) {
VIR_WARN("Could not identify charater devices for new
domain");
umlShutdownVMDaemon(NULL, driver, dom,
VIR_DOMAIN_SHUTOFF_FAILED);
+ virDomainAuditStop(dom, "failed");
}
}
virDomainObjUnlock(dom);
@@ -517,8 +524,10 @@ umlShutdownOneVM(void *payload, const void *name ATTRIBUTE_UNUSED,
void *opaque)
struct uml_driver *driver = opaque;
virDomainObjLock(dom);
- if (virDomainObjIsActive(dom))
+ if (virDomainObjIsActive(dom)) {
umlShutdownVMDaemon(NULL, driver, dom, VIR_DOMAIN_SHUTOFF_SHUTDOWN);
+ virDomainAuditStop(dom, "shutdown");
+ }
virDomainObjUnlock(dom);
}
@@ -1286,11 +1295,13 @@ static virDomainPtr umlDomainCreate(virConnectPtr conn, const char
*xml,
def = NULL;
if (umlStartVMDaemon(conn, driver, vm) < 0) {
+ virDomainAuditStart(vm, "booted", false);
virDomainRemoveInactive(&driver->domains,
vm);
vm = NULL;
goto cleanup;
}
+ virDomainAuditStart(vm, "booted", true);
dom = virGetDomain(conn, vm->def->name, vm->def->uuid);
if (dom) dom->id = vm->def->id;
@@ -1350,6 +1361,7 @@ static int umlDomainDestroy(virDomainPtr dom) {
}
umlShutdownVMDaemon(dom->conn, driver, vm, VIR_DOMAIN_SHUTOFF_DESTROYED);
+ virDomainAuditStop(vm, "destroyed");
if (!vm->persistent) {
virDomainRemoveInactive(&driver->domains,
vm);
@@ -1626,6 +1638,7 @@ static int umlDomainStartWithFlags(virDomainPtr dom, unsigned int
flags) {
}
ret = umlStartVMDaemon(dom->conn, driver, vm);
+ virDomainAuditStart(vm, "booted", ret >= 0);
cleanup:
if (vm)
--
1.7.4.4