GETSPNAM

Section : Manuel du programmeur Linux (3)
Mise à jour de la version anglaise : 26 juillet 2007
Index Menu principal  

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 */
#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);

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

getspent_r(), getspnam_r(), fgetspent_r(), sgetspent_r() : _BSD_SOURCE || _SVID_SOURCE  

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 la base de données des mots de passe cachés (par exemple, le fichier local des mots de passe cachés /etc/shadow, NIS ou LDAP) lisible seulement par le superutilisateur.

Les fonctions décrites plus loin ressemblent aux fonctions traditionnelles de la base de données des mots de passe (par exemple, voir getpwnam(3) et getpwent(3)).

La fonction getspnam() renvoie un pointeur vers une structure contenant les champs d'un enregistrement extrait de la base de données des mots de passe cachés pour l'entrée correspondant à l'utilisateur de nom name.

La fonction getspent() renvoie un pointeur vers l'entrée suivante de la base de données des mots de passe cachés. La position dans le flux d'entrée est initialisée par setspent(). Lorsque la lecture est finie, 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 simultanés à 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 fonctions qui composaient l'API originale shadow. Elles sont largement disponibles.  

Versions réentrantes

De manière analogue aux routines réentrantes pour la base de données des mots de passe, la glibc possède aussi des fonctions réentrantes pour la base de données des mots de passe cachés. La fonction getspnam_r() est équivalent à la fonction getspnam() mais enregistre la structure des mots de passe cachés trouvée dans l'espace pointé par spbuf. Cette structure des mots de passe cachés 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'ait été trouvée ou qu'une erreur soit survenue) est stocké dans *spbufp.

Les fonctions getspent_r(), fgetspent_r() et sgetspent_r() sont analogues à leurs homologues non réentrantes.

Certains systèmes non-glibc ont également des fonctions portant ces noms, souvent avec des prototypes différents.  

Structure

La structure des mots de passe cachés 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 minimum entre
                              deux modifications */
    long  sp_max;          /* Nombre de jours maximum 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

Les fonctions qui renvoient un pointeur renvoient NULL s'il n'y a plus d'entrée disponible ou si une erreur est survenue pendant le traitement. Les fonctions 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 local 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

getgrnam(3), getpwnam(3), getpwnam_r(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 17 juillet 2008.

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=C man 3 getspnam ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.

 

Index

NOM
SYNOPSIS
DESCRIPTION
Versions réentrantes
Structure
VALEUR RENVOYÉE
ERREURS
FICHIERS
CONFORMITÉ
VOIR AUSSI
TRADUCTION

Dernière mise à jour : 17 juillet 2008