/* API globale du fichier des mots de passe cachés */ #include <shadow.h> struct spwd *getspnam(const char *nom); struct spwd *getspent(void); void setspent(void); void endspent(void); struct spwd *fgetspent(FILE *flux); struct spwd *sgetspent(const char *s); int putspent(const struct spwd *p, FILE *flux); int lckpwdf(void); int ulckpwdf(void); /* Extension GNU */ #include <shadow.h> int getspent_r(struct spwd *spbuf, char tampon[.taille_tampon], size_t taille_tampon, struct spwd **spbufp); int getspnam_r(const char *nom, struct spwd *spbuf, char tampon[.taille_tampon], size_t taille_tampon, struct spwd **spbufp); int fgetspent_r(FILE *flux, struct spwd *spbuf, char tampon[.taille_tampon], size_t taille_tampon, struct spwd **spbufp); int sgetspent_r(const char *s, struct spwd *spbuf, char tampon[.taille_tampon], size_t taille_tampon, struct spwd **spbufp);
Exigences de macros de test de fonctionnalités pour la glibc (consulter feature_test_macros(7)) :
getspent_r(), getspnam_r(), fgetspent_r(), sgetspent_r():
Depuis la glibc 2.19 : _DEFAULT_SOURCE Pour la glibc 2.19 et précédentes : _BSD_SOURCE || _SVID_SOURCE
Les fonctions décrites ci-dessous ressemblent aux fonctions traditionnelles de la base de données des mots de passe (par exemple, consultez 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 « shadow » de l'entrée correspondant au nom de l'utilisateur.
La fonction getspent() renvoie un pointeur sur l'entrée suivante de la base de données « shadow ». 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 spécifié 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. 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 la base de données des mots de passe cachés contre des accès simultané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.
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.
struct spwd {
char *sp_namp; /* Identifiant de connexion */
char *sp_pwdp; /* Mot de passe chiffré */
long sp_lstchg; /* Date de dernière modification
(mesurée en jours depuis l'époque,
1er janvier 1970 à 00:00:00 (UTC)) */
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; /* Date à laquelle le compte expirera,
(mesurée en jours depuis l'époque,
1er janvier 1970 à 00:00:00 (UTC)) */
unsigned long sp_flag; /* Réservé */
};
Pour les fonctions non réentrantes, la valeur de retour peut pointer sur une zone statique et peut être écrasée par des appels ultérieurs de ces fonctions.
Les fonctions réentrantes renvoient zéro si elles réussissent. Si elles échouent, une valeur d'erreur est renvoyée.
Le fichier d'inclusion <paths.h> définit la constante _PATH_SHADOW comme étant le chemin du fichier des mots de passe cachés.
Interface | Attribut | Valeur |
getspnam() | Sécurité des threads |
MT-Unsafe race:getspnam locale
|
getspent() | Sécurité des threads |
MT-Unsafe race:getspent
race:spentbuf locale
|
setspent(), endspent(), getspent_r() | Sécurité des threads |
MT-Unsafe race:getspent locale
|
fgetspent() | Sécurité des threads |
MT-Unsafe race:fgetspent
|
sgetspent() | Sécurité des threads |
MT-Unsafe race:sgetspent
|
putspent(), getspnam_r(), sgetspent_r() | Sécurité des threads |
MT-Safe locale
|
lckpwdf(), ulckpwdf(), fgetspent_r() | Sécurité des threads |
MT-Safe
|
Dans le tableau ci-dessus, getspent dans race:getspent signifie que si des fonctions parmi setspent(), getspent(), getspent_r() ou endspent() sont utilisées en parallèle dans différents threads d'un programme, des situations de compétition entre données pourraient apparaître.
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à