git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 1/2][Perlers?] git-send-email: ssh/login style password requests

From
Michael Witten <mfwitten@mit.edu>
Date
Feb 3, 2008, 17:59 UTC
Message-ID
<87CDEC9F-8153-48D0-AD1C-A3B3CEF6FDAE@MIT.EDU>
In-Reply-To
<7vve5711wa.fsf@gitster.siamese.dyndns.org>
The crux of my conclusion comes after the ---------------------------- .
On 2 Feb 2008, at 4:31 PM, Junio C Hamano wrote:
Show 24 quoted lines
> Actually, I just tried this myself:
>
>    #!/usr/bin/perl -w
>
>    use Term::ReadLine;
>    my $term = new Term::ReadLine 'foobar';
>
>    my ($user, $password);
>    while (!defined $user) {
>            $user = $term->readline("User: ");
>    }
>    system 'stty -echo';
>    while (!defined $password) {
>            $password = $term->readline("Password: ");
>    }
>    system 'stty echo';
>    print "You said <$user><$password>\n";
>    print "ReadLine backend used was ", $term->ReadLine, "\n";
>
> In my case, the backend was "Term::ReadLine::Perl".  A few
> problems:
>
> * After typing "junio <Enter>" to "User:", an extra newline is
>   left before "Password:" prompt;
I didn't have this problem.
> * "Password:" prompt still echoed password "abc".  There was no
>   extra newline before "You said <junio><abc>".

Indeed. I tested your code and my git-send-email code with all three backend implementations (Term::ReadLine::Stub, Term::ReadLine::Gnu, and Term::ReadLine::Perl). The problem with echoing seems to be a fault of the Term::ReadLine::Perl implementation.

> * In either case, typing <Enter> returns an empty string from
>   $term->readline() so the "while (!defined)" loop does not buy
>   us anything.

Frankly, I wrote that readline code according to the other uses of readline, as I am not well versed in these things.

Because all other uses of readline are wrapped in such while loops, I assume that they are meant to cover systems with non-blocking (unbuffered) IO, rather than to continue to prompt the user due to empty strings.

Should empty-string passwords not be allowed?
-------------------------------------------------
Show 18 quoted lines
> Another example which appears in PerlFAQ #8 uses ReadKey with
> its ReadLine, like this:
>
>    use Term::ReadKey;
>    ReadMode('noecho');
>    $password = ReadLine(0);
>
> which is different from Term::ReadLine's "ReadLine".  An earlier
> example you cited from perlfunc.pod's crypt() entry does:
>
>    system "stty -echo";
>    print "Password: ";
>    chomp($word = <STDIN>);
>    print "\n";
>    system "stty echo";
>
> In either case, I was worried about the interaction between the
> Term::ReadLine backend implementation and "stty".

This got me thinking: At first I wanted to use readline for the password prompt, because I figured it would allow the user better editing facilities, especially with regard to the arrow keys. However, it occurred to me that perhaps this should not be the case; perhaps arrow keys are meant to be useable in passwords, etc.

Well, this turns out to be the case! (which may not be a surprise to most people, but it was to me). Passwords can actually contain some of the keycodes that read- line converts into editing commands (now you know which characters you don't have to test when cracking my password). Therefore, we shouldn't even bother using the readline backend for password prompting; neither passwd nor ssh use readline, for example.

I support the 'crypt' method, because the Term::ReadKey approach requires another module dependency.

Sincerely, Michael Witten

Previous: Junio C HamanoNext: Michael Witten
Message 12 of 16 in “git-send-email: ssh/login style password requests”
  1. git-send-email: ssh/login style password requestsMichael Witten, Feb 1, 2008
  2. Junio C HamanoFeb 1, 2008
  3. Michael WittenFeb 1, 2008
  4. Michael WittenFeb 1, 2008
  5. Junio C HamanoFeb 1, 2008
  6. Michael WittenFeb 1, 2008
  7. Junio C HamanoFeb 2, 2008
  8. 1/2 [Perlers?] git-send-email: ssh/login style password requestsMichael Witten, Feb 2, 2008
  9. 2/2 [Perlers?] git-send-email: SIG{TERM,INT} handlersMichael Witten, Feb 2, 2008
  10. Junio C HamanoFeb 2, 2008
  11. Junio C HamanoFeb 2, 2008
  12. Michael WittenFeb 3, 2008
  13. Michael WittenFeb 3, 2008
  14. 1/3 [V.2] git-send-email: ssh/login style password requestsMichael Witten, Feb 4, 2008
  15. 2/3 [V.2] git-send-email: SIG{TERM,INT} handlersMichael Witten, Feb 4, 2008
  16. 3/3 [V.2] git-send-email: Better handling of EOF [^D]Michael Witten, Feb 4, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.