<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://wiki-ima.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ldelepla</id>
		<title>Wiki d'activités IMA - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki-ima.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ldelepla"/>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php/Sp%C3%A9cial:Contributions/Ldelepla"/>
		<updated>2026-09-17T11:28:26Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61982</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61982"/>
				<updated>2023-06-14T15:45:01Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* Def of done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Sujet:'''&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Archive:'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
*'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : &amp;lt;code&amp;gt;''xen shut dio1''&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
*Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;lt;code&amp;gt;&amp;quot;Not Implemented&amp;quot;&amp;lt;/code&amp;gt; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   nc 193.48.57.186 25&lt;br /&gt;
   HELO raclette.site&lt;br /&gt;
   MAIL FROM: ldelepla@polyetch-lille.fr&lt;br /&gt;
   RCPT TO: root@raclette.site&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: &amp;lt;sujet&amp;gt;&lt;br /&gt;
   &amp;lt;corps du mail&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
*Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   while(1){&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&lt;br /&gt;
   char ligne[MAX_LIGNE];&lt;br /&gt;
   #ifdef DEVERMINE&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&lt;br /&gt;
   #endif&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&lt;br /&gt;
   int code;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&lt;br /&gt;
   #ifdef DEVERMINE&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&lt;br /&gt;
   #endif&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&lt;br /&gt;
   #ifdef DEVERMINE&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&lt;br /&gt;
   #endif&lt;br /&gt;
   }&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   nc localhost 25&lt;br /&gt;
   HELO polytech-lille.net&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   TEST&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   &lt;br /&gt;
   BONJOUR&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   #!/bin/bash&lt;br /&gt;
   i=0&lt;br /&gt;
   while [ $i -lt $2 ]&lt;br /&gt;
   do&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&lt;br /&gt;
      i=`expr $i + 1`&lt;br /&gt;
   done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
*Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
*Recherche des leaks avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Lors de l'envoi de mail (SMTPin) j'ai remarqué qu'il faut obligatoirement les chevrons. Il faut modifier la fonction ''*adresseVersUtilisateur''. Maintenant le test de charge fonctionne correctement.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Test de charge avec erreurs aléatoires:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour créer des erreurs aléatoires j'ai écris en bash:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   #!/bin/bash&lt;br /&gt;
   i=0&lt;br /&gt;
   while [ $i -lt $2 ]&lt;br /&gt;
   do&lt;br /&gt;
    nombre=$RANDOM&lt;br /&gt;
    nombre=`expr $nombre \% 5`&lt;br /&gt;
     case $nombre in&lt;br /&gt;
      1)&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $4 &amp;amp;&lt;br /&gt;
       ;;&lt;br /&gt;
      *)&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&lt;br /&gt;
       ;;&lt;br /&gt;
     esac&lt;br /&gt;
     i=`expr $i + 1`&lt;br /&gt;
   done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Avec comme premier argument l'adresse ip, le suivant le nombre de messages a envoyer, le suivant un fichier test.txt contenant aucune erreur, et un autre argument contenant des erreurs. Ainsi dans ce cas, il y a une chance sur cinq de tomber sur une erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur tient toujours la charge avec de nombreux mails contenant 1 fois sur 5 des erreurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fuites mémoires'''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;valgrind --leak-check=full --show-leak-kinds=all -s ./SMTPout -i eth0 -u carte.txt &amp;gt; /tmp/log&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On vérifie les fuites mémoires. On constate que 30ko sont définitivement perdues.&amp;lt;br&amp;gt;&lt;br /&gt;
Après vérification il y a une erreur dans le malloc de la fonction adresseVersUtilisateur de out.c il faut ajouter un +1 dans le malloc dans le cas ou il n'y a aucun destinataire.&amp;lt;br&amp;gt;&lt;br /&gt;
Aussi, on remarque qu'il y a autant de blocks perdues que de messages envoyés, en fait, il n'y a pas de &amp;lt;code&amp;gt;free(donnees)&amp;lt;/code&amp;gt; dans la fonction SMTP_gestion.&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61981</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61981"/>
				<updated>2023-06-14T15:44:18Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* Def of done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Sujet:'''&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Archive:'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
*'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : &amp;lt;code&amp;gt;''xen shut dio1''&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
*Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;lt;code&amp;gt;&amp;quot;Not Implemented&amp;quot;&amp;lt;/code&amp;gt; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   nc 193.48.57.186 25&lt;br /&gt;
   HELO raclette.site&lt;br /&gt;
   MAIL FROM: ldelepla@polyetch-lille.fr&lt;br /&gt;
   RCPT TO: root@raclette.site&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: &amp;lt;sujet&amp;gt;&lt;br /&gt;
   &amp;lt;corps du mail&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
*Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   while(1){&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&lt;br /&gt;
   char ligne[MAX_LIGNE];&lt;br /&gt;
   #ifdef DEVERMINE&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&lt;br /&gt;
   #endif&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&lt;br /&gt;
   int code;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&lt;br /&gt;
   #ifdef DEVERMINE&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&lt;br /&gt;
   #endif&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&lt;br /&gt;
   #ifdef DEVERMINE&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&lt;br /&gt;
   #endif&lt;br /&gt;
   }&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   nc localhost 25&lt;br /&gt;
   HELO polytech-lille.net&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   TEST&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   &lt;br /&gt;
   BONJOUR&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   #!/bin/bash&lt;br /&gt;
   i=0&lt;br /&gt;
   while [ $i -lt $2 ]&lt;br /&gt;
   do&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&lt;br /&gt;
      i=`expr $i + 1`&lt;br /&gt;
   done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
*Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
*Recherche des leaks avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Lors de l'envoi de mail (SMTPin) j'ai remarqué qu'il faut obligatoirement les chevrons. Il faut modifier la fonction ''*adresseVersUtilisateur''. Maintenant le test de charge fonctionne correctement.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Test de charge avec erreurs aléatoires:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour créer des erreurs aléatoires j'ai écris en bash:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
    nombre=$RANDOM&amp;lt;br&amp;gt;&lt;br /&gt;
    nombre=`expr $nombre \% 5`&amp;lt;br&amp;gt;&lt;br /&gt;
     case $nombre in&amp;lt;br&amp;gt;&lt;br /&gt;
      1)&amp;lt;br&amp;gt;&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $4 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
       ;;&amp;lt;br&amp;gt;&lt;br /&gt;
      *)&amp;lt;br&amp;gt;&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
       ;;&amp;lt;br&amp;gt;&lt;br /&gt;
     esac&amp;lt;br&amp;gt;&lt;br /&gt;
     i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Avec comme premier argument l'adresse ip, le suivant le nombre de messages a envoyer, le suivant un fichier test.txt contenant aucune erreur, et un autre argument contenant des erreurs. Ainsi dans ce cas, il y a une chance sur cinq de tomber sur une erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur tient toujours la charge avec de nombreux mails contenant 1 fois sur 5 des erreurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fuites mémoires'''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;valgrind --leak-check=full --show-leak-kinds=all -s ./SMTPout -i eth0 -u carte.txt &amp;gt; /tmp/log&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On vérifie les fuites mémoires. On constate que 30ko sont définitivement perdues.&amp;lt;br&amp;gt;&lt;br /&gt;
Après vérification il y a une erreur dans le malloc de la fonction adresseVersUtilisateur de out.c il faut ajouter un +1 dans le malloc dans le cas ou il n'y a aucun destinataire.&amp;lt;br&amp;gt;&lt;br /&gt;
Aussi, on remarque qu'il y a autant de blocks perdues que de messages envoyés, en fait, il n'y a pas de &amp;lt;code&amp;gt;free(donnees)&amp;lt;/code&amp;gt; dans la fonction SMTP_gestion.&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61980</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61980"/>
				<updated>2023-06-14T15:43:50Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* Def of done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Sujet:'''&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Archive:'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
*'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : &amp;lt;code&amp;gt;''xen shut dio1''&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
*Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;lt;code&amp;gt;&amp;quot;Not Implemented&amp;quot;&amp;lt;/code&amp;gt; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   nc 193.48.57.186 25&lt;br /&gt;
   HELO raclette.site&lt;br /&gt;
   MAIL FROM: ldelepla@polyetch-lille.fr&lt;br /&gt;
   RCPT TO: root@raclette.site&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: &amp;lt;sujet&amp;gt;&lt;br /&gt;
   &amp;lt;corps du mail&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
*Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   while(1){&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&lt;br /&gt;
   char ligne[MAX_LIGNE];&lt;br /&gt;
   #ifdef DEVERMINE&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&lt;br /&gt;
   #endif&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&lt;br /&gt;
   int code;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&lt;br /&gt;
   #ifdef DEVERMINE&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&lt;br /&gt;
   #endif&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&lt;br /&gt;
   #ifdef DEVERMINE&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&lt;br /&gt;
   #endif&lt;br /&gt;
   }&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   nc localhost 25&lt;br /&gt;
   HELO polytech-lille.net&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   TEST&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   &lt;br /&gt;
   BONJOUR&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
*Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
*Recherche des leaks avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Lors de l'envoi de mail (SMTPin) j'ai remarqué qu'il faut obligatoirement les chevrons. Il faut modifier la fonction ''*adresseVersUtilisateur''. Maintenant le test de charge fonctionne correctement.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Test de charge avec erreurs aléatoires:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour créer des erreurs aléatoires j'ai écris en bash:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
    nombre=$RANDOM&amp;lt;br&amp;gt;&lt;br /&gt;
    nombre=`expr $nombre \% 5`&amp;lt;br&amp;gt;&lt;br /&gt;
     case $nombre in&amp;lt;br&amp;gt;&lt;br /&gt;
      1)&amp;lt;br&amp;gt;&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $4 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
       ;;&amp;lt;br&amp;gt;&lt;br /&gt;
      *)&amp;lt;br&amp;gt;&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
       ;;&amp;lt;br&amp;gt;&lt;br /&gt;
     esac&amp;lt;br&amp;gt;&lt;br /&gt;
     i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Avec comme premier argument l'adresse ip, le suivant le nombre de messages a envoyer, le suivant un fichier test.txt contenant aucune erreur, et un autre argument contenant des erreurs. Ainsi dans ce cas, il y a une chance sur cinq de tomber sur une erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur tient toujours la charge avec de nombreux mails contenant 1 fois sur 5 des erreurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fuites mémoires'''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;valgrind --leak-check=full --show-leak-kinds=all -s ./SMTPout -i eth0 -u carte.txt &amp;gt; /tmp/log&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On vérifie les fuites mémoires. On constate que 30ko sont définitivement perdues.&amp;lt;br&amp;gt;&lt;br /&gt;
Après vérification il y a une erreur dans le malloc de la fonction adresseVersUtilisateur de out.c il faut ajouter un +1 dans le malloc dans le cas ou il n'y a aucun destinataire.&amp;lt;br&amp;gt;&lt;br /&gt;
Aussi, on remarque qu'il y a autant de blocks perdues que de messages envoyés, en fait, il n'y a pas de &amp;lt;code&amp;gt;free(donnees)&amp;lt;/code&amp;gt; dans la fonction SMTP_gestion.&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61979</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61979"/>
				<updated>2023-06-14T15:42:57Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* Def of done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Sujet:'''&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Archive:'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
*'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : &amp;lt;code&amp;gt;''xen shut dio1''&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
*Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;lt;code&amp;gt;&amp;quot;Not Implemented&amp;quot;&amp;lt;/code&amp;gt; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   nc 193.48.57.186 25&lt;br /&gt;
   HELO raclette.site&lt;br /&gt;
   MAIL FROM: ldelepla@polyetch-lille.fr&lt;br /&gt;
   RCPT TO: root@raclette.site&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: &amp;lt;sujet&amp;gt;&lt;br /&gt;
   &amp;lt;corps du mail&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
*Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   while(1){&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&lt;br /&gt;
   }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   &lt;br /&gt;
   BONJOUR&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
*Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
*Recherche des leaks avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Lors de l'envoi de mail (SMTPin) j'ai remarqué qu'il faut obligatoirement les chevrons. Il faut modifier la fonction ''*adresseVersUtilisateur''. Maintenant le test de charge fonctionne correctement.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Test de charge avec erreurs aléatoires:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour créer des erreurs aléatoires j'ai écris en bash:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
    nombre=$RANDOM&amp;lt;br&amp;gt;&lt;br /&gt;
    nombre=`expr $nombre \% 5`&amp;lt;br&amp;gt;&lt;br /&gt;
     case $nombre in&amp;lt;br&amp;gt;&lt;br /&gt;
      1)&amp;lt;br&amp;gt;&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $4 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
       ;;&amp;lt;br&amp;gt;&lt;br /&gt;
      *)&amp;lt;br&amp;gt;&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
       ;;&amp;lt;br&amp;gt;&lt;br /&gt;
     esac&amp;lt;br&amp;gt;&lt;br /&gt;
     i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Avec comme premier argument l'adresse ip, le suivant le nombre de messages a envoyer, le suivant un fichier test.txt contenant aucune erreur, et un autre argument contenant des erreurs. Ainsi dans ce cas, il y a une chance sur cinq de tomber sur une erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur tient toujours la charge avec de nombreux mails contenant 1 fois sur 5 des erreurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fuites mémoires'''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;valgrind --leak-check=full --show-leak-kinds=all -s ./SMTPout -i eth0 -u carte.txt &amp;gt; /tmp/log&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On vérifie les fuites mémoires. On constate que 30ko sont définitivement perdues.&amp;lt;br&amp;gt;&lt;br /&gt;
Après vérification il y a une erreur dans le malloc de la fonction adresseVersUtilisateur de out.c il faut ajouter un +1 dans le malloc dans le cas ou il n'y a aucun destinataire.&amp;lt;br&amp;gt;&lt;br /&gt;
Aussi, on remarque qu'il y a autant de blocks perdues que de messages envoyés, en fait, il n'y a pas de &amp;lt;code&amp;gt;free(donnees)&amp;lt;/code&amp;gt; dans la fonction SMTP_gestion.&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61978</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61978"/>
				<updated>2023-06-14T15:42:34Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* Def of done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Sujet:'''&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Archive:'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
*'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : &amp;lt;code&amp;gt;''xen shut dio1''&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
*Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;lt;code&amp;gt;&amp;quot;Not Implemented&amp;quot;&amp;lt;/code&amp;gt; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   nc 193.48.57.186 25&lt;br /&gt;
   HELO raclette.site&lt;br /&gt;
   MAIL FROM: ldelepla@polyetch-lille.fr&lt;br /&gt;
   RCPT TO: root@raclette.site&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: &amp;lt;sujet&amp;gt;&lt;br /&gt;
   &amp;lt;corps du mail&amp;gt;&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
*Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   &lt;br /&gt;
   BONJOUR&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
*Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
*Recherche des leaks avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Lors de l'envoi de mail (SMTPin) j'ai remarqué qu'il faut obligatoirement les chevrons. Il faut modifier la fonction ''*adresseVersUtilisateur''. Maintenant le test de charge fonctionne correctement.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Test de charge avec erreurs aléatoires:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour créer des erreurs aléatoires j'ai écris en bash:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
    nombre=$RANDOM&amp;lt;br&amp;gt;&lt;br /&gt;
    nombre=`expr $nombre \% 5`&amp;lt;br&amp;gt;&lt;br /&gt;
     case $nombre in&amp;lt;br&amp;gt;&lt;br /&gt;
      1)&amp;lt;br&amp;gt;&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $4 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
       ;;&amp;lt;br&amp;gt;&lt;br /&gt;
      *)&amp;lt;br&amp;gt;&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
       ;;&amp;lt;br&amp;gt;&lt;br /&gt;
     esac&amp;lt;br&amp;gt;&lt;br /&gt;
     i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Avec comme premier argument l'adresse ip, le suivant le nombre de messages a envoyer, le suivant un fichier test.txt contenant aucune erreur, et un autre argument contenant des erreurs. Ainsi dans ce cas, il y a une chance sur cinq de tomber sur une erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur tient toujours la charge avec de nombreux mails contenant 1 fois sur 5 des erreurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fuites mémoires'''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;valgrind --leak-check=full --show-leak-kinds=all -s ./SMTPout -i eth0 -u carte.txt &amp;gt; /tmp/log&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On vérifie les fuites mémoires. On constate que 30ko sont définitivement perdues.&amp;lt;br&amp;gt;&lt;br /&gt;
Après vérification il y a une erreur dans le malloc de la fonction adresseVersUtilisateur de out.c il faut ajouter un +1 dans le malloc dans le cas ou il n'y a aucun destinataire.&amp;lt;br&amp;gt;&lt;br /&gt;
Aussi, on remarque qu'il y a autant de blocks perdues que de messages envoyés, en fait, il n'y a pas de &amp;lt;code&amp;gt;free(donnees)&amp;lt;/code&amp;gt; dans la fonction SMTP_gestion.&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61977</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61977"/>
				<updated>2023-06-14T15:41:50Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* Def of done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Sujet:'''&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Archive:'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
*'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : &amp;lt;code&amp;gt;''xen shut dio1''&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
*Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;lt;code&amp;gt;&amp;quot;Not Implemented&amp;quot;&amp;lt;/code&amp;gt; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
*Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   &lt;br /&gt;
   BONJOUR&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
*Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
*Recherche des leaks avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Lors de l'envoi de mail (SMTPin) j'ai remarqué qu'il faut obligatoirement les chevrons. Il faut modifier la fonction ''*adresseVersUtilisateur''. Maintenant le test de charge fonctionne correctement.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Test de charge avec erreurs aléatoires:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour créer des erreurs aléatoires j'ai écris en bash:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
    nombre=$RANDOM&amp;lt;br&amp;gt;&lt;br /&gt;
    nombre=`expr $nombre \% 5`&amp;lt;br&amp;gt;&lt;br /&gt;
     case $nombre in&amp;lt;br&amp;gt;&lt;br /&gt;
      1)&amp;lt;br&amp;gt;&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $4 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
       ;;&amp;lt;br&amp;gt;&lt;br /&gt;
      *)&amp;lt;br&amp;gt;&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
       ;;&amp;lt;br&amp;gt;&lt;br /&gt;
     esac&amp;lt;br&amp;gt;&lt;br /&gt;
     i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Avec comme premier argument l'adresse ip, le suivant le nombre de messages a envoyer, le suivant un fichier test.txt contenant aucune erreur, et un autre argument contenant des erreurs. Ainsi dans ce cas, il y a une chance sur cinq de tomber sur une erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur tient toujours la charge avec de nombreux mails contenant 1 fois sur 5 des erreurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fuites mémoires'''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;valgrind --leak-check=full --show-leak-kinds=all -s ./SMTPout -i eth0 -u carte.txt &amp;gt; /tmp/log&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On vérifie les fuites mémoires. On constate que 30ko sont définitivement perdues.&amp;lt;br&amp;gt;&lt;br /&gt;
Après vérification il y a une erreur dans le malloc de la fonction adresseVersUtilisateur de out.c il faut ajouter un +1 dans le malloc dans le cas ou il n'y a aucun destinataire.&amp;lt;br&amp;gt;&lt;br /&gt;
Aussi, on remarque qu'il y a autant de blocks perdues que de messages envoyés, en fait, il n'y a pas de &amp;lt;code&amp;gt;free(donnees)&amp;lt;/code&amp;gt; dans la fonction SMTP_gestion.&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61976</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61976"/>
				<updated>2023-06-14T15:41:30Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* Def of done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Sujet:'''&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Archive:'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
*'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : &amp;lt;code&amp;gt;''xen shut dio1''&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
*Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;lt;code&amp;gt;&amp;quot;Not Implemented&amp;quot;&amp;lt;/code&amp;gt; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
*Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   &lt;br /&gt;
   BONJOUR&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
*Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
*Recherche des leaks avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Lors de l'envoi de mail (SMTPin) j'ai remarqué qu'il faut obligatoirement les chevrons. Il faut modifier la fonction ''*adresseVersUtilisateur''. Maintenant le test de charge fonctionne correctement.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Test de charge avec erreurs aléatoires:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour créer des erreurs aléatoires j'ai écris en bash:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
    nombre=$RANDOM&amp;lt;br&amp;gt;&lt;br /&gt;
    nombre=`expr $nombre \% 5`&amp;lt;br&amp;gt;&lt;br /&gt;
     case $nombre in&amp;lt;br&amp;gt;&lt;br /&gt;
      1)&amp;lt;br&amp;gt;&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $4 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
       ;;&amp;lt;br&amp;gt;&lt;br /&gt;
      *)&amp;lt;br&amp;gt;&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
       ;;&amp;lt;br&amp;gt;&lt;br /&gt;
     esac&amp;lt;br&amp;gt;&lt;br /&gt;
     i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Avec comme premier argument l'adresse ip, le suivant le nombre de messages a envoyer, le suivant un fichier test.txt contenant aucune erreur, et un autre argument contenant des erreurs. Ainsi dans ce cas, il y a une chance sur cinq de tomber sur une erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur tient toujours la charge avec de nombreux mails contenant 1 fois sur 5 des erreurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fuites mémoires'''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;valgrind --leak-check=full --show-leak-kinds=all -s ./SMTPout -i eth0 -u carte.txt &amp;gt; /tmp/log&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On vérifie les fuites mémoires. On constate que 30ko sont définitivement perdues.&amp;lt;br&amp;gt;&lt;br /&gt;
Après vérification il y a une erreur dans le malloc de la fonction adresseVersUtilisateur de out.c il faut ajouter un +1 dans le malloc dans le cas ou il n'y a aucun destinataire.&amp;lt;br&amp;gt;&lt;br /&gt;
Aussi, on remarque qu'il y a autant de blocks perdues que de messages envoyés, en fait, il n'y a pas de &amp;lt;code&amp;gt;free(donnees)&amp;lt;/code&amp;gt; dans la fonction SMTP_gestion.&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61975</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61975"/>
				<updated>2023-06-14T15:41:07Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* Def of done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Sujet:'''&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Archive:'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
*'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : &amp;lt;code&amp;gt;''xen shut dio1''&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
*Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;lt;code&amp;gt;&amp;quot;Not Implemented&amp;quot;&amp;lt;/code&amp;gt; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
*Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   &lt;br /&gt;
   BONJOUR&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
*Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
*Recherche des leaks avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Lors de l'envoi de mail (SMTPin) j'ai remarqué qu'il faut obligatoirement les chevrons. Il faut modifier la fonction ''*adresseVersUtilisateur''. Maintenant le test de charge fonctionne correctement.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Test de charge avec erreurs aléatoires:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour créer des erreurs aléatoires j'ai écris en bash:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
    nombre=$RANDOM&amp;lt;br&amp;gt;&lt;br /&gt;
    nombre=`expr $nombre \% 5`&amp;lt;br&amp;gt;&lt;br /&gt;
     case $nombre in&amp;lt;br&amp;gt;&lt;br /&gt;
      1)&amp;lt;br&amp;gt;&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $4 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
       ;;&amp;lt;br&amp;gt;&lt;br /&gt;
      *)&amp;lt;br&amp;gt;&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
       ;;&amp;lt;br&amp;gt;&lt;br /&gt;
     esac&amp;lt;br&amp;gt;&lt;br /&gt;
     i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Avec comme premier argument l'adresse ip, le suivant le nombre de messages a envoyer, le suivant un fichier test.txt contenant aucune erreur, et un autre argument contenant des erreurs. Ainsi dans ce cas, il y a une chance sur cinq de tomber sur une erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur tient toujours la charge avec de nombreux mails contenant 1 fois sur 5 des erreurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fuites mémoires'''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;valgrind --leak-check=full --show-leak-kinds=all -s ./SMTPout -i eth0 -u carte.txt &amp;gt; /tmp/log&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On vérifie les fuites mémoires. On constate que 30ko sont définitivement perdues.&amp;lt;br&amp;gt;&lt;br /&gt;
Après vérification il y a une erreur dans le malloc de la fonction adresseVersUtilisateur de out.c il faut ajouter un +1 dans le malloc dans le cas ou il n'y a aucun destinataire.&amp;lt;br&amp;gt;&lt;br /&gt;
Aussi, on remarque qu'il y a autant de blocks perdues que de messages envoyés, en fait, il n'y a pas de &amp;lt;code&amp;gt;free(donnees)&amp;lt;/code&amp;gt; dans la fonction SMTP_gestion.&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61974</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61974"/>
				<updated>2023-06-14T15:40:24Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* Def of done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Sujet:'''&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Archive:'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
*'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : &amp;lt;code&amp;gt;''xen shut dio1''&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
*Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;lt;code&amp;gt;&amp;quot;Not Implemented&amp;quot;&amp;lt;/code&amp;gt; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
*Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   &lt;br /&gt;
   BONJOUR&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
*Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
*Recherche des leaks avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Lors de l'envoi de mail (SMTPin) j'ai remarqué qu'il faut obligatoirement les chevrons. Il faut modifier la fonction ''*adresseVersUtilisateur''. Maintenant le test de charge fonctionne correctement.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Test de charge avec erreurs aléatoires:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour créer des erreurs aléatoires j'ai écris en bash:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
    nombre=$RANDOM&amp;lt;br&amp;gt;&lt;br /&gt;
    nombre=`expr $nombre \% 5`&amp;lt;br&amp;gt;&lt;br /&gt;
     case $nombre in&amp;lt;br&amp;gt;&lt;br /&gt;
      1)&amp;lt;br&amp;gt;&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $4 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
       ;;&amp;lt;br&amp;gt;&lt;br /&gt;
      *)&amp;lt;br&amp;gt;&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
       ;;&amp;lt;br&amp;gt;&lt;br /&gt;
     esac&amp;lt;br&amp;gt;&lt;br /&gt;
     i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Avec comme premier argument l'adresse ip, le suivant le nombre de messages a envoyer, le suivant un fichier test.txt contenant aucune erreur, et un autre argument contenant des erreurs. Ainsi dans ce cas, il y a une chance sur cinq de tomber sur une erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur tient toujours la charge avec de nombreux mails contenant 1 fois sur 5 des erreurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fuites mémoires'''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;valgrind --leak-check=full --show-leak-kinds=all -s ./SMTPout -i eth0 -u carte.txt &amp;gt; /tmp/log&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On vérifie les fuites mémoires. On constate que 30ko sont définitivement perdues.&amp;lt;br&amp;gt;&lt;br /&gt;
Après vérification il y a une erreur dans le malloc de la fonction adresseVersUtilisateur de out.c il faut ajouter un +1 dans le malloc dans le cas ou il n'y a aucun destinataire.&amp;lt;br&amp;gt;&lt;br /&gt;
Aussi, on remarque qu'il y a autant de blocks perdues que de messages envoyés, en fait, il n'y a pas de &amp;lt;code&amp;gt;free(donnees)&amp;lt;/code&amp;gt; dans la fonction SMTP_gestion.&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61973</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61973"/>
				<updated>2023-06-14T15:39:43Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* Def of done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Sujet:'''&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Archive:'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
*'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : &amp;lt;code&amp;gt;''xen shut dio1''&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
*Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;lt;code&amp;gt;&amp;quot;Not Implemented&amp;quot;&amp;lt;/code&amp;gt; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
*Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   &lt;br /&gt;
   BONJOUR&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
*Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
*Recherche des leaks avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Lors de l'envoi de mail (SMTPin) j'ai remarqué qu'il faut obligatoirement les chevrons. Il faut modifier la fonction ''*adresseVersUtilisateur''. Maintenant le test de charge fonctionne correctement.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Test de charge avec erreurs aléatoires:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour créer des erreurs aléatoires j'ai écris en bash:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
    nombre=$RANDOM&amp;lt;br&amp;gt;&lt;br /&gt;
    nombre=`expr $nombre \% 5`&amp;lt;br&amp;gt;&lt;br /&gt;
     case $nombre in&amp;lt;br&amp;gt;&lt;br /&gt;
      1)&amp;lt;br&amp;gt;&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $4 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
       ;;&amp;lt;br&amp;gt;&lt;br /&gt;
      *)&amp;lt;br&amp;gt;&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
       ;;&amp;lt;br&amp;gt;&lt;br /&gt;
     esac&amp;lt;br&amp;gt;&lt;br /&gt;
     i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Avec comme premier argument l'adresse ip, le suivant le nombre de messages a envoyer, le suivant un fichier test.txt contenant aucune erreur, et un autre argument contenant des erreurs. Ainsi dans ce cas, il y a une chance sur cinq de tomber sur une erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur tient toujours la charge avec de nombreux mails contenant 1 fois sur 5 des erreurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fuites mémoires'''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;valgrind --leak-check=full --show-leak-kinds=all -s ./SMTPout -i eth0 -u carte.txt &amp;gt; /tmp/log&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On vérifie les fuites mémoires. On constate que 30ko sont définitivement perdues.&amp;lt;br&amp;gt;&lt;br /&gt;
Après vérification il y a une erreur dans le malloc de la fonction adresseVersUtilisateur de out.c il faut ajouter un +1 dans le malloc dans le cas ou il n'y a aucun destinataire.&amp;lt;br&amp;gt;&lt;br /&gt;
Aussi, on remarque qu'il y a autant de blocks perdues que de messages envoyés, en fait, il n'y a pas de &amp;lt;code&amp;gt;free(donnees)&amp;lt;/code&amp;gt; dans la fonction SMTP_gestion.&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:2022-PSR-archive.zip&amp;diff=61972</id>
		<title>Fichier:2022-PSR-archive.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:2022-PSR-archive.zip&amp;diff=61972"/>
				<updated>2023-06-14T15:37:34Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : Ldelepla a téléversé une nouvelle version de Fichier:2022-PSR-archive.zip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61967</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61967"/>
				<updated>2023-06-14T15:34:11Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* Def of done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Sujet:'''&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Archive:'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
*'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : &amp;lt;code&amp;gt;''xen shut dio1''&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
*Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;lt;code&amp;gt;&amp;quot;Not Implemented&amp;quot;&amp;lt;/code&amp;gt; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
*Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   &lt;br /&gt;
   BONJOUR&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
*Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
*Recherche des leaks avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Lors de l'envoi de mail (SMTPin) j'ai remarqué qu'il faut obligatoirement les chevrons. Il faut modifier la fonction ''*adresseVersUtilisateur''. Maintenant le test de charge fonctionne correctement.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Test de charge avec erreurs aléatoires:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour créer des erreurs aléatoires j'ai écris en bash:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
    nombre=$RANDOM&amp;lt;br&amp;gt;&lt;br /&gt;
    nombre=`expr $nombre \% 5`&amp;lt;br&amp;gt;&lt;br /&gt;
     case $nombre in&amp;lt;br&amp;gt;&lt;br /&gt;
      1)&amp;lt;br&amp;gt;&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $4 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
       ;;&amp;lt;br&amp;gt;&lt;br /&gt;
      *)&amp;lt;br&amp;gt;&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
       ;;&amp;lt;br&amp;gt;&lt;br /&gt;
     esac&amp;lt;br&amp;gt;&lt;br /&gt;
     i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
Avec comme premier argument l'adresse ip, le suivant le nombre de messages a envoyer, le suivant un fichier test.txt contenant aucune erreur, et un autre argument contenant des erreurs. Ainsi dans ce cas, il y a une chance sur cinq de tomber sur une erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur tient toujours la charge avec de nombreux mails contenant 1 fois sur 5 des erreurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fuites mémoires'''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;valgrind --leak-check=full --show-leak-kinds=all -s ./SMTPout -i eth0 -u carte.txt &amp;gt; /tmp/log&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
On vérifie les fuites mémoires. On constate que 30ko sont définitivement perdues.&amp;lt;br&amp;gt;&lt;br /&gt;
Après vérification il y a une erreur dans le malloc de la fonction adresseVersUtilisateur de out.c il faut ajouter un +1 dans le malloc dans le cas ou il n'y a aucun destinataire.&amp;lt;br&amp;gt;&lt;br /&gt;
Aussi, on remarque qu'il y a autant de blocks perdues que de messages envoyés, en fait, il n'y a pas de &amp;lt;code&amp;gt;free(donnees)&amp;lt;/code&amp;gt; dans la fonction SMTP_gestion.&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61957</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61957"/>
				<updated>2023-06-14T15:28:59Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* Def of done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Sujet:'''&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Archive:'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
*'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : &amp;lt;code&amp;gt;''xen shut dio1''&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
*Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;lt;code&amp;gt;&amp;quot;Not Implemented&amp;quot;&amp;lt;/code&amp;gt; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
*Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   &lt;br /&gt;
   BONJOUR&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
*Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
*Recherche des leaks avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Lors de l'envoi de mail (SMTPin) j'ai remarqué qu'il faut obligatoirement les chevrons. Il faut modifier la fonction ''*adresseVersUtilisateur''. Maintenant le test de charge fonctionne correctement.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Test de charge avec erreurs aléatoires:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour créer des erreurs aléatoires j'ai écris en bash:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
    nombre=$RANDOM&amp;lt;br&amp;gt;&lt;br /&gt;
    nombre=`expr $nombre \% 5`&amp;lt;br&amp;gt;&lt;br /&gt;
     case $nombre in&amp;lt;br&amp;gt;&lt;br /&gt;
      1)&amp;lt;br&amp;gt;&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $4 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
       ;;&amp;lt;br&amp;gt;&lt;br /&gt;
      *)&amp;lt;br&amp;gt;&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
       ;;&amp;lt;br&amp;gt;&lt;br /&gt;
     esac&amp;lt;br&amp;gt;&lt;br /&gt;
     i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
Avec comme premier argument l'adresse ip, le suivant le nombre de messages a envoyer, le suivant un fichier test.txt contenant aucune erreur, et un autre argument contenant des erreurs. Ainsi dans ce cas, il y a une chance sur cinq de tomber sur une erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur tient toujours la charge avec de nombreux mails contenant 1 fois sur 5 des erreurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fuites mémoires'''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;valgrind --leak-check=full --show-leak-kinds=all -s ./SMTPout -i eth0 -u carte.txt &amp;gt; /tmp/log&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61955</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61955"/>
				<updated>2023-06-14T15:28:07Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* Def of done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Sujet:'''&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Archive:'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
*'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : &amp;lt;code&amp;gt;''xen shut dio1''&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
*Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;lt;code&amp;gt;&amp;quot;Not Implemented&amp;quot;&amp;lt;/code&amp;gt; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
*Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   &lt;br /&gt;
   BONJOUR&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
*Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
*Recherche des leaks avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Lors de l'envoi de mail (SMTPin) j'ai remarqué qu'il faut obligatoirement les chevrons. Il faut modifier la fonction ''*adresseVersUtilisateur''. Maintenant le test de charge fonctionne correctement.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Test de charge avec erreurs aléatoires:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour créer des erreurs aléatoires j'ai écris en bash:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
    nombre=$RANDOM&amp;lt;br&amp;gt;&lt;br /&gt;
    nombre=`expr $nombre \% 5`&amp;lt;br&amp;gt;&lt;br /&gt;
     case $nombre in&amp;lt;br&amp;gt;&lt;br /&gt;
      1)&amp;lt;br&amp;gt;&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $4 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
       ;;&amp;lt;br&amp;gt;&lt;br /&gt;
      *)&amp;lt;br&amp;gt;&lt;br /&gt;
       nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
       ;;&amp;lt;br&amp;gt;&lt;br /&gt;
     esac&amp;lt;br&amp;gt;&lt;br /&gt;
     i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
Avec comme premier argument l'adresse ip, le suivant le nombre de messages a envoyer, le suivant un fichier test.txt contenant aucune erreur, et un autre argument contenant des erreurs. Ainsi dans ce cas, il y a une chance sur cinq de tomber sur une erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur tient toujours la charge avec de nombreux mails contenant 1 fois sur 5 des erreurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fuites mémoires'''&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61953</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61953"/>
				<updated>2023-06-14T15:26:13Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* Def of done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Sujet:'''&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Archive:'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
*'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : &amp;lt;code&amp;gt;''xen shut dio1''&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
*Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;lt;code&amp;gt;&amp;quot;Not Implemented&amp;quot;&amp;lt;/code&amp;gt; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
*Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   &lt;br /&gt;
   BONJOUR&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
*Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
*Recherche des leaks avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Lors de l'envoi de mail (SMTPin) j'ai remarqué qu'il faut obligatoirement les chevrons. Il faut modifier la fonction ''*adresseVersUtilisateur''. Maintenant le test de charge fonctionne correctement.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Test de charge avec erreurs aléatoires:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour créer des erreurs aléatoires j'ai écris en bash:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
   	   nombre=$RANDOM&amp;lt;br&amp;gt;&lt;br /&gt;
	   nombre=`expr $nombre \% 5`&amp;lt;br&amp;gt;&lt;br /&gt;
	   case $nombre in&amp;lt;br&amp;gt;&lt;br /&gt;
		   1)&amp;lt;br&amp;gt;&lt;br /&gt;
			   nc -C -q0 -i1 $1 25 &amp;lt; $4 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
			   ;;&amp;lt;br&amp;gt;&lt;br /&gt;
		   *)&amp;lt;br&amp;gt;&lt;br /&gt;
			   nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
			   ;;&amp;lt;br&amp;gt;&lt;br /&gt;
	   esac&amp;lt;br&amp;gt;&lt;br /&gt;
	   i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
Avec comme premier argument l'adresse ip, le suivant le nombre de messages a envoyer, le suivant un fichier test.txt contenant aucune erreur, et un autre argument contenant des erreurs. Ainsi dans ce cas, il y a une chance sur cinq de tomber sur une erreur.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur tient toujours la charge avec de nombreux mails contenant 1 fois sur 5 des erreurs.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fuites mémoires'''&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61951</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61951"/>
				<updated>2023-06-14T15:20:47Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* Def of done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Sujet:'''&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Archive:'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
*'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : &amp;lt;code&amp;gt;''xen shut dio1''&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
*Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;lt;code&amp;gt;&amp;quot;Not Implemented&amp;quot;&amp;lt;/code&amp;gt; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
*Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   &lt;br /&gt;
   BONJOUR&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
*Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
*Recherche des leaks avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Lors de l'envoi de mail (SMTPin) j'ai remarqué qu'il faut obligatoirement les chevrons. Il faut modifier la fonction ''*adresseVersUtilisateur''. Maintenant le test de charge fonctionne correctement.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Test de charge avec erreurs aléatoires:'''&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61950</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61950"/>
				<updated>2023-06-14T15:20:23Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* Objectifs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Sujet:'''&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Archive:'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
*'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : &amp;lt;code&amp;gt;''xen shut dio1''&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
*Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;lt;code&amp;gt;&amp;quot;Not Implemented&amp;quot;&amp;lt;/code&amp;gt; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
*Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   &lt;br /&gt;
   BONJOUR&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
*Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
*Recherche des leaks avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Lors de l'envoi de mail (SMTPin) j'ai remarqué qu'il faut obligatoirement les chevrons. Il faut modifier la fonction ''*adresseVersUtilisateur''. Maintenant le test de charge fonctionne correctement.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Test de charge avec erreurs aléatoires:'''&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61930</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61930"/>
				<updated>2023-06-14T14:34:48Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Sujet:'''&amp;lt;br&amp;gt;&lt;br /&gt;
https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Archive:'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
*'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : &amp;lt;code&amp;gt;''xen shut dio1''&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
*Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;lt;code&amp;gt;&amp;quot;Not Implemented&amp;quot;&amp;lt;/code&amp;gt; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
*Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   &lt;br /&gt;
   BONJOUR&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
*Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Lors de l'envoi de mail (SMTPin) j'ai remarqué qu'il faut obligatoirement les chevrons. Il faut modifier la fonction ''*adresseVersUtilisateur''. Maintenant le test de charge fonctionne correctement.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Test de charge avec erreurs aléatoires:'''&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61929</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61929"/>
				<updated>2023-06-14T14:34:31Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Archive:'''&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
*'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : &amp;lt;code&amp;gt;''xen shut dio1''&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
*Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;lt;code&amp;gt;&amp;quot;Not Implemented&amp;quot;&amp;lt;/code&amp;gt; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
*Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   &lt;br /&gt;
   BONJOUR&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
*Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Lors de l'envoi de mail (SMTPin) j'ai remarqué qu'il faut obligatoirement les chevrons. Il faut modifier la fonction ''*adresseVersUtilisateur''. Maintenant le test de charge fonctionne correctement.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Test de charge avec erreurs aléatoires:'''&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61905</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61905"/>
				<updated>2023-06-14T13:52:08Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* Def of done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
*'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : &amp;lt;code&amp;gt;''xen shut dio1''&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
*Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;lt;code&amp;gt;&amp;quot;Not Implemented&amp;quot;&amp;lt;/code&amp;gt; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
*Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   &lt;br /&gt;
   BONJOUR&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
*Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Lors de l'envoi de mail (SMTPin) j'ai remarqué qu'il faut obligatoirement les chevrons. Il faut modifier la fonction ''*adresseVersUtilisateur''. Maintenant le test de charge fonctionne correctement.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Test de charge avec erreurs aléatoires:'''&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61863</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61863"/>
				<updated>2023-06-14T13:09:15Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* Objectifs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
*'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : &amp;lt;code&amp;gt;''xen shut dio1''&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
*Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;lt;code&amp;gt;&amp;quot;Not Implemented&amp;quot;&amp;lt;/code&amp;gt; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
*Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   &lt;br /&gt;
   BONJOUR&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
*Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61862</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61862"/>
				<updated>2023-06-14T13:09:05Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* Objectifs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
*'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : &amp;lt;code&amp;gt;''xen shut dio1''&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;lt;code&amp;gt;&amp;quot;Not Implemented&amp;quot;&amp;lt;/code&amp;gt; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
*Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   &lt;br /&gt;
   BONJOUR&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
*Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61860</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61860"/>
				<updated>2023-06-14T13:08:34Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* Def of done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
*'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : &amp;lt;code&amp;gt;''xen shut dio1''&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;lt;code&amp;gt;&amp;quot;Not Implemented&amp;quot;&amp;lt;/code&amp;gt; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
*Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   &lt;br /&gt;
   BONJOUR&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
*Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61857</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61857"/>
				<updated>2023-06-14T13:07:11Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* Def of done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
*'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : &amp;lt;code&amp;gt;''xen shut dio1''&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;quot;Not Implemented&amp;quot; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
*Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   &lt;br /&gt;
   BONJOUR&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
*Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61853</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61853"/>
				<updated>2023-06-14T13:06:28Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
*'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
*'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : ''xen shut dio1''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
*Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;quot;Not Implemented&amp;quot; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
*Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
*Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
*Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&lt;br /&gt;
   MAIL FROM: root@raclette.site&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&lt;br /&gt;
   DATA&lt;br /&gt;
   SUBJECT: TEST&lt;br /&gt;
   &lt;br /&gt;
   BONJOUR&lt;br /&gt;
   .&lt;br /&gt;
   QUIT&lt;br /&gt;
&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
*Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
*Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61810</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61810"/>
				<updated>2023-06-14T10:41:41Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* PROGRESS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
-'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : ''xen shut dio1''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;quot;Not Implemented&amp;quot; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
-Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   BONJOUR&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
-Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61809</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61809"/>
				<updated>2023-06-14T10:40:24Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
-'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : ''xen shut dio1''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;quot;Not Implemented&amp;quot; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
-Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   BONJOUR&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''14/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Test de charge pour l'envoi&amp;lt;br&amp;gt;&lt;br /&gt;
-Test de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61808</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61808"/>
				<updated>2023-06-14T10:38:38Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* 07/06/2023: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
-'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : ''xen shut dio1''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;quot;Not Implemented&amp;quot; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
-Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   BONJOUR&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61807</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61807"/>
				<updated>2023-06-14T10:38:01Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* Def of done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
-'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : ''xen shut dio1''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;quot;Not Implemented&amp;quot; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/new''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/new''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
-Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   BONJOUR&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le SMTPout reçoit les mails mais ne crée pas les fichier dans /tmp'''&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:2022-PSR-archive.zip&amp;diff=61806</id>
		<title>Fichier:2022-PSR-archive.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:2022-PSR-archive.zip&amp;diff=61806"/>
				<updated>2023-06-14T10:36:26Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : Ldelepla a téléversé une nouvelle version de Fichier:2022-PSR-archive.zip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:2022-PSR-archive.zip&amp;diff=61805</id>
		<title>Fichier:2022-PSR-archive.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:2022-PSR-archive.zip&amp;diff=61805"/>
				<updated>2023-06-14T10:11:02Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : Ldelepla a téléversé une nouvelle version de Fichier:2022-PSR-archive.zip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:2022-PSR-archive.zip&amp;diff=61804</id>
		<title>Fichier:2022-PSR-archive.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:2022-PSR-archive.zip&amp;diff=61804"/>
				<updated>2023-06-14T10:10:43Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : Ldelepla a téléversé une nouvelle version de Fichier:2022-PSR-archive.zip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61584</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61584"/>
				<updated>2023-06-07T15:01:14Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.zip]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
-'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : ''xen shut dio1''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;quot;Not Implemented&amp;quot; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
-Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   BONJOUR&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le SMTPout reçoit les mails mais ne crée pas les fichier dans /tmp'''&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:2022-PSR-archive.zip&amp;diff=61583</id>
		<title>Fichier:2022-PSR-archive.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=Fichier:2022-PSR-archive.zip&amp;diff=61583"/>
				<updated>2023-06-07T15:00:45Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61582</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61582"/>
				<updated>2023-06-07T14:57:43Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[file:2022-PSR-archive.tar.gz]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
-'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : ''xen shut dio1''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;quot;Not Implemented&amp;quot; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
-Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   BONJOUR&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le SMTPout reçoit les mails mais ne crée pas les fichier dans /tmp'''&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61581</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61581"/>
				<updated>2023-06-07T14:49:20Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* 07/06/2023: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
-'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : ''xen shut dio1''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;quot;Not Implemented&amp;quot; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
-Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   BONJOUR&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Test pour le SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le SMTPout reçoit les mails mais ne crée pas les fichier dans /tmp'''&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61580</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61580"/>
				<updated>2023-06-07T14:48:48Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* 07/06/2023: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
-'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : ''xen shut dio1''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;quot;Not Implemented&amp;quot; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
-Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   BONJOUR&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
Test pour le SMTPout&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le SMTPout reçoit les mails mais ne crée pas les fichier dans /tmp'''&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61579</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61579"/>
				<updated>2023-06-07T14:47:47Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* 17/03/2023: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
-'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : ''xen shut dio1''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;quot;Not Implemented&amp;quot; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
-Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   BONJOUR&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
Test pour le SMTPout&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61578</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61578"/>
				<updated>2023-06-07T14:46:56Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* 07/06/2023: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
-'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : ''xen shut dio1''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;quot;Not Implemented&amp;quot; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
-Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   BONJOUR&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
Test pour le SMTPout&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
      nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
      i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61577</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61577"/>
				<updated>2023-06-07T14:46:25Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* Def of done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
-'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : ''xen shut dio1''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;quot;Not Implemented&amp;quot; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
-Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   BONJOUR&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
Test pour le SMTPout&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   #!/bin/bash&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   i=0&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   while [ $i -lt $2 ]&amp;lt;br&amp;gt;&lt;br /&gt;
   do&amp;lt;br&amp;gt;&lt;br /&gt;
	   nc -C -q0 -i1 $1 25 &amp;lt; $3 &amp;amp;&amp;lt;br&amp;gt;&lt;br /&gt;
	   i=`expr $i + 1`&amp;lt;br&amp;gt;&lt;br /&gt;
   done&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ./test.sh &amp;lt;adresse&amp;gt; &amp;lt;nb_envoi&amp;gt; &amp;lt;fichier&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61559</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61559"/>
				<updated>2023-06-07T14:02:32Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* 07/06/2023: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
-'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : ''xen shut dio1''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;quot;Not Implemented&amp;quot; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
-Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   BONJOUR&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;br /&gt;
'''Fonctionne en envoyant 100 mails'''&amp;lt;br&amp;gt;&lt;br /&gt;
Test pour le SMTPout&amp;lt;br&amp;gt;&lt;br /&gt;
Même méthode mais sur une autre machine&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61558</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61558"/>
				<updated>2023-06-07T13:58:48Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
-'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : ''xen shut dio1''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;quot;Not Implemented&amp;quot; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
-Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge&amp;lt;br&amp;gt;&lt;br /&gt;
-Tests de charge avec erreurs aléatoires&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Soit le fichier test suivant:&lt;br /&gt;
   HELO TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polyetch-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;br&amp;gt;&lt;br /&gt;
   BONJOUR&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   nc -C -q0 -i1 localhost 25 &amp;lt; test&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien reçu sur ma boîte mail polytech'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour automatiser:&amp;lt;br&amp;gt;&lt;br /&gt;
   i=0 ; while [ $i -lt 10 ] ; do nc -C -q0 -i1 localhost 25 &amp;lt; test &amp;amp; i='expr $i + 1'; done&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61557</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61557"/>
				<updated>2023-06-07T13:19:45Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* 07/06/2023: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
-'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : ''xen shut dio1''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;quot;Not Implemented&amp;quot; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
-Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
-Créer des scripts pour envoyer des messages&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61556</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61556"/>
				<updated>2023-06-07T13:13:40Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* 07/06/2023: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
-'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : ''xen shut dio1''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;quot;Not Implemented&amp;quot; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
-Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer le cryptage&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPout restock les mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
Début des fonctions chiffrement dans /Chiffrement&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61555</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61555"/>
				<updated>2023-06-07T13:12:35Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://rex.plil.fr/Enseignement/Systeme/Tutorat.IMA2a4.Messagerie/&amp;lt;br&amp;gt;&lt;br /&gt;
= '''PROGRESS''' =&lt;br /&gt;
-'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : ''xen shut dio1''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;quot;Not Implemented&amp;quot; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
-Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer le cryptage&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPou restock les mails reçus&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61554</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61554"/>
				<updated>2023-06-07T12:49:41Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* 07/06/2023: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''PROGRESS''' =&lt;br /&gt;
-'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : ''xen shut dio1''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;quot;Not Implemented&amp;quot; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
-Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer le cryptage&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
SMTPou restock les mails reçus&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61537</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61537"/>
				<updated>2023-05-31T16:06:03Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''PROGRESS''' =&lt;br /&gt;
-'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : ''xen shut dio1''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;quot;Not Implemented&amp;quot; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
-Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer le cryptage&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61533</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61533"/>
				<updated>2023-05-31T16:02:29Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* Objectifs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''PROGRESS''' =&lt;br /&gt;
-'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : ''xen shut dio1''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;quot;Not Implemented&amp;quot; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
-Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer le cryptage&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61532</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61532"/>
				<updated>2023-05-31T16:02:13Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : /* 07/06/2023: WORKSHOP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''PROGRESS''' =&lt;br /&gt;
-'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : ''xen shut dio1''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;quot;Not Implemented&amp;quot; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
-Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer le cryptage&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== '''Def of done''' ==&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	<entry>
		<id>https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61531</id>
		<title>PSR SE2a4 2022/2023 G7</title>
		<link rel="alternate" type="text/html" href="https://wiki-ima.plil.fr/mediawiki//index.php?title=PSR_SE2a4_2022/2023_G7&amp;diff=61531"/>
				<updated>2023-05-31T16:02:00Z</updated>
		
		<summary type="html">&lt;p&gt;Ldelepla : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= '''PROGRESS''' =&lt;br /&gt;
-'''DONE''' : Pour prévenir les failles, les deux serveurs SMTP seront écrits à partir de zéro en respectant la RFC 5321 mais avec des simplifications ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs doivent être codés en langage C en utilisant la bibliothèque des sockets ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les commandes VRFY et EXPN qui permettent au client de vérifier si une messagerie est disponible pour la transmission, ne seront pas implémentées ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le routage des messages ne doit pas être implémenté et la gestion des messages non transmis est optionnel ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Un système doit être réalisé permettant au serveur SMTP sortant de mettre en file d’attente les messages non remis à destination pour cause d’erreur transitoire du serveur SMTP cible ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Chaque connexion doit être gérée via un processus léger (Thread) et chaque commande par une fonction à laquelle est passée une structure représentant l’état du dialogue entre le client et le serveur ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les serveurs SMTP doivent gérer les enregistrements MX permettant d’associer un nom de domaine à un serveur de messagerie, le recours aux enregistrements AAAA et A est à utiliser en cas d’absence de MX ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Les serveurs SMTP doivent être contactables en IPv4 et en IPv6, ils doivent aussi prendre en charge IPv4 et IPv6 pour la transmission vers les serveurs SMTP cibles ;&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Les deux serveurs ne diffèrent que par la méthode de distribution finale (stockage dans un système de fichiers ou envoi à un serveur SMTP cible) ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP sortant ne doit être lié qu’à l’interface réseau loopback ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le serveur SMTP entrant ne doit être lié qu’à l’interface réseau menant à Internet. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Qq précisions:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Ne doivent être stockés que les courriels à destination d’un utilisateur local ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le format de stockage doit être le format maildir qui est une structure de répertoires particulière utilisée pour sauvegarder des courriers électroniques (le format maildir est très bien décrit sur Wikipédia);&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Chaque message entrant doit être ajouté au dossier de réception Maildir propre à l’utilisateur de destination ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Le processus de remise stocke le message dans le sous-répertoire Maildir/tmp puis le déplace dans le sous-répertoire Maildir/new, déplacement doit être fait par la primitive rename ;&amp;lt;br&amp;gt;&lt;br /&gt;
-'''DONE''' : Pour assurer un nom unique aux fichiers de stockage, utilisez la date en seconde (fonction time), le PID et un compteur commun à tous les flux d’exécution (utilisation de sémaphores indispensable). &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''03/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Démarrage de la VM:'''&amp;lt;br&amp;gt; &lt;br /&gt;
   ''ssh pifou@capbreton''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''xen list'' pour voir la liste des VM déjà démarrées&amp;lt;br&amp;gt; &lt;br /&gt;
   ''xen create /etc/xen/dio1.cfg''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour éteindre la VM : ''xen shut dio1''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Installation de GCC:'''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ssh root@193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt update''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''apt install gcc''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Environment:''' &amp;lt;br&amp;gt;&lt;br /&gt;
Serveur dans ~/ldelepla&amp;lt;br&amp;gt;&lt;br /&gt;
   ''scp -r ldelepla/ root@193.48.57.186:~''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''10/02/2023:''' =&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Dans libs/Flux/mutex.c : ajout du free dans la fonction mutex_fin&amp;lt;br&amp;gt;&lt;br /&gt;
Dégager le process qui écoute le port 25 :&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ss -tpln''&amp;lt;br&amp;gt;&lt;br /&gt;
Pour trouver le process et&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service &amp;lt;name&amp;gt; stop''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
On peut maintenant lancer les serveurs SMTP&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans src/SMTPin/in.c ligne 56, vérification que la connexion est correctement faite et que le message s'est envoyé&amp;lt;br&amp;gt; &lt;br /&gt;
MAILDIR_NEW avec le rename : dans src/SMTPout/out.c ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout d'un MX sur la VM:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''vi /etc/bind/db.raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''cd raclette.site.dnssec/''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''dnssec-signzone -o raclette.site -k raclette.site-ksk.key ../db.raclette raclette.site-zsk.key''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''service named restart''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le test SMTP : [https://mxtoolbox.com/diagnostic.aspx]&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''17/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Permettre aux deux serveurs de fonctionner ensemble: SMTPin sur l'interface loopback et SMTPout sur l'interface ETH0&amp;lt;br&amp;gt;&lt;br /&gt;
-Essai d'envoi de message(''voir site web pour le test juste au dessus'')&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''Faire fonctionner les deux serveurs ensemble'''&amp;lt;br&amp;gt;&lt;br /&gt;
''./SMTPin -l'' Pour mettre SMTPin sur ''loopback''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.c'' modification pour avoir l'interface ETH0: &amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 12 dans la fonction ''AfficheSyntaxe'': Ajout fprintf&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 24 dans la fonction ''AnalyseArguments''&amp;lt;br&amp;gt;&lt;br /&gt;
-Ligne 40 à 42 dans la fonction ''AnalyseArguments'': strncpy de l'interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/args.h'' ajout d'un élément char nommé interface de taille max CONFIG_MAX_INTERFACE&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/libs/Reseau/reseau.c'' dans la fonction initialisation serveur à la ligne 44, si interface!=NULL alors il se met sur la bonne interface&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''~/ldelepla/src/SMTPout/out.c'' à la ligne 202 *interface = config.interface;&amp;lt;br&amp;gt;&lt;br /&gt;
Dans le Makefile: ''-g'' à la compilation pour avoir la ligne du segfault avec valgrind&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPin et SMTPout fonctionnent ensemble respectivement sur lo et eth0'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Tests'''&amp;lt;br&amp;gt;&lt;br /&gt;
Effectués avec le site sur la section ci-dessus&amp;lt;br&amp;gt;&lt;br /&gt;
Premiers résulats venant du site:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''Connecting to 193.48.57.186''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''250 Welcome [143 ms]''&amp;lt;br&amp;gt;&lt;br /&gt;
''EHLO keeper-us-east-1d.mxtoolbox.com''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''SendSMTPCommand: Timeout waiting for response after 15 seconds.''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
''LookupServer 16003ms''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: Compiler avec ''-j &amp;lt;nom du fichier&amp;gt;'' pour avoir les logs&amp;lt;br&amp;gt;&lt;br /&gt;
En ouvrant le fichier de log, rien n'apparaît...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec nc depuis une machine polytech&amp;lt;br&amp;gt;&lt;br /&gt;
Remarque: compiler avec make debug et les arguments -j log.txt 255 pour remplir le journal&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Toujours aucun résultat avec le site web&amp;lt;br&amp;gt;&lt;br /&gt;
Pourtant /r/n présents dans le protocol&amp;lt;br&amp;gt;&lt;br /&gt;
Avec strace, on remarque que le serveur continue de lire alors que le message est fini.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour cela, modification dans ''libs/SMTP/smtp.c'' : Dans la boucle de lecture commencant à la ligne 143, la boucle ne traite pas le cas où ''p-&amp;gt;traitement  == NULL'', dans ce cas là, on a l'erreur 502&amp;lt;br&amp;gt;&lt;br /&gt;
Ajout dans  du renvoi d'erreur &amp;quot;Not Implemented&amp;quot; (code 502) dans ''libs/SMTP/smtp_private.h'' à la ligne 24&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= '''22/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Réaliser les tests et corriger les premiers bugs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Fonctionne avec netcat:&amp;lt;br&amp;gt;&lt;br /&gt;
Sur une autre machine:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nc 193.48.57.186 25''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''HELO raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''MAIL FROM: ldelepla@polyetch-lille.fr&amp;lt;br&amp;gt;&lt;br /&gt;
   ''RCPT TO: root@raclette.site''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''DATA''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''SUBJECT: &amp;lt;sujet&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''&amp;lt;corps du mail&amp;gt;''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''.''&amp;lt;br&amp;gt;&lt;br /&gt;
   ''QUIT''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Sur le terminal de la VM on reçoit bien le message&amp;lt;br&amp;gt;&lt;br /&gt;
Mais à chaque commande SMTPout renvoi le code 502 à chaque commande&amp;lt;br&amp;gt;&lt;br /&gt;
Il manque un break dans la modification du code faite à la séance précédente dans ''smtp.c'' à la ligne 171&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Essai d'envoi avec la boite mail polytech&amp;lt;br&amp;gt;&lt;br /&gt;
'''ERREUR'''&amp;lt;br&amp;gt;&lt;br /&gt;
Il faut modifier la fonction ''gestion_MAIL'' et gestion_RCPT''&amp;lt;br&amp;gt;&lt;br /&gt;
L'erreur est lié au format de l'envoi des commandes&amp;lt;br&amp;gt;&lt;br /&gt;
''Modification avant et après les if(statut!=2)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En mode debug on voit maintenant la réception du mail sur le terminal&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail doit normalement être stocké dans /tmp mais il n'y à rien, Il faut permettre le debug avec le journal pour savoir où est l'erreur&amp;lt;br&amp;gt;&lt;br /&gt;
Cela est fait dans ''SMTPout/out.c'' dans la fonction ''gestionCourriel''&amp;lt;br&amp;gt;&lt;br /&gt;
'''=&amp;gt;'''Ne passe pas le ''P(MUTEX_COMPTEUR):''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''INTER-SEANCE:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Faire tourner les deux serveurs en arrière plan, pour voir s'ils SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Pour éviter que les serveurs soient tuer par le signal SIGHUP en quittant la session à distance je lance le programme de cette manière:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Avec la commande:&amp;lt;br&amp;gt;&lt;br /&gt;
   ''ps -ef | grep SMTP''&amp;lt;br&amp;gt;&lt;br /&gt;
Même après avoir quitter la VM, on voit que SMTPin et SMTPout tournent toujours&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''29/03/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Comprendre et corriger le bug lié au non stockage des mails reçus&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
Résultat du test fait en INTER-SEANCE: pas de SEGFAULT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
A la compilation, ajouter ''-u carte.txt'' pour indiquer le fichier avec les utilisateurs possible, sous la forme:&amp;lt;br&amp;gt;&lt;br /&gt;
''root : root@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
''user1 : user1@raclette''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''/tmp'' il faut créer les répertoires des utilisateurs:&amp;lt;br&amp;gt;&lt;br /&gt;
''/tmp/root/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
''/tmp/user1/tmp''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Dans ''out.c'', dans la fonction ''scanCarteUtilisateur'' il manque ''==0'' dans le ''if'' avec le ''strcasecmp''&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''adresseVersUtilisateur'', erreur: ''strlen(destinataire)'' et non ''strlen(adresse)''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Dans ''smtp.c'' dans la fonction ''gestion_RCPT'', il y avait encore la chaine de char tag liè à la modification de cette fonction durant la séance 22/03&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Le mail est bien recu et est stocké dans les dossiers associés'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification nécessaire dans ''smtp.c'':&amp;lt;br&amp;gt;&lt;br /&gt;
Dans la fonction ''gestion_DATA'' et ''SMTP_gestion'' dans le while ligne 111, toujours en renvoi de ''SUCCESS_DATA_CODE''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Jusqu'à la prochaine séance je laisse tourner les deux serveurs:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPout -i eth0 -j log.txt -n 255 -u carte.txt &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   ''nohup ./SMTPin -l -j log.txt -n 255 &amp;amp;''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''05/04/2023:''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Modif de ''smtp.c''&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer à débuger SMTPin&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
-Aucun segfault ou crash des deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
-Pour envoyer un mail:&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Modification de ''reseau.c'' dans la fonction ''connexionServeur'':&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   while(1){&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET6) ipv6=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      if(p-&amp;gt;ai_family==AF_INET) ipv4=1;&amp;lt;br&amp;gt;&lt;br /&gt;
      p=p-&amp;gt;ai_next;&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= '''31/05/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
Mutualiser le travail avec Simon, Farid et Jerôme pour avoir un SMTPin et un SMTPout fonctionnel&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== '''Def of done''' ==&lt;br /&gt;
'''SMTPin:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Les codes dans private_smtp.h ne sont pas correct&amp;lt;br&amp;gt;&lt;br /&gt;
On ajoute du code pour débuger dans smtp.c&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
 static int retour_generique(FILE *dialogue,int succes,char *erreur,int taille){&amp;lt;br&amp;gt;&lt;br /&gt;
   char ligne[MAX_LIGNE];&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;SMTP -&amp;gt; retour generique\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(fgets(ligne,MAX_LIGNE,dialogue)==NULL) return -1;&amp;lt;br&amp;gt;&lt;br /&gt;
   ligne[MAX_LIGNE-1]='\0';&amp;lt;br&amp;gt;&lt;br /&gt;
   int code;&amp;lt;br&amp;gt;&lt;br /&gt;
   int statut=sscanf(ligne,&amp;quot;%d&amp;quot;,&amp;amp;code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;statut =%d\n&amp;quot;, statut);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;succes =%d\n&amp;quot;, succes);&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;code =%d\n&amp;quot;, code);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   if(statut==1 &amp;amp;&amp;amp; code!=succes){&amp;lt;br&amp;gt;&lt;br /&gt;
     strncpy(erreur,ligne,taille-1);&amp;lt;br&amp;gt;&lt;br /&gt;
   #ifdef DEVERMINE&amp;lt;br&amp;gt;&lt;br /&gt;
     printf(&amp;quot;retour_generique ERROR\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   #endif&amp;lt;br&amp;gt;&lt;br /&gt;
   }&amp;lt;br&amp;gt;&lt;br /&gt;
 return (statut==1 &amp;amp;&amp;amp; code==succes)?0:-1;&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
En lancant SMTPin avec strace on retrouve les codes attendus à modifier dans private_smtp.h&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
   nc localhost 25&amp;lt;br&amp;gt;&lt;br /&gt;
   HELO polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   MAIL FROM: root@raclette.site&amp;lt;br&amp;gt;&lt;br /&gt;
   RCPT TO: ldelepla@polytech-lille.net&amp;lt;br&amp;gt;&lt;br /&gt;
   DATA&amp;lt;br&amp;gt;&lt;br /&gt;
   SUBJECT: TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   TEST&amp;lt;br&amp;gt;&lt;br /&gt;
   .&amp;lt;br&amp;gt;&lt;br /&gt;
   QUIT&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Le mail est bien reçu sur ma boîte polytech&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''SMTPout:'''&amp;lt;br&amp;gt;&lt;br /&gt;
Le serveur ne stocke plus les mails&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= '''07/06/2023: WORKSHOP''' =&lt;br /&gt;
== '''Objectifs''' ==&lt;br /&gt;
-Verifier les deux serveurs&amp;lt;br&amp;gt;&lt;br /&gt;
-Commencer le cryptage&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== '''Def of done''' ==&lt;/div&gt;</summary>
		<author><name>Ldelepla</name></author>	</entry>

	</feed>