xselinux: Unregister callbacks on server reset.
This commit is contained in:
parent
9e0a468af1
commit
d7db549db4
|
@ -121,6 +121,9 @@ static struct security_class_mapping map[] = {
|
||||||
/* forward declarations */
|
/* forward declarations */
|
||||||
static void SELinuxScreen(CallbackListPtr *, pointer, pointer);
|
static void SELinuxScreen(CallbackListPtr *, pointer, pointer);
|
||||||
|
|
||||||
|
/* "true" pointer value for use as callback data */
|
||||||
|
static pointer truep = (pointer)1;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Support Routines
|
* Support Routines
|
||||||
|
@ -832,8 +835,24 @@ ProcSELinuxDispatch(ClientPtr client)
|
||||||
static void
|
static void
|
||||||
SELinuxResetProc(ExtensionEntry *extEntry)
|
SELinuxResetProc(ExtensionEntry *extEntry)
|
||||||
{
|
{
|
||||||
/* XXX unregister all callbacks here */
|
/* Unregister callbacks */
|
||||||
|
DeleteCallback(&ClientStateCallback, SELinuxClientState, NULL);
|
||||||
|
DeleteCallback(&ResourceStateCallback, SELinuxResourceState, NULL);
|
||||||
|
|
||||||
|
XaceDeleteCallback(XACE_EXT_DISPATCH, SELinuxExtension, NULL);
|
||||||
|
XaceDeleteCallback(XACE_RESOURCE_ACCESS, SELinuxResource, NULL);
|
||||||
|
XaceDeleteCallback(XACE_DEVICE_ACCESS, SELinuxDevice, NULL);
|
||||||
|
XaceDeleteCallback(XACE_PROPERTY_ACCESS, SELinuxProperty, NULL);
|
||||||
|
XaceDeleteCallback(XACE_SEND_ACCESS, SELinuxSend, NULL);
|
||||||
|
XaceDeleteCallback(XACE_RECEIVE_ACCESS, SELinuxReceive, NULL);
|
||||||
|
XaceDeleteCallback(XACE_CLIENT_ACCESS, SELinuxClient, NULL);
|
||||||
|
XaceDeleteCallback(XACE_EXT_ACCESS, SELinuxExtension, NULL);
|
||||||
|
XaceDeleteCallback(XACE_SERVER_ACCESS, SELinuxServer, NULL);
|
||||||
|
// XaceDeleteCallback(XACE_SELECTION_ACCESS, SELinuxSelection, NULL);
|
||||||
|
XaceDeleteCallback(XACE_SCREEN_ACCESS, SELinuxScreen, NULL);
|
||||||
|
XaceDeleteCallback(XACE_SCREENSAVER_ACCESS, SELinuxScreen, truep);
|
||||||
|
|
||||||
|
/* Tear down SELinux stuff */
|
||||||
selabel_close(label_hnd);
|
selabel_close(label_hnd);
|
||||||
label_hnd = NULL;
|
label_hnd = NULL;
|
||||||
|
|
||||||
|
@ -842,6 +861,7 @@ SELinuxResetProc(ExtensionEntry *extEntry)
|
||||||
avc_destroy();
|
avc_destroy();
|
||||||
avc_active = 0;
|
avc_active = 0;
|
||||||
|
|
||||||
|
/* Free local state */
|
||||||
xfree(knownEvents);
|
xfree(knownEvents);
|
||||||
knownEvents = NULL;
|
knownEvents = NULL;
|
||||||
numKnownEvents = 0;
|
numKnownEvents = 0;
|
||||||
|
@ -906,21 +926,21 @@ XSELinuxExtensionInit(INITARGS)
|
||||||
ret &= dixRegisterPrivateInitFunc(stateKey, SELinuxStateInit, NULL);
|
ret &= dixRegisterPrivateInitFunc(stateKey, SELinuxStateInit, NULL);
|
||||||
ret &= dixRegisterPrivateDeleteFunc(stateKey, SELinuxStateFree, NULL);
|
ret &= dixRegisterPrivateDeleteFunc(stateKey, SELinuxStateFree, NULL);
|
||||||
|
|
||||||
ret &= AddCallback(&ClientStateCallback, SELinuxClientState, 0);
|
ret &= AddCallback(&ClientStateCallback, SELinuxClientState, NULL);
|
||||||
ret &= AddCallback(&ResourceStateCallback, SELinuxResourceState, 0);
|
ret &= AddCallback(&ResourceStateCallback, SELinuxResourceState, NULL);
|
||||||
|
|
||||||
ret &= XaceRegisterCallback(XACE_EXT_DISPATCH, SELinuxExtension, 0);
|
ret &= XaceRegisterCallback(XACE_EXT_DISPATCH, SELinuxExtension, NULL);
|
||||||
ret &= XaceRegisterCallback(XACE_RESOURCE_ACCESS, SELinuxResource, 0);
|
ret &= XaceRegisterCallback(XACE_RESOURCE_ACCESS, SELinuxResource, NULL);
|
||||||
ret &= XaceRegisterCallback(XACE_DEVICE_ACCESS, SELinuxDevice, 0);
|
ret &= XaceRegisterCallback(XACE_DEVICE_ACCESS, SELinuxDevice, NULL);
|
||||||
ret &= XaceRegisterCallback(XACE_PROPERTY_ACCESS, SELinuxProperty, 0);
|
ret &= XaceRegisterCallback(XACE_PROPERTY_ACCESS, SELinuxProperty, NULL);
|
||||||
ret &= XaceRegisterCallback(XACE_SEND_ACCESS, SELinuxSend, 0);
|
ret &= XaceRegisterCallback(XACE_SEND_ACCESS, SELinuxSend, NULL);
|
||||||
ret &= XaceRegisterCallback(XACE_RECEIVE_ACCESS, SELinuxReceive, 0);
|
ret &= XaceRegisterCallback(XACE_RECEIVE_ACCESS, SELinuxReceive, NULL);
|
||||||
ret &= XaceRegisterCallback(XACE_CLIENT_ACCESS, SELinuxClient, 0);
|
ret &= XaceRegisterCallback(XACE_CLIENT_ACCESS, SELinuxClient, NULL);
|
||||||
ret &= XaceRegisterCallback(XACE_EXT_ACCESS, SELinuxExtension, 0);
|
ret &= XaceRegisterCallback(XACE_EXT_ACCESS, SELinuxExtension, NULL);
|
||||||
ret &= XaceRegisterCallback(XACE_SERVER_ACCESS, SELinuxServer, 0);
|
ret &= XaceRegisterCallback(XACE_SERVER_ACCESS, SELinuxServer, NULL);
|
||||||
// ret &= XaceRegisterCallback(XACE_SELECTION_ACCESS, SELinuxSelection, 0);
|
// ret &= XaceRegisterCallback(XACE_SELECTION_ACCESS, SELinuxSelection, NULL);
|
||||||
ret &= XaceRegisterCallback(XACE_SCREEN_ACCESS, SELinuxScreen, 0);
|
ret &= XaceRegisterCallback(XACE_SCREEN_ACCESS, SELinuxScreen, NULL);
|
||||||
ret &= XaceRegisterCallback(XACE_SCREENSAVER_ACCESS, SELinuxScreen, &ret);
|
ret &= XaceRegisterCallback(XACE_SCREENSAVER_ACCESS, SELinuxScreen, truep);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
FatalError("XSELinux: Failed to register one or more callbacks\n");
|
FatalError("XSELinux: Failed to register one or more callbacks\n");
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user