GETPASS(3)

NAZWA
getpass - wczytanie hasła

SKŁADNIA
#include <unistd.h>

char *getpass( const char * prompt );

OPIS
Funkcja ta jest przestarzała. Nie należy jej używać.

Funkcja getpass() otwiera /dev/tty (terminal sterujący procesu), wyprowadza napis prompt, wyłącza echo, odczytuje jedną linię ("hasło"), odtwarza stan terminala i zamyka /dev/tty.

WARTOŚĆ ZWRACANA
Funkcja getpass zwraca wskaźnik do statycznego bufora zawierającego hasło (pierwsze PASS_MAX bajtów) bez kończącego znaku nowej linii, zakończone znakiem NUL. Bufor ten może zostać nadpisany przez późniejsze wywołania funkcji. W przypadku błędu, odtwarzany jest stan terminala, odpowiednio ustawiane errno, i zwracane NULL.

BŁĘDY
Funkcja może zakończyć się niepomyślnie, gdy

ENXIO
    Proces nie posiada terminala sterującego.

UWAGI
Dla libc4 i libc5 tekst zachęty ("prompt") nie jest wypisywany na /dev/tty, ale na stderr. Ponadto, jeśli nie można otworzyć /dev/tty, to hasło jest odczytywane z stdin. Bufor statyczny ma długość 128, więc zwracanych jest tylko pierwszych 127 bajtów hasła. Podczas odczytywania hasła wyłączone jest generowanie sygnałów (SIGINT, SIGQUIT, SIGSTOP, SIGTSTOP), a odpowiadające im znaki (zwykle control-C, control-\, control-Z i control-Y) są przesyłane jako część hasła. Począwszy od libc 5.4.19, wyłączona jest edycja linii, tak więc również cofanie (backspace) i jemu podobne będą widziane jako część hasła.

Dla glibc2, jeśli nie można otworzyć /dev/tty, to tekst zachęty jest wypisywany na stderr, a hasło jest odczytywane z stdin. Nie ma natomiast ograniczenia na długość hasła. Wyłączona jest edycja linii.

Zgodnie z SUSv2, jeśli wartość PASS_MAX jest mniejsza niż 8, to musi być zdefiniowana w <limits.h>, a w każdym przypadku można ją otrzymać za pomocą sysconf(_SC_PASS_MAX). Jednakże, POSIX.2 odchodzi od stałych PASS_MAX i _SC_PASS_MAX oraz od funkcji getpass (). Libc4 i libc5 nigdy nie wspierały PASS_MAX ani _SC_PASS_MAX. Glibc2 akceptuje _SC_PASS_MAX i zwraca BUFSIZ (np. 8192).

PLIKI
/dev/tty

ZOBACZ TAKŻE
crypt(3)

HISTORIA
Funkcja getpass pojawiła się w Wersji 7 AT&T UNIX.

USTERKI
Proces wywołujący funkcję powinien wyzerować hasło natychmiast, gdy tylko będzie to możliwe, aby uniknąć pozostawania jawnego hasła widocznym w przestrzeni adresowej procesu.