diff --git a/Xext/saver.c b/Xext/saver.c index e6dddbb03..5d0098c40 100644 --- a/Xext/saver.c +++ b/Xext/saver.c @@ -646,8 +646,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; @@ -716,8 +715,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; @@ -760,7 +758,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 847f14328..02abc5696 100644 --- a/Xext/xace.c +++ b/Xext/xace.c @@ -122,13 +122,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; @@ -146,14 +152,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 8404fb736..c2cbc3f20 100644 --- a/Xext/xace.h +++ b/Xext/xace.h @@ -92,6 +92,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 266f5f89f..3004e9528 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -3178,7 +3178,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; @@ -3238,7 +3238,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 dc005caf9..0de19506a 100644 --- a/dix/window.c +++ b/dix/window.c @@ -3113,7 +3113,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;