/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
+ * Copyright (C) 2010 Antoine Martin. All Rights Reserved.
+ * Copyright (C) 2010 D. R. Commander. All Rights Reserved.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
static void usage()
{
- fprintf(stderr,"usage: %s [file]\n",prog);
+ fprintf(stderr,"usage: %s [file]\n", prog);
+ fprintf(stderr," %s -f\n", prog);
exit(1);
}
return 0;
}
+// Reads password from stdin and prints encrypted password to stdout.
+static int encrypt_pipe() {
+ PlainPasswd buf(256);
+ fgets(buf.buf, 256, stdin);
+ ObfuscatedPasswd obfuscated(buf);
+ //fputs(prompt, stdout);
+ if (fwrite(obfuscated.buf, obfuscated.length, 1, stdout) != 1) {
+ fprintf(stderr,"Writing to stdout failed\n");
+ return 1;
+ }
+ return 0;
+}
int main(int argc, char** argv)
{
for (int i = 1; i < argc; i++) {
if (strcmp(argv[i], "-q") == 0) { // allowed for backwards compatibility
+ } else if (strncmp(argv[i], "-f", 2) == 0) {
+ return encrypt_pipe();
} else if (argv[i][0] == '-') {
usage();
} else if (!fname) {
-.TH vncpasswd 1 "05 May 2006" "TigerVNC" "Virtual Network Computing"
+.TH vncpasswd 1 "09 Jul 2010" "TigerVNC" "Virtual Network Computing"
.SH NAME
-vncpasswd \- change a VNC password
+vncpasswd \- change the VNC password
.SH SYNOPSIS
-.B vncpasswd
-.RI [ passwd-file ]
+\fBvncpasswd\fR [\fIpasswd-file\fR]
+.br
+\fBvncpasswd\fR \-f
.SH DESCRIPTION
.B vncpasswd
-allows you to set the password used to access VNC desktops. It stores an
-obfuscated version of the password in the given file (default
-$HOME/.vnc/passwd). The \fBvncserver\fP script runs \fBvncpasswd\fP the first
-time you start a VNC desktop, and invokes \fBXvnc\fP with the appropriate
+allows you to set the password used to access VNC desktops. Its default
+behavior is to prompt for a VNC password and then store an obfuscated version
+of this password to \fIpasswd-file\fR (or to $HOME/.vnc/passwd if no password
+file is specified.) The \fBvncserver\fP script runs \fBvncpasswd\fP the first
+time you start a VNC desktop, and it invokes \fBXvnc\fP with the appropriate
\fB\-rfbauth\fP option. \fBvncviewer\fP can also be given a password file to
use via the \fB\-passwd\fP option.
-The password must be at least six characters long, and only the first eight
+The password must be at least six characters long (unless the \fB\-f\fR
+command-line option is used-- see below), and only the first eight
characters are significant. Note that the stored password is \fBnot\fP
encrypted securely - anyone who has access to this file can trivially find out
-the plaintext password, so \fBvncpasswd\fP always sets appropriate permissions
-(read and write only by the owner). However, when accessing a VNC desktop a
+the plain-text password, so \fBvncpasswd\fP always sets appropriate permissions
+(read and write only by the owner.) However, when accessing a VNC desktop, a
challenge-response mechanism is used over the wire making it hard for anyone to
crack the password simply by snooping on the network.
+.SH OPTIONS
+
+.TP
+.B \-f
+Filter mode. Read a plain-text password from stdin and write an encrypted
+version to stdout. Note that in filter mode, short or even empty passwords
+will be silently accepted.
+
+
.SH FILES
.TP
$HOME/.vnc/passwd
.br
http://www.tigervnc.org
-.SH AUTHOR
+.SH AUTHORS
Tristan Richardson, RealVNC Ltd.
+.br
+Antoine Martin
+.br
+D. R. Commander
VNC was originally developed by the RealVNC team while at Olivetti
Research Ltd / AT&T Laboratories Cambridge. TightVNC additions were