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

De Wiki d'activités IMA
(PARTIE 1: SMTPin)
(PARTIE 4: Evaluation)
 
(15 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
=''INTRODUCTION''=
+
=='''INTRODUCTION'''==
 
*Connexion à la machine virtuelle :<br>
 
*Connexion à la machine virtuelle :<br>
 
   ''ssh root@193.48.57.180''<br>
 
   ''ssh root@193.48.57.180''<br>
Ligne 10 : Ligne 10 :
 
[[file:Projet.zip]]<br>
 
[[file:Projet.zip]]<br>
  
=''PARTIE 1: SMTPin''=
+
=='''PARTIE 1: SMTPin'''==
* Dans le fichier "in.c", nous nous assurons du bon fonctionnement de la fonction de gestion de courriels. => Ajout '''else{break;}''' pour arrêter l'envoi des mails.<br>
+
* Dans le fichier "in.c", nous nous assurons du bon fonctionnement de la fonction de gestion de courriels. => Ajout <code>else{break;}</code> pour arrêter la boucle.<br>
 
<br>
 
<br>
* Supprimer le fichier "mx.c". Il est inutile de garder le fichier car ce dernier est implémenté dans un autre dossier.<br>
+
* Supprimer le fichier "mx.c". Il est inutile de garder le fichier car ce dernier est présent dans la librairie Réseau.<br>
 
<br>
 
<br>
 
* Pour Debugger SMTPin, nous avons ajouté des printf pour le suivi.<br>
 
* Pour Debugger SMTPin, nous avons ajouté des printf pour le suivi.<br>
Ligne 21 : Ligne 21 :
 
   ''printf("code =%d\n", code);''<br>
 
   ''printf("code =%d\n", code);''<br>
 
   ''#endif''<br>
 
   ''#endif''<br>
* Ce qui nous permet de retrouver : ACCUEIL_CODE 220 / CONTINUE_DATA_CODE 354 / SUCCES_QUIT_CODE 250 et de les modifier dans les librairies ("smptp_private.h").<br>
+
* Ce qui nous permet de retrouver : <code>ACCUEIL_CODE 220 / CONTINUE_DATA_CODE 354 / SUCCES_QUIT_CODE 250</code> et de les modifier dans les librairies ("smptp_private.h").<br>
 +
<br>
 
* Ne pas oublier de changer les variables globales dans "smtp.c"
 
* Ne pas oublier de changer les variables globales dans "smtp.c"
  
=''PARTIE 2: SMTPout''=
+
=='''PARTIE 2: SMTPout'''==
- Dans le fichier "out.c", nous déplaçons Maildir/tmp dans Maildir/new<br>
+
* Dans le fichier "out.c", nous déplaçons Maildir/tmp dans Maildir/new<br>
 
   ''char nouveau_fichier[MAX_CHEMIN];''<br>
 
   ''char nouveau_fichier[MAX_CHEMIN];''<br>
 
   ''sprintf(nouveau_fichier,"%s/%s/%s/%Id_%010d",dossier,id,MAILDIR_NEW,capt,pid,messages);''<br>
 
   ''sprintf(nouveau_fichier,"%s/%s/%s/%Id_%010d",dossier,id,MAILDIR_NEW,capt,pid,messages);''<br>
 
   ''rename(fichier, nouveau_fichier);''<br>
 
   ''rename(fichier, nouveau_fichier);''<br>
 
<br>
 
<br>
- Il faut lancer les serveurs SMTPin et SMTPout sur différents ports (!= du port 25) => Nous configurons SMTPout en eth0 et SMTPin en loopback.<br>
+
* Il faut lancer les serveurs SMTPin et SMTPout sur différents ports (!= du port 25) => Nous configurons SMTPout en eth0 et SMTPin en loopback.<br>
 
<br>
 
<br>
 +
Le serveur SMTPin était déjà en interface loopback, nous devons donc modifier l'interface du serveur SMTPout.<br>
 
Pour ce faire :<br>
 
Pour ce faire :<br>
- Dans "SMPTout/args.h", nous ajoutons à la structure smtp_config une variable interface.<br>
+
* Dans "SMPTout/args.h", nous ajoutons à la structure smtp_config une variable interface.<br>
 
   ''char interface[CONFIG_MAX_INTERFACE];''<br>
 
   ''char interface[CONFIG_MAX_INTERFACE];''<br>
- Dans "SMPTout/args.c", ajouter "interfaces" dans la structure options:<br>  
+
* Dans "SMPTout/args.c", ajouter "interfaces" dans la structure options:<br>  
 
   ''{"interfaces", required_argument,0, 'i'},''<br>
 
   ''{"interfaces", required_argument,0, 'i'},''<br>
- Dans "SMPTout/args.c", ajouter le case interface dans le switch:<br>
+
* Dans "SMPTout/args.c", ajouter le case interface dans le switch:<br>
 
   ''case 'i':''<br>
 
   ''case 'i':''<br>
 
   ''strncpy(config->interface,optarg,sizeof(config->interface)-1);''<br>
 
   ''strncpy(config->interface,optarg,sizeof(config->interface)-1);''<br>
 
   ''break;''<br>
 
   ''break;''<br>
- Dans "SMTPout/out.c":<br>
+
* Dans "SMTPout/out.c":<br>
 
   ''else if(config.interface!=NULL) interface = config.interface;''<br>
 
   ''else if(config.interface!=NULL) interface = config.interface;''<br>
=''PARTIE 3: Tests''=
 
  
Avant tout, il faut '''make clean debug''' à la racine du projet.<br>
+
=='''PARTIE 3: Tests'''==
 +
 
 +
*Avant tout, il faut <code>make clean debug</code> à la racine du projet.<br>
 
<br>
 
<br>
Il faut aussi lancer les serveurs SMTPin et SMTPout dans leurs dossiers spécifiques:<br>
+
*Il faut aussi lancer les serveurs SMTPin et SMTPout dans leurs dossiers spécifiques:<br>
 
   ''./SMTPin -l''<br>
 
   ''./SMTPin -l''<br>
 
   ''./SMTPout -i eth0 -u map.txt''<br>
 
   ''./SMTPout -i eth0 -u map.txt''<br>
  
Test SMTPin : (Dans la VM)<br>
+
*Test SMTPin : (Dans la VM)<br>
 
   ''nc localhost 25''<br>
 
   ''nc localhost 25''<br>
 
   ''HELO ouss''<br>
 
   ''HELO ouss''<br>
Ligne 64 : Ligne 67 :
 
   ''QUIT''<br>
 
   ''QUIT''<br>
 
<br>
 
<br>
Test SMTPout : (Sur la machine polyetch)<br>
+
*Test SMTPout : (Sur la machine polyetch)<br>
 
   ''nc 193.48.57.180 25''<br>
 
   ''nc 193.48.57.180 25''<br>
 
   ''HELO ouss''<br>
 
   ''HELO ouss''<br>
Ligne 78 : Ligne 81 :
 
<br>
 
<br>
 
<br>
 
<br>
 +
*Nous pouvons envoyer des mails de la VM sur la boite polytech mais nous ne pouvons recevoir de mails que de la machine polytech (en <code>nc 193.48.57.180 25</code>).
 +
<br>
 +
=='''PARTIE 4: Evaluation'''==
 +
<br>
 +
* Ajout de la commande '''HELP''': Une fois appellée, affichage des différentes commandes dans la console client avec le numéro de succes de '''HELP'''.<br>
 
<br>
 
<br>
Nous pouvons envoyer des mails de la VM sur la boite polytech mais nous ne pouvons recevoir de mails que de la machine polytech (en ''nc 193.48.57.180 25'').
+
  '' static int gestion_HELP(char *ligne, FILE *client,struct courriel *donnees){''<br>
 +
  '' char cmd[MAX_LIGNE];''<br>
 +
  '' char arg[MAX_LIGNE];''<br>
 +
  '' char suite[MAX_LIGNE];''<br>
 +
  '' int statut=sscanf(ligne,"%4s %s %s",cmd,arg,suite);''<br>
 +
  '' if(statut!=1){''<br>
 +
  ''  if(fprintf(client,"%03d %s\r\n",ERREUR_HELP_CODE,ERREUR_HELP_TEXTE)<0) return GESTION_STOP;''<br>
 +
  ''  return GESTION_ERREUR;''<br>
 +
  ''  }''<br>
 +
  '' if(fprintf(client,"%03d %s\r\n",SUCCES_HELP_CODE,SUCCES_HELP_TEXTE)<0) return GESTION_STOP;''<br>
 +
  '' return GESTION_STOP;''<br>
 +
  '' }''<br>

Version actuelle datée du 14 juin 2023 à 18:50

INTRODUCTION

  • Connexion à la machine virtuelle :
  ssh root@193.48.57.180


  • Installation du compilateur:
  apt update
apt install gcc


  • Ci-joint la dernière version du projet:

Fichier:Projet.zip

PARTIE 1: SMTPin

  • Dans le fichier "in.c", nous nous assurons du bon fonctionnement de la fonction de gestion de courriels. => Ajout else{break;} pour arrêter la boucle.


  • Supprimer le fichier "mx.c". Il est inutile de garder le fichier car ce dernier est présent dans la librairie Réseau.


  • Pour Debugger SMTPin, nous avons ajouté des printf pour le suivi.
 #ifdef DEVERMINE
printf("statut =%d\n", statut);
printf("succes =%d\n", succes);
printf("code =%d\n", code);
#endif
  • Ce qui nous permet de retrouver : ACCUEIL_CODE 220 / CONTINUE_DATA_CODE 354 / SUCCES_QUIT_CODE 250 et de les modifier dans les librairies ("smptp_private.h").


  • Ne pas oublier de changer les variables globales dans "smtp.c"

PARTIE 2: SMTPout

  • Dans le fichier "out.c", nous déplaçons Maildir/tmp dans Maildir/new
 char nouveau_fichier[MAX_CHEMIN];
sprintf(nouveau_fichier,"%s/%s/%s/%Id_%010d",dossier,id,MAILDIR_NEW,capt,pid,messages);
rename(fichier, nouveau_fichier);


  • Il faut lancer les serveurs SMTPin et SMTPout sur différents ports (!= du port 25) => Nous configurons SMTPout en eth0 et SMTPin en loopback.


Le serveur SMTPin était déjà en interface loopback, nous devons donc modifier l'interface du serveur SMTPout.
Pour ce faire :

  • Dans "SMPTout/args.h", nous ajoutons à la structure smtp_config une variable interface.
 char interface[CONFIG_MAX_INTERFACE];
  • Dans "SMPTout/args.c", ajouter "interfaces" dans la structure options:
 {"interfaces", required_argument,0, 'i'},
  • Dans "SMPTout/args.c", ajouter le case interface dans le switch:
 case 'i':
strncpy(config->interface,optarg,sizeof(config->interface)-1);
break;
  • Dans "SMTPout/out.c":
 else if(config.interface!=NULL) interface = config.interface;

PARTIE 3: Tests

  • Avant tout, il faut make clean debug à la racine du projet.


  • Il faut aussi lancer les serveurs SMTPin et SMTPout dans leurs dossiers spécifiques:
 ./SMTPin -l
./SMTPout -i eth0 -u map.txt
  • Test SMTPin : (Dans la VM)
 nc localhost 25
HELO ouss
MAIL FROM: root@fonduesavoyarde2.site
RCPT TO: oussama.naimi@polytech-lille.net
DATA
SUBJECT: <Test>
FROM: <root@fonduesavoyarde2.site>
TO: <oussama.naimi@polytech-lille.net>
<Texte Mail>
.
QUIT


  • Test SMTPout : (Sur la machine polyetch)
 nc 193.48.57.180 25
HELO ouss
MAIL FROM: oussama.naimi@polytech-lille.net
RCPT TO: root@fonduesavoyarde2.site
DATA
SUBJECT: <Test>
FROM: <oussama.naimi@polytech-lille.net>
TO: <root@fonduesavoyarde2.site>
<Texte Mail>
.
QUIT



  • Nous pouvons envoyer des mails de la VM sur la boite polytech mais nous ne pouvons recevoir de mails que de la machine polytech (en nc 193.48.57.180 25).


PARTIE 4: Evaluation


  • Ajout de la commande HELP: Une fois appellée, affichage des différentes commandes dans la console client avec le numéro de succes de HELP.


  static int gestion_HELP(char *ligne, FILE *client,struct courriel *donnees){
char cmd[MAX_LIGNE];
char arg[MAX_LIGNE];
char suite[MAX_LIGNE];
int statut=sscanf(ligne,"%4s %s %s",cmd,arg,suite);
if(statut!=1){
if(fprintf(client,"%03d %s\r\n",ERREUR_HELP_CODE,ERREUR_HELP_TEXTE)<0) return GESTION_STOP;
return GESTION_ERREUR;
}
if(fprintf(client,"%03d %s\r\n",SUCCES_HELP_CODE,SUCCES_HELP_TEXTE)<0) return GESTION_STOP;
return GESTION_STOP;
}