X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=unix%2Fux_x11.c;h=e8d71959090efcbd287f3d40fe13fb5327a33aec;hb=11655820ca7ba0e3f15a900eb3c75f60b66944d5;hp=61b4f04c8070ddbca161f1a5d81728ff13ec3e99;hpb=fda998324345ba50a913655754303ce8f0a4cfde;p=PuTTY.git diff --git a/unix/ux_x11.c b/unix/ux_x11.c index 61b4f04c..e8d71959 100644 --- a/unix/ux_x11.c +++ b/unix/ux_x11.c @@ -4,7 +4,9 @@ #include #include +#include #include "putty.h" +#include "ssh.h" void platform_get_x11_auth(char *display, int *protocol, unsigned char *data, int *datalen) @@ -13,30 +15,35 @@ void platform_get_x11_auth(char *display, int *protocol, char *command; int maxsize = *datalen; char *localbuf; + int proto = -1; + display = x11_display(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); + if (!strncmp(display, "localhost:", 10) + || !strncmp(display, "unix:", 5)) + command = dupprintf("xauth list %s 2>/dev/null", + strchr(display, ':')); else command = dupprintf("xauth list %s 2>/dev/null", display); + sfree(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. */