1. NOM

getpass - Obtenir un mot de passe (password)

2. SYNOPSIS

#include <unistd.h>

char *getpass( const char *prompt);

Exigences de macros de test de fonctionnalités pour la glibc (consultez feature_test_macros(7)) :

getpass() :

  • Depuis la glibc 2.2.2 :     .nf _BSD_SOURCE || (_XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) && !(_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600)
  • Avant la glibc 2.2.2 :
        aucune

3. DESCRIPTION

Cette fonction est obsolète. Ne l'utilisez pas. Si vous voulez lire une entrée de terminal sans écho local, consultez la description du drapeau ECHO dans termios(3).

La fonction getpass() ouvre /dev/tty (le terminal de contrôle du processus) affiche le message d'accueil prompt, éteint l'écho local, lit une ligne (le mot de passe), puis restaure l'état de /dev/tty et le referme.

4. VALEUR RENVOYÉE

La fonction getpass() renvoie un pointeur sur une chaîne de caractères allouée statiquement contenant les PASS_MAX premiers caractères du mot de passe sans le retour chariot final, terminé par un caractère nul (« \0 »). Ce tampon peut être écrasé par un autre appel. En cas d'erreur, l'état du terminal est restauré, errno est rempli, et la fonction renvoie NULL.

5. ERREURS

La fonction peut échouer dans les cas suivants :

  • ENXIO
        Le processus n'a pas de terminal de contrôle.

6. FICHIERS

/dev/tty

7. ATTRIBUTS

7.1. Multithreading (voir pthreads(7))

La fonction getpass() n'est pas sûre dans un contexte multithread.

8. CONFORMITÉ

Présent dans SUSv2, mais marquée « LEGACY ». Supprimé de POSIX.1-2001.

9. NOTES

Dans les versions libc4 et libc5, le message n'est pas affiché sur /dev/tty mais sur stderr. De plus, si /dev/tty ne peut être ouvert, le mot de passe est lu depuis stdin. Le tampon statique a une longueur de 128 octets, aussi seulement 127 caractères du mot de passe sont renvoyés. Durant la lecture, les signaux (SIGINT, SIGQUIT, SIGSTOP, SIGTSTP) sont désactivés et les caractères de contrôle correspondant (en général Ctrl-C, Ctrl-\, Ctrl-Z et Ctrl-Y) sont transmis comme part intégrante du mot de passe. Depuis la libc 5.4.19, l'édition de ligne est également désactivée, ainsi les retours en arrières, etc., seront présents dans le mot de passe.

Pour la glibc2, si /dev/tty ne peut pas être ouvert, le message est envoyé sur stderr et le mot de passe lu sur stdin. Il n'y a pas de limite à la longueur du mot de passe. L'édition de ligne n'est pas désactivée.

D'après SUSv2, la valeur de PASS_MAX doit être définie dans <limits.h> au cas où elle est inférieure à 8, et doit toujours être accessible avec sysconf(_SC_PASS_MAX). Quoiqu'il en soit, POSIX.2 retire les constantes PASS_MAX et _SC_PASS_MAX, ainsi que la fonction getpass(). Les bibliothèques libc4 et libc5 n'ont jamais géré PASS_MAX ou _SC_PASS_MAX. La glibc2 accepte _SC_PASS_MAX et renvoie BUFSIZ (par exemple, 8192).

10. BOGUES

Le processus appelant doit effacer le mot de passe saisi aussi vite que possible, afin d'éviter d'en conserver une copie en texte clair dans son espace d'adressage.

11. VOIR AUSSI

crypt(3)

12. COLOPHON

Cette page fait partie de la publication 3.52 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse http://www.kernel.org/doc/man-pages/.

13. TRADUCTION

Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal <http://manpagesfr.free.fr/> (2003-2006). Florentin Duneau et l'équipe francophone de traduction de Debian (2006-2009).

Veuillez signaler toute erreur de traduction en écrivant à < >.

Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « LC_ALL=C man <section> <page_de_man> ».