Propagate the screen number from a local X display to the remote
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Thu, 2 Jan 2003 10:41:22 +0000 (10:41 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Thu, 2 Jan 2003 10:41:22 +0000 (10:41 +0000)
forwarded one. Fixes `x11-default-screen'.

git-svn-id: svn://svn.tartarus.org/sgt/putty@2418 cda61777-01e9-0310-a592-d414129be87e

ssh.c
x11fwd.c

diff --git a/ssh.c b/ssh.c
index ccd3ea0..7e064ec 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 35d1d17..d632e55 100644 (file)
--- a/x11fwd.c
+++ b/x11fwd.c
@@ -140,6 +140,24 @@ static void x11_sent(Plug plug, int 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.
  * 
  * Returns an error message, or NULL on success.