xserver: Branch 'server-1.19-branch'
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Jun 15 05:12:13 UTC 2022
os/connection.c | 31 ++++++++++++++++++++++++++-----
1 file changed, 26 insertions(+), 5 deletions(-)
New commits:
commit 64b2987c45442244e141f78d4328b051e07ee493
Author: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
Date: Sat Sep 10 22:32:56 2016 -0700
os/connection: Improve abstraction for launchd secure sockets
This changes away from hard-coding the /tmp/launch-* path to now
supporting a generic <absolute path to unix socket>[.<screen>]
format for $DISPLAY.
cf-libxcb: d978a4f69b30b630f28d07f1003cf290284d24d8
Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu at apple.com>
CC: Adam Jackson <ajax at kemper.freedesktop.org>
(cherry picked from commit 83d0d911069d502232d719882cd1c5cd090defa1)
diff --git a/os/connection.c b/os/connection.c
index 62e298072..540d2422f 100644
--- a/os/connection.c
+++ b/os/connection.c
@@ -79,6 +79,8 @@ SOFTWARE.
#include <stdio.h>
#include <stdlib.h>
+#include <sys/stat.h>
+
#ifndef WIN32
#include <sys/socket.h>
@@ -1116,15 +1118,34 @@ MakeClientGrabPervious(ClientPtr client)
void
ListenOnOpenFD(int fd, int noxauth)
{
- char port[256];
+ char port[PATH_MAX];
XtransConnInfo ciptr;
const char *display_env = getenv("DISPLAY");
- if (display_env && (strncmp(display_env, "/tmp/launch", 11) == 0)) {
- /* Make the path the launchd socket if our DISPLAY is set right */
- strcpy(port, display_env);
+ /* First check if display_env matches a <absolute path to unix socket>[.<screen number>] scheme (eg: launchd) */
+ if (display_env && display_env[0] == '/') {
+ struct stat sbuf;
+
+ strlcpy(port, display_env, sizeof(port));
+
+ /* If the path exists, we don't have do do anything else.
+ * If it doesn't, we need to check for a .<screen number> to strip off and recheck.
+ */
+ if (0 != stat(port, &sbuf)) {
+ char *dot = strrchr(port, '.');
+ if (dot) {
+ *dot = '\0';
+
+ if (0 != stat(port, &sbuf)) {
+ display_env = NULL;
+ }
+ } else {
+ display_env = NULL;
+ }
+ }
}
- else {
+
+ if (!display_env) {
/* Just some default so things don't break and die. */
snprintf(port, sizeof(port), ":%d", atoi(display));
}
More information about the xorg-commit
mailing list