IMA2a4 2019/2020 EC2

De Wiki d'activités IMA
Révision datée du 23 juillet 2019 à 16:50 par Mseck2 (discussion | contributions) (Planning prévisionnel)

Présentation du projet

Contexte

La validation du semestre S8 dépend de la validation de cette épreuve complémentaire.

Objectif

Le but est de développer un système de messagerie personnelle très léger. Vous développerez plus particulièrement un serveur SMTP fonctionnant à la fois en IPv4 et en IPv6.

Description du projet

Vous développerez ce serveur SMTP sur le même modèle que le projet système réseau, en particulier concernant l'aspect structuré et multi-threadé.

Quelques directives spécifiques au serveur SMTP :

  • Les messages sont stockés dans un répertoire. On trouve dans ce répertoire un sous-répertoire par utilisateur. Les messages sont stockés sous la forme d'un fichier de nom numérique représentant l'ordre de réception des messages. Un fichier d'extension .status est associé à chaque message pour indiquer les états de ce message (voir l'épreuve complémentaire sur le serveur IMAP pour trouver l'état à préciser pour les messages nouvellement arrivés). Il faut prendre soin de gérer les messages arrivant simultanément en utilisant la fonction système lockf sur le répertoire correspondant à la boite aux lettres.
  • Le serveur doit gérer deux sockets d'écoute. Une limitée à l'interface loopback et l'autre à l'interface permettant la connexion au réseau. Les deux sockets seront gérées par deux threads différents (utilisation de la fonction lanceThread). Seuls les clients connectés sur la première socket pourront envoyer des messages en externe. Les clients connectés à la seconde socket ne pourront qu'envoyer des messages locaux à la machine.
  • Pour préciser le répertoire de stockage des messages (/var/spool/mail/ par défaut) et les suffixes des adresses locales utilisez des options courtes et longues (fonction getopt_long). L'option pour le suffixe peut être utilisée plusieurs fois (serveur local gérant plusieurs noms de domaines).
  • Il vous est rappelé que pour distribuer un courriel, il faut trouver l'adresse du serveur SMTP du correspondant. Cela peut être fait en utilisant la fonction système res_search et ses fonctions annexes.
  • Vous devez implanter les commandes SMTP suivantes : EHLO, MAIL, RCPT, DATA et EXIT. N'oubliez pas de retourner le code d'erreur ad hoc pour toute commande non implantée. Il est fortement conseillé de lire la RFC 5321.

Validation de l'épreuve

L'épreuve est validée si les sources sont lisibles et si le serveur supporte un test. Le test en question consistera à lancer le serveur sur une machine accessible d'Internet et à faire plusieurs essais d'envoi de messages. Un client de messagerie comme thunderbird sera configuré avec votre serveur STMP comme serveur d'envoi. Des messages à diverses adresses de courriels seront envoyés. Des messages seront aussi envoyés d'ailleurs sur Internet à destination de la machine sur laquelle se trouve votre serveur. Il sera vérifié que les messages sont bien sauvés sur le disque dans le format demandé.

Matériel nécessaire

Aucun.

Planning prévisionnel

Attention: planning susceptible d'évoluer

Introduction (semaines 1&2)

  • documentation et compréhension du cahier des charges
  • squelette du fonctionnement du serveur, avec gestion minimale des commandes code>EHLO</code>, MAIL, RCPT, DATA et QUIT
  • configuration d'un client sur thunderbird

Gestion des fichiers (semaine 3)

  • liste des différents expéditeurs
  • stockage des messages ainsi que leur statut avec le format spécifié
  • gestion d'arrivée simultanée de messages avec lockf

Envoi des messages (semaine 4)

  • résolution d'adresse avec res_search pour la distribution des courriels
  • gestion des codes d'erreur
  • gestion de plusieurs destinataires
  • gestion des messages provenant de serveurs différents

Aspects multithread (semaine 5)

  • gestion des sockets d'écoute pour les 2 interfaces (loopback et réseau)
  • terminaison des threads

Finalisation et Améliorations (semaines 6&7)

  • modularité des codes
  • constantes, variables globales et arguments
  • résultats des tests finaux

Travail effectué

Période 1 (du 11/07 au 23/07)

Durant cette période, j'ai tout d'abord commencé par me documenter sur le protocole SMTP ainsi que sur la RFC (toujours en cours). Ce qui me permet de définir un planning prévisionnel sans date butoir que j'aurai certainement à ajuster selon mon avancement et les priorités. Par la suite, en gardant l'architecture des sockets utilisée pour le projet PSR, j'ai pu établir une squelette de mon serveur smtp pour la gestion des mails envoyés. Ainsi, en configurant un client sur Thunderbird avec localhost pour serveur local, j'arrive à me connecter et à afficher les messages envoyés par les clients et à gérer les réponses qu'il faut fournir. Les réponses en soient ainsi que les traitements liés sont dans des fonctions permettant de gérer les commandes smtp de base à savoir: EHLO, MAIL, RCPT, DATA et QUIT. Etant donné qu'il s'agit du début, il manque certains éléments à gérer dans le code, notamment:

  • fonctionnement du serveur en IPv6
  • résolution d'adresse pour l'envoi des mails
  • gestion du port "loopback"
  • gestion des codes d'erreur
  • gestion de la terminaison des threads
  • arrivée simultanée de messages
  • gestion de plusieurs destinataires
  • SAUVEGARDE DES MESSAGES par répertoire pour chaque utilisateur

Documents

Fichier:Serveur SMTP v1.zip