diff options
author | Peter Hutterer <peter@cs.unisa.edu.au> | 2008-01-21 23:43:53 +1030 |
---|---|---|
committer | Peter Hutterer <peter@cs.unisa.edu.au> | 2008-01-21 23:44:07 +1030 |
commit | ba315ae5ddd00763147a4b0cdcacba7691793dfc (patch) | |
tree | d5267e1b1b3971e583391842eeb75820a890b7ae | |
parent | 6492d513c0022d70f838d1b2561442c7a41e401f (diff) |
Xi: add XACE hooks for device creation (ChangeDeviceHierarchy)
AddInputDevice checks for permissions already, so all we do is modify a few
callers to let AID sort it out.
-rw-r--r-- | Xi/chdevhier.c | 10 | ||||
-rw-r--r-- | dix/devices.c | 12 | ||||
-rw-r--r-- | hw/vfb/InitInput.c | 4 | ||||
-rw-r--r-- | hw/xfree86/common/xf86Xinput.c | 2 | ||||
-rw-r--r-- | hw/xnest/Init.c | 4 | ||||
-rw-r--r-- | include/input.h | 4 | ||||
-rw-r--r-- | xkb/xkbLEDs.c | 3 |
7 files changed, 21 insertions, 18 deletions
diff --git a/Xi/chdevhier.c b/Xi/chdevhier.c index 65ff3873b..b7495678a 100644 --- a/Xi/chdevhier.c +++ b/Xi/chdevhier.c @@ -52,6 +52,7 @@ from the author. #include "exevents.h" #include "exglobals.h" #include "geext.h" +#include "xace.h" #include "chdevhier.h" @@ -104,20 +105,17 @@ ProcXChangeDeviceHierarchy(ClientPtr client) { xCreateMasterInfo* c = (xCreateMasterInfo*)any; char* name; - int ret; - - /* XXX: check for creation permission */ SWAPIF(swaps(&c->namelen, n)); name = xcalloc(c->namelen + 1, sizeof(char)); strncpy(name, (char*)&c[1], c->namelen); - ret = AllocMasterDevice(name, &ptr, &keybd); - if (ret != Success) + rc = AllocMasterDevice(client, name, &ptr, &keybd); + if (rc != Success) { xfree(name); - return ret; + return rc; } if (!c->sendCore) diff --git a/dix/devices.c b/dix/devices.c index e78c1e7ec..0ffc798e8 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -100,7 +100,7 @@ DevPrivateKey CoreDevicePrivateKey = &CoreDevicePrivateKey; * @return The newly created device. */ DeviceIntPtr -AddInputDevice(DeviceProc deviceProc, Bool autoStart) +AddInputDevice(ClientPtr client, DeviceProc deviceProc, Bool autoStart) { DeviceIntPtr dev, *prev; /* not a typo */ DeviceIntPtr devtmp; @@ -562,9 +562,9 @@ CorePointerProc(DeviceIntPtr pDev, int what) void InitCoreDevices(void) { - if (AllocMasterDevice("Virtual core", + if (AllocMasterDevice(serverClient, "Virtual core", &inputInfo.pointer, - &inputInfo.keyboard) == BadAlloc) + &inputInfo.keyboard) != Success) FatalError("Failed to allocate core devices"); } @@ -2597,13 +2597,13 @@ NextFreePointerDevice() * EnableDevice() manually. */ int -AllocMasterDevice(char* name, DeviceIntPtr* ptr, DeviceIntPtr* keybd) +AllocMasterDevice(ClientPtr client, char* name, DeviceIntPtr* ptr, DeviceIntPtr* keybd) { DeviceIntPtr pointer; DeviceIntPtr keyboard; *ptr = *keybd = NULL; - pointer = AddInputDevice(CorePointerProc, TRUE); + pointer = AddInputDevice(client, CorePointerProc, TRUE); if (!pointer) return BadAlloc; @@ -2628,7 +2628,7 @@ AllocMasterDevice(char* name, DeviceIntPtr* ptr, DeviceIntPtr* keybd) pointer->u.lastSlave = NULL; pointer->isMaster = TRUE; - keyboard = AddInputDevice(CoreKeyboardProc, TRUE); + keyboard = AddInputDevice(client, CoreKeyboardProc, TRUE); if (!keyboard) return BadAlloc; diff --git a/hw/vfb/InitInput.c b/hw/vfb/InitInput.c index 99cf56c70..393698f35 100644 --- a/hw/vfb/InitInput.c +++ b/hw/vfb/InitInput.c @@ -318,8 +318,8 @@ void InitInput(int argc, char *argv[]) { DeviceIntPtr p, k; - p = AddInputDevice(vfbMouseProc, TRUE); - k = AddInputDevice(vfbKeybdProc, TRUE); + p = AddInputDevice(serverClient, vfbMouseProc, TRUE); + k = AddInputDevice(serverClient, vfbKeybdProc, TRUE); RegisterPointerDevice(p); RegisterKeyboardDevice(k); (void)mieqInit(); diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c index 92298e187..a3b19e98a 100644 --- a/hw/xfree86/common/xf86Xinput.c +++ b/hw/xfree86/common/xf86Xinput.c @@ -158,7 +158,7 @@ xf86ActivateDevice(LocalDevicePtr local) DeviceIntPtr dev; if (local->flags & XI86_CONFIGURED) { - dev = AddInputDevice(local->device_control, TRUE); + dev = AddInputDevice(serverClient, local->device_control, TRUE); if (dev == NULL) FatalError("Too many input devices"); diff --git a/hw/xnest/Init.c b/hw/xnest/Init.c index 7b344e25f..de80cb578 100644 --- a/hw/xnest/Init.c +++ b/hw/xnest/Init.c @@ -89,8 +89,8 @@ InitOutput(ScreenInfo *screenInfo, int argc, char *argv[]) void InitInput(int argc, char *argv[]) { - xnestPointerDevice = AddInputDevice(xnestPointerProc, TRUE); - xnestKeyboardDevice = AddInputDevice(xnestKeyboardProc, TRUE); + xnestPointerDevice = AddInputDevice(serverClient, xnestPointerProc, TRUE); + xnestKeyboardDevice = AddInputDevice(serverClient, xnestKeyboardProc, TRUE); if (!xnestEvents) xnestEvents = (xEvent *) xcalloc(sizeof(xEvent), GetMaximumEventsNum()); diff --git a/include/input.h b/include/input.h index da02aea8a..18636766b 100644 --- a/include/input.h +++ b/include/input.h @@ -180,6 +180,7 @@ typedef struct _InputOption { extern void InitCoreDevices(void); extern DeviceIntPtr AddInputDevice( + ClientPtr /*client*/, DeviceProc /*deviceProc*/, Bool /*autoStart*/); @@ -471,7 +472,8 @@ extern Bool RegisterPairingClient(ClientPtr client); extern DeviceIntPtr GuessFreePointerDevice(void); extern DeviceIntPtr NextFreePointerDevice(void); -extern int AllocMasterDevice(char* name, +extern int AllocMasterDevice(ClientPtr client, + char* name, DeviceIntPtr* ptr, DeviceIntPtr* keybd); extern void DeepCopyDeviceClasses(DeviceIntPtr from, diff --git a/xkb/xkbLEDs.c b/xkb/xkbLEDs.c index 2877af0c4..55ce12aad 100644 --- a/xkb/xkbLEDs.c +++ b/xkb/xkbLEDs.c @@ -63,6 +63,9 @@ XkbSrvLedInfoPtr sli; sli= XkbFindSrvLedInfo(dev,XkbDfltXIClass,XkbDfltXIId,0); + if (!sli) + return update; + if (state_changes&(XkbModifierStateMask|XkbGroupStateMask)) update|= sli->usesEffective; if (state_changes&(XkbModifierBaseMask|XkbGroupBaseMask)) |