Blame SOURCES/xserver-1.4.99-ssh-isnt-local.patch

4724a4
From 66a3b14e118e90db80f96fcab52af4df35bc2377 Mon Sep 17 00:00:00 2001
4724a4
From: Adam Jackson <ajax@redhat.com>
4724a4
Date: Mon, 10 Dec 2007 11:26:57 -0500
4724a4
Subject: [PATCH] Hack for proper MIT-SHM rejection for ssh-forwarded clients.
4724a4
4724a4
---
4724a4
 Xext/shm.c |   16 ++++++++++++++++
4724a4
 1 file changed, 16 insertions(+)
4724a4
4724a4
diff --git a/Xext/shm.c b/Xext/shm.c
4724a4
index de48020..c011210 100644
4724a4
--- a/Xext/shm.c
4724a4
+++ b/Xext/shm.c
4724a4
@@ -321,8 +321,21 @@ shm_access(ClientPtr client, SHMPERM_TYPE * perm, int readonly)
4724a4
     mode_t mask;
4724a4
     int uidset = 0, gidset = 0;
4724a4
     LocalClientCredRec *lcc;
4724a4
+    Bool is_ssh = FALSE;
4724a4
 
4724a4
     if (GetLocalClientCreds(client, &lcc) != -1) {
4724a4
+#ifdef linux
4724a4
+	if (lcc->fieldsSet & LCC_PID_SET) {
4724a4
+	    /* ssh isn't actually a local client */
4724a4
+	    char exe[64], buf[64];
4724a4
+
4724a4
+	    memset(buf, 0, 64);
4724a4
+	    snprintf(exe, 64, "/proc/%d/exe", lcc->pid);
4724a4
+	    readlink(exe, buf, 63);
4724a4
+	    if (strstr(buf, "/ssh"))
4724a4
+		is_ssh = TRUE;
4724a4
+	}
4724a4
+#endif
4724a4
 
4724a4
         if (lcc->fieldsSet & LCC_UID_SET) {
4724a4
             uid = lcc->euid;
4724a4
@@ -342,6 +355,9 @@ shm_access(ClientPtr client, SHMPERM_TYPE * perm, int readonly)
4724a4
 #endif
4724a4
         FreeLocalClientCreds(lcc);
4724a4
 
4724a4
+        if (is_ssh)
4724a4
+            return -1;
4724a4
+
4724a4
         if (uidset) {
4724a4
             /* User id 0 always gets access */
4724a4
             if (uid == 0) {
4724a4
-- 
4724a4
1.7.10.1
4724a4