xace: typesafe hook function for XACE_SERVER_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
0f6bb23bc2
commit
47d6c3ad75
15
Xext/xace.c
15
Xext/xace.c
|
@ -108,13 +108,19 @@ int XaceHookExtAccess(ClientPtr client, ExtensionEntry *ext)
|
||||||
return rec.status;
|
return rec.status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int XaceHookServerAccess(ClientPtr client, Mask access_mode)
|
||||||
|
{
|
||||||
|
XaceServerAccessRec rec = { client, access_mode, Success };
|
||||||
|
CallCallbacks(&XaceHooks[XACE_SERVER_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 {
|
||||||
XaceServerAccessRec server;
|
|
||||||
XaceScreenAccessRec screen;
|
XaceScreenAccessRec screen;
|
||||||
XaceAuthAvailRec auth;
|
XaceAuthAvailRec auth;
|
||||||
XaceKeyAvailRec key;
|
XaceKeyAvailRec key;
|
||||||
|
@ -133,13 +139,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_SERVER_ACCESS:
|
|
||||||
u.server.client = va_arg(ap, ClientPtr);
|
|
||||||
u.server.access_mode = va_arg(ap, Mask);
|
|
||||||
|
|
||||||
u.server.status = Success; /* default allow */
|
|
||||||
prv = &u.server.status;
|
|
||||||
break;
|
|
||||||
case XACE_SCREEN_ACCESS:
|
case XACE_SCREEN_ACCESS:
|
||||||
case XACE_SCREENSAVER_ACCESS:
|
case XACE_SCREENSAVER_ACCESS:
|
||||||
u.screen.client = va_arg(ap, ClientPtr);
|
u.screen.client = va_arg(ap, ClientPtr);
|
||||||
|
|
|
@ -90,6 +90,7 @@ int XaceHookSendAccess(ClientPtr client, DeviceIntPtr dev, WindowPtr win,
|
||||||
int XaceHookReceiveAccess(ClientPtr client, 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);
|
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);
|
||||||
|
|
||||||
|
|
||||||
/* Register a callback for a given hook.
|
/* Register a callback for a given hook.
|
||||||
|
|
|
@ -3288,7 +3288,7 @@ ProcListHosts(ClientPtr client)
|
||||||
REQUEST_SIZE_MATCH(xListHostsReq);
|
REQUEST_SIZE_MATCH(xListHostsReq);
|
||||||
|
|
||||||
/* untrusted clients can't list hosts */
|
/* untrusted clients can't list hosts */
|
||||||
result = XaceHook(XACE_SERVER_ACCESS, client, DixReadAccess);
|
result = XaceHookServerAccess(client, DixReadAccess);
|
||||||
if (result != Success)
|
if (result != Success)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
|
|
|
@ -812,7 +812,7 @@ ListFonts(ClientPtr client, unsigned char *pattern, unsigned length,
|
||||||
if (length > XLFDMAXFONTNAMELEN)
|
if (length > XLFDMAXFONTNAMELEN)
|
||||||
return BadAlloc;
|
return BadAlloc;
|
||||||
|
|
||||||
i = XaceHook(XACE_SERVER_ACCESS, client, DixGetAttrAccess);
|
i = XaceHookServerAccess(client, DixGetAttrAccess);
|
||||||
if (i != Success)
|
if (i != Success)
|
||||||
return i;
|
return i;
|
||||||
|
|
||||||
|
@ -1058,7 +1058,7 @@ StartListFontsWithInfo(ClientPtr client, int length, unsigned char *pattern,
|
||||||
if (length > XLFDMAXFONTNAMELEN)
|
if (length > XLFDMAXFONTNAMELEN)
|
||||||
return BadAlloc;
|
return BadAlloc;
|
||||||
|
|
||||||
i = XaceHook(XACE_SERVER_ACCESS, client, DixGetAttrAccess);
|
i = XaceHookServerAccess(client, DixGetAttrAccess);
|
||||||
if (i != Success)
|
if (i != Success)
|
||||||
return i;
|
return i;
|
||||||
|
|
||||||
|
@ -1681,7 +1681,7 @@ SetFontPathElements(int npaths, unsigned char *paths, int *bad, Bool persist)
|
||||||
int
|
int
|
||||||
SetFontPath(ClientPtr client, int npaths, unsigned char *paths)
|
SetFontPath(ClientPtr client, int npaths, unsigned char *paths)
|
||||||
{
|
{
|
||||||
int err = XaceHook(XACE_SERVER_ACCESS, client, DixManageAccess);
|
int err = XaceHookServerAccess(client, DixManageAccess);
|
||||||
|
|
||||||
if (err != Success)
|
if (err != Success)
|
||||||
return err;
|
return err;
|
||||||
|
@ -1769,7 +1769,7 @@ GetFontPath(ClientPtr client, int *count, int *length, unsigned char **result)
|
||||||
int len;
|
int len;
|
||||||
FontPathElementPtr fpe;
|
FontPathElementPtr fpe;
|
||||||
|
|
||||||
i = XaceHook(XACE_SERVER_ACCESS, client, DixGetAttrAccess);
|
i = XaceHookServerAccess(client, DixGetAttrAccess);
|
||||||
if (i != Success)
|
if (i != Success)
|
||||||
return i;
|
return i;
|
||||||
|
|
||||||
|
|
|
@ -1299,7 +1299,7 @@ AuthorizedClient(ClientPtr client)
|
||||||
return Success;
|
return Success;
|
||||||
|
|
||||||
/* untrusted clients can't change host access */
|
/* untrusted clients can't change host access */
|
||||||
rc = XaceHook(XACE_SERVER_ACCESS, client, DixManageAccess);
|
rc = XaceHookServerAccess(client, DixManageAccess);
|
||||||
if (rc != Success)
|
if (rc != Success)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
|
|
|
@ -866,7 +866,7 @@ OnlyListenToOneClient(ClientPtr client)
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
rc = XaceHook(XACE_SERVER_ACCESS, client, DixGrabAccess);
|
rc = XaceHookServerAccess(client, DixGrabAccess);
|
||||||
if (rc != Success)
|
if (rc != Success)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
|
|
|
@ -6959,7 +6959,7 @@ ProcXkbSetDebuggingFlags(ClientPtr client)
|
||||||
REQUEST(xkbSetDebuggingFlagsReq);
|
REQUEST(xkbSetDebuggingFlagsReq);
|
||||||
REQUEST_AT_LEAST_SIZE(xkbSetDebuggingFlagsReq);
|
REQUEST_AT_LEAST_SIZE(xkbSetDebuggingFlagsReq);
|
||||||
|
|
||||||
rc = XaceHook(XACE_SERVER_ACCESS, client, DixDebugAccess);
|
rc = XaceHookServerAccess(client, DixDebugAccess);
|
||||||
if (rc != Success)
|
if (rc != Success)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue