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:
parent
51d8bcfc0d
commit
305f2d59d8
|
@ -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;
|
||||||
|
|
||||||
|
|
16
Xext/xace.c
16
Xext/xace.c
|
@ -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);
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue