diff options
author | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2014-06-11 10:42:04 +0200 |
---|---|---|
committer | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2014-06-11 10:42:04 +0200 |
commit | 57fb5bb5733fb69c98a9c2fecb06ed4cd7b922f3 (patch) | |
tree | bb37c6c7311e8cd450f1073144ff7a9af5f1de72 /debian/patches/027_nxcomp_abstract-X11-socket.patch | |
parent | eb36421013cc93221136f37e7b2872d1bd457de7 (diff) | |
download | nx-libs-57fb5bb5733fb69c98a9c2fecb06ed4cd7b922f3.tar.gz nx-libs-57fb5bb5733fb69c98a9c2fecb06ed4cd7b922f3.tar.bz2 nx-libs-57fb5bb5733fb69c98a9c2fecb06ed4cd7b922f3.zip |
Add 027_nxcomp_abstract-X11-socket.patch. In proxy mode server let NX proxy attempt connecting to the abstract X11 socket first, and only fallback to the file system socket, if the abstract socket is not available. (Fixes: #505).
Diffstat (limited to 'debian/patches/027_nxcomp_abstract-X11-socket.patch')
-rw-r--r-- | debian/patches/027_nxcomp_abstract-X11-socket.patch | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/debian/patches/027_nxcomp_abstract-X11-socket.patch b/debian/patches/027_nxcomp_abstract-X11-socket.patch new file mode 100644 index 000000000..4f614338c --- /dev/null +++ b/debian/patches/027_nxcomp_abstract-X11-socket.patch @@ -0,0 +1,56 @@ +diff --git a/nxcomp/Loop.cpp b/nxcomp/Loop.cpp +index 92b6fc2..d86809d 100644 +--- a/nxcomp/Loop.cpp ++++ b/nxcomp/Loop.cpp +@@ -4250,6 +4250,39 @@ int SetupDisplaySocket(int &xServerAddrFamily, sockaddr *&xServerAddr, + // where the socket will be created. + // + ++ // Try abstract X11 socket first (via a test connect), if that fails ++ // fall back to Unix domain socket file. ++ ++ #ifdef __linux__ ++ int testSocketFD; ++ testSocketFD = socket(xServerAddrFamily, SOCK_STREAM, PF_UNSPEC); ++ ++ int len = sprintf(unixSocketName + 1, "/tmp/.X11-unix/X%d", xPort); ++ unixSocketName[0] = '\0'; ++ ++ sockaddr_un *xServerAddrABSTRACT = new sockaddr_un; ++ memset(xServerAddrABSTRACT, 0, xServerAddrLength); ++ xServerAddrABSTRACT -> sun_family = AF_UNIX; ++ memcpy(xServerAddrABSTRACT -> sun_path, unixSocketName, len+1); ++ xServerAddrLength = len +3; ++ ++ int ret = connect(testSocketFD, (struct sockaddr *) xServerAddrABSTRACT, xServerAddrLength); ++ if (ret == 0) { ++ ++ cerr << "Info" << ": Using abstract X11 socket in kernel namespace " ++ << "for accessing DISPLAY=:" << xPort << ".\n"; ++ ++ close(testSocketFD); ++ xServerAddr = (sockaddr *) xServerAddrABSTRACT; ++ return 1; ++ ++ } else { ++ ++ cerr << "Info" << ": Falling back to file system X11 socket " ++ << "for accessing DISPLAY=:" << xPort << ".\n"; ++ ++ #endif ++ + struct stat statInfo; + + char unixSocketDir[DEFAULT_STRING_LENGTH]; +@@ -4322,6 +4355,11 @@ int SetupDisplaySocket(int &xServerAddrFamily, sockaddr *&xServerAddr, + + xServerAddr = (sockaddr *) xServerAddrUNIX; + xServerAddrLength = sizeof(sockaddr_un); ++ ++ #ifdef __linux__ ++ ++ } ++ #endif + } + else + { |