IMA2a4 2019/2020 EC1

De Wiki d'activités IMA
Révision datée du 9 août 2019 à 23:12 par Hfahim (discussion | contributions) (Documents)

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 IMAP fonctionnant en IPv4 et en IPv6.

Description du projet

Vous développerez ce serveur IMAP 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 IMAP :

  • Pas de gestion de l'identification. Le serveur n'écoute que sur l'interface loopback. Donc seul un utilisateur ayant accès à la machine pourra utiliser le serveur IMAP. Pour un accès à distance, un tunnel créé par l'option -L de l'utilitaire ssh sera utilisé. Dans la phase d'identification du client IMAP seul le nom d'utilisateur sera exploité pour retrouver les messages. Le mot de passe sera lu sans effectuer de contrôle.
  • Vous utiliserez le même format de stockage des messages que celui décrit dans l'épreuve complémentaire dont le sujet est le développement d'un serveur SMTP. Les drapeaux des messages sont stockés dans le fichier d'extension .status en toutes lettres et un seul par ligne. Lors de la manipulation d'un message (ou de ses drapeaux) en lecture ou en écriture vous bloquerez les fichiers avec la fonction système lockf. Prévoyez une option -s ou --spool permettant de donner le nom du répertoire racine des boites aux lettres (/var/spool/mail par défaut).
  • Vous implanterez un serveur IMAP version 2 tel que défini par la RFC 1176. Vous implanterez en particulier les commandes NOP, LOGIN, LOGOUT, SELECT, CHECK, EXPUNGE, COPY, FETCH et STORE. Tenez-vous en aux 5 drapeaux systèmes.

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 à créer une arborescence de messages, à lancer le serveur IMAP et à vérifier avec l'application thunderbird si le serveur IMAP se comporte comme attendu par le client.

Matériel nécessaire

Aucun.

Planning prévisionnel

Travail effectué

SEMAINE 1 :


Durant la première semaine j'ai fait des recherches pour prendre en main le projet, comprendre le fonctionnement du protocole IMAP qui est un protocole qui permet d'accéder à ses courriers électroniques directement sur les serveurs.

  • J'ai cherché à comprendre la fonctionnement des fonctions NOP, LOGIN, LOGOUT, SELECT, CHECK, EXPUNGE, COPY, FETCH et STORE
  • Et aussi le fonctionnement des 5 drapeaux systèmes RECENT, SEEN, ANSWERED, FLAGGED, DELETED.
  • Ensuite, en reprenant et modifiant le serveur TCP qui a été crée pour le premier projet S&R. J'ai commencé à faire la réalisation du serveur IMAP2.

Le client se connecte et j'arrive a obtenir le TAG (A001,A002..) ainsi que la fonction (LOGIN, SELECT, FETCH...) et les arguments (ex: login mdp).

Il faut maintenant faire le traitement des information obtenu.

Pour la suite je vais commencer les fonctions "simples" du type LOGIN et LOGOUT.


SEMAINE 2 & 3 :


note : durant la semaine 2 et 3 j'ai eu des déplacements professionnel et personnel je n'ai pas pu beaucoup avancer le projet IMAP2..

Pendant cette période j'ai ajouté la fonction LOGIN et LOGOUT :

  • La fonction LOGIN : Pour la fonction LOGIN je suis partie du principe que le serveur a une base de données avec tous les utilisateurs,

pour vérifier si l'utilisateur existe bien dans la base de données j'ai créé un fichier LOGIN.txt qui contient tous les utilisateurs.

Lorsque un utilisateur met son identifiant pour se connecter je vérifie qu'il est bien dans la base de données (vérification du ficher LOGIN.txt) si il existe je lui renvoi : "A001 OK User logged in"

sinon je renvoie un message d'erreur.

  • La fonction LOGOUT : Une fois l'utilisateur connecté il à accès aux fonctions NOOP, SELECT, CHECK, EXPUNGE, COPY, FETCH, STOREet enfin LOGOUT.

Tant qu'il ne se déconnecte pas avec la fonction LOGOUT il reste connecté. Une fois qu'il se déconnecte je lui renvoie : "A007 OK Logout complete"

  • La fonction NOOP : Pour cette fonction lorsque le client m'envoie un NOOP je lui réponds un simple : "OK NOOP" il faudra que je rajoute le bon tag devant.
  • La fonction SELECT : Pour la fonction SELECT j'ai développé deux fonctions : Nombre_mail, Lect_Flags

La fonction Nombre_mail parcours le répertoire de l'utilisateur connecte (passée en paramètre de la fonction) et elle retourne le nombre de mail dans son répertoire.

La fonction Lect_Flags permet de lire les flag dans chacun des .status de chaque message. Etant donné que les messages sont stockés sous la forme d'un fichier de nom numérique

représentant l'ordre de réception des messages il m'a suffi de faire une boucle FOR qui s’incrémente et j'utilise l'incrémentation pour passé d'un .status a l'autre a l'autre.

sprintf(Chemin,"../Messages/Utilisateur/%s/INBOX/%d.status",user,i);<code>

le <code>%s c'est l'utilisateur connecté et le %d l'incrément de la boucle FOR qui parcourt le nombre de mails passés en paramètre.

Pour la semaine 4 je vais continuer à optimiser les fonctions actuelles et développer la fonction CHECK.

Documents

Fichier:IMAP v1.zip

Fichier:IMAP v2.zip

Fichier:IMAP v3.zip

Fichier:IMAP v4.zip