]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Produce a meaningful error message if --daemon gets in the way of asking for passwords.
authorGert Doering <gert@greenie.muc.de>
Mon, 13 Jul 2015 19:10:07 +0000 (21:10 +0200)
committerGert Doering <gert@greenie.muc.de>
Mon, 13 Jul 2015 19:33:26 +0000 (21:33 +0200)
With the --daemon / SSL init reordering in da9b292733, we fail if we
daemonize first and then try to ask for a private key passphrase (or,
for that matter, username+password if --auth-nocache is set) - but
no meaningful error message was printed, instead depending on operating
system and library versions, either we looped around "ssl init failed"
or died with an unspecified "fatal error".

So: check if get_user_pass_cr() is called in a context that needs
"from_stdin", but both stdin and stderr are not connected to a tty
device (which getpass() needs).  In that case, print a meaningful
error message pointing to --askpass, and die.

Trac #574 and #576

Signed-off-by: Gert Doering <gert@greenie.muc.de>
Acked-by: Steffan Karger <steffan.karger@fox-it.com>
Message-Id: <1436814607-16707-1-git-send-email-gert@greenie.muc.de>
URL: http://article.gmane.org/gmane.network.openvpn.devel/9916

src/openvpn/misc.c

index 4fdbf1753ee8cbb6427f77cee0f55749b12a9590..c4438b6de9ae5fe52d6eaddb3e72f146b69bf2f2 100644 (file)
@@ -1056,6 +1056,10 @@ get_user_pass_cr (struct user_pass *up,
        */
       else if (from_stdin)
        {
+         /* did we --daemon'ize before asking for passwords? */
+         if ( !isatty(0) && !isatty(2) )
+           { msg(M_FATAL, "neither stdin nor stderr are a tty device, can't ask for %s password.  If you used --daemon, you need to use --askpass to make passphrase-protected keys work, and you can not use --auth-nocache.", prefix ); }
+
 #ifdef ENABLE_CLIENT_CR
          if (auth_challenge && (flags & GET_USER_PASS_DYNAMIC_CHALLENGE))
            {