Provided by:
manpages-fr_1.67.0-1_all 
NOM
getspnam, getspnam_r, getspent, getspent_r, setspent, endspent,
fgetspent, fgetspent_r, sgetspent, sgetspent_r, putspent, lckpwdf,
ulckpwdf - Obtenir un enregistrement du fichier des mots de passe
cachés
SYNOPSIS
/* API du fichier des mots de passe cachés */
#include <shadow.h>
struct spwd *getspnam(const char *name);
struct spwd *getspent(void);
void setspent(void);
void endspent(void);
struct spwd *fgetspent(FILE *fp);
struct spwd *sgetspent(const char *s);
int putspent(struct spwd *p, FILE *fp);
int lckpwdf(void);
int ulckpwdf(void);
/* Extension GNU */
#define _SVID_SOURCE /* ou _BSD_SOURCE */
#include <shadow.h>
int getspent_r(struct spwd *spbuf,
char *buf, size_t buflen, struct spwd **spbufp);
int getspnam_r(const char *name, struct spwd *spbuf,
char *buf, size_t buflen, struct spwd **spbufp);
int fgetspent_r(FILE *fp, struct spwd *spbuf,
char *buf, size_t buflen, struct spwd **spbufp);
int sgetspent_r(const char *s, struct spwd *spbuf,
char *buf, size_t buflen, struct spwd **spbufp);
DESCRIPTION
Il a longtemps été considéré comme sûr d’avoir des mots de passe
chiffrés ouvertement visibles dans le fichier des mots de passe.
Lorsque les ordinateurs sont devenus plus rapides et que les gens sont
devenus plus conscients des problèmes de sécurité, cela n’était plus
acceptable. Julianne Frances Haugh a implémenté la suite d’utilitaires
« shadow » qui conserve les mots de passe chiffrés dans le fichier
/etc/shadow, lisible seulement par l’administrateur (root).
Les routines d’accès décrites plus loin ressemblent à celles concernant
le fichier /etc/passwd. Cette configuration des mots de passe cachés a
été supplantée par PAM (pluggable authentication modules), et le
fichier /etc/nsswitch.conf décrit à présent les sources à utiliser.
La fonction getspnam() renvoie un pointeur sur une structure contenant
une partie des champs d’une ligne extraite de /etc/shadow pour l’entrée
correspondant à l’utilisateur de nom name.
La fonction getspent() renvoie un pointeur sur l’entrée suivante du
fichier des mots de passe cachés. La position dans le flux d’entrée
est initialisée par setspent(). Lorsque la lecture est effectuée, le
programme devrait appeler endspent() pour désallouer les ressources.
La fonction fgetspent() est similaire à getspent() mais utilise le flux
fourni plutôt que celui implicitement ouvert par setspent().
La fonction sgetspent() analyse la chaîne s fournie dans la structure
spwd.
La fonction putspent() écrit le contenu de la structure spwd *p fournie
sous forme d’une ligne de texte au format du fichier des mots de passe
cachés dans le flux fp. Les entrées chaînes de valeur NULL et les
entrées numériques de valeur -1 sont écrites comme des chaînes vides.
La fonction lckpwdf() a pour but de protéger contre les accès multiples
à la base de données des mots de passe cachés. Elle tente d’obtenir un
verrou, renvoie 0 si elle y arrive ou -1 si elle échoue (le verrou n’a
pas pu être obtenu dans les 15 secondes). La fonction ulckpwdf()
libère le verrou. Veuillez noter qu’il n’y a pas de protection contre
l’accès direct au fichier des mots de passe cachés. Seuls les
programmes qui utilisent lckpwdf() remarqueront le verrou.
C’étaient les routines qui composaient l’API originale shadow. Elles
sont largement disponibles.
Versions réentrantes
De manière analogue aux routines réentrantes pour le fichier password,
la GlibC a aussi ici des versions réentrantes. La fonction
getspnam_r() est comme la fonction getspnam() mais enregistre la
structure passwd cachée trouvée dans l’espace pointé par spbuf. Cette
structure passwd cachée contient des pointeurs vers des chaînes qui
sont stockées dans le tampon buf de taille buflen. Un pointeur vers le
résultat (en cas de réussite) ou NULL (au cas où aucune entrée n’a été
trouvée ou qu’une erreur soit survenue) est stocké dans *spbufp.
Les fonctions getspent_r(), fgetspent_r(), et sgetspent_r() sont
analogues.
Certains systèmes non-GlibC ont également des fonctions portant ces
noms, souvent avec des prototypes différents.
Structure
La structure passwd cachée est définie dans <shadow.h> de la manière
suivante :
struct spwd {
char *sp_namp; /* Nom de connexion */
char *sp_pwdp; /* Mot de passe chiffré */
long sp_lstchg; /* Date de dernière modification */
long sp_min; /* Nombre de jours minimun entre
deux modifications */
long sp_max; /* Nombre de jours maximun entre
deux modifications */
long sp_warn; /* Nombre de jours avant l’expiration
du mot de passe pour avertir
l’utilisateur de le modifier */
long sp_inact; /* Nombre de jours après l’expiration
du mot de passe pour la désactivation
du compte */
long sp_expire; /* Nombre de jours depuis le 1er janvier 1970
avant que le compte ne soit désactivé */
unsigned long sp_flag; /* Réservé */
};
VALEUR RENVOYÉE
Ces routines renvoient NULL s’il n’y a plus d’entrée disponible ou si
une erreur est survenue pendant le traitement. Les routines qui ont un
int comme valeur de retour renvoient 0 en cas de réussite et -1 en cas
d’échec.
Pour les fonctions non réentrantes, la valeur de retour peut pointer
sur une zone statique et peut être écrasée par des appels consécutifs
de ces fonctions.
Les fonctions réentrantes renvoient zéro si elles réussissent. Si elles
échouent, une valeur d’erreur est renvoyée.
ERREURS
ERANGE Le tampon fourni est trop petit.
FICHIERS
/etc/shadow
fichier base de données des mots de passe cachés
/etc/.pwd.lock
fichier verrou
Le fichier d’inclusion <paths.h> définit la constante _PATH_SHADOW
comme étant le chemin du fichier des mots de passe cachés.
CONFORMITÉ
La base de données des mots de passe cachés et son API associée ne sont
pas
spécifiées par POSIX.1-2001. Toutefois, beaucoup d’autres
systèmes fournissent une API similaire.
VOIR AUSSI
getpwnam(3), getpwnam_r(3), getgrnam(3), shadow(5)
TRADUCTION
Ce document est une traduction réalisée par Alain Portal <aportal AT
univ-montp2 DOT fr> le 8 juillet 2005 et révisée le 14 décembre 2005.
L’équipe de traduction a fait le maximum pour réaliser une adaptation
française de qualité. La version anglaise la plus à jour de ce document
est toujours consultable via la commande : « LANG=en man 3 getspnam ».
N’hésitez pas à signaler à l’auteur ou au traducteur, selon le cas,
toute erreur dans cette page de manuel.