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 <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 15:33:21 +02:00 committed by Marge Bot
parent 51d8bcfc0d
commit 305f2d59d8
5 changed files with 14 additions and 17 deletions

View File

@ -646,8 +646,7 @@ ProcScreenSaverQueryInfo(ClientPtr client)
DixGetAttrAccess); DixGetAttrAccess);
if (rc != Success) if (rc != Success)
return rc; return rc;
rc = XaceHook(XACE_SCREENSAVER_ACCESS, client, pDraw->pScreen, rc = XaceHookScreensaverAccess(client, pDraw->pScreen, DixGetAttrAccess);
DixGetAttrAccess);
if (rc != Success) if (rc != Success)
return rc; return rc;
@ -716,8 +715,7 @@ ProcScreenSaverSelectInput(ClientPtr client)
if (rc != Success) if (rc != Success)
return rc; return rc;
rc = XaceHook(XACE_SCREENSAVER_ACCESS, client, pDraw->pScreen, rc = XaceHookScreensaverAccess(client, pDraw->pScreen, DixSetAttrAccess);
DixSetAttrAccess);
if (rc != Success) if (rc != Success)
return rc; return rc;
@ -760,7 +758,7 @@ ScreenSaverSetAttributes(ClientPtr client)
pScreen = pDraw->pScreen; pScreen = pDraw->pScreen;
pParent = pScreen->root; pParent = pScreen->root;
ret = XaceHook(XACE_SCREENSAVER_ACCESS, client, pScreen, DixSetAttrAccess); ret = XaceHookScreensaverAccess(client, pScreen, DixSetAttrAccess);
if (ret != Success) if (ret != Success)
return ret; return ret;

View File

@ -122,13 +122,19 @@ int XaceHookScreenAccess(ClientPtr client, ScreenPtr screen, Mask access_mode)
return rec.status; 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. /* Entry point for hook functions. Called by Xserver.
*/ */
int int
XaceHook(int hook, ...) XaceHook(int hook, ...)
{ {
union { union {
XaceScreenAccessRec screen;
XaceAuthAvailRec auth; XaceAuthAvailRec auth;
XaceKeyAvailRec key; XaceKeyAvailRec key;
} u; } u;
@ -146,14 +152,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_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: case XACE_AUTH_AVAIL:
u.auth.client = va_arg(ap, ClientPtr); u.auth.client = va_arg(ap, ClientPtr);
u.auth.authId = va_arg(ap, XID); u.auth.authId = va_arg(ap, XID);

View File

@ -92,6 +92,7 @@ int XaceHookClientAccess(ClientPtr client, ClientPtr target, Mask access_mode);
int XaceHookExtAccess(ClientPtr client, ExtensionEntry *ext); int XaceHookExtAccess(ClientPtr client, ExtensionEntry *ext);
int XaceHookServerAccess(ClientPtr client, Mask access_mode); int XaceHookServerAccess(ClientPtr client, Mask access_mode);
int XaceHookScreenAccess(ClientPtr client, ScreenPtr screen, 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. /* Register a callback for a given hook.

View File

@ -3178,7 +3178,7 @@ ProcSetScreenSaver(ClientPtr client)
REQUEST_SIZE_MATCH(xSetScreenSaverReq); REQUEST_SIZE_MATCH(xSetScreenSaverReq);
for (i = 0; i < screenInfo.numScreens; i++) { for (i = 0; i < screenInfo.numScreens; i++) {
rc = XaceHook(XACE_SCREENSAVER_ACCESS, client, screenInfo.screens[i], rc = XaceHookScreensaverAccess(client, screenInfo.screens[i],
DixSetAttrAccess); DixSetAttrAccess);
if (rc != Success) if (rc != Success)
return rc; return rc;
@ -3238,7 +3238,7 @@ ProcGetScreenSaver(ClientPtr client)
REQUEST_SIZE_MATCH(xReq); REQUEST_SIZE_MATCH(xReq);
for (i = 0; i < screenInfo.numScreens; i++) { for (i = 0; i < screenInfo.numScreens; i++) {
rc = XaceHook(XACE_SCREENSAVER_ACCESS, client, screenInfo.screens[i], rc = XaceHookScreensaverAccess(client, screenInfo.screens[i],
DixGetAttrAccess); DixGetAttrAccess);
if (rc != Success) if (rc != Success)
return rc; return rc;

View File

@ -3113,7 +3113,7 @@ dixSaveScreens(ClientPtr client, int on, int mode)
} }
for (i = 0; i < screenInfo.numScreens; i++) { for (i = 0; i < screenInfo.numScreens; i++) {
rc = XaceHook(XACE_SCREENSAVER_ACCESS, client, screenInfo.screens[i], rc = XaceHookScreensaverAccess(client, screenInfo.screens[i],
DixShowAccess | DixHideAccess); DixShowAccess | DixHideAccess);
if (rc != Success) if (rc != Success)
return rc; return rc;