dd1864b
From 4306b434038de7e2b17d3c4a6cfd87db469d3bda Mon Sep 17 00:00:00 2001
dd1864b
From: Adam Jackson <ajax@redhat.com>
dd1864b
Date: Mon, 10 Dec 2007 11:26:57 -0500
dd1864b
Subject: [PATCH] Hack for proper MIT-SHM rejection for ssh-forwarded clients.
dd1864b
dd1864b
---
dd1864b
 Xext/shm.c |   15 +++++++++++++++
dd1864b
 1 files changed, 15 insertions(+), 0 deletions(-)
dd1864b
dd1864b
diff --git a/Xext/shm.c b/Xext/shm.c
dd1864b
index 5937a03..5376c19 100644
dd1864b
--- a/Xext/shm.c
dd1864b
+++ b/Xext/shm.c
e20863e
@@ -381,8 +381,21 @@
dd1864b
     mode_t mask;
dd1864b
     int uidset = 0, gidset = 0;
dd1864b
     LocalClientCredRec *lcc;
dd1864b
+    Bool is_ssh = FALSE;
dd1864b
     
dd1864b
     if (GetLocalClientCreds(client, &lcc) != -1) {
dd1864b
+#ifdef linux
dd1864b
+	if (lcc->fieldsSet & LCC_PID_SET) {
dd1864b
+	    /* ssh isn't actually a local client */
dd1864b
+	    char exe[64], buf[64];
dd1864b
+
e20863e
+	    memset(buf, 0, 64);
dd1864b
+	    snprintf(exe, 64, "/proc/%d/exe", lcc->pid);
e20863e
+	    readlink(exe, buf, 63);
dd1864b
+	    if (strstr(buf, "/ssh"))
dd1864b
+		is_ssh = TRUE;
dd1864b
+	}
dd1864b
+#endif
dd1864b
 
dd1864b
 	if (lcc->fieldsSet & LCC_UID_SET) {
dd1864b
 	    uid = lcc->euid;
e20863e
@@ -401,6 +414,9 @@
dd1864b
 	}
dd1864b
 #endif
dd1864b
 	FreeLocalClientCreds(lcc);
dd1864b
+
dd1864b
+	if (is_ssh)
dd1864b
+	    return -1;
dd1864b
 	
dd1864b
 	if (uidset) {
dd1864b
 	    /* User id 0 always gets access */
dd1864b
-- 
dd1864b
1.5.3.4
dd1864b