]> xenbits.xensource.com Git - libvirt.git/commitdiff
Turn virSecurityManager into a virObjectLockable
authorDaniel P. Berrange <berrange@redhat.com>
Tue, 5 Feb 2013 17:54:55 +0000 (17:54 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Mon, 11 Feb 2013 12:33:41 +0000 (12:33 +0000)
To enable locking to be introduced to the security manager
objects later, turn virSecurityManager into a virObjectLockable
class

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
HACKING
src/libvirt_private.syms
src/lxc/lxc_controller.c
src/lxc/lxc_driver.c
src/qemu/qemu_conf.h
src/qemu/qemu_driver.c
src/security/security_manager.c
src/security/security_manager.h
src/security/security_stack.c
tests/seclabeltest.c

diff --git a/HACKING b/HACKING
index e1e0b9b3a7aee13be110793f999b64a093021ef0..c8833c0bc9e01c2671832245984bc6dda7cafec8 100644 (file)
--- a/HACKING
+++ b/HACKING
@@ -203,6 +203,8 @@ the warning:
     obj:*/lib*/ld-2.*so*
 }
 
+
+
 (8) Update tests and/or documentation, particularly if you are adding a new
 feature or changing the output of a program.
 
index a4f41ac0a326477fb6fbd510c2c3dc246cd84c9f..cb814970354f58dbadc174cc9d205dfa9d96bc62 100644 (file)
@@ -1045,7 +1045,6 @@ virSecurityDriverLookup;
 
 # security_manager.h
 virSecurityManagerClearSocketLabel;
-virSecurityManagerFree;
 virSecurityManagerGenLabel;
 virSecurityManagerGetDOI;
 virSecurityManagerGetModel;
index aa70481fdafd3f3a8cdaf070422a0afa8313717f..15aa3340d8e0096dae00a0dd627aa16b73b28757 100644 (file)
@@ -258,7 +258,7 @@ static void virLXCControllerFree(virLXCControllerPtr ctrl)
 
     virLXCControllerStopInit(ctrl);
 
-    virSecurityManagerFree(ctrl->securityManager);
+    virObjectUnref(ctrl->securityManager);
 
     for (i = 0 ; i < ctrl->nveths ; i++)
         VIR_FREE(ctrl->veths[i]);
index f07ce1466f31de933ceebdb9d244a56749780f95..f136df23b07cf2f7ff9bd145535de646c1db8b62 100644 (file)
@@ -1399,7 +1399,7 @@ lxcSecurityInit(virLXCDriverPtr driver)
 
 error:
     VIR_ERROR(_("Failed to initialize security drivers"));
-    virSecurityManagerFree(mgr);
+    virObjectUnref(mgr);
     return -1;
 }
 
@@ -1560,7 +1560,7 @@ static int lxcShutdown(void)
     virLXCProcessAutoDestroyShutdown(lxc_driver);
 
     virObjectUnref(lxc_driver->caps);
-    virSecurityManagerFree(lxc_driver->securityManager);
+    virObjectUnref(lxc_driver->securityManager);
     VIR_FREE(lxc_driver->configDir);
     VIR_FREE(lxc_driver->autostartDir);
     VIR_FREE(lxc_driver->stateDir);
index 9ff1c5a392eb53a6db2a66f700b2df646f394ceb..d4ec0f7842befe4bfd1299a5d5d63b8613c0d150 100644 (file)
@@ -213,7 +213,7 @@ struct _virQEMUDriver {
     /* Immutable pointer, lockless APIs*/
     virSysinfoDefPtr hostsysinfo;
 
-    /* Immutable pointer. XXX check safety */
+    /* Immutable pointer. lockless access */
     virLockManagerPluginPtr lockManager;
 
     /* Immutable pointer. Unsafe APIs. XXX */
index 0651bc87e5115ed7261b22d30ae339c817e13791..4e2700ca55e86fef943e989f79ddfa09a5d0987c 100644 (file)
@@ -409,8 +409,8 @@ qemuSecurityInit(virQEMUDriverPtr driver)
 
 error:
     VIR_ERROR(_("Failed to initialize security drivers"));
-    virSecurityManagerFree(stack);
-    virSecurityManagerFree(mgr);
+    virObjectUnref(stack);
+    virObjectUnref(mgr);
     virObjectUnref(cfg);
     return -1;
 }
@@ -1005,7 +1005,7 @@ qemuShutdown(void) {
 
     VIR_FREE(qemu_driver->qemuImgBinary);
 
-    virSecurityManagerFree(qemu_driver->securityManager);
+    virObjectUnref(qemu_driver->securityManager);
 
     ebtablesContextFree(qemu_driver->ebtables);
 
index 593c00bf561be445c67ac71c938bfaa36100cd82..a3f866972a2334171a07bbd3a5fbbdc503933cf6 100644 (file)
 #include "security_dac.h"
 #include "virerror.h"
 #include "viralloc.h"
+#include "virobject.h"
 #include "virlog.h"
 
 #define VIR_FROM_THIS VIR_FROM_SECURITY
 
 
 struct _virSecurityManager {
+    virObjectLockable parent;
+
     virSecurityDriverPtr drv;
     bool allowDiskFormatProbing;
     bool defaultConfined;
     bool requireConfined;
     const char *virtDriver;
+    void *privateData;
 };
 
+static virClassPtr virSecurityManagerClass;
+
+static void virSecurityManagerDispose(void *obj);
+
+static int virSecurityManagerOnceInit(void)
+{
+    if (!(virSecurityManagerClass = virClassNew(virClassForObjectLockable(),
+                                                "virSecurityManagerClass",
+                                                sizeof(virSecurityManager),
+                                                virSecurityManagerDispose)))
+        return -1;
+
+    return 0;
+}
+
+VIR_ONCE_GLOBAL_INIT(virSecurityManager);
+
 static virSecurityManagerPtr virSecurityManagerNewDriver(virSecurityDriverPtr drv,
                                                          const char *virtDriver,
                                                          bool allowDiskFormatProbing,
@@ -48,6 +69,10 @@ static virSecurityManagerPtr virSecurityManagerNewDriver(virSecurityDriverPtr dr
                                                          bool requireConfined)
 {
     virSecurityManagerPtr mgr;
+    char *privateData;
+
+    if (virSecurityManagerInitialize() < 0)
+        return NULL;
 
     VIR_DEBUG("drv=%p (%s) virtDriver=%s allowDiskFormatProbing=%d "
               "defaultConfined=%d requireConfined=%d",
@@ -55,19 +80,25 @@ static virSecurityManagerPtr virSecurityManagerNewDriver(virSecurityDriverPtr dr
               allowDiskFormatProbing, defaultConfined,
               requireConfined);
 
-    if (VIR_ALLOC_VAR(mgr, char, drv->privateDataLen) < 0) {
+    if (VIR_ALLOC_N(privateData, drv->privateDataLen) < 0) {
         virReportOOMError();
         return NULL;
     }
 
+    if (!(mgr = virObjectLockableNew(virSecurityManagerClass))) {
+        VIR_FREE(privateData);
+        return NULL;
+    }
+
     mgr->drv = drv;
     mgr->allowDiskFormatProbing = allowDiskFormatProbing;
     mgr->defaultConfined = defaultConfined;
     mgr->requireConfined = requireConfined;
     mgr->virtDriver = virtDriver;
+    mgr->privateData = privateData;
 
     if (drv->open(mgr) < 0) {
-        virSecurityManagerFree(mgr);
+        virObjectUnref(mgr);
         return NULL;
     }
 
@@ -163,21 +194,17 @@ virSecurityManagerPtr virSecurityManagerNew(const char *name,
 
 void *virSecurityManagerGetPrivateData(virSecurityManagerPtr mgr)
 {
-    /* This accesses the memory just beyond mgr, which was allocated
-     * via VIR_ALLOC_VAR earlier.  */
-    return mgr + 1;
+    return mgr->privateData;
 }
 
 
-void virSecurityManagerFree(virSecurityManagerPtr mgr)
+static void virSecurityManagerDispose(void *obj)
 {
-    if (!mgr)
-        return;
+    virSecurityManagerPtr mgr = obj;
 
     if (mgr->drv->close)
         mgr->drv->close(mgr);
-
-    VIR_FREE(mgr);
+    VIR_FREE(mgr->privateData);
 }
 
 const char *
index dc09c7cbb54aee030aac299f6403e59ae1103ac8..4d4dc73181bcc18746da06ccfe63baf32a32e7e0 100644 (file)
@@ -48,8 +48,6 @@ virSecurityManagerPtr virSecurityManagerNewDAC(const char *virtDriver,
 
 void *virSecurityManagerGetPrivateData(virSecurityManagerPtr mgr);
 
-void virSecurityManagerFree(virSecurityManagerPtr mgr);
-
 const char *virSecurityManagerGetDriver(virSecurityManagerPtr mgr);
 const char *virSecurityManagerGetDOI(virSecurityManagerPtr mgr);
 const char *virSecurityManagerGetModel(virSecurityManagerPtr mgr);
index 8e1e5f9a4f6842622e19f7bf9b49e089d5799097..e2d0b1db75acb656e915800e9c766678d71bef1c 100644 (file)
@@ -93,7 +93,7 @@ virSecurityStackClose(virSecurityManagerPtr mgr)
 
     while (item) {
         next = item->next;
-        virSecurityManagerFree(item->securityManager);
+        virObjectUnref(item->securityManager);
         VIR_FREE(item);
         item = next;
     }
index 7033293eee933b19706fe4fadc5d91edfe7fb0c7..93b4902da38b69c9d1451ca5266307aa96423abe 100644 (file)
@@ -39,7 +39,7 @@ main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED)
         exit(EXIT_FAILURE);
     }
 
-    virSecurityManagerFree(mgr);
+    virObjectUnref(mgr);
 
     return 0;
 }