PSR SE2a4 2022/2023 G2

De Wiki d'activités IMA

A faire (concernant les serveurs SMTP):

-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;
-les communications peuvent ne pas être chiffrées, les communications non chiffrés sont reçues sur le port 25 ;
-les communications peuvent être chiffrées par TLS, les communication chiffrées peuvent être négociées directement sur le port 465 ;
-il doit être possible de basculer sur une communication chiffrée à partir du port 25 en utilisant les commandes EHLO et STARTTLS ;
-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 ;

A faire (concernant le stockage des courriels):

- ne doivent être stockés que les courriels à destination d’un utilisateur local ;
-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 ;
-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).

Tips:

-Se connecter au serveur : "ssh root@capbreton.plil.info"
-Se connecter à la VM : "ssh root@193.48.57.164"

Exécuter le programme:
-ouvrir le terminal en mode root : "su -"
-vérifier si le port 25 est déjà occupé : "ss -tpln"
-??? : "service exim4 stop"
-dans la racine du prog : "make" (voir makefile pour make et makefile???)
-dans MTA int ou MTA ext : "./SMTPin -p25" et "./SMTPext -p25"
-dans la racine du prog : "nc localhost 25"

Modifications dans le programme:

Le fichier "mx.c" dans le "src/SMTPin" ne sert pas (il est vide d'ailleurs), la fonction "**chercherMX" est implémentée dans un autre fichier "mx.c" dans "libs/Reseau", on peut donc le supprimer.

Dans le fichier "in.c" -> fonction "gestionCourriel", lorsqu'on initialise la connexion au serveur, on ne teste pas a bien été créée, on rajoute donc une condition d'erreur.

Dans le fichier "in.c" -> fonction "gestionCourriel", lorsqu'on a trouvé les enregistrements DNS de type MX (serveurs courriel), on leur envoie le courriel de cette façon : -On envoie le courriel au MX qui a la priorité la plus basse,
-Si l'envoi échoue, on retente avec le MX de priorité suivante,
-Jusqu'à ce qu'on réussisse à envoyer le courriel à un MX.
Pourtant si l'envoi est un succès, on continue d'envoyer le mail aux autres MX, il faut donc rajouter l'instruction else{break;} dans le code lorsque l'envoi est un succès.

Ancien code :

while(*p!=NULL){

  1. ifdef DEVERMINE
 printf("Serveur : %s\n",*p);
  1. endif
 int ss=connexionServeur(*p,SMTP_PORT_DEFAULT);
 FILE *dialogue=fdopen(ss,"a+");
 if(dialogue==NULL){
   perror("gestionCourriel.fdopen");
   exit(EXIT_FAILURE);
 }
 char erreur[MAX_ERREUR];
 int resultat=SMTP_dialogue(dialogue,donnees,erreur,MAX_ERREUR);
 if(resultat<0) ecritureJournal(JOURNIV_DEVERMINE,JOURNAL_MXHS,*p);
 // Logguer l'erreur
 fclose(dialogue);
 p++;
 }

Nouveau code :

while(*p!=NULL){

  1. ifdef DEVERMINE
 printf("Serveur : %s\n",*p);
  1. endif
 int ss=connexionServeur(*p,SMTP_PORT_DEFAULT);
 if(ss<0){
   fprintf(stderr,"La connexion au serveur %s a échoué", *p);
 }
 FILE *dialogue=fdopen(ss,"a+");
 if(dialogue==NULL){
   perror("gestionCourriel.fdopen");
   exit(EXIT_FAILURE);
 }
 char erreur[MAX_ERREUR];
 int resultat=SMTP_dialogue(dialogue,donnees,erreur,MAX_ERREUR);
 fclose(dialogue);
 if(resultat<0) ecritureJournal(JOURNIV_DEVERMINE,JOURNAL_MXHS,*p);
 // Logguer l'erreur
 else{break;}
 p++;
 }





-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 ;