Turn virSecurityManager into a virObjectLockable

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>
This commit is contained in:
Daniel P. Berrange 2013-02-05 17:54:55 +00:00
parent ad11ecd965
commit 11d926659b
10 changed files with 48 additions and 22 deletions

View File

@ -203,6 +203,8 @@ the warning:
obj:*/lib*/ld-2.*so* obj:*/lib*/ld-2.*so*
} }
(8) Update tests and/or documentation, particularly if you are adding a new (8) Update tests and/or documentation, particularly if you are adding a new
feature or changing the output of a program. feature or changing the output of a program.

View File

@ -1045,7 +1045,6 @@ virSecurityDriverLookup;
# security_manager.h # security_manager.h
virSecurityManagerClearSocketLabel; virSecurityManagerClearSocketLabel;
virSecurityManagerFree;
virSecurityManagerGenLabel; virSecurityManagerGenLabel;
virSecurityManagerGetDOI; virSecurityManagerGetDOI;
virSecurityManagerGetModel; virSecurityManagerGetModel;

View File

@ -258,7 +258,7 @@ static void virLXCControllerFree(virLXCControllerPtr ctrl)
virLXCControllerStopInit(ctrl); virLXCControllerStopInit(ctrl);
virSecurityManagerFree(ctrl->securityManager); virObjectUnref(ctrl->securityManager);
for (i = 0 ; i < ctrl->nveths ; i++) for (i = 0 ; i < ctrl->nveths ; i++)
VIR_FREE(ctrl->veths[i]); VIR_FREE(ctrl->veths[i]);

View File

@ -1399,7 +1399,7 @@ lxcSecurityInit(virLXCDriverPtr driver)
error: error:
VIR_ERROR(_("Failed to initialize security drivers")); VIR_ERROR(_("Failed to initialize security drivers"));
virSecurityManagerFree(mgr); virObjectUnref(mgr);
return -1; return -1;
} }
@ -1560,7 +1560,7 @@ static int lxcShutdown(void)
virLXCProcessAutoDestroyShutdown(lxc_driver); virLXCProcessAutoDestroyShutdown(lxc_driver);
virObjectUnref(lxc_driver->caps); virObjectUnref(lxc_driver->caps);
virSecurityManagerFree(lxc_driver->securityManager); virObjectUnref(lxc_driver->securityManager);
VIR_FREE(lxc_driver->configDir); VIR_FREE(lxc_driver->configDir);
VIR_FREE(lxc_driver->autostartDir); VIR_FREE(lxc_driver->autostartDir);
VIR_FREE(lxc_driver->stateDir); VIR_FREE(lxc_driver->stateDir);

View File

@ -213,7 +213,7 @@ struct _virQEMUDriver {
/* Immutable pointer, lockless APIs*/ /* Immutable pointer, lockless APIs*/
virSysinfoDefPtr hostsysinfo; virSysinfoDefPtr hostsysinfo;
/* Immutable pointer. XXX check safety */ /* Immutable pointer. lockless access */
virLockManagerPluginPtr lockManager; virLockManagerPluginPtr lockManager;
/* Immutable pointer. Unsafe APIs. XXX */ /* Immutable pointer. Unsafe APIs. XXX */

View File

@ -409,8 +409,8 @@ qemuSecurityInit(virQEMUDriverPtr driver)
error: error:
VIR_ERROR(_("Failed to initialize security drivers")); VIR_ERROR(_("Failed to initialize security drivers"));
virSecurityManagerFree(stack); virObjectUnref(stack);
virSecurityManagerFree(mgr); virObjectUnref(mgr);
virObjectUnref(cfg); virObjectUnref(cfg);
return -1; return -1;
} }
@ -1005,7 +1005,7 @@ qemuShutdown(void) {
VIR_FREE(qemu_driver->qemuImgBinary); VIR_FREE(qemu_driver->qemuImgBinary);
virSecurityManagerFree(qemu_driver->securityManager); virObjectUnref(qemu_driver->securityManager);
ebtablesContextFree(qemu_driver->ebtables); ebtablesContextFree(qemu_driver->ebtables);

View File

@ -28,19 +28,40 @@
#include "security_dac.h" #include "security_dac.h"
#include "virerror.h" #include "virerror.h"
#include "viralloc.h" #include "viralloc.h"
#include "virobject.h"
#include "virlog.h" #include "virlog.h"
#define VIR_FROM_THIS VIR_FROM_SECURITY #define VIR_FROM_THIS VIR_FROM_SECURITY
struct _virSecurityManager { struct _virSecurityManager {
virObjectLockable parent;
virSecurityDriverPtr drv; virSecurityDriverPtr drv;
bool allowDiskFormatProbing; bool allowDiskFormatProbing;
bool defaultConfined; bool defaultConfined;
bool requireConfined; bool requireConfined;
const char *virtDriver; 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, static virSecurityManagerPtr virSecurityManagerNewDriver(virSecurityDriverPtr drv,
const char *virtDriver, const char *virtDriver,
bool allowDiskFormatProbing, bool allowDiskFormatProbing,
@ -48,6 +69,10 @@ static virSecurityManagerPtr virSecurityManagerNewDriver(virSecurityDriverPtr dr
bool requireConfined) bool requireConfined)
{ {
virSecurityManagerPtr mgr; virSecurityManagerPtr mgr;
char *privateData;
if (virSecurityManagerInitialize() < 0)
return NULL;
VIR_DEBUG("drv=%p (%s) virtDriver=%s allowDiskFormatProbing=%d " VIR_DEBUG("drv=%p (%s) virtDriver=%s allowDiskFormatProbing=%d "
"defaultConfined=%d requireConfined=%d", "defaultConfined=%d requireConfined=%d",
@ -55,19 +80,25 @@ static virSecurityManagerPtr virSecurityManagerNewDriver(virSecurityDriverPtr dr
allowDiskFormatProbing, defaultConfined, allowDiskFormatProbing, defaultConfined,
requireConfined); requireConfined);
if (VIR_ALLOC_VAR(mgr, char, drv->privateDataLen) < 0) { if (VIR_ALLOC_N(privateData, drv->privateDataLen) < 0) {
virReportOOMError(); virReportOOMError();
return NULL; return NULL;
} }
if (!(mgr = virObjectLockableNew(virSecurityManagerClass))) {
VIR_FREE(privateData);
return NULL;
}
mgr->drv = drv; mgr->drv = drv;
mgr->allowDiskFormatProbing = allowDiskFormatProbing; mgr->allowDiskFormatProbing = allowDiskFormatProbing;
mgr->defaultConfined = defaultConfined; mgr->defaultConfined = defaultConfined;
mgr->requireConfined = requireConfined; mgr->requireConfined = requireConfined;
mgr->virtDriver = virtDriver; mgr->virtDriver = virtDriver;
mgr->privateData = privateData;
if (drv->open(mgr) < 0) { if (drv->open(mgr) < 0) {
virSecurityManagerFree(mgr); virObjectUnref(mgr);
return NULL; return NULL;
} }
@ -163,21 +194,17 @@ virSecurityManagerPtr virSecurityManagerNew(const char *name,
void *virSecurityManagerGetPrivateData(virSecurityManagerPtr mgr) void *virSecurityManagerGetPrivateData(virSecurityManagerPtr mgr)
{ {
/* This accesses the memory just beyond mgr, which was allocated return mgr->privateData;
* via VIR_ALLOC_VAR earlier. */
return mgr + 1;
} }
void virSecurityManagerFree(virSecurityManagerPtr mgr) static void virSecurityManagerDispose(void *obj)
{ {
if (!mgr) virSecurityManagerPtr mgr = obj;
return;
if (mgr->drv->close) if (mgr->drv->close)
mgr->drv->close(mgr); mgr->drv->close(mgr);
VIR_FREE(mgr->privateData);
VIR_FREE(mgr);
} }
const char * const char *

View File

@ -48,8 +48,6 @@ virSecurityManagerPtr virSecurityManagerNewDAC(const char *virtDriver,
void *virSecurityManagerGetPrivateData(virSecurityManagerPtr mgr); void *virSecurityManagerGetPrivateData(virSecurityManagerPtr mgr);
void virSecurityManagerFree(virSecurityManagerPtr mgr);
const char *virSecurityManagerGetDriver(virSecurityManagerPtr mgr); const char *virSecurityManagerGetDriver(virSecurityManagerPtr mgr);
const char *virSecurityManagerGetDOI(virSecurityManagerPtr mgr); const char *virSecurityManagerGetDOI(virSecurityManagerPtr mgr);
const char *virSecurityManagerGetModel(virSecurityManagerPtr mgr); const char *virSecurityManagerGetModel(virSecurityManagerPtr mgr);

View File

@ -93,7 +93,7 @@ virSecurityStackClose(virSecurityManagerPtr mgr)
while (item) { while (item) {
next = item->next; next = item->next;
virSecurityManagerFree(item->securityManager); virObjectUnref(item->securityManager);
VIR_FREE(item); VIR_FREE(item);
item = next; item = next;
} }

View File

@ -39,7 +39,7 @@ main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED)
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
virSecurityManagerFree(mgr); virObjectUnref(mgr);
return 0; return 0;
} }