Sous-routine chpass
Objectif
Modifie les mots de passe utilisateur.
Bibliothèque
Bibliothèque C standard (libc.a)
Bibliothèque de sécurité Thread Safe ( libs_r.a )
Syntaxe
int chpass (UserName, Response, Reenter, Message)
char *UserName;
char *Response;
int *Reenter;
char **Message;Descriptif
La sous-routine chpass gère les exigences que l'utilisateur doit respecter pour modifier un mot de passe. Ce sous-programme est le bloc de construction de base pour la modification des mots de passe et gère les changements de mot de passe pour les mots de passe utilisateur locaux, NIS et DCE.
Le paramètre Message fournit une série de messages demandant les anciens et les nouveaux mots de passe ou fournissant des messages d'information, tels que la raison de l'échec d'un changement de mot de passe. La première invite Message est une invite pour l'ancien mot de passe. Ce paramètre n'invite pas à indiquer l'ancien mot de passe si l'utilisateur a un ID utilisateur réel de 0 (zéro) et qu'il est en train de modifier un utilisateur local, ou si l'utilisateur n'a pas de mot de passe en cours. La sous-routine chpass n'invite pas un utilisateur disposant des droits d'accès root à entrer un ancien mot de passe. Il informe le programme qu'aucun message n'a été envoyé et qu'il doit appeler à nouveau chpass . Si l'utilisateur répond à la première invite du paramètre Message , le système l'invite à entrer le nouveau mot de passe. Chaque message est contenu dans le paramètre Message et s'affiche pour l'utilisateur. Le paramètre Réponse renvoie la réponse de l'utilisateur à la sous-routine chpass .
Le paramètre Réentrer indique quand un utilisateur a satisfait à tous les messages d'invite. Le paramètre reste différent de zéro jusqu'à ce qu'un utilisateur ait transmis toutes les invites. Une fois que la valeur renvoyée de Réentrer est 0, le code retour indique si le changement de mot de passe a abouti ou échoué. Lorsque vous avancez dans les invites pour un utilisateur, la valeur de Réentrer doit être gérée par l'appelant entre les appels de chpass.
La sous-routine chpass gère les informations d'état internes concernant le message d'invite suivant à présenter à l'utilisateur. Si le programme appelant fournit un nom d'utilisateur différent avant que tous les messages d'invite soient terminés pour l'utilisateur, les informations d'état internes sont réinitialisées et les messages d'invite recommencent. Les informations d'état sont également conservées dans la variable Reenter . Le programme appelant doit conserver la valeur de Réentrer entre les appels à chpass.
La sous-routine chpass détermine le domaine d'administration à utiliser lors des changements de mot de passe. Il détermine si l'utilisateur est défini localement, défini dans NIS (Network Information Service) ou défini dans DCE ( Distributed Computing Environment ). Les changements de mot de passe se produisent uniquement dans ces domaines. Les administrateurs système peuvent remplacer cette convention par la valeur de registre figurant dans le fichier /etc/security/user . Si la valeur de registre est définie, le changement de mot de passe ne peut se produire que dans le domaine spécifié. Les administrateurs système peuvent utiliser cette valeur de registre si l'utilisateur est administré sur une machine distante qui tombe régulièrement en panne. Si l'utilisateur est autorisé à se connecter via une autre méthode d'authentification alors que le serveur est arrêté, les modifications de mot de passe restent à suivre uniquement le serveur principal.
La sous-routine chpass permet à l'utilisateur de modifier les mots de passe de deux manières. Pour les changements de mot de passe normaux (non administratifs), l'utilisateur doit fournir l'ancien mot de passe, soit lors du premier appel à la sous-routine chpass , soit en réponse au premier message de chpass. Si l'utilisateur est root, ID utilisateur réel 0, les changements de mot de passe d'administration locale sont gérés en fournissant un pointeur null pour le paramètre Réponse lors de l'appel initial
Les utilisateurs qui ne sont pas administrés en local sont toujours interrogés pour leur ancien mot de passe.
- Etat initial: l'appelant appelle la sous-routine chpass avec le paramètre réponse NULL et reçoit l'invite de mot de passe initial dans le paramètre message .
- Vérifier le mot de passe initial: l'appelant appelle la sous-routine chpass avec les résultats de l'invite de l'utilisateur avec le paramètre message précédent comme paramètre de réponse . L'appelant est invité à entrer le nouveau mot de passe dans le paramètre message .
- Entrez le nouveau mot de passe: l'appelant appelle la sous-routine chpass avec les résultats de l'invite d'utilisateur avec le nouveau mot de passe dans le paramètre response . L'appelant est invité à répéter le nouveau mot de passe dans le paramètre message .
- Vérifier le nouveau mot de passe: l'appelant appelle la sous-routine chpass avec les résultats de l'invite de l'utilisateur à répéter le nouveau mot de passe dans le paramètre response . La sous-routine chpass effectue ensuite le changement de mot de passe réel.
Toute étape du processus ci-dessus peut entraîner l'arrêt de la boîte de dialogue par la sous-routine chpass . Ceci est signalé lorsque la variable reenter est définie sur 0. Le code retour indique la nature de l'échec.
Paramètres
| Article | Descriptif |
|---|---|
| UserName | Indique le nom de l'utilisateur dont le mot de passe doit être modifié. |
| Réponse | Indique une chaîne de caractères contenant la réponse de l'utilisateur à la dernière invite. |
| Entrer à nouveau | Pointe vers une valeur booléenne utilisée pour indiquer si le traitement de la sous-routine chpass est terminé. Si le paramètre Reenter est une valeur différente de zéro, la sous-routine chpass attend de l'utilisateur qu'il réponde au message d'invite fourni par le paramètre Message . Si le paramètre Reenter est 0, le traitement de la sous-routine chpass est terminé. |
| message | Pointe vers un pointeur pour lequel la sous-routine chpass alloue de la mémoire et la remplit. Cette chaîne de remplacement convient alors à l'impression et émet des messages d'identification (si le paramètre Réentrer est une valeur différente de zéro). La chaîne peut également émettre des messages d'information tels que la raison pour laquelle l'utilisateur n'a pas réussi à modifier le mot de passe (si le paramètre Réentrer a pour valeur 0). L'application appelante est responsable de la libération de cette mémoire. |
Valeurs renvoyées
Une fois l'opération terminée, la sous-routine chpass renvoie la valeur 0. Si la sous-routine chpass échoue, elle renvoie les valeurs suivantes:
| Article | Descriptif |
|---|---|
| -1 | Indique que l'appel a échoué dans la bibliothèque de sécurité d'unité d'exécution libs_r.a. ERRNO indique le code panne. |
| 1 seul | Indique que le changement de mot de passe a échoué et que l'utilisateur doit effectuer une nouvelle tentative. Cette valeur de retour se produit si une restriction de mot de passe n'est pas respectée, par exemple si le mot de passe n'est pas assez long. |
| 2 | Indique que le changement de mot de passe a échoué et que l'utilisateur ne doit pas effectuer de nouvelle tentative. Cette valeur est renvoyée si l'utilisateur entre un ancien mot de passe incorrect ou si le réseau est arrêté (le changement de mot de passe ne peut pas se produire). |
Codes d'erreur
La sous-routine chpass échoue si l'une des valeurs suivantes est vérifiée:
| Article | Descriptif |
|---|---|
| ENOENT | Indique que l'utilisateur est introuvable. |
| ESAD | Indique que l'utilisateur ne répond pas aux critères de modification du mot de passe. |
| EPERM | Indique que l'utilisateur n'était pas autorisé à modifier le mot de passe. |
| EINVAL | Indique que les paramètres ne sont pas valides. |
| ENOMEM | Indique que l'allocation de mémoire (malloc) a échoué. |