Commit aaf4a59e authored by Mike Gabriel's avatar Mike Gabriel

Add X11 abstract socket support to nxcomp/nxproxy (027_nxcomp_abstract-X11-socket.full+lite.patch).

parent 3384aba3
Description: Add X11 abstract socket support to nxcomp/nxproxy
Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
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
{
027_nxcomp_abstract-X11-socket.full+lite.patch
028_nx-X11_abstract-kernel-sockets.full.patch 028_nx-X11_abstract-kernel-sockets.full.patch
029_nxcomp_ppc64.full+lite.patch 029_nxcomp_ppc64.full+lite.patch
030_nx-X11_configure-args.full.patch 030_nx-X11_configure-args.full.patch
......
...@@ -4250,6 +4250,39 @@ int SetupDisplaySocket(int &xServerAddrFamily, sockaddr *&xServerAddr, ...@@ -4250,6 +4250,39 @@ int SetupDisplaySocket(int &xServerAddrFamily, sockaddr *&xServerAddr,
// where the socket will be created. // 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; struct stat statInfo;
char unixSocketDir[DEFAULT_STRING_LENGTH]; char unixSocketDir[DEFAULT_STRING_LENGTH];
...@@ -4322,6 +4355,11 @@ int SetupDisplaySocket(int &xServerAddrFamily, sockaddr *&xServerAddr, ...@@ -4322,6 +4355,11 @@ int SetupDisplaySocket(int &xServerAddrFamily, sockaddr *&xServerAddr,
xServerAddr = (sockaddr *) xServerAddrUNIX; xServerAddr = (sockaddr *) xServerAddrUNIX;
xServerAddrLength = sizeof(sockaddr_un); xServerAddrLength = sizeof(sockaddr_un);
#ifdef __linux__
}
#endif
} }
else else
{ {
......
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