Commit 57fb5bb5 authored by Mike Gabriel's avatar Mike Gabriel

Add 027_nxcomp_abstract-X11-socket.patch. In proxy mode server let NX proxy…

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).
parent eb364210
...@@ -2,6 +2,10 @@ nx-libs (2:3.5.0.25-0x2go1) UNRELEASED; urgency=low ...@@ -2,6 +2,10 @@ nx-libs (2:3.5.0.25-0x2go1) UNRELEASED; urgency=low
* Add 606_nx-X11_build-on-aarch64.full.patch. Build on aarch64 * Add 606_nx-X11_build-on-aarch64.full.patch. Build on aarch64
architectures. (Fixes: #490). architectures. (Fixes: #490).
* 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).
-- Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Wed, 07 May 2014 09:58:10 +0200 -- Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Wed, 07 May 2014 09:58:10 +0200
......
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
{
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
026_nxcompext_honour-optflags.full.patch 026_nxcompext_honour-optflags.full.patch
026_nxcomp_honour-optflags.full+lite.patch 026_nxcomp_honour-optflags.full+lite.patch
026_nxcompshad_honour-optflags.full.patch 026_nxcompshad_honour-optflags.full.patch
027_nxcomp_abstract-X11-socket.patch
030_nx-X11_configure-args.full.patch 030_nx-X11_configure-args.full.patch
031_nx-X11_parallel-make.full.patch 031_nx-X11_parallel-make.full.patch
051_nxcomp_macos105-fdisset.full+lite.patch 051_nxcomp_macos105-fdisset.full+lite.patch
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment