<div dir="ltr">Hey Rob,<div><div><div dir="ltr" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><div> I removed that xprintf in stty from our copy a long time ago to get rid of a log we didn't really need, but that change can be ignored if others find it useful.</div><div>Thanks,</div><div>+Chris<br></div></div></div></div></div></div></div></div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Sep 16, 2020 at 1:27 AM Rob Landley <<a href="mailto:rob@landley.net" target="_blank">rob@landley.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
<br>
On 9/15/20 11:39 AM, Chris Sarra via Toybox wrote:<br>
> toybox logins were displaying the "password:" prompt after<br>
> the user entered a password. This patch fixes the issue so the<br>
> password prompt shows *before* password is entered.<br>
> ---<br>
>  lib/password.c      | 1 +<br>
>  toys/pending/stty.c | 2 +-<br>
>  2 files changed, 2 insertions(+), 1 deletion(-)<br>
> <br>
> diff --git a/lib/password.c b/lib/password.c<br>
> index 432905cc..2f5997ff 100644<br>
> --- a/lib/password.c<br>
> +++ b/lib/password.c<br>
> @@ -63,6 +63,7 @@ int read_password(char *buf, int buflen, char *mesg)<br>
>    xset_terminal(0, 1, 0, &oldtermio);<br>
>  <br>
>    xprintf("%s", mesg);<br>
> +  fflush(NULL);<br>
<br>
This is why xprintf() had the x. This is literally why, but actually flushing<br>
before checking for error was too slow. (And then Elliott wanted to enable line<br>
buffering for everything, which breaks tee...)<br>
<br>
Sigh, ok I'm replacing it with dprintf() to avoid the borked stdio buffering<br>
entirely, which raises the question should the prompt go to stdout or stderr?<br>
<br>
  $ sudo /bin/bash<br>
  [sudo] password for landley:<br>
  $ sudo /bin/bash 2>/dev/null<br>
  [sudo] password for landley:<br>
  $ sudo /bin/bash >/dev/null<br>
  [sudo] password for landley:<br>
<br>
Answer: it goes to /dev/tty. Right, stop, BIG HAMMER time. ("There's never time<br>
to do it right, there's always time to do it over" meets "it is better to light<br>
a flamethrower than to curse the darkness", as usual for this project.)<br>
<br>
>    for (i=0; i < buflen-1; i++) {<br>
>      if ((ret = read(0, buf+i, 1)) < 0 || (!ret && !i)) {<br>
> diff --git a/toys/pending/stty.c b/toys/pending/stty.c<br>
> index 8c937696..fe8f5c8d 100644<br>
> --- a/toys/pending/stty.c<br>
> +++ b/toys/pending/stty.c<br>
> @@ -271,7 +271,7 @@ static int set_special_character(struct termios *new, int *i, char *char_name)<br>
>        else if (arg[0] == '^' && arg[2] == 0) ch = (toupper(arg[1])-'@');<br>
>        else if (!arg[1]) ch = arg[0];<br>
>        else error_exit("invalid arg: %s", arg);<br>
> -      xprintf("setting %s to %s (%02x)\n", char_name, arg, ch);<br>
> +      //xprintf("setting %s to %s (%02x)\n", char_name, arg, ch);<br>
<br>
What's this one about? (It's pending, which usually means I'm not as familiar<br>
with the guts of the command...)<br>
<br>
Rob<br>
_______________________________________________<br>
Toybox mailing list<br>
<a href="mailto:Toybox@lists.landley.net" target="_blank">Toybox@lists.landley.net</a><br>
<a href="http://lists.landley.net/listinfo.cgi/toybox-landley.net" rel="noreferrer" target="_blank">http://lists.landley.net/listinfo.cgi/toybox-landley.net</a><br>
</blockquote></div>