Skip to content
Snippets Groups Projects
Commit 7869f34b authored by Ryan Rossez's avatar Ryan Rossez
Browse files

Fin de la questions 9

parent 19a093bc
No related branches found
No related tags found
No related merge requests found
CC = gcc CC = gcc
CFLAGS = -Wall -Werror -Wextra CFLAGS = -Wall -Werror -Wextra
lab : delFile lab : rmg
delFile : supprimerFichier.o rmg : supprimerFichier.o
$(CC) -o $@ $^ $(CC) -o $@ $^
supprimerFichier.o : supprimerFichier.c supprimerFichier.o : supprimerFichier.c
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
File added
#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
No preview for this file type
#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
...@@ -146,16 +146,25 @@ Création du programme C avec l'utilisateur admin et ajout du setuserid ...@@ -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 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 dans les dossier dir_a et dir_b
./rmg \[filepath\]
Le programme et les scripts dans le repertoire *question8*. Le programme et les scripts dans le repertoire *question8*.
## Question 9 ## 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*. Le programme et les scripts dans le repertoire *question9*.
## Question 10 ## Question 10
Les programmes *groupe_server* et *groupe_client* dans le repertoire Non effectuée
*question10* ainsi que les tests.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment