diff options
author | Mihai Moldovan <ionic@ionic.de> | 2017-11-03 12:30:12 +0100 |
---|---|---|
committer | Mihai Moldovan <ionic@ionic.de> | 2017-11-03 15:32:18 +0100 |
commit | bd25453bd41957079c7516adf407b8785ef22f1f (patch) | |
tree | dc47e95c6407989185d9bfd91297dea791f7721b /nxcomp/src | |
parent | 1c6c9c04b56656d9ab3f486738a4950e71f29b74 (diff) | |
download | nx-libs-bd25453bd41957079c7516adf407b8785ef22f1f.tar.gz nx-libs-bd25453bd41957079c7516adf407b8785ef22f1f.tar.bz2 nx-libs-bd25453bd41957079c7516adf407b8785ef22f1f.zip |
nxcomp/src/Auth.cpp: handle launchd sockets in DISPLAY variable correctly when fetching X cookie.
Diffstat (limited to 'nxcomp/src')
-rw-r--r-- | nxcomp/src/Auth.cpp | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/nxcomp/src/Auth.cpp b/nxcomp/src/Auth.cpp index d42c0556d..d398f5f85 100644 --- a/nxcomp/src/Auth.cpp +++ b/nxcomp/src/Auth.cpp @@ -279,11 +279,33 @@ int Auth::getCookie() // char line[DEFAULT_STRING_LIMIT]; + FILE *data = NULL; + int result = -1; if (strncmp(display_, "localhost:", 10) == 0) { snprintf(line, DEFAULT_STRING_LIMIT, "unix:%s", display_ + 10); } + else if ((0 == strncasecmp(display_, "/tmp/launch", 11)) || (0 == strncasecmp(display_, "/private/tmp/com.apple.launchd", 30))) + { + /* + * Launchd socket support, mostly for OS X, but maybe also other BSD derivates. + */ + const char *separator = strrchr(display_, ':'); + + if ((NULL == separator) || (!isdigit(*(separator + 1)))) + { + #ifdef PANIC + *logofs << "Auth: PANIC! Unable to find separating colon character '" + << "in launchd socket path '" << display_ + << "'.\n" << logofs_flush; + #endif + + goto AuthGetCookieResult; + } + + snprintf(line, DEFAULT_STRING_LIMIT, "unix:%s", separator + 1); + } else { snprintf(line, DEFAULT_STRING_LIMIT, "%.200s", display_); @@ -316,9 +338,7 @@ int Auth::getCookie() // implementation. // - FILE *data = Popen((char *const *) parameters, "r"); - - int result = -1; + data = Popen((char *const *) parameters, "r"); if (data == NULL) { |