summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter@cs.unisa.edu.au>2008-01-21 23:43:53 +1030
committerPeter Hutterer <peter@cs.unisa.edu.au>2008-01-21 23:44:07 +1030
commitba315ae5ddd00763147a4b0cdcacba7691793dfc (patch)
treed5267e1b1b3971e583391842eeb75820a890b7ae
parent6492d513c0022d70f838d1b2561442c7a41e401f (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.c10
-rw-r--r--dix/devices.c12
-rw-r--r--hw/vfb/InitInput.c4
-rw-r--r--hw/xfree86/common/xf86Xinput.c2
-rw-r--r--hw/xnest/Init.c4
-rw-r--r--include/input.h4
-rw-r--r--xkb/xkbLEDs.c3
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))