PSR SE2a4 2022/2023 G2 : Différence entre versions
(→Modifications dans le programme:) |
(→Modifications dans le programme:) |
||
Ligne 24 : | Ligne 24 : | ||
== Modifications dans le programme: == | == 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. | 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){ | ||
+ | #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
Sommaire
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){
- 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++; }