mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-25 09:12:24 +00:00
OS X Leopard, it turns out, has a new and exciting strategy for
addressing X displays. Update PuTTY's display-name-to-Unix-socket- path translation code to cope with it, thus causing X forwarding to start working again on Leopard. [originally from svn r8020]
This commit is contained in:
parent
b0dc24a779
commit
14d825d42f
@ -175,7 +175,8 @@ int net_service_lookup(char *service)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
SockAddr platform_get_x11_unix_address(int displaynum, char **canonicalname)
|
SockAddr platform_get_x11_unix_address(const char *display, int displaynum,
|
||||||
|
char **canonicalname)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
3
ssh.h
3
ssh.h
@ -344,7 +344,8 @@ extern void platform_get_x11_auth(char *display, int *proto,
|
|||||||
unsigned char *data, int *datalen);
|
unsigned char *data, int *datalen);
|
||||||
extern const char platform_x11_best_transport[];
|
extern const char platform_x11_best_transport[];
|
||||||
/* best X11 hostname for this platform if none specified */
|
/* best X11 hostname for this platform if none specified */
|
||||||
SockAddr platform_get_x11_unix_address(int displaynum, char **canonicalname);
|
SockAddr platform_get_x11_unix_address(const char *display, int displaynum,
|
||||||
|
char **canonicalname);
|
||||||
/* make up a SockAddr naming the address for displaynum */
|
/* make up a SockAddr naming the address for displaynum */
|
||||||
char *platform_get_x_display(void);
|
char *platform_get_x_display(void);
|
||||||
/* allocated local X display string, if any */
|
/* allocated local X display string, if any */
|
||||||
|
20
unix/uxnet.c
20
unix/uxnet.c
@ -1292,15 +1292,29 @@ int net_service_lookup(char *service)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
SockAddr platform_get_x11_unix_address(int displaynum, char **canonicalname)
|
SockAddr platform_get_x11_unix_address(const char *display, int displaynum,
|
||||||
|
char **canonicalname)
|
||||||
{
|
{
|
||||||
SockAddr ret = snew(struct SockAddr_tag);
|
SockAddr ret = snew(struct SockAddr_tag);
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
memset(ret, 0, sizeof *ret);
|
memset(ret, 0, sizeof *ret);
|
||||||
ret->family = AF_UNIX;
|
ret->family = AF_UNIX;
|
||||||
n = snprintf(ret->hostname, sizeof ret->hostname,
|
/*
|
||||||
"%s%d", X11_UNIX_PATH, displaynum);
|
* Mac OS X Leopard uses an innovative X display naming
|
||||||
|
* convention in which the entire display name is the path to
|
||||||
|
* the Unix socket, including the trailing :0 which only
|
||||||
|
* _looks_ like a display number. Heuristically, I think
|
||||||
|
* detecting this by means of a leading slash ought to be
|
||||||
|
* adequate.
|
||||||
|
*/
|
||||||
|
if (display[0] == '/') {
|
||||||
|
n = snprintf(ret->hostname, sizeof ret->hostname,
|
||||||
|
"%s", display);
|
||||||
|
} else {
|
||||||
|
n = snprintf(ret->hostname, sizeof ret->hostname,
|
||||||
|
"%s%d", X11_UNIX_PATH, displaynum);
|
||||||
|
}
|
||||||
if(n < 0)
|
if(n < 0)
|
||||||
ret->error = "snprintf failed";
|
ret->error = "snprintf failed";
|
||||||
else if(n >= sizeof ret->hostname)
|
else if(n >= sizeof ret->hostname)
|
||||||
|
@ -1637,7 +1637,8 @@ int net_service_lookup(char *service)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
SockAddr platform_get_x11_unix_address(int displaynum, char **canonicalname)
|
SockAddr platform_get_x11_unix_address(const char *display, int displaynum,
|
||||||
|
char **canonicalname)
|
||||||
{
|
{
|
||||||
SockAddr ret = snew(struct SockAddr_tag);
|
SockAddr ret = snew(struct SockAddr_tag);
|
||||||
memset(ret, 0, sizeof(struct SockAddr_tag));
|
memset(ret, 0, sizeof(struct SockAddr_tag));
|
||||||
|
4
x11fwd.c
4
x11fwd.c
@ -301,9 +301,9 @@ const char *x11_init(Socket * s, char *display, void *c, void *auth,
|
|||||||
host[n] = '\0';
|
host[n] = '\0';
|
||||||
sfree(display);
|
sfree(display);
|
||||||
|
|
||||||
if(!strcmp(host, "unix")) {
|
if(!strcmp(host, "unix") || host[0] == '/') {
|
||||||
/* use AF_UNIX sockets (doesn't make sense on all platforms) */
|
/* use AF_UNIX sockets (doesn't make sense on all platforms) */
|
||||||
addr = platform_get_x11_unix_address(displaynum,
|
addr = platform_get_x11_unix_address(display, displaynum,
|
||||||
&dummy_realhost);
|
&dummy_realhost);
|
||||||
port = 0; /* to show we are not confused */
|
port = 0; /* to show we are not confused */
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user