65 lines
1.9 KiB
C
65 lines
1.9 KiB
C
#define HOOK_NAME "device"
|
|
|
|
#include <dix-config.h>
|
|
|
|
#include <X11/extensions/XIproto.h>
|
|
#include <X11/extensions/XI2proto.h>
|
|
#include <X11/extensions/XKB.h>
|
|
|
|
#include "dix/dix_priv.h"
|
|
#include "dix/extension_priv.h"
|
|
#include "dix/registry_priv.h"
|
|
#include "Xext/xacestr.h"
|
|
|
|
#include "namespace.h"
|
|
#include "hooks.h"
|
|
|
|
void hookDevice(CallbackListPtr *pcbl, void *unused, void *calldata)
|
|
{
|
|
XNS_HOOK_HEAD(XaceDeviceAccessRec);
|
|
|
|
if (subj->ns->superPower)
|
|
goto pass;
|
|
|
|
// should be safe to pass for anybody
|
|
switch (client->majorOp) {
|
|
case X_QueryPointer:
|
|
case X_GetInputFocus:
|
|
case X_GetKeyboardMapping:
|
|
case X_GetModifierMapping:
|
|
case X_GrabButton: // needed by xterm -- should be safe
|
|
goto pass;
|
|
case EXTENSION_MAJOR_XKEYBOARD:
|
|
switch(client->minorOp) {
|
|
case X_kbSelectEvents: // needed by xterm
|
|
case X_kbGetMap: // needed by xterm
|
|
case X_kbBell: // needed by GIMP
|
|
case X_kbPerClientFlags: // needed by firefox
|
|
case X_kbGetState: // needed by firefox
|
|
case X_kbGetNames: // needed by firefox
|
|
case X_kbGetControls: // needed by firefox
|
|
goto pass;
|
|
default:
|
|
XNS_HOOK_LOG("BLOCKED unhandled XKEYBOARD %s\n", LookupRequestName(client->majorOp, client->minorOp));
|
|
goto block;
|
|
}
|
|
case EXTENSION_MAJOR_XINPUT:
|
|
switch (client->minorOp) {
|
|
case X_ListInputDevices:
|
|
case X_XIQueryDevice:
|
|
goto pass;
|
|
default:
|
|
XNS_HOOK_LOG("BLOCKED unhandled Xinput request\n");
|
|
goto block;
|
|
}
|
|
}
|
|
|
|
block:
|
|
param->status = BadAccess;
|
|
return;
|
|
|
|
pass:
|
|
param->status = Success;
|
|
return;
|
|
}
|