From: Simon Tatham Date: Thu, 2 Jan 2003 10:41:22 +0000 (+0000) Subject: Propagate the screen number from a local X display to the remote X-Git-Tag: 0.54~658 X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=commitdiff_plain;h=368ead15bc3f85eba7dd1bfcf2ba5e014db9e463;p=PuTTY.git Propagate the screen number from a local X display to the remote forwarded one. Fixes `x11-default-screen'. [originally from svn r2418] --- diff --git a/ssh.c b/ssh.c index ccd3ea08..7e064ece 100644 --- a/ssh.c +++ b/ssh.c @@ -297,6 +297,7 @@ extern int x11_send(Socket, char *, int); extern void *x11_invent_auth(char *, int, char *, int); extern void x11_unthrottle(Socket s); extern void x11_override_throttle(Socket s, int enable); +extern int x11_get_screen_number(char *display); extern char *pfd_newconnect(Socket * s, char *hostname, int port, void *c); extern char *pfd_addforward(char *desthost, int destport, char *srcaddr, @@ -3037,7 +3038,8 @@ static void ssh1_protocol(Ssh ssh, unsigned char *in, int inlen, int ispkt) if (ssh->v1_local_protoflags & SSH1_PROTOFLAG_SCREEN_NUMBER) { send_packet(ssh, SSH1_CMSG_X11_REQUEST_FORWARDING, PKT_STR, proto, PKT_STR, data, - PKT_INT, 0, PKT_END); + PKT_INT, x11_get_screen_number(cfg.x11_display), + PKT_END); } else { send_packet(ssh, SSH1_CMSG_X11_REQUEST_FORWARDING, PKT_STR, proto, PKT_STR, data, PKT_END); @@ -5083,7 +5085,7 @@ static void do_ssh2_authconn(Ssh ssh, unsigned char *in, int inlen, int ispkt) ssh2_pkt_addbool(ssh, 0); /* many connections */ ssh2_pkt_addstring(ssh, proto); ssh2_pkt_addstring(ssh, data); - ssh2_pkt_adduint32(ssh, 0); /* screen number */ + ssh2_pkt_adduint32(ssh, x11_get_screen_number(cfg.x11_display)); ssh2_pkt_send(ssh); do { diff --git a/x11fwd.c b/x11fwd.c index 35d1d175..d632e553 100644 --- a/x11fwd.c +++ b/x11fwd.c @@ -139,6 +139,24 @@ static void x11_sent(Plug plug, int bufsize) sshfwd_unthrottle(pr->c, bufsize); } +/* + * When setting up X forwarding, we should send the screen number + * from the specified local display. This function extracts it from + * the display string. + */ +int x11_get_screen_number(char *display) +{ + int n; + + n = strcspn(display, ":"); + if (!display[n]) + return 0; + n = strcspn(display, "."); + if (!display[n]) + return 0; + return atoi(display + n + 1); +} + /* * Called to set up the raw connection. *