IMA4 2021/2022 EC4 : Différence entre versions
(→Etape4) |
(→Etape 5) |
||
Ligne 111 : | Ligne 111 : | ||
== Etape 5 == | == Etape 5 == | ||
+ | |||
+ | Pour cette partie, nous nous focalisons sur les fichiers du répertoire src/SMTout. | ||
+ | |||
+ | Le but est de pouvoir stocker les donnés des mails reçus dans un dossier (/tmp par défault) en triant les mails par destinataire. | ||
+ | |||
+ | Nous rencontrons d'abord une première erreur lors d'une tentative d'écriture dans un fichier : | ||
+ | de la part de la fonction ecritureJournal(JOURNIV_ERREUR,JOURNAL_OUVERTURE,fichier):ligne168 dans void gestionCourriel(struct courriel *donnees,void *supplement) ce qui nous donne l'érreur : | ||
+ | |||
+ | - Mon Sep 5 22:05:58 2022: Ouverture en écriture impossible '#' | ||
== Documents Rendus == | == Documents Rendus == | ||
Lien du répertoire git : https://archives.plil.fr/kpatrike/EC_Messagerie.git | Lien du répertoire git : https://archives.plil.fr/kpatrike/EC_Messagerie.git |
Version du 5 septembre 2022 à 22:15
Sommaire
Objectif
Terminer le projet système réseau SE2a4 2021/2022 à partir d'un source incomplet.
Le sujet du projet est ici : https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/
Le source incomplet est disponible en ligne Fichier:PSR-ReX-v6.zip.
Vous devez documenter vos avancées sur cette page Wiki.
Travail réalisé
Etape1:
- args.c : traitement des arguments courts et longs - libcom : Fonctions Initialisation, Connexion, BoucleServeur et résolution de nom de domaine - MTAint/tcpint.c : Code source pour le test de la communication TCP avec notre serveur fonctionne avec nc [ipv4_serveur] [port]
L'étape suivante sera d'implémenter les threads pour gérer plusieurs communications en même temps.
Etape2:
- MTAint: gestion_stmp : fonction de traitement et de stockage des informations avec des commandes HELO, MAIL, RCPT, DATA, QUIT dans une structure client réorganisation des fichiers : Test(test connection tcp, répertoire MTAint Etape1) , implémentation de la bibliothèque SMTP
L'implémentation des threads nous donne des erreurs. Librarire Threads non implémentée pour l'instant.
Etape2_finale:
MTAint: Implémentation des threads réalisée à l'aide d'une structure {void * arg, void * f(*f)(void *). Conflits de librairies résolus, nouvelle fonction serverLoop2 pour les threads et changement de void * gestionsmtp(int) en void * gestionsmtp(void *) pour être pris en charge par un thread
La prochaine étape est d'envoyer les donnés sur le port 25 et de recevoir un mail.
Etape3
Suite à une mauvaise compréhension du sujet de ma part, j'ai recommencé le projet avec le code fourni.
Erreurs corrigés:
smtp.c:184:23: warning: format not a string literal and no format arguments [-Wformat-security]
184 | if(fprintf(dialogue,envoi)<0) return -1; |
smtp.c: In function ‘dialogue_DATA’: smtp.c:211:1: warning: format not a string literal and no format arguments [-Wformat-security]
211 | if(fprintf(dialogue,corps)<0) return -1; | ^~
smtp.c: In function ‘afficheCourriel’: smtp.c:239:3: warning: format not a string literal and no format arguments [-Wformat-security]
239 | if(complet) fprintf(sortie,donnees->corps); | ^~
La fonction fprintf ne reconnaissait pas le dernier argument en paramètre. Ajout d'un %s : fprintf(FILE *,"%s",char *)
smtp_private.h : ACCUEIL_CODE = 250 => ACCUEIL_CODE 220
smtp.c : Affichage de la première réponse serveur distant dans retourGénérique
Script pour netcat
Automatisation des tests avec les commandes :
$ function slowcat(){ while read; do sleep .05; echo "$REPLY"; done; }
$ cat txt | slowcat | nc localhost [port]
Et le fichier "txt":
HELO localhost
MAIL FROM: <patrikeev@gmail.com>
RCPT TO: <konstantin.patrikeev@polytech-lille.net>
DATA
From: [IES] <patrikeev@gmail.com>
To: <konstantin.patrikeev@polytech-lille.net>
Date: Fri, 27 Oct 2017 06:14:11 +0000
Subject: Test Message
Hi there! This is supposed to be a real email...
Have a good day!
-- System
.
QUIT
Etape4
Lors de cette étape, j'ai réussi à m'envoyer un mail sur le serveur mail woody.escaut.net de polytech. Le test doit obligatoirement se faire à partir de l'adresse d'un nom de domaine internet sinon le serveur SMTP ne répondra pas.
Dans la partie précédentes, le SMRPin arrivait à établir une connexion avec le serveur mail 193.48.57.36 en effectuant le test à polytech.
Cependant il n'allait pas plus loins dans l'envoi des requetes HELO, MAIL, RCPT, DATA et QUIT.
2 erreurs on étés corrigées:
- int statut=sscanf(ligne,"%3d",&code); // au lieur de "%4d" dans scmtpin:ligne181
- #define ACCUEIL_CODE 220 // au lieu de 250 pour la reconnaissance du code d'accueil
Ainsi le programme n'arrivait pas à :
1. Reconnaître le bon code d'accueil 220 dans la fonction retour_generique
- static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille) // smtp.c:ligne 170
2. Identifier correctement ce code dans le message de réponse du serveur. sscanf prenait une chaîne de caractères %4s au lieur d'un entier %3d (Les codes sont donnés sur 3 chiffres)
- De plus, pour automatiser les tests, un fichier txt est disponible dans le répertoire EtapeN du projet avec un fichier README.txt qui explique comment s'en servir.
Etape 5
Pour cette partie, nous nous focalisons sur les fichiers du répertoire src/SMTout.
Le but est de pouvoir stocker les donnés des mails reçus dans un dossier (/tmp par défault) en triant les mails par destinataire.
Nous rencontrons d'abord une première erreur lors d'une tentative d'écriture dans un fichier : de la part de la fonction ecritureJournal(JOURNIV_ERREUR,JOURNAL_OUVERTURE,fichier):ligne168 dans void gestionCourriel(struct courriel *donnees,void *supplement) ce qui nous donne l'érreur :
- Mon Sep 5 22:05:58 2022: Ouverture en écriture impossible '#'
Documents Rendus
Lien du répertoire git : https://archives.plil.fr/kpatrike/EC_Messagerie.git