Added a -k token=value option to vncv to remove key ambiguity as I needed it. Implemented it as a parameter to vncvauth() rather than in the Vnc struct, you may think this was a bad decision, trivial to change anyway. -Steve Reference: /n/sources/patch/applied/vncv-key-ambiguity Date: Mon Aug 14 12:24:42 CES 2006 Signed-off-by: steve@quintile.net --- /sys/man/1/vnc Mon Aug 14 12:12:50 2006 +++ /sys/man/1/vnc Mon Aug 14 12:12:48 2006 @@ -19,6 +19,10 @@ .IB width x height ] [ +.B -k +.I token=value +] +[ .B -p .I pixfmt ] @@ -108,6 +112,10 @@ (default 1024x768) pixels. +.TP +.B -k \fItoken=value +additional parameters may be passed to factotum(4) to +remove key ambiguity. .TP .B -p \fIpixfmt set the virtual frame buffer's internal pixel format to --- /sys/src/cmd/vnc/auth.c Mon Aug 14 12:13:03 2006 +++ /sys/src/cmd/vnc/auth.c Mon Aug 14 12:13:00 2006 @@ -143,7 +143,7 @@ } int -vncauth(Vnc *v) +vncauth(Vnc *v, char *keyinf) { char pw[128], *reason; uchar chal[VncChalLen]; @@ -177,7 +177,7 @@ if(p) *p = 0; if(auth_respond(chal, VncChalLen, nil, 0, chal, VncChalLen, auth_getkey, - "proto=vnc role=client server=%s", server) != VncChalLen){ + "proto=vnc role=client server=%s %s", server, keyinf) != VncChalLen){ /* BUG This is for drawterm users who don't start their own factotums */ readln("password: ", pw, sizeof(pw)); vncencrypt(chal, VncChalLen, pw); --- /sys/src/cmd/vnc/vncv.c Mon Aug 14 12:13:17 2006 +++ /sys/src/cmd/vnc/vncv.c Mon Aug 14 12:13:14 2006 @@ -72,7 +72,7 @@ void usage(void) { - fprint(2, "usage: vncv [-e encodings] [-csv] host[:n]\n"); + fprint(2, "usage: vncv [-e encodings] [-k keyinfo] [-csv] host[:n]\n"); exits("usage"); } @@ -80,10 +80,11 @@ main(int argc, char **argv) { int p, fd, dfd, cfd, shared; - char *addr; + char *keyinf, *addr; Point d; TLSconn conn; + keyinf=""; shared = 0; ARGBEGIN{ case 'c': @@ -101,6 +102,9 @@ case 'v': verbose = 1; break; + case 'k': + keyinf = ARGF(); + break; default: usage(); }ARGEND; @@ -123,7 +127,7 @@ if(vnchandshake(vnc) < 0) sysfatal("handshake failure: %r"); - if(vncauth(vnc) < 0) + if(vncauth(vnc, keyinf) < 0) sysfatal("authentication failure: %r"); if(vncstart(vnc, shared) < 0) sysfatal("init failure: %r"); --- /sys/src/cmd/vnc/vnc.h Mon Aug 14 12:13:35 2006 +++ /sys/src/cmd/vnc/vnc.h Mon Aug 14 12:13:33 2006 @@ -92,7 +92,7 @@ typedef ulong Color; /* auth.c */ -extern int vncauth(Vnc*); +extern int vncauth(Vnc*, char *); extern int vnchandshake(Vnc*); extern int vncsrvauth(Vnc*); extern int vncsrvhandshake(Vnc*);