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:
Enrico Weigelt, metux IT consult 2024-05-17 14:18:28 +02:00 committed by Marge Bot
parent 3dfe00d5e0
commit 922b7685dc
4 changed files with 11 additions and 11 deletions

View File

@ -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);

View File

@ -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.
*/ */

View File

@ -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;

View File

@ -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;