Re: [PATCH 1/2] git-svn, perl/Git.pm: add central method for prompting passwords honoring GIT_ASKPASS and SSH_ASKPASS
- From
- Sven Strickroth <sven.strickroth@tu-clausthal.de>
- Date
- Jan 4, 2012, 08:31 UTC
- Message-ID
- <4F040E46.5030001@tu-clausthal.de>
- In-Reply-To
- <4F0405D4.9090102@tu-clausthal.de>
Am 04.01.2012 08:55 schrieb Sven Strickroth:
> The Git.pm part is easy, but I also tried to update prompt.c (untested).
I said "easy" and then I mailed the wrong/outdated patch :( I'm sorry for the noise.
From: Sven Strickroth <email@cs-ware.de> Date: Wed, 4 Jan 2012 08:44:48 +0100 Subject: [PATCH] Git.pm, prompt: try reading from interactive terminal before using SSH_ASKPASS
SVN tries to read reading from interactive terminal before using SSH_ASKPASS helper. This change adjust git to behave the same way.
Signed-off-by: Sven Strickroth <email@cs-ware.de> --- perl/Git.pm | 9 ++++----- prompt.c | 14 +++++++++++--- 2 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/perl/Git.pm b/perl/Git.pm index 1c96a20..721aef7 100644 --- a/perl/Git.pm +++ b/perl/Git.pm @@ -530,13 +530,9 @@ sub prompt { $ret = _prompt($ENV{'GIT_ASKPASS'}, $prompt); } if (!defined $ret) { - $ret = _prompt($ENV{'SSH_ASKPASS'}, $prompt); - } - if (!defined $ret) { print STDERR $prompt; STDERR->flush; if ($isPassword) { - $ret = ''; require Term::ReadKey; Term::ReadKey::ReadMode('noecho'); while (defined(my $key = Term::ReadKey::ReadKey(0))) { @@ -551,10 +547,13 @@ sub prompt { if (defined $ret) { chomp($ret); } else { - $ret = ''; + undef $ret; } } } + if (!defined $ret) { + $ret = _prompt($ENV{'SSH_ASKPASS'}, $prompt); + } return $ret; } diff --git a/prompt.c b/prompt.c index 72ab9de..e791619 100644 --- a/prompt.c +++ b/prompt.c @@ -52,9 +52,17 @@ char *git_prompt(const char *prompt, int flags) } r = git_terminal_prompt(prompt, flags & PROMPT_ECHO); - if (!r) - die_errno("could not read '%s'", prompt); - return r; + if (r) + return r; + + if (flags & PROMPT_ASKPASS) { + const char *askpass; + askpass = getenv("SSH_ASKPASS"); + if (askpass && *askpass) + return do_askpass(askpass, prompt); + } + + die_errno("could not read '%s'", prompt); } char *git_getpass(const char *prompt)
-- Best regards, Sven Strickroth ClamAV, a GPL anti-virus toolkit http://www.clamav.net PGP key id F5A9D4C4 @ any key-server