summaryrefslogtreecommitdiffstats
path: root/x11vnc/help.c
diff options
context:
space:
mode:
authorrunge <runge>2006-03-28 05:43:04 +0000
committerrunge <runge>2006-03-28 05:43:04 +0000
commit5920dc18d75a53690ed8690867f501c51595daf1 (patch)
tree4f2eb03ac80b27ba03dedaa1a4b32640703b3d02 /x11vnc/help.c
parent10c61b53c275f125432fa20d8348aafcfed2bf93 (diff)
downloadlibtdevnc-5920dc18d75a53690ed8690867f501c51595daf1.tar.gz
libtdevnc-5920dc18d75a53690ed8690867f501c51595daf1.zip
SSL patch for Java viewer. https support for x11vnc.
Diffstat (limited to 'x11vnc/help.c')
-rw-r--r--x11vnc/help.c260
1 files changed, 156 insertions, 104 deletions
diff --git a/x11vnc/help.c b/x11vnc/help.c
index 81e5f46..544d26b 100644
--- a/x11vnc/help.c
+++ b/x11vnc/help.c
@@ -19,6 +19,8 @@ void print_help(int mode) {
"\n"
"x11vnc: allow VNC connections to real X11 displays. %s\n"
"\n"
+"(type \"x11vnc -opts\" to just list the options.)\n"
+"\n"
"Typical usage is:\n"
"\n"
" Run this command in a shell on the remote machine \"far-host\"\n"
@@ -423,20 +425,22 @@ void print_help(int mode) {
" send one before a 25 second timeout. Existing clients\n"
" are view-only during this period.\n"
"\n"
-" Since the detailed behavior of su(1) can vary from OS\n"
-" to OS and for local configurations, please test the mode\n"
+" Since the detailed behavior of su(1) can vary from\n"
+" OS to OS and for local configurations, test the mode\n"
" carefully on your systems before using it in production.\n"
-" E.g. try different combinations of valid/invalid\n"
-" usernames and valid/invalid passwords to see if it\n"
-" behaves correctly. x11vnc will be conservative and\n"
-" reject a user if anything abnormal occurs.\n"
-" \n"
-" For example, on FreeBSD and the other BSD's by default\n"
-" it is impossible for the user running x11vnc to validate\n"
-" his *own* password via su(1) (evidently commenting\n"
-" out the pam_self.so entry in /etc/pam.d/su eliminates\n"
-" the problem). So the x11vnc login will always fail for\n"
-" this case. A possible workaround would be to start\n"
+" Test different combinations of valid/invalid usernames\n"
+" and valid/invalid passwords to see if it behaves as\n"
+" expected. x11vnc will attempt to be conservative and\n"
+" reject a login if anything abnormal occurs.\n"
+"\n"
+" On FreeBSD and the other BSD's by default it is\n"
+" impossible for the user running x11vnc to validate\n"
+" his *own* password via su(1) (evidently commenting out\n"
+" the pam_self.so entry in /etc/pam.d/su eliminates this\n"
+" problem). So the x11vnc login will always *fail* for\n"
+" this case (even when the correct password is supplied).\n"
+"\n"
+" A possible workaround for this would be to start\n"
" x11vnc as root with the \"-users +nobody\" option to\n"
" immediately switch to user nobody. Another source of\n"
" problems are PAM modules that prompt for extra info,\n"
@@ -459,48 +463,50 @@ void print_help(int mode) {
" -stunnel SSL mode be used for encryption over the\n"
" network.(see the description of -stunnel below).\n"
"\n"
-" As a convenience, if you ssh(1) in and start x11vnc it\n"
-" will check if the environment variable SSH_CONNECTION\n"
-" is set and appears reasonable. If it does, then the\n"
-" -ssl or -stunnel requirement will be dropped since it is\n"
-" assumed you are using ssh for the encrypted tunnelling.\n"
-" -localhost is still enforced. Use -ssl or -stunnel to\n"
-" force SSL usage for this case.\n"
+" Note: as a convenience, if you ssh(1) in and start\n"
+" x11vnc it will check if the environment variable\n"
+" SSH_CONNECTION is set and appears reasonable. If it\n"
+" does, then the -ssl or -stunnel requirement will be\n"
+" dropped since it is assumed you are using ssh for the\n"
+" encrypted tunnelling. -localhost is still enforced.\n"
+" Use -ssl or -stunnel to force SSL usage even if\n"
+" SSH_CONNECTION is set.\n"
"\n"
-" To override these restrictions you can set environment\n"
-" variables before starting x11vnc:\n"
+" To override the above restrictions you can set\n"
+" environment variables before starting x11vnc:\n"
"\n"
" Set UNIXPW_DISABLE_SSL=1 to disable requiring either\n"
" -ssl or -stunnel. Evidently you will be using a\n"
" different method to encrypt the data between the\n"
-" vncviewer and x11vnc: e.g. ssh(1) or a VPN. Note that\n"
-" use of -localhost with ssh(1) is roughly the same as\n"
-" requiring a Unix user login (since a Unix password or\n"
-" the user's public key authentication is used by sshd on\n"
-" the machine where x11vnc runs and only local connections\n"
-" are accepted)\n"
+" vncviewer and x11vnc: perhaps ssh(1) or an IPSEC VPN.\n"
+"\n"
+" Note that use of -localhost with ssh(1) is roughly\n"
+" the same as requiring a Unix user login (since a Unix\n"
+" password or the user's public key authentication is\n"
+" used by sshd on the machine where x11vnc runs and only\n"
+" local connections from that machine are accepted)\n"
"\n"
" Set UNIXPW_DISABLE_LOCALHOST=1 to disable the -localhost\n"
" requirement in Method 2). One should never do this\n"
" (i.e. allow the Unix passwords to be sniffed on the\n"
" network).\n"
"\n"
-" Regarding reverse connections (e.g. -R connect:host),\n"
-" if the -localhost constraint is in effect then reverse\n"
-" connections can only be used to connect to the same\n"
-" machine x11vnc is running on (default port 5500).\n"
-" Please use a ssh or stunnel port redirection to the\n"
-" viewer machine to tunnel the reverse connection over\n"
-" an encrypted channel. Note that in -ssl mode reverse\n"
-" connection are disabled.\n"
-"\n"
-" XXX -inetd + -ssl\n"
-" In -inetd mode the two settings are attempted to be\n"
-" enforced for reverse connections. Be sure to also\n"
-" use encryption from the viewer to inetd since x11vnc\n"
-" cannot guess easily if it is encrpyted. Tip: you can\n"
-" also have your own stunnel spawn x11vnc in -inetd mode\n"
-" (i.e. bypassing inetd). See the FAQ for details.\n"
+" Regarding reverse connections (e.g. -R connect:host\n"
+" and -connect host), when the -localhost constraint is\n"
+" in effect then reverse connections can only be used\n"
+" to connect to the same machine x11vnc is running on\n"
+" (default port 5500). Please use a ssh or stunnel port\n"
+" redirection to the viewer machine to tunnel the reverse\n"
+" connection over an encrypted channel. Note that in -ssl\n"
+" mode reverse connection are disabled (see below).\n"
+"\n"
+" In -inetd mode the Method 1) will be enforced (not\n"
+" Method 2). With -ssl in effect reverse connections\n"
+" are disabled. If you override this via env. var, be\n"
+" sure to also use encryption from the viewer to inetd.\n"
+" Tip: you can also have your own stunnel spawn x11vnc\n"
+" in -inetd mode (thereby bypassing inetd). See the FAQ\n"
+" for details.\n"
"\n"
" The user names in the comma separated [list] can have\n"
" per-user options after a \":\", e.g. \"fred:opts\"\n"
@@ -515,22 +521,24 @@ void print_help(int mode) {
" Use \"deny\" to explicitly deny some users if you use\n"
" \"*\" to set a global option.\n"
"\n"
-" There are also some tools for testing password if [list]\n"
-" starts with the \"%\" character. See the quick_pw()\n"
-" function for details.\n"
+" There are also some utilities for testing password\n"
+" if [list] starts with the \"%\" character. See the\n"
+" quick_pw() function in the source for details.\n"
"\n"
"-unixpw_nis [list] As -unixpw above, however do not use su(1) but rather\n"
-" use the traditional getpwnam(3) + crypt(3) method\n"
-" instead. This requires that the encrpyted passwords\n"
-" be readable. Passwords stored in /etc/shadow will\n"
-" be inaccessible unless run as root. This is called\n"
-" \"NIS\" mode simply because in most NIS setups the\n"
-" user encrypted passwords are accessible (e.g. \"ypcat\n"
-" passwd\"). NIS is not required for this mode to work\n"
-" (only that getpwnam(3) return the encrpyted password\n"
-" is required), but it is unlikely it will work for any\n"
-" other environment. All of the -unixpw options and\n"
-" contraints apply.\n"
+" use the traditional getpwnam(3) + crypt(3) method to\n"
+" verify passwords instead. This requires that the\n"
+" encrpyted passwords be readable. Passwords stored\n"
+" in /etc/shadow will be inaccessible unless x11vnc\n"
+" is run as root.\n"
+"\n"
+" This is called \"NIS\" mode simply because in most\n"
+" NIS setups the user encrypted passwords are accessible\n"
+" (e.g. \"ypcat passwd\"). NIS is not required for this\n"
+" mode to work (only that getpwnam(3) return the encrpyted\n"
+" password is required), but it is unlikely it will work\n"
+" for any other modern environment. All of the -unixpw\n"
+" options and contraints apply.\n"
"\n"
"-ssl [pem] Use the openssl library (www.openssl.org) to provide a\n"
" built-in encrypted SSL tunnel between VNC viewers and\n"
@@ -539,30 +547,33 @@ void print_help(int mode) {
" with libssl support it will exit immediately when -ssl\n"
" is prescribed.\n"
"\n"
-" [pem] is optional, use \"-ssl /path/to/mycert.pem\" to\n"
-" specify a PEM certificate file to use to identify and\n"
-" provide a key for this server.\n"
-"\n"
-" Connecting VNC viewer SSL tunnels can authenticate\n"
-" this server if they have the public key part of the\n"
-" certificate (or a common certificate authority, CA,\n"
-" verifies this server's cert). This is used to prevent\n"
-" man-in-the-middle attacks. Otherwise, if the VNC viewer\n"
-" accepts this server's key without verification, at\n"
-" least the traffic is protected from passive sniffing\n"
-" on the network.\n"
+" [pem] is optional, use \"-ssl /path/to/mycert.pem\"\n"
+" to specify a PEM certificate file to use to identify\n"
+" and provide a key for this server. See openssl(1)\n"
+" for what a PEM can be.\n"
+"\n"
+" Connecting VNC viewer SSL tunnels can optionally\n"
+" authenticate this server if they have the public\n"
+" key part of the certificate (or a common certificate\n"
+" authority, CA, is a more sophisicated way to verify\n"
+" this server's cert). This is used to prevent\n"
+" man-in-the-middle attacks. Otherwise, if the VNC\n"
+" viewer accepts this server's key without verification,\n"
+" at least the traffic is protected from passive sniffing\n"
+" on the network (but NOT from man-in-the-middle attacks).\n"
"\n"
" If [pem] is not supplied and the openssl(1) utility\n"
" command exists in PATH, then a temporary, self-signed\n"
" certificate will be generated for this session (this\n"
-" may take 5-20 seconds on slow machines). If openssl(1)\n"
+" may take 5-30 seconds on slow machines). If openssl(1)\n"
" cannot be used to generate a temporary certificate\n"
" x11vnc exits immediately.\n"
"\n"
" If successful in using openssl(1) to generate a\n"
-" certificate, the public part of it will be displayed\n"
-" to stdout (e.g. one could copy it to the client-side\n"
-" to provide authentication of the server to VNC viewers.)\n"
+" temporary certificate, the public part of it will be\n"
+" displayed to stderr (e.g. one could copy it to the\n"
+" client-side to provide authentication of the server to\n"
+" VNC viewers.)\n"
"\n"
" Set the env. var. X11VNC_SHOW_TMP_PEM=1 to have x11vnc\n"
" print out the entire certificate, including the PRIVATE\n"
@@ -572,20 +583,23 @@ void print_help(int mode) {
" will be printed to stderr (so one could move it to a\n"
" safe place for reuse).\n"
"\n"
-" Reverse connections are disabled in -ssl\n"
-" mode because the data cannot be encrypted.\n"
-" Set X11VNC_SSL_ALLOW_REVERSE=1 to override this.\n"
+" Reverse connections are disabled in -ssl mode because\n"
+" there is no way to ensure that data channel will\n"
+" be encrypted. Set X11VNC_SSL_ALLOW_REVERSE=1 to\n"
+" override this.\n"
"\n"
" Your VNC viewer will also need to be able to connect\n"
-" via SSL. See the discussion below under -stunnel and\n"
-" the FAQ for how this might be achieved. E.g. on Unix it\n"
-" is easy to write a shell script that starts up stunnel\n"
-" and then vncviewer.\n"
+" via SSL. See the discussion below under -stunnel\n"
+" and the FAQ for how this might be achieved. E.g. on\n"
+" Unix it is easy to write a shell script that starts up\n"
+" stunnel and then vncviewer. Also in the x11vnc source\n"
+" a SSL enabled Java VNC Viewer applet is provided in\n"
+" the classes/ssl directory.\n"
"\n"
"-sslverify [path] For either of the -ssl or -stunnel modes, use [path]\n"
" to provide certificates to authenticate incoming VNC\n"
" client connections. This can be used as a method to\n"
-" replace standard password authentication.\n"
+" replace standard password authentication of clients.\n"
"\n"
" If [path] is a directory it contains the client (or CA)\n"
" certificates in separate files. If [path] is a file, it\n"
@@ -595,37 +609,44 @@ void print_help(int mode) {
"\n"
" To create certificates for all sorts of authentications\n"
" (clients, servers, via CA, etc) see the openssl(1)\n"
-" command. Of particular usefulness is the x509\n"
+" command. Of particular usefulness is the \"x509\"\n"
" subcommand of openssl(1).\n"
"\n"
-"-stunnel [pem] Use the stunnel(8) (www.stunnel.org) to provide\n"
-" an encrypted SSL tunnel between viewers and x11vnc.\n"
-" This requires stunnel to be installed on the system and\n"
-" available via PATH (n.b. stunnel is often installed in\n"
-" sbin directories). Version 4.x of stunnel is assumed\n"
-" (but see -stunnel3 below.)\n"
+"-stunnel [pem] Use the stunnel(8) (www.stunnel.org) to provide an\n"
+" encrypted SSL tunnel between viewers and x11vnc. This\n"
+" was implemented prior to the integrated -ssl encrpytion.\n"
+" It works well. This requires stunnel to be installed\n"
+" on the system and available via PATH (n.b. stunnel is\n"
+" often installed in sbin directories). Version 4.x of\n"
+" stunnel is assumed (but see -stunnel3 below.)\n"
"\n"
" [pem] is optional, use \"-stunnel /path/to/stunnel.pem\"\n"
" to specify a PEM certificate file to pass to stunnel.\n"
" Whether one is needed or not depends on your stunnel\n"
" configuration. stunnel often generates one at install\n"
-" time.\n"
+" time. See the stunnel documentation for details.\n"
"\n"
" stunnel is started up as a child process of x11vnc and\n"
" any SSL connections stunnel receives are decrypted and\n"
" sent to x11vnc over a local socket. The strings\n"
" \"The SSL VNC desktop is ...\" and \"SSLPORT=...\"\n"
-" are printed out at startup.\n"
+" are printed out at startup to indicate this.\n"
"\n"
-" The -localhost option is enforced by default to\n"
-" avoid people routing around the SSL channel. Set\n"
-" STUNNEL_DISABLE_LOCALHOST=1 to disable the requirement.\n"
+" The -localhost option is enforced by default\n"
+" to avoid people routing around the SSL channel.\n"
+" Set STUNNEL_DISABLE_LOCALHOST=1 before starting x11vnc\n"
+" to disable the requirement.\n"
"\n"
-" Your VNC viewer will also need to be able to connect\n"
-" via SSL. Unfortunately not too many do this. UltraVNC\n"
-" seems to have an encryption plugin. It is not too\n"
-" difficult to set up an stunnel or other SSL tunnel on\n"
-" the viewer side.\n"
+" Your VNC viewer will also need to be able to connect via\n"
+" SSL. Unfortunately not too many do this. UltraVNC has\n"
+" an encryption plugin but it does not seem to be SSL.\n"
+"\n"
+" In the x11vnc distribution, a patched TightVNC Java\n"
+" applet is provided in classes/ssl that does SSL\n"
+" connections (only).\n"
+"\n"
+" It is also not too difficult to set up an stunnel or\n"
+" other SSL tunnel on the viewer side.\n"
"\n"
" A simple example on Unix using stunnel 3.x is:\n"
"\n"
@@ -639,6 +660,35 @@ void print_help(int mode) {
"-stunnel3 [pem] Use version 3.x stunnel command line syntax instead of\n"
" version 4.x\n"
"\n"
+"-https [port] Choose a separate HTTPS port (-ssl mode only).\n"
+"\n"
+" In -ssl mode, it turns out you can use the\n"
+" single VNC port (e.g. 5900) for both VNC and HTTPS\n"
+" connections. (HTTPS is used to retrieve a SSL-aware\n"
+" VncViewer.jar applet that is provided with x11vnc).\n"
+" Since both use SSL the implementation was extended to\n"
+" detect if HTTP traffic (i.e. GET) is taking place and\n"
+" handle it accordingly. The URL would be, e.g.:\n"
+"\n"
+" https://mymachine.org:5900/\n"
+"\n"
+" This is convenient for firewalls, etc, because only one\n"
+" port needs to be allowed in. However, this heuristic\n"
+" adds a few seconds delay to each connection and can be\n"
+" unreliable (especially if the user takes much time to\n"
+" ponder the Certificate dialogs in his browser, Java VM,\n"
+" or VNC Viewer applet. That's right 3 separate \"Are\n"
+" you sure you want to connect\" dialogs!)\n"
+"\n"
+" So use the -https option to provide a separate, more\n"
+" reliable HTTPS port that x11vnc will listen on. If\n"
+" [port] is not provided (or is 0), one is autoselected.\n"
+" The URL to use is printed out at startup.\n"
+"\n"
+" The SSL Java applet directory is specified via the\n"
+" -httpdir option. If not supplied it will try to guess\n"
+" the directory as though the -http option was supplied.\n"
+"\n"
"-usepw If no other password method was supplied on the command\n"
" line, first look for ~/.vnc/passwd and if found use it\n"
" with -rfbauth; next, look for ~/.vnc/passwdfile and\n"
@@ -844,9 +894,10 @@ void print_help(int mode) {
" string \"noptr\" the mouse pointer will not be allowed\n"
" to go into a blacked out region.\n"
"-xinerama If your screen is composed of multiple monitors\n"
-" glued together via XINERAMA, and that screen is\n"
+"-noxinerama glued together via XINERAMA, and that screen is\n"
" not a rectangle this option will try to guess the\n"
" areas to black out (if your system has libXinerama).\n"
+" default: %s\n"
"\n"
" In general, we have noticed on XINERAMA displays you\n"
" may need to use the \"-xwarppointer\" option if the mouse\n"
@@ -2261,9 +2312,9 @@ void print_help(int mode) {
" http_url auth xauth users rootshift clipshift\n"
" scale_str scaled_x scaled_y scale_numer scale_denom\n"
" scale_fac scaling_blend scaling_nomult4 scaling_pad\n"
-" scaling_interpolate inetd privremote unsafe safer\n"
-" nocmds passwdfile unixpw unixpw_nis unixpw_list ssl\n"
-" ssl_pem sslverify stunnel stunnel_pem usepw using_shm\n"
+" scaling_interpolate inetd privremote unsafe safer nocmds\n"
+" passwdfile unixpw unixpw_nis unixpw_list ssl ssl_pem\n"
+" sslverify stunnel stunnel_pem https usepw using_shm\n"
" logfile o flag rc norc h help V version lastmod bg\n"
" sigpipe threads readrate netrate netlatency pipeinput\n"
" clients client_count pid ext_xtest ext_xtrap ext_xrecord\n"
@@ -2364,7 +2415,7 @@ void print_help(int mode) {
strncpy(tmp, p, w);
fprintf(stderr, " %s", tmp);
l++;
- if (l % 2 == 0) {
+ if (l % 3 == 0) {
fprintf(stderr, "\n");
}
}
@@ -2381,6 +2432,7 @@ void print_help(int mode) {
view_only ? "on":"off",
shared ? "on":"off",
vnc_connect ? "-vncconnect":"-novncconnect",
+ xinerama ? "-xinerama":"-noxinerama",
use_modifier_tweak ? "-modtweak":"-nomodtweak",
skip_duplicate_key_events ? "-skip_dups":"-noskip_dups",
add_keysyms ? "-add_keysyms":"-noadd_keysyms",