]> asedeno.scripts.mit.edu Git - PuTTY.git/commitdiff
Propagate the screen number from a local X display to the remote
authorSimon Tatham <anakin@pobox.com>
Thu, 2 Jan 2003 10:41:22 +0000 (10:41 +0000)
committerSimon Tatham <anakin@pobox.com>
Thu, 2 Jan 2003 10:41:22 +0000 (10:41 +0000)
forwarded one. Fixes `x11-default-screen'.

[originally from svn r2418]

ssh.c
x11fwd.c

diff --git a/ssh.c b/ssh.c
index ccd3ea08c3d541c3aad493c8f8a0e506a9d2197b..7e064ece76e9fdb36ed783f3fcab1533c7d99ecf 100644 (file)
--- 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 {
index 35d1d175d2f91b79ffcbff6500c996b3406da107..d632e5534884cd624fab6a205a6fce08324b46c1 100644 (file)
--- 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.
  *