Re: [PATCH] (Windows) psql echoes password when reading from pipe

Поиск
Список
Период
Сортировка
От Matthew Stickney
Тема Re: [PATCH] (Windows) psql echoes password when reading from pipe
Дата
Msg-id CAKH_Ld7A=3dFAvUFN1hFq-67=Ronx3Aq-muDhFKh4iHu3MMk6Q@mail.gmail.com
обсуждение исходный текст
Ответ на Re: [PATCH] (Windows) psql echoes password when reading from pipe  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: [PATCH] (Windows) psql echoes password when reading from pipe  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
It is possible, at the cost of two extra function calls, which could
theoretically fail (and require a little extra munging to work on
Windows CE -- is that a target platform for postgres?).

Similar to using CreateFile, I think the cases in which those calls
could fail are so extraordinary that psql probably wouldn't run at all
(i.e. there's no console for the process, in which case psql would
crash as soon as it attempted to do IO). It also requires opening
termin with "w+", because SetConsoleMode needs write permissions. You
could avoid that by doing a DuplicateHandle on the underlying handle
that you retrieve from termin, but I doubt it's worth it.

I'll do up a modified patch tonight, if that sounds like it'd be better.

-Matt Stickney

On Tue, May 22, 2018 at 2:55 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Matthew Stickney <mtstickney@gmail.com> writes:
>> On windows, if you pipe data to psql, the password prompt correctly
>> reads from and writes to the console, but the password text is echoed to
>> the console. This is because echoing is disabled on the handle for
>> stdin, but as part of a pipeline stdin doesn't refer to the console.
>> I've attached a patch that gets a handle to the console's input buffer
>> by opening CONIN$ instead, which corrects the problem.
>
> Thanks for the report and patch!
>
> I know zip about Windows coding, but I can't help comparing this:
>
> -               t = GetStdHandle(STD_INPUT_HANDLE);
> +               t = CreateFile("CONIN$", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
OPEN_EXISTING,0, NULL);
 
>
> to the code a little bit above:
>
>         termin = fopen("CONIN$", "r");
>
> Is it possible to operate on "termin" instead of doing a second open
> (which might fail, which we are failing to cope with :-()?
>
>                         regards, tom lane


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Daniel Gustafsson
Дата:
Сообщение: Re: pgAdmin4 Docker behind load balancer
Следующее
От: Dmitry Dolgov
Дата:
Сообщение: Re: Postgres, fsync, and OSs (specifically linux)