PSR SE2a4 2022/2023 G4 : Différence entre versions
De Wiki d'activités IMA
(→Séance 5:) |
(→Séance 5:) |
||
| Ligne 212 : | Ligne 212 : | ||
*Le problème persiste lorsqu'il y'a plusieurs MX (exemple avec Google) | *Le problème persiste lorsqu'il y'a plusieurs MX (exemple avec Google) | ||
| + | == Modif code (à completer): == | ||
== A faire la prochaine fois: == | == A faire la prochaine fois: == | ||
Version du 29 mars 2023 à 15:24
Groupe Numéro 4 Rayane et Simon
À faire:
- 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 ê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 => Partiellement
- Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée => SMTP dialogue à modifier => commande EHLO => permet de connaitre les fonctions du serveur
- 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 => Partiellement fait, ajout du move dans la fonction gestionCourriel du fichier out.c
Séance 1:
- Lecture du Sujet
- On examine le code:- fonction in.c => fonction chercheMX (fct de résolution) => Permet d'obtenir le MX (nom d'un MTA) et donc le MTA (agent de transfert)
- Compilation du code
- Il faut determiner les tâches à effectuer
Prise en main de la VM (VMALAD):
- Allumer la VM => capbreton.plil.info => xen create /etc/xen/VMALAD.cfg
- Se connecter => ssh root@193.48.57.166 => mdp : glopglopglop
- Utilisation de la commande SCP pour déplacer nos fichiers sur la VM
Modif code:
- Changement dans gestionCourriel() -> in.c / changement pour éviter d'envoyer le message sur tout les mx mais sur celui qui marche
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++;
}
}
Séance 2:
- Explication du code en salle de cours (1h)
Modif code:
- Dans Mutex.c => ajout d'un free(mutexes) | Car le threads est détruit mais pas l'allocation mémoire des mutexes
- Dans out.c => fonction gestionCourriel => ajout d'un rename (move) du fichier TMP vers le fichier NEW
char new_fichier[MAX_CHEMIN]; sprintf(new_fichier, "%s/%s/%s/%ld_%010d_%010ld",dossier,id,MAILDIR_NEW,time_save,pid,messages); rename(fichier, new_fichier); }
Taches restantes:
En cours:
- 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 ê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 => Partiellement
- Pour la transmission vers les serveurs SMTP cibles, une communication chiffrée doit être préférée => SMTP dialogue à modifier => commande EHLO => permet de connaitre les fonctions du serveur
Terminé:
- 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 => ajout du move dans la fonction gestionCourriel du fichier out.c
Séance 3:
- Remise en forme du Wiki
- Tester la communication de notre application et debuguer
- Problème: SMTPin & SMTPout sur la même interface du port 25 ==> Il faut trouver un moyen de déplacer l'un des 2 sur une autre interface
- Solution: Créer un argument a notre apllication pour pouvoir modifier l'interface, (précision de l'interface pour SMTPin & SMTPout)
Modif code:
- Dans SMTPout ==> args.h => ajout d'une variable "interface" à la structure "stmp_config
struct smtp_config
{
char journal[CONFIG_MAX_JOURNAL];
int niveau;
char port[CONFIG_MAX_PORT];
char dossier[CONFIG_MAX_CHEMIN];
char carte[CONFIG_MAX_CHEMIN];
unsigned char local;
char interface[CONFIG_MAX_INTERFACE];
};
- Dans SMTPout ==> args.c => ajout d'un case i "interface" dans le switch
static struct option long_options[] = {
{"local",no_argument,0,'l'},
{"port",required_argument,0,'p'},
{"journal",required_argument,0,'j'},
{"niveau",required_argument,0,'n'},
{"dossier",required_argument,0,'d'},
{"utilisateurs",required_argument,0,'u'},
{"interfaces", required_argument,0, 'i'},
{0,0,0,0}
};
while(1){
int c=getopt_long(argc,argv,"lp:j:n:d:u:i:",long_options,NULL);
if(c<0) break;
switch(c){
case 'l':
config->local=1;
break;
case 'i':
strncpy(config->interface,optarg,sizeof(config->interface)-1);
break;
case 'p':
strncpy(config->port,optarg,sizeof(config->port)-1);
break;
case 'j':
strncpy(config->journal,optarg,sizeof(config->journal)-1);
break;
case 'd':
strncpy(config->dossier,optarg,sizeof(config->dossier)-1);
break;
case 'u':
strncpy(config->carte,optarg,sizeof(config->carte)-1);
break;
case 'n':
config->niveau=atoi(optarg);
break;
default:
afficheSyntaxe(argv[0]);
break;
}
}
Test solution:
- Commande pour lancer SMTPin sur la VM avec la séléction de l'interface local du port 25: root@VMALAD:~/SMTP/PSR-ReX-v6/src/SMTPin# ./SMTPin -l
- Commande pour lancer SMTPin sur la VM avec la séléction de l'interface eth0 du port 25: root@VMALAD:~/SMTP/PSR-ReX-v6/src/SMTPout# ./SMTPout -i eth0
- On utilise la commande suivante pour s'assurer que les 2 applications se trouvent sur les bons interfaces: root@VMALAD:~# ss -tlpn
Séance 4:
- Test du serveur SMTP avec l'envoi de mail grâce à l'outil Telnet => le process d'envoi de mail fonctionne
- A faire => relancer les applications en mode debug pour observer la sortie => Makedebug
Test:
- On lance dans un premier temps les 2 process SMTPin & SMTPout sur la VM
- Utilisation de Telnet, exemple:
Problèmes:
- Problème lors de l'envoi de mail car l'outil Telnet a été utilisé sur un pc externe, or SMTPin est sur l'interface locale
- Problème de MX lors de l'envoi du mail
A faire lors de la prochaine séance:
- Refaire le test d'envoi de mail en utilisant Telnet directement sur la VM
- Modification du code pour résoudre le problème de MX lors de l'envoi du mail
Séance 5:
- Refaire le test d'envoi de mail en utilisant Telnet directement sur la VM
- Modification du code pour résoudre le problème de MX lors de l'envoi du mail
Test d'envoi de mail:
- Il n'y a plus d'erreur lorque l'on envoi un mail sur une adresse Polytech (1 seul MX), mais il n'y a pas de réception du message dans la boite mail.
- Le problème persiste lorsqu'il y'a plusieurs MX (exemple avec Google)
Modif code (à completer):
A faire la prochaine fois:
- Modifier le code SMTP.C de 250 à 220
- Checker le multiMX