xace: typesafe hook function for XACE_CLIENT_ACCESS
The generic XaceHook() call isn't typesafe (und unnecessarily slow). Better add an explicit function, just like we already have for others. Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net> Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1556>
This commit is contained in:
parent
3dfe00d5e0
commit
922b7685dc
16
Xext/xace.c
16
Xext/xace.c
|
@ -94,13 +94,19 @@ int XaceHookReceiveAccess(ClientPtr client, WindowPtr win,
|
||||||
return rec.status;
|
return rec.status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int XaceHookClientAccess(ClientPtr client, ClientPtr target, Mask access_mode)
|
||||||
|
{
|
||||||
|
XaceClientAccessRec rec = { client, target, access_mode, Success };
|
||||||
|
CallCallbacks(&XaceHooks[XACE_CLIENT_ACCESS], &rec);
|
||||||
|
return rec.status;
|
||||||
|
}
|
||||||
|
|
||||||
/* Entry point for hook functions. Called by Xserver.
|
/* Entry point for hook functions. Called by Xserver.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
XaceHook(int hook, ...)
|
XaceHook(int hook, ...)
|
||||||
{
|
{
|
||||||
union {
|
union {
|
||||||
XaceClientAccessRec client;
|
|
||||||
XaceExtAccessRec ext;
|
XaceExtAccessRec ext;
|
||||||
XaceServerAccessRec server;
|
XaceServerAccessRec server;
|
||||||
XaceScreenAccessRec screen;
|
XaceScreenAccessRec screen;
|
||||||
|
@ -121,14 +127,6 @@ XaceHook(int hook, ...)
|
||||||
* sets calldata directly to a single argument (with no return result)
|
* sets calldata directly to a single argument (with no return result)
|
||||||
*/
|
*/
|
||||||
switch (hook) {
|
switch (hook) {
|
||||||
case XACE_CLIENT_ACCESS:
|
|
||||||
u.client.client = va_arg(ap, ClientPtr);
|
|
||||||
u.client.target = va_arg(ap, ClientPtr);
|
|
||||||
u.client.access_mode = va_arg(ap, Mask);
|
|
||||||
|
|
||||||
u.client.status = Success; /* default allow */
|
|
||||||
prv = &u.client.status;
|
|
||||||
break;
|
|
||||||
case XACE_EXT_ACCESS:
|
case XACE_EXT_ACCESS:
|
||||||
u.ext.client = va_arg(ap, ClientPtr);
|
u.ext.client = va_arg(ap, ClientPtr);
|
||||||
|
|
||||||
|
|
|
@ -87,6 +87,8 @@ int XaceHookDeviceAccess(ClientPtr client, DeviceIntPtr dev, Mask access_mode);
|
||||||
int XaceHookSendAccess(ClientPtr client, DeviceIntPtr dev, WindowPtr win,
|
int XaceHookSendAccess(ClientPtr client, DeviceIntPtr dev, WindowPtr win,
|
||||||
xEventPtr ev, int count);
|
xEventPtr ev, int count);
|
||||||
int XaceHookReceiveAccess(ClientPtr client, WindowPtr win, xEventPtr ev, int count);
|
int XaceHookReceiveAccess(ClientPtr client, WindowPtr win, xEventPtr ev, int count);
|
||||||
|
int XaceHookClientAccess(ClientPtr client, ClientPtr target, Mask access_mode);
|
||||||
|
|
||||||
|
|
||||||
/* Register a callback for a given hook.
|
/* Register a callback for a given hook.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -3436,7 +3436,7 @@ ProcChangeCloseDownMode(ClientPtr client)
|
||||||
REQUEST(xSetCloseDownModeReq);
|
REQUEST(xSetCloseDownModeReq);
|
||||||
REQUEST_SIZE_MATCH(xSetCloseDownModeReq);
|
REQUEST_SIZE_MATCH(xSetCloseDownModeReq);
|
||||||
|
|
||||||
rc = XaceHook(XACE_CLIENT_ACCESS, client, client, DixManageAccess);
|
rc = XaceHookClientAccess(client, client, DixManageAccess);
|
||||||
if (rc != Success)
|
if (rc != Success)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
|
|
|
@ -232,7 +232,7 @@ dixLookupClient(ClientPtr *pClient, XID rid, ClientPtr client, Mask access)
|
||||||
if (rc != Success)
|
if (rc != Success)
|
||||||
goto bad;
|
goto bad;
|
||||||
|
|
||||||
rc = XaceHook(XACE_CLIENT_ACCESS, client, clients[clientIndex], access);
|
rc = XaceHookClientAccess(client, clients[clientIndex], access);
|
||||||
if (rc != Success)
|
if (rc != Success)
|
||||||
goto bad;
|
goto bad;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue