mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-07-06 09:55:46 +00:00
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:
parent
ad11ecd965
commit
11d926659b
2
HACKING
2
HACKING
@ -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.
|
||||||
|
|
||||||
|
@ -1045,7 +1045,6 @@ virSecurityDriverLookup;
|
|||||||
|
|
||||||
# security_manager.h
|
# security_manager.h
|
||||||
virSecurityManagerClearSocketLabel;
|
virSecurityManagerClearSocketLabel;
|
||||||
virSecurityManagerFree;
|
|
||||||
virSecurityManagerGenLabel;
|
virSecurityManagerGenLabel;
|
||||||
virSecurityManagerGetDOI;
|
virSecurityManagerGetDOI;
|
||||||
virSecurityManagerGetModel;
|
virSecurityManagerGetModel;
|
||||||
|
@ -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]);
|
||||||
|
@ -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);
|
||||||
|
@ -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 */
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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 *
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user