X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/e0e7dff87dc3f482da6ab00317664474b0f82995..6e7a48828dc13d077e278df1c0598f6bfa66ef0b:/unix/ux_x11.c diff --git a/unix/ux_x11.c b/unix/ux_x11.c index 7753c854..67c76f83 100644 --- a/unix/ux_x11.c +++ b/unix/ux_x11.c @@ -13,22 +13,31 @@ void platform_get_x11_auth(char *display, int *protocol, char *command; int maxsize = *datalen; char *localbuf; + int proto = -1; - command = dupprintf("xauth list %s 2>/dev/null", display); + /* + * Normally we should run `xauth list DISPLAYNAME'. However, + * there's an oddity when the display is local: the display + * `localhost:0' (or `:0') should become just `:0'. + */ + if (!strncmp(display, "localhost:", 10)) + command = dupprintf("xauth list %s 2>/dev/null", display+9); + else + command = dupprintf("xauth list %s 2>/dev/null", display); fp = popen(command, "r"); sfree(command); if (!fp) return; /* assume no auth */ - localbuf = smalloc(maxsize); + localbuf = snewn(maxsize, char); while (1) { /* * Read a line from stdin, and attempt to parse it into a * display name (ignored), auth protocol, and auth string. */ - int c, i, hexdigit, proto; + int c, i, hexdigit; char protoname[64]; /* Skip the display name. */