Эта фукция является устаревшей. Не надо использовать ее.
Функция
getpass()
открывает
/dev/tty
(управляющий терминал процесса), выводит строку
prompt,
выключая режим показа вводимых символов. Читает одну строку ("пароль"), затем
восстанавливает состояние терминала и закрывает
/dev/tty.
ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
Функция
getpass
возвращает указатель на статический буфер содержащий (первые PASS_MAX байтов)
пароль без символа перевода строки, оканчивающийся NUL.
Этот буфер может быть перезаписан следующим вызовом.
При ошибке, состояние терминала восстанавливается,
errno
устанавливается соответствующим образом и возвращается NULL.
НАЙДЕННЫЕ ОШИБКИ
Функция может завершиться неудачно если:
ENXIO
Процесс не имеет управляющего терминала.
ЗАМЕЧАНИЯ
Для libc4 и libc5, строка prompt не записывается на устройство
/dev/tty,
а отправляется в поток
stderr.
Кроме того, если
/dev/tty
не может быть открыт, то пароль читается из потока
stdin.
Статический буфер имеет длину 128, т.о. возвращаются только первые 127 символов
пароля.
Во время чтения пароля генерация сигналов (SIGINT, SIGQUIT, SIGSTOP, SIGTSTOP)
отключена и соответствующие символы (обычно control-C, control-\, control-Z и
control-Y) посылаются как часть пароля.
С libc 5.4.19 также отключена возможность редактирования, т.е. символ Backspace
и подобные ему, будут рассматриваться как часть пароля.
Для glibc2, если
/dev/tty
не может быть открыт, то строка prompt выводится в поток ошибок
stderr,
а пароль читается из стандартного потока ввода
stdin.
При это нет ограничения на длину пароля и строку можно редактировать.
В SUSv2 значение PASS_MAX должно быть определено в
<limits.h>.
В этом случае он больше, чем 8, и может быть найден используя
sysconf(_SC_PASS_MAX).
Однако, из стандарта POSIX.2 константы PASS_MAX, _SC_PASS_MAX и функция
getpass()
убраны.
Libc4 и libc5 никогда не поддерживали PASS_MAX и _SC_PASS_MAX.
Glibc2 допускает _SC_PASS_MAX и возвращает BUSIZ (напр. 8192).
Вызывающий процесс должен как можно скорее обнулить пароль во избежание
возможности просмотра незашифрованного пароля в адресном пространстве процесса.