From f8c916019bed7bbd9db2c37ea0af94d21460c754 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Fri, 17 May 2024 15:33:21 +0200 Subject: [PATCH] xace: typesafe hook function for XACE_SCREENSAVER_ACCESS 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 Part-of: (cherry picked from commit 305f2d59d8fd0fd697975ece772c7fc30ebe0c06) --- Xext/saver.c | 8 +++----- Xext/xace.c | 16 +++++++--------- Xext/xace.h | 1 + dix/dispatch.c | 4 ++-- dix/window.c | 2 +- 5 files changed, 14 insertions(+), 17 deletions(-) diff --git a/Xext/saver.c b/Xext/saver.c index 0a74cf3a5..67c699bc5 100644 --- a/Xext/saver.c +++ b/Xext/saver.c @@ -645,8 +645,7 @@ ProcScreenSaverQueryInfo(ClientPtr client) DixGetAttrAccess); if (rc != Success) return rc; - rc = XaceHook(XACE_SCREENSAVER_ACCESS, client, pDraw->pScreen, - DixGetAttrAccess); + rc = XaceHookScreensaverAccess(client, pDraw->pScreen, DixGetAttrAccess); if (rc != Success) return rc; @@ -715,8 +714,7 @@ ProcScreenSaverSelectInput(ClientPtr client) if (rc != Success) return rc; - rc = XaceHook(XACE_SCREENSAVER_ACCESS, client, pDraw->pScreen, - DixSetAttrAccess); + rc = XaceHookScreensaverAccess(client, pDraw->pScreen, DixSetAttrAccess); if (rc != Success) return rc; @@ -759,7 +757,7 @@ ScreenSaverSetAttributes(ClientPtr client) pScreen = pDraw->pScreen; pParent = pScreen->root; - ret = XaceHook(XACE_SCREENSAVER_ACCESS, client, pScreen, DixSetAttrAccess); + ret = XaceHookScreensaverAccess(client, pScreen, DixSetAttrAccess); if (ret != Success) return ret; diff --git a/Xext/xace.c b/Xext/xace.c index eaeeb3657..0b41c0352 100644 --- a/Xext/xace.c +++ b/Xext/xace.c @@ -123,13 +123,19 @@ int XaceHookScreenAccess(ClientPtr client, ScreenPtr screen, Mask access_mode) return rec.status; } +int XaceHookScreensaverAccess(ClientPtr client, ScreenPtr screen, Mask access_mode) +{ + XaceScreenAccessRec rec = { client, screen, access_mode, Success }; + CallCallbacks(&XaceHooks[XACE_SCREENSAVER_ACCESS], &rec); + return rec.status; +} + /* Entry point for hook functions. Called by Xserver. */ int XaceHook(int hook, ...) { union { - XaceScreenAccessRec screen; XaceAuthAvailRec auth; XaceKeyAvailRec key; } u; @@ -147,14 +153,6 @@ XaceHook(int hook, ...) * sets calldata directly to a single argument (with no return result) */ switch (hook) { - case XACE_SCREENSAVER_ACCESS: - u.screen.client = va_arg(ap, ClientPtr); - u.screen.screen = va_arg(ap, ScreenPtr); - u.screen.access_mode = va_arg(ap, Mask); - - u.screen.status = Success; /* default allow */ - prv = &u.screen.status; - break; case XACE_AUTH_AVAIL: u.auth.client = va_arg(ap, ClientPtr); u.auth.authId = va_arg(ap, XID); diff --git a/Xext/xace.h b/Xext/xace.h index 7ab2dfd21..cc5884386 100644 --- a/Xext/xace.h +++ b/Xext/xace.h @@ -94,6 +94,7 @@ int XaceHookClientAccess(ClientPtr client, ClientPtr target, Mask access_mode); 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); /* Register a callback for a given hook. diff --git a/dix/dispatch.c b/dix/dispatch.c index 8a8761321..87bab1791 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -3165,7 +3165,7 @@ ProcSetScreenSaver(ClientPtr client) REQUEST_SIZE_MATCH(xSetScreenSaverReq); for (i = 0; i < screenInfo.numScreens; i++) { - rc = XaceHook(XACE_SCREENSAVER_ACCESS, client, screenInfo.screens[i], + rc = XaceHookScreensaverAccess(client, screenInfo.screens[i], DixSetAttrAccess); if (rc != Success) return rc; @@ -3225,7 +3225,7 @@ ProcGetScreenSaver(ClientPtr client) REQUEST_SIZE_MATCH(xReq); for (i = 0; i < screenInfo.numScreens; i++) { - rc = XaceHook(XACE_SCREENSAVER_ACCESS, client, screenInfo.screens[i], + rc = XaceHookScreensaverAccess(client, screenInfo.screens[i], DixGetAttrAccess); if (rc != Success) return rc; diff --git a/dix/window.c b/dix/window.c index b051c1932..905cda021 100644 --- a/dix/window.c +++ b/dix/window.c @@ -3111,7 +3111,7 @@ dixSaveScreens(ClientPtr client, int on, int mode) } for (i = 0; i < screenInfo.numScreens; i++) { - rc = XaceHook(XACE_SCREENSAVER_ACCESS, client, screenInfo.screens[i], + rc = XaceHookScreensaverAccess(client, screenInfo.screens[i], DixShowAccess | DixHideAccess); if (rc != Success) return rc;