From b5004722a208479a4bc762ff428bf4cbeb430d53 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 28 Apr 2008 10:26:01 +0930 Subject: Xi: Only return VCP, VCK and floating SDs to Xi 1.x clients. This is better than the approach implemented with 8973a3f7983240407dd6da59b3643f40e6a3d83a which disabled XI altogether for 1.x. Instead, return a device list that resembles a traditional XI setup on pre XI 2.0 servers. If the client tries to open a device other than a floating SD, return a BadDevice error. --- Xi/opendev.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'Xi/opendev.c') diff --git a/Xi/opendev.c b/Xi/opendev.c index f14f848bf..c51bb7e3f 100644 --- a/Xi/opendev.c +++ b/Xi/opendev.c @@ -62,6 +62,7 @@ SOFTWARE. #include "XIstubs.h" #include "windowstr.h" /* window structure */ #include "exglobals.h" +#include "exevents.h" #include "opendev.h" @@ -98,6 +99,7 @@ ProcXOpenDevice(ClientPtr client) int status = Success; xOpenDeviceReply rep; DeviceIntPtr dev; + XIClientPtr pXIClient; REQUEST(xOpenDeviceReq); REQUEST_SIZE_MATCH(xOpenDeviceReq); @@ -113,6 +115,15 @@ ProcXOpenDevice(ClientPtr client) } else if (status != Success) return status; + /* Don't let XI 1.x clients open devices other than floating SDs. */ + pXIClient = dixLookupPrivate(&client->devPrivates, XIClientPrivateKey); + if (pXIClient->major_version < XI_2_Major) + { + if (dev->isMaster || (!dev->isMaster && dev->u.master)) + return BadDevice; + } + + OpenInputDevice(dev, client, &status); if (status != Success) return status; -- cgit v1.2.3