Utilitaire de gestion des demandes de compte
1. But du programme
Ce programme doit permettre la création
rapide de comptes utilisateurs en fonction des demandes insérées dans la base
de données. Ces demandes sont effectuées par une personne qui désire avoir un
compte POP.
Cette
demande se fait en remplissant un formulaire disponible sur le site. La personne
doit fournir ses noms et prénoms, son adresse, son téléphone et son mot de passe.
Une fois le formulaire validé, un script en PHP3 génère un login en fonction
des nom et prénom du demandeur et en fonction des logins existants dans la table
Comptes ; le script insère ensuite toutes ces informations dans la table
Demandes_Compte de la base de données.
Le programme doit donc permettre le rejet d'une demande (en effaçant les entrées dans la table Demandes_Compte) ou la validation d'une demande et donc la création du compte (effacement des entrées dans Demandes_Compte et insertion des informations dans Comptes et Utilisateurs puis création du compte utilisateur Linux (useradd)).
Une fois le compte créé, l'utilisateur aura accès à sa boîte aux lettres grâce à l'interface Mail/WEB que l'on a vue précédemment. L'interface est conçue à l'aide du logiciel glade qui utilise les bibliothèques GTK++ (Gimp Tool Kit). Ces bibliothèques permettent la programmation d'interfaces graphiques très facilement. Glade génère le code pour la création de l'interface en assignant les évènements aux différents Widgets.
2. Fonctionnement
a) Interface utilisateur
Lors du lancement de l'application, une boîte de dialogue s'affiche pour demander le mot de passe nécessaire à la connexion à la base de données.
Une fois le mot de passe validé, l'interface
utilisateur est affichée. Cette interface se compose de deux zones :
· une zone d'affichage d'informations sur les demandes effectuées,
· une zone de contrôle composée de 5 boutons : "Création Compte" pour valider
la demande, "Détruire le Demande" pour effacer la demande, "Suivant" et "Précédent"
pour naviguer dans les demandes et "Quitter" pour sortir de l'interface.
Lors de l'affichage de la fenêtre principale (principale), l'événement show est activé et fait appel à la fonction on_principale_show qui se contente d'appeler la fonction recharger_base() pour charger les enregistrements de table Demandes_Compte.
void on_principale_show (GtkWidget *widget, gpointer user_data)
{ recharger_base();
}
La fonction recharger_base() soumet une requête pour demander tous les enregistrements contenus dans la table Demandes_Comptes. On initialise alors debut (de type MYSQL_ROWS) qui contiendra le premier enregistrement de la table pour une navigation dans cette dernière. On initialise aussi max (de type int) qui contient le nombre d'enregistrements.
b) La destruction d'une demande
Lorsque l'on clique sur le bouton "Détruire la Demande", l'événement clicked est déclenché et fait appel à la fonction on_detruire_clicked qui appel simplement une autre fonction : effacer() (cette fonction est aussi appelée lors de la création d'un compte).
void on_detruire_clicked (GtkButton *button, gpointer user_data)
{ effacer();
}
La fonction effacer() va d'abord
regarder s'il y a au moins une demande dans la table en testant la variable
max ; si max est différent de 0, cela veut dire que l'on peut
effacer une demande. Ensuite, on initialise une requête pour détruire l'enregistrement
: sprintf(query,"delete from Demandes_Compte
where nom_utilisateur='%s' and login='%s';",row[1],row[0]); ou l'on passe
le login (row[0]) et le nom (row[1]) de l'utilisateur. On peut
alors exécuter la requête.
Si la requête s'est bien passé, on va alors regarder combien il y avait d'enregistrements
dans la table Demandes_Compte. S'il n'y en avait qu'une, on efface les
champs de la zone d'informations de l'interface ; Sinon on recharge (fonction
recharger_base()) la base de données et on se place après l'enregistrement
qui vient d'être effacé ou avant (si c'était le dernier).
c) La création d'un compte
Lors d'un clic sur le bouton "Création Compte", on va faire appel à la fonction on_creer_clicked. Cette fonction va créer le compte utilisateur Linux en faisant appel à la commande UNIX useradd ; le compte appartiendra au groupe popusers et n'aura pas de shell (/bin/false).
Si tout se passe bien, il faut mettre à jour le mot de passe de l'utilisateur, pour cela, nous ferons appel à la commande UNIX usermod qui permet de modifier les paramètres du compte. Il faut faire attention, car le mot de passe que l'on donne à cette commande doit être crypté, c'est pourquoi on utilise la fonction crypt(const char *cl,const char *salt) basé sur l'algorithme DES (Data Encryption Standard) et utilisée par Linux pour le cryptage des mots de passe (-lcrypt devra être rajouté lors du liage).
On doit, ensuite, créer le répertoire mailboxes destiné à recevoir les boîtes aux lettres secondaires (répertoires) de l'utilisateur. Comme l'interface Mail/WEB devra pouvoir manipuler des fichiers dans ce répertoire, il faut permettre au groupe popusers d'écrire et de lire dans ce répertoire. httpd est lancé avec les droits de l'utilisateur gsite et du groupe GSite qui à pour groupe supplémentaire popusers. Pour cela il faut changer les droits et le propriétaire (popusers) du répertoire pour permettre à son groupe d'y accéder en lecture et écriture (lors de la création du compte seul l'utilisateur y a accès).
Il ne reste ensuite plus qu'à mettre à jour les tables Comptes et Utilisateurs puis de détruire l'entrée dans la table Demandes_Comptes grâce à la fonction effacer() vue plus haut.
Ce programme ne permet (pour l'instant ?) que la création de compte POP/IMAP, car la création de comptes "Espace", pour l'hébergement de sites ou autre sera faite manuellement, car il faudra connaître le désir précis de la personne pour connaître l'espace disque nécessaire,etc...