39 lines
1.2 KiB
Diff
39 lines
1.2 KiB
Diff
|
# HG changeset patch
|
||
|
# Parent 8df645ca39d64de025d8838c5713812e72308c92
|
||
|
Correctly parse DISPLAY variable for cases where it contains an IPv6 address
|
||
|
(which should - but not always is - in (square) brackets).
|
||
|
|
||
|
bnc#847710 - https://bugzilla.novell.com/show_bug.cgi?id=847710
|
||
|
|
||
|
Index: openssh-8.8p1/channels.c
|
||
|
===================================================================
|
||
|
--- openssh-8.8p1.orig/channels.c
|
||
|
+++ openssh-8.8p1/channels.c
|
||
|
@@ -4776,9 +4776,10 @@ x11_connect_display(struct ssh *ssh)
|
||
|
/*
|
||
|
* Connect to an inet socket. The DISPLAY value is supposedly
|
||
|
* hostname:d[.s], where hostname may also be numeric IP address.
|
||
|
+ * Note that IPv6 numeric addresses contain colons (e.g. ::1:0)
|
||
|
*/
|
||
|
strlcpy(buf, display, sizeof(buf));
|
||
|
- cp = strchr(buf, ':');
|
||
|
+ cp = strrchr(buf, ':');
|
||
|
if (!cp) {
|
||
|
error("Could not find ':' in DISPLAY: %.100s", display);
|
||
|
return -1;
|
||
|
@@ -4793,6 +4794,14 @@ x11_connect_display(struct ssh *ssh)
|
||
|
display);
|
||
|
return -1;
|
||
|
}
|
||
|
+
|
||
|
+ /* Remove brackets surrounding IPv6 addresses if there are any. */
|
||
|
+ if (buf[0] == '[' && (cp = strchr(buf, ']'))) {
|
||
|
+ *cp = 0;
|
||
|
+ cp = buf + 1;
|
||
|
+ } else {
|
||
|
+ cp = buf;
|
||
|
+ }
|
||
|
|
||
|
/* Look up the host address */
|
||
|
memset(&hints, 0, sizeof(hints));
|