mirror of
git://anongit.mindrot.org/openssh.git
synced 2025-03-07 07:07:42 +00:00
If OSX is using launchd, remove screen no.
Check for socket with and without screen number. From Apple and Jakob Schlyter via bz#2341, with contributions from Ron Frederick, ok djm@
This commit is contained in:
parent
8fb15311a0
commit
da39b09d43
48
channels.c
48
channels.c
@ -4373,6 +4373,33 @@ connect_local_xsocket(u_int dnr)
|
|||||||
return connect_local_xsocket_path(buf);
|
return connect_local_xsocket_path(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
static int
|
||||||
|
is_path_to_xsocket(const char *display, char *path, size_t pathlen)
|
||||||
|
{
|
||||||
|
struct stat sbuf;
|
||||||
|
|
||||||
|
if (strlcpy(path, display, pathlen) >= pathlen) {
|
||||||
|
error("%s: display path too long", __func__);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (display[0] != '/')
|
||||||
|
return 0;
|
||||||
|
if (stat(path, &sbuf) == 0) {
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
char *dot = strrchr(path, '.');
|
||||||
|
if (dot != NULL) {
|
||||||
|
*dot = '\0';
|
||||||
|
if (stat(path, &sbuf) == 0) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int
|
int
|
||||||
x11_connect_display(void)
|
x11_connect_display(void)
|
||||||
{
|
{
|
||||||
@ -4394,15 +4421,22 @@ x11_connect_display(void)
|
|||||||
* connection to the real X server.
|
* connection to the real X server.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Check if the display is from launchd. */
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
if (strncmp(display, "/tmp/launch", 11) == 0) {
|
/* Check if display is a path to a socket (as set by launchd). */
|
||||||
sock = connect_local_xsocket_path(display);
|
{
|
||||||
if (sock < 0)
|
char path[PATH_MAX];
|
||||||
return -1;
|
|
||||||
|
|
||||||
/* OK, we now have a connection to the display. */
|
if (is_path_to_xsocket(display, path, sizeof(path))) {
|
||||||
return sock;
|
debug("x11_connect_display: $DISPLAY is launchd");
|
||||||
|
|
||||||
|
/* Create a socket. */
|
||||||
|
sock = connect_local_xsocket_path(path);
|
||||||
|
if (sock < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
/* OK, we now have a connection to the display. */
|
||||||
|
return sock;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user