Sous-routine pwdrestrict_method

Objectif

Définit les méthodes de restriction de mot de passe chargeable.

Bibliothèque

Syntaxe

int pwdrestrict_method (UserName, NewPassword, OldPassword, Message)
char * UserName;
char * NewPassword;
char * OldPassword;
char ** Message;

Descriptif

La sous-routine pwdrestrict_method étend la capacité du logiciel de restrictions de mot de passe et permet à un administrateur d'appliquer des restrictions de mot de passe qui ne sont pas fournies par le logiciel système.

Chaque fois que les utilisateurs modifient leurs mots de passe, le logiciel système analyse l'attribut pwdchecks défini pour cet utilisateur afin de détecter les restrictions spécifiques au site. Etant donné que cette zone d'attribut peut contenir des noms de fichier de module de chargement, par exemple des méthodes, il est possible pour l'administrateur d'écrire et d'installer du code qui impose des restrictions de mot de passe spécifiques au site.

Le système évalue la zone de valeur de l'attribut pwdchecks dans un ordre de gauche à droite. Pour chaque méthode rencontrée par le système, le système charge et appelle cette méthode. Le système utilise la sous-routine load pour charger les méthodes. Il appelle la sous-routine load avec une valeur Flags de 1 et une valeur LibraryPath de /usr/lib. Une fois la méthode chargée, le système l'appelle.

Pour créer un module chargeable, utilisez l'indicateur -e de la commande ld . Notez que le nom pwdrestrict_method indiqué dans la syntaxe est un nom générique. Le nom réel de la sous-routine peut être n'importe quoi (dans l'espace de nom du compilateur) à l'exception de main. Ce qui est important, c'est que, quel que soit le nom que vous choisissez, vous devez informer la commande ld du nom afin que la sous-routine load utilise ce nom comme point d'entrée dans le module. Dans l'exemple suivant, le compilateur C compile le fichier pwdrestrict.c et transmet -e pwdrestrict_method à la commande ld pour créer la méthode appelée pwdrestrict:

cc -e pwdrestrict_method -o pwdrestrict pwdrestrict.c

La convention de toutes les méthodes de restriction de mot de passe consiste à transmettre des messages à la sous-routine appelante. N'imprimez pas les messages dans stdout ou stderr. Cette fonction permet au logiciel de restrictions de mot de passe de fonctionner sur les connexions réseau où stdout et stderr ne sont pas valides. Notez que les messages doivent être renvoyés dans la mémoire allouée dynamiquement au programme appelant. Le programme appelant désallouera la mémoire une fois qu'il en aura fini avec la mémoire.

Il existe de nombreuses mises en garde qui vont de pair avec des modules de sous-routine chargeables:

  1. Les valeurs de NewPassword et OldPassword sont les mots de passe en texte en clair saisis par l'utilisateur. Si vous copiez ces mots de passe dans d'autres parties de la mémoire, effacez ces emplacements de mémoire avant de revenir au programme appelant. Cela permet d'éviter que les mots de passe en texte clair ne s'affichent dans les clichés du processus core. En outre, ne copiez pas ces mots de passe dans un fichier ou ailleurs auquel un autre programme peut accéder. Les mots de passe en texte clair ne doivent jamais exister en dehors de l'espace de processus.
  2. Ne modifiez pas les paramètres en cours des gestionnaires de signaux du processus.
  3. N'appelez aucune fonction qui mettra fin à l'exécution du programme (par exemple, la sous-routine exit , la sous-routine exec ). Revenez toujours au programme appelant.
  4. Le code doit être autorisant les unités d'exécution multiples.
  5. Le module de chargement réel doit être conservé dans un environnement protégé contre l'écriture. Le module de chargement et le répertoire ne doivent être accessibles en écriture que par l'utilisateur root.

Une dernière remarque, toutes les restrictions de mot de passe standard sont effectuées avant l'appel de l'une des méthodes spécifiques au site. Par conséquent, les méthodes sont les dernières restrictions à être appliquées par le système.

Paramètres

Article Descriptif
UserName Indique un nom d'utilisateur "local".
NewPassword Indique le nouveau mot de passe en texte clair (non chiffré).Cette valeur peut être un pointeur NULL. Les mots de passe en texte clair sont toujours en ASCII 7 bits.
OldPassword Indique le mot de passe en cours en texte clair (non chiffré).Cette valeur peut être un pointeur NULL. Les mots de passe en texte clair sont toujours en ASCII 7 bits.
message Indique l'adresse d'un pointeur vers la mémoire malloc'ed contenant un message d'erreur NLS. La méthode doit fournir la mémoire mallocet le message.

Valeurs renvoyées

La méthode doit renvoyer les valeurs suivantes. Les valeurs de retour sont répertoriées par ordre de priorité.

Article Descriptif
-1 Erreur interne. La méthode n'a pas pu effectuer son évaluation de mot de passe. La méthode doit définir la variable errno . La méthode doit fournir un message d'erreur dans Message sauf si elle ne peut pas allouer de mémoire pour le message. S'il ne peut pas allouer de mémoire, il doit renvoyer le pointeur NULL dans Message.
1 seul Incident. Le changement de mot de passe ne répond pas aux exigences de la restriction. La restriction de mot de passe a été correctement évaluée et le changement de mot de passe n'a pas été accepté. La méthode doit fournir un message d'erreur dans Message. La variable errno est ignorée. Notez que les échecs de composition sont cumulatifs. Par conséquent, même si une condition d'échec est renvoyée, les méthodes de composition de fin sont appelées.
0 % L'opération a abouti. Le changement de mot de passe répond aux exigences de la restriction. Si nécessaire, la méthode peut fournir un message dans Message; sinon, le pointeur NULL est renvoyé. La variable errno est ignorée.