Even though we hide local-only extensions from remote clients in the
extension list, make doubly sure they can't make a local-only request.

Signed-off-by: Daniel Stone <[email protected]>
---
 dix/dispatch.c |   11 +++++++----
 1 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/dix/dispatch.c b/dix/dispatch.c
index 192c8c3..835a4e4 100644
--- a/dix/dispatch.c
+++ b/dix/dispatch.c
@@ -427,10 +427,13 @@ Dispatch(void)
                if (result > (maxBigRequestSize << 2))
                    result = BadLength;
                else {
-                   result = XaceHookDispatch(client, MAJOROP);
-                   if (result == Success)
-                       result = (* client->requestVector[MAJOROP])(client);
-                   XaceHookAuditEnd(client, result);
+                    ExtensionEntry *ext = GetExtensionEntry(MAJOROP);
+                    if (!ext || !ext->localOnly || LocalClient(client)) {
+                        result = XaceHookDispatch(client, MAJOROP);
+                        if (result == Success)
+                            result = (* 
client->requestVector[MAJOROP])(client);
+                        XaceHookAuditEnd(client, result);
+                    }
                }
 #ifdef XSERVER_DTRACE
                XSERVER_REQUEST_DONE(LookupMajorName(MAJOROP), MAJOROP,
-- 
1.7.5.4

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to