#define HOOK_NAME "device" #include #include #include #include #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; }