TDs de Système

Introduction      FAQ   TD 1   TD 2   TD 3   TD 4   TD 5   TD 6   TD 7   TD 8

Retour au Cours.

1.  Forum de discussion

Le but des TDs est de réaliser un forum de diffusion de messages. Par la suite, on préfèrera parler d'articles.

Sur le plan technique, nous rappelons trois objectifs principaux.

  1. Portabilité : le système doit fonctionner au moins sur les stations GNU/Linux en salle informatique, mais il doit pouvoir être facilement installé sur une nouvelle architecture ; vous êtes fortement encouragés à tester vos programmes sur d'autres versions (ou distributions) de GNU/Linux et sur d'autres systèmes UNIX.
  2. Sécurité : le système devant manipuler des articles de plusieurs utilisateurs, il ne faut pas qu'un utilisateur puisse détruire un article d'un autre utilisateur, ou compromettre la structure de données du système.
  3. Facilité d'administration : le travail de l'ingénieur système doit être simplifié au maximum  une fois que la configuration de l'outil est faite, il ne devrait plus avoir à intervenir.

Le forum se compose de deux programmes distincts.

Serveur

Le serveur est lancé une fois pour toutes, par l'ingénieur système, lors du démarrage de la machine, pour le compte d'un utilisateur spécial ; vous le lancerez vous-même en phase de test initial, puis vous pourrez faire lancer votre serveur par un collègue.

Le rôle du serveur est de contrôler le stockage des articles. Ceux-ci sont placés dans un répertoire que seul le serveur peut modifier, mais que tous les autres utilisateurs peuvent lire. Chaque article porte un numéro comme nom. Périodiquement (une fois par jour), le serveur lance une expiration, c'est à dire qu'il supprime les articles plus vieux qu'une certaine date (passée en argument du serveur par exemple).

Les fichiers contenant les articles doivent comporter deux parties séparées par une ligne vide. La première est l'en-tête, comprenant l'identité de l'auteur, la date de postage de l'article et le sujet fourni par l'auteur. La deuxième est le message proprement dit.

Par exemple :

From: cohen (Albert Cohen)
Date: Mon Jan 12 12:34:00 MET 2007
Subject: Exemple

Ce message est un bel exemple d'article,
n'est-ce pas ?

Client

Le client est un programme exécuté par les utilisateurs du forum, pour consulter et poster les articles. La consultation s'effectue directement dans le répertoire des articles.

Le client ne doit pas présenter à l'utilisateur des articles qu'il a déjà lus, c'est à dire que le programme maintient à jour un fichier ~/.forum avec les numéros d'articles déjà lus par l'utilisateur.

L'interface utilisateur est simplifiée à l'extrême. Le client doit présenter la liste des messages (avec leur numéro, leur auteur et les premiers caractères du sujet) non encore lus à l'utilisateur. Si l'utilisateur tape un numéro d'article, celui-ci est affiché à l'aide de l'utilitaire more (ou de toute autre commande référencée par la variable d'environnement PAGER), même si l'article est déjà lu. Le contenu de l'article doit être fourni à la commande via son entrée standard. Si l'utilisateur tape la commande d suivie d'un numéro d'article, celui-ci est considéré comme lu. La commande D marque tous les articles comme étant lus. La commande l affiche la liste des articles non lus.

Avec la commande s <sujet>, le client appelle l'éditeur emacs (ou de toute autre commande référencée par la variable d'environnement EDITOR) pour saisir l'article dans un fichier temporaire dans le répertoire /tmp (créé avec mkstemp). La transmission de l'article de l'éditeur au client passe par un tube. Une fois l'article composé, le client demande confirmation avant de poster l'article réellement.

Pour poster l'article, le client procède de la manière suivante : tout d'abord, il met en forme l'entête et copie l'article dans un fichier temporaire dans le répertoire du serveur (créé avec mkstemp). Puis, via une file de messages il envoie le nom du fichier au serveur. Le serveur attribue alors un numéro à l'article et renomme le fichier temporaire en conséquence. Vous noterez que le client doit pouvoir écrire dans le répertoire du serveur, et doit donc avoir les droits de l'utilisateur propriétaire du serveur.

Dans un deuxième temps, on étendra le forum pour un fonctionnement distribué (plus réaliste), via une prise (socket) réseau, l'article étant alors transmis directement sur le réseau.

2.  Les supports fournis

L'archive forum.tar.gz contient les fichiers suivants.

3.  Le travail demandé

À travers 8 sujets de TD, nous allons réaliser les programmes constituant le forum. L'implémentation se fera en langage ISO C90 ou ISO C99, suivant les spécifications ci-dessus.

On prendra soin de rendre ce système robuste, c'est à dire capable de prendre en compte des situations extrêmes, et sûr, c'est à dire que vous expliciterez tous les problèmes de sécurité que vous aurez rencontré.