ProcQueryKeymap: rework logic around permission to copy key states

Always initialize to zero, and then if permission is granted, copy
the current key state maps, instead of always copying and then
zeroing out if permission was denied.

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Reviewed-by: Keith Packard <keithp@keithp.com>
Tested-by: Daniel Stone <daniel@fooishbar.org>
This commit is contained in:
Alan Coopersmith 2012-07-09 19:12:42 -07:00
parent dccb0858d7
commit c2fb1a7b2a

View File

@ -2388,17 +2388,19 @@ ProcQueryKeymap(ClientPtr client)
rep.type = X_Reply;
rep.sequenceNumber = client->sequence;
rep.length = 2;
memset(rep.map, 0, 32);
rc = XaceHook(XACE_DEVICE_ACCESS, client, keybd, DixReadAccess);
if (rc != Success && rc != BadAccess)
/* If rc is Success, we're allowed to copy out the keymap.
* If it's BadAccess, we leave it empty & lie to the client.
*/
if (rc == Success) {
for (i = 0; i < 32; i++)
rep.map[i] = down[i];
}
else if (rc != BadAccess)
return rc;
for (i = 0; i < 32; i++)
rep.map[i] = down[i];
if (rc == BadAccess)
memset(rep.map, 0, 32);
WriteReplyToClient(client, sizeof(xQueryKeymapReply), &rep);
return Success;