From 591d95c79e31fd9d7805b801500e691988fcfaf4 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" <info@metux.net> Date: Fri, 17 May 2024 15:41:45 +0200 Subject: [PATCH] xace: typesafe hook function for XACE_AUTH_AVAIL he 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> --- Xext/xace.c | 13 +++++++------ Xext/xace.h | 1 + os/connection.c | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Xext/xace.c b/Xext/xace.c index 02abc5696e6..0e05877d2bd 100644 --- a/Xext/xace.c +++ b/Xext/xace.c @@ -129,13 +129,19 @@ int XaceHookScreensaverAccess(ClientPtr client, ScreenPtr screen, Mask access_mo return rec.status; } +int XaceHookAuthAvail(ClientPtr client, XID authId) +{ + XaceAuthAvailRec rec = { client, authId }; + CallCallbacks(&XaceHooks[XACE_AUTH_AVAIL], &rec); + return Success; +} + /* Entry point for hook functions. Called by Xserver. */ int XaceHook(int hook, ...) { union { - XaceAuthAvailRec auth; XaceKeyAvailRec key; } u; int *prv = NULL; /* points to return value from callback */ @@ -152,11 +158,6 @@ XaceHook(int hook, ...) * sets calldata directly to a single argument (with no return result) */ switch (hook) { - case XACE_AUTH_AVAIL: - u.auth.client = va_arg(ap, ClientPtr); - u.auth.authId = va_arg(ap, XID); - - break; case XACE_KEY_AVAIL: u.key.event = va_arg(ap, xEventPtr); u.key.keybd = va_arg(ap, DeviceIntPtr); diff --git a/Xext/xace.h b/Xext/xace.h index c2cbc3f202f..c1e838ee105 100644 --- a/Xext/xace.h +++ b/Xext/xace.h @@ -93,6 +93,7 @@ int XaceHookExtAccess(ClientPtr client, ExtensionEntry *ext); int XaceHookServerAccess(ClientPtr client, Mask access_mode); int XaceHookScreenAccess(ClientPtr client, ScreenPtr screen, Mask access_mode); int XaceHookScreensaverAccess(ClientPtr client, ScreenPtr screen, Mask access_mode); +int XaceHookAuthAvail(ClientPtr client, XID authId); /* Register a callback for a given hook. diff --git a/os/connection.c b/os/connection.c index 9047d7fc763..425e692cfe2 100644 --- a/os/connection.c +++ b/os/connection.c @@ -579,7 +579,7 @@ ClientAuthorized(ClientPtr client, XdmcpOpenDisplay(priv->fd); #endif /* XDMCP */ - XaceHook(XACE_AUTH_AVAIL, client, auth_id); + XaceHookAuthAvail(client, auth_id); /* At this point, if the client is authorized to change the access control * list, we should getpeername() information, and add the client to -- GitLab