diff --git a/Xext/xace.c b/Xext/xace.c index 7fbea5b7b..e746f8533 100644 --- a/Xext/xace.c +++ b/Xext/xace.c @@ -95,13 +95,19 @@ int XaceHookReceiveAccess(ClientPtr client, WindowPtr win, return rec.status; } +int XaceHookClientAccess(ClientPtr client, ClientPtr target, Mask access_mode) +{ + XaceClientAccessRec rec = { client, target, access_mode, Success }; + CallCallbacks(&XaceHooks[XACE_CLIENT_ACCESS], &rec); + return rec.status; +} + /* Entry point for hook functions. Called by Xserver. */ int XaceHook(int hook, ...) { union { - XaceClientAccessRec client; XaceExtAccessRec ext; XaceServerAccessRec server; XaceScreenAccessRec screen; @@ -122,14 +128,6 @@ XaceHook(int hook, ...) * sets calldata directly to a single argument (with no return result) */ switch (hook) { - case XACE_CLIENT_ACCESS: - u.client.client = va_arg(ap, ClientPtr); - u.client.target = va_arg(ap, ClientPtr); - u.client.access_mode = va_arg(ap, Mask); - - u.client.status = Success; /* default allow */ - prv = &u.client.status; - break; case XACE_EXT_ACCESS: u.ext.client = va_arg(ap, ClientPtr); diff --git a/Xext/xace.h b/Xext/xace.h index 95ef5c9f7..db47529a8 100644 --- a/Xext/xace.h +++ b/Xext/xace.h @@ -89,6 +89,8 @@ int XaceHookDeviceAccess(ClientPtr client, DeviceIntPtr dev, Mask access_mode); int XaceHookSendAccess(ClientPtr client, DeviceIntPtr dev, WindowPtr win, xEventPtr ev, int count); int XaceHookReceiveAccess(ClientPtr client, WindowPtr win, xEventPtr ev, int count); +int XaceHookClientAccess(ClientPtr client, ClientPtr target, Mask access_mode); + /* Register a callback for a given hook. */ diff --git a/dix/dispatch.c b/dix/dispatch.c index 5347a3d8d..a40036f0a 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -3423,7 +3423,7 @@ ProcChangeCloseDownMode(ClientPtr client) REQUEST(xSetCloseDownModeReq); REQUEST_SIZE_MATCH(xSetCloseDownModeReq); - rc = XaceHook(XACE_CLIENT_ACCESS, client, client, DixManageAccess); + rc = XaceHookClientAccess(client, client, DixManageAccess); if (rc != Success) return rc; diff --git a/dix/dixutils.c b/dix/dixutils.c index fab893a45..4f91da533 100644 --- a/dix/dixutils.c +++ b/dix/dixutils.c @@ -271,7 +271,7 @@ dixLookupClient(ClientPtr *pClient, XID rid, ClientPtr client, Mask access) if (rc != Success) goto bad; - rc = XaceHook(XACE_CLIENT_ACCESS, client, clients[clientIndex], access); + rc = XaceHookClientAccess(client, clients[clientIndex], access); if (rc != Success) goto bad;