diff --git a/question7/file_testA b/question7/file_testA
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/question8/Makefile b/question8/Makefile
index ec724a5e4eb9f8da7dcfb2180a6da073fc856a90..171d29b218615c16236ecc606578d41ad04cd778 100644
--- a/question8/Makefile
+++ b/question8/Makefile
@@ -1,8 +1,8 @@
 CC = gcc
 CFLAGS = -Wall -Werror -Wextra
 
-lab : delFile
+lab : rmg
 
-delFile : supprimerFichier.o
+rmg : supprimerFichier.o
 	$(CC) -o $@ $^
-supprimerFichier.o : supprimerFichier.c
\ No newline at end of file
+supprimerFichier.o : supprimerFichier.c
diff --git a/question8/delFile b/question8/delFile
deleted file mode 100755
index d96f43e80279942110e97ba5b27a62dd33657ee5..0000000000000000000000000000000000000000
Binary files a/question8/delFile and /dev/null differ
diff --git a/question9/Makefile b/question9/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..84c90b0d50520f8e265220093955bd1a1dafd12b
--- /dev/null
+++ b/question9/Makefile
@@ -0,0 +1,12 @@
+CC = gcc
+CFLAGS = -Wall -Werror -Wextra
+
+lab : rmg pwg
+
+rmg : supprimerFichier.o
+	$(CC) -o $@ $^
+supprimerFichier.o : supprimerFichier.c
+
+pwg : pwg.o
+	$(CC) -o $@ $^
+pwg.o : pwg.c
\ No newline at end of file
diff --git a/question9/pwg b/question9/pwg
new file mode 100755
index 0000000000000000000000000000000000000000..5edf9ec8f2de996f5ee3d95b285bc9f9c67b3abe
Binary files /dev/null and b/question9/pwg differ
diff --git a/question9/pwg.c b/question9/pwg.c
new file mode 100644
index 0000000000000000000000000000000000000000..01e030674d4d4976fb62ab99990bd8d8ef18ecaa
--- /dev/null
+++ b/question9/pwg.c
@@ -0,0 +1,116 @@
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <stdlib.h>
+#include <errno.h>
+
+
+char * encrypt(char * message){
+    char * encrypted = malloc(strlen(message));
+
+    for(int i = 0 ; i < (int)strlen(message); i++){
+        encrypted[i] = message[i]-5;
+    }
+
+    return encrypted;
+}
+
+char * crypted(char * message){
+   char * crypted = malloc(strlen(message));
+
+    for(int i = 0 ; i < (int)strlen(message); i++){
+        crypted[i] = message[i]+5;
+    }
+
+    return crypted;
+}
+
+int main(int argc , char * argv[]){
+
+    if(argc < 3){
+        fprintf(stderr,"Erreur : veuillez mettre votre login et mots de passe dans la commmande\n ");
+        fprintf(stderr,"Usage : ./pwg username password\n ");
+        exit(EXIT_FAILURE);
+    }
+
+    // On ouvre le fichier passwd en lecture
+    FILE * passwd;
+    passwd = fopen("/home/admin/passwd", "r");
+    if(passwd == NULL){
+        fprintf(stderr, "Erreur : Incapable d'ouvrir le fichier /home/admin/passwd \n");
+        return -1;
+    }
+
+    // On créer un nouveau fichier dans lequelle on va écrire 
+    FILE * newpasswd;
+    newpasswd = fopen("/home/admin/newpasswd","a+");
+    if(newpasswd == NULL){
+        fprintf(stderr, "Erreur : Incapable d'ouvrir le fichier /home/admin/newpasswd %d\n",errno);
+        return -1;
+    }
+
+    // On regarde si l'utilisateur a deja un mot de passe dans le fichier passwd 
+    char * username = argv[1];
+    char * oldPassword = malloc(50);
+    int hasOldPassword = 0;
+    int try = 3;
+    int passcheck = 0;
+    char enterOldPassword[50];
+    // On parcours le fichier pour voir si son login existe 
+    char buffer[50];
+    while ( ! feof( passwd) ) {
+        fgets( buffer, 50 , passwd );
+        if ( ferror( passwd ) ) {
+            fprintf( stderr, "Erreur : Probléme lors de la lecture du fichier /home/admin/passwd , code de retour %d\n", errno );
+            break;
+        }
+
+        char * line = malloc(50);
+        line= strcpy(line,buffer);
+        char *ptr = strtok(buffer, " ");
+        if(ptr != NULL){   
+            // Si le login existe on récupere le mot de passe 
+            if(strncmp(username,ptr,strlen(username)) == 0){
+                char * tmp = strtok(NULL," ");
+                oldPassword = strcpy(oldPassword,tmp);
+                hasOldPassword = 1;
+            }else if(! feof(passwd)) {
+                //On écrit chaque ligne si elle ne correspond pas au login
+                fprintf(newpasswd,"%s",line);
+            }
+        }
+        
+    }
+    // On saisie l'ancien mot de passe et on verifie si c'est le bon
+    while(hasOldPassword && !passcheck && try > 0){
+        fprintf(stdout,"Veuillez saisir votre ancien mot de passe : \n");
+        scanf("%s",enterOldPassword);
+        
+        if(strncmp(encrypt(oldPassword),enterOldPassword,strlen(enterOldPassword))){
+            fprintf(stderr,"ERREUR : Mot de passe incorrect veuillez recommencer \n");
+            try = try - 1;
+        }else{
+            passcheck = 1;
+        }
+    }
+
+    if(try < 3){
+        fprintf(stderr,"3 éssaies ratées, Identification échouée \n");
+        return -1;
+    }
+    
+    // On ecrit la ligne de login + mdp 
+
+    // Si elle n'existeais pas elle se rajoute tout juste a la suite des autres 
+    // Si elle existait deja comme elle n'est pas ecrite dans le nouveau fichier 
+    // Elle ne sera pas doublons elle sera juste deplacé a la fin du fichier 
+    fprintf(newpasswd,"%s %s\n",username,crypted(argv[2]));
+    
+    //On supprime l'ancien fichier 
+    remove("/home/admin/passwd");
+    // On renome le nouveau fichier 
+    rename("/home/admin/newpasswd","/home/admin/passwd");
+
+    return 0;    
+}
\ No newline at end of file
diff --git a/question9/rmg b/question9/rmg
new file mode 100755
index 0000000000000000000000000000000000000000..05cd58563314bd90482fb0cd1be8343c8fbad1bf
Binary files /dev/null and b/question9/rmg differ
diff --git a/question9/supprimerFichier.c b/question9/supprimerFichier.c
new file mode 100755
index 0000000000000000000000000000000000000000..56515141dc3430e2dc1325d9d1ab5819a005d350
--- /dev/null
+++ b/question9/supprimerFichier.c
@@ -0,0 +1,120 @@
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <stdlib.h>
+
+char * encrypt(char * message){
+    char * encrypted = malloc(strlen(message));
+
+    for(int i = 0 ; i < (int)strlen(message); i++){
+        encrypted[i] = message[i]-5;
+    }
+
+    return encrypted;
+}
+
+int main(int argc , char * argv[]){
+
+    if(argc < 2){
+        fprintf(stderr, "Erreur : paramêtre manquant, veuillez précisé le nom du fichier que vous voulez supprimer !\n");
+        return -1;
+    }
+
+    char * filename = argv[1];
+
+    fprintf(stdout,"Suppression du fichier %s en cours ... \n",filename);
+
+    // RECUPERATION DU GROUPE DE LA PERSONNE QUI EXECUTE LE PROGRAMME
+    int groupeUser = getegid();
+    // RECUPEATION DU GROUPE DU FICHIER QUE L'ON ESSAIE DE SUPPRIMER
+    FILE *f;
+    f = fopen(filename, "rx");
+    if(f == NULL){
+        fprintf(stderr, "Erreur : Incapable d'ouvrir le fichier a supprimer, vous n'avez pas les droit \n");
+        return -1;
+    }
+
+    struct stat sb;
+
+    if (stat(filename, &sb) == -1) {
+        fprintf(stderr,"Erreur : incapable de récupérer les informations du fichier \n");
+        return -1;         
+    }
+
+    int groupeFile = sb.st_gid;
+
+    // COMPARAISON DES GROUPES
+    if(groupeFile != groupeUser){
+        fprintf(stderr,"Erreur : Le fichier n'a pas le même groupe que l'utilisateur, Interdit de continuer : %d != %d \n",groupeUser,groupeFile);
+        return -1;
+    }
+
+    int essaie = 3;
+    int check = 0;
+    char password[50];
+    char login[50];
+
+    while(!check && essaie > 0){
+        // SAISIE DU LOGIN/MDP DE L'UTILISATEUR
+        fprintf(stdout,"Veuillez saisir votre nom d'utilisateur : \n");
+        scanf("%s", login);
+        
+        fprintf(stdout,"Veuillez saisir votre mot de passe : \n");
+        scanf("%s",password);
+
+        // RECUPERATION DES LOGIN MOT DE PASSE DANS LE FICHIER /home/admin/passwd
+        FILE *passwd;
+        passwd = fopen("/home/admin/passwd", "r");
+        if(passwd == NULL){
+            fprintf(stderr, "Erreur : Incapable d'ouvrir le fichier /home/admin/passwd \n");
+            return -1;
+        }
+
+        // COMPARAISON DES LOGIN ET MDP 
+
+        char buffer[50];
+        while ( ! feof( passwd) ) {
+            fgets( buffer, 50 , passwd );
+            if ( ferror( passwd ) ) {
+                fprintf( stderr, "Erreur : Probléme lors de la lecture du fichier /home/admin/passwd , code de retour %d\n", errno );
+                break;
+            }
+
+            char *ptr = strtok(buffer, " ");
+            if(ptr != NULL){
+                if(strncmp(login,ptr,strlen(login)) == 0){
+                    ptr = strtok(NULL," ");
+                    if(ptr != NULL){
+                        if(strncmp(encrypt(password),ptr,strlen(password))){
+                            fprintf(stderr,"ERREUR : Mot de passe incorrect veuillez recommencer \n");
+                            essaie = essaie - 1;
+                        }else{
+                            check = 1;
+                        }
+                    }else{
+                        essaie = essaie - 1;
+                    }
+                }    
+            }else{
+                essaie = essaie - 1;
+            }
+            
+        } 
+    }
+
+    if(essaie < 3){
+        fprintf(stderr,"3 éssaies ratées, Identification échouée \n");
+        return -1;
+    }
+
+    fprintf(stdout,"Identification réussie ... \n");
+
+    // SUPPRESSION DU FICHIER DANS LE DIR_A ou DIR_B
+    if(remove(filename)){
+        fprintf(stderr,"ERREUR : Erreur lors de la suppression du fichier");
+    }
+
+}
\ No newline at end of file
diff --git a/rendu.md b/rendu.md
index 19dfe5945470e5be3dbbd05521b68ae6cc476c3b..69f72accf845095487df0ecb55ab6ddf2f4076a6 100644
--- a/rendu.md
+++ b/rendu.md
@@ -146,16 +146,25 @@ Création du programme C avec l'utilisateur admin et ajout du setuserid
 Pour qu'il ai les même droit que l'admin et donc le droit de supprimer les fichiers 
 dans les dossier dir_a et dir_b 
 
+./rmg \[filepath\]
+
 Le programme et les scripts dans le repertoire *question8*.
 
 ## Question 9
 
+Programme fonctionnel seulement l'utilisateur Admin 
+
+-> Pas réussie a le rendre utilisable par tout le monde 
+Même en mettant le setuserid sur le fichier pwg.c et l'executable 
+sur aucun des deux ca fonctionne 
+
+./pwg \[username\] \[password\]
+
 Le programme et les scripts dans le repertoire *question9*.
 
 ## Question 10
 
-Les programmes *groupe_server* et *groupe_client* dans le repertoire
-*question10* ainsi que les tests. 
+Non effectuée