ref: e0c7243e69b72e50bc358d47fd0877d6ba85fdb9
parent: d5f0cc1ecfc6df467bf2549d6a11a738205f4297
	author: cinap_lenrek <cinap_lenrek@felloff.net>
	date: Thu Aug 16 16:34:46 EDT 2018
	
vncv: handle [] enclosed literal ipv6 addresses in host
--- a/sys/src/cmd/vnc/auth.c
+++ b/sys/src/cmd/vnc/auth.c
@@ -53,7 +53,6 @@
char *reason;
uchar chal[VncChalLen];
ulong auth;
- char *p, *server;
if(keypattern == nil)
keypattern = "";
@@ -79,16 +78,10 @@
case AVncAuth:
vncrdbytes(v, chal, VncChalLen);
- server = strdup(serveraddr);
- p = strrchr(server, ':');
- if(p)
- *p = 0;
if(auth_respond(chal, VncChalLen, nil, 0, chal, VncChalLen, auth_getkey,
-			"proto=vnc role=client server=%s %s", server, keypattern) != VncChalLen){- free(server);
+			"proto=vnc role=client server=%s %s", serveraddr, keypattern) != VncChalLen){return -1;
}
- free(server);
vncwrbytes(v, chal, VncChalLen);
vncflush(v);
--- a/sys/src/cmd/vnc/vncv.c
+++ b/sys/src/cmd/vnc/vncv.c
@@ -51,7 +51,9 @@
port = 5900;
if(tls)
port = 35729;
-	if(p = strchr(server, ':')) {+ if((p = strchr(server, ']')) == nil)
+ p = server;
+	if((p = strchr(p, ':')) != nil) {*p++ = '\0';
port += atoi(p);
}
@@ -110,7 +112,7 @@
usage();
serveraddr = strdup(argv[0]);
- dfd = dial(netmkvncaddr(argv[0]), nil, nil, &cfd);
+ dfd = dial(netmkvncaddr(serveraddr), nil, nil, &cfd);
if(dfd < 0)
 		sysfatal("cannot dial %s: %r", serveraddr); 	if(tls){@@ -132,7 +134,7 @@
if(vncstart(vnc, shared) < 0)
 		sysfatal("init failure: %r");-	label = smprint("vnc %s", serveraddr);+	label = smprint("vnc %s", argv[0]);if(initdraw(0, 0, label) < 0)
 		sysfatal("initdraw: %r");free(label);
--
⑨