PSR SE2a4 2022/2023 G2 : Différence entre versions

De Wiki d'activités IMA
(Modifications dans le programme:)
(Modifications dans le programme:)
Ligne 24 : Ligne 24 :
  
 
== Modifications dans le programme: ==
 
== Modifications dans le programme: ==
Prog "in.c" -> fonction "gestionCourriel"
+
 
 
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.
 
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.
Une fois qu'on a trouvé les MX, on
+
 
Lorsqu'on initialise la connexion au serveur, on ne teste pas si la socket de dialogue s'est bien créée".
+
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){
 +
#ifdef DEVERMINE
 +
  printf("Serveur : %s\n",*p);
 +
#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){
 +
#ifdef DEVERMINE
 +
  printf("Serveur : %s\n",*p);
 +
#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);
 +
  fclose(dialogue);
 +
  if(resultat<0) ecritureJournal(JOURNIV_DEVERMINE,JOURNAL_MXHS,*p);
 +
  // Logguer l'erreur
 +
  else{break;}
 +
  p++;
 +
  }

Version du 10 février 2023 à 18:38

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).

Résumé :

-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);
 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++;
 }