Le système utilise de nombreuses structures pour enregistrer son état:
stuctures du noyau: accessibles par les 'appels-système'
autres structures, enregistrées dans des fichiers, accessibles par des fonctions fournies avec le noyau UNIX.
On utilisera les structures:
"struct passwd" qui correspond à une ligne du fichier '/etc/passwd' , plus le nom de l'utilisateur.
On y accedera par la fonction "getpwuid()"
"struct group" qui correspond à une ligne du fichier '/etc/group' , plus le nom du groupe.
On y accedera par la fonction "getgrgid()"
"struct stat" qui contient les caractéristiques d'un fichier enregistrés dans le noyau.
On y accede par l'appel-système "stat()"
On s'interessera seulement aux éléments:
Numéro d'utilisateur du propriètaire du fichier.
Numéro de groupe du groupe propriètaire du fichier.
Autorisations d'accès au fichier.
Ecrire la commande 'autorisation' , ayant en paramètre le nom du fichier à examiner.
La commande affiche:
le numéro d'utilisateur de la commande. (voir "getuid()" )
le numéro de groupe de l'utilisateur de la commande. (voir "getgid()" )
La commande affiche:
le nom de l'utilisateur de la commande.
Le nom de groupe de l'utilisateur de la commande.
La commande affiche:
Si l'utilisateur est propriètaire du fichier
"Je suis propriètaire du fichier XXX"
"Mes autorisations d'accès sont" (suivant les cas)
"LECTURE"
"ECRITURE"
"EXECUTION"
Sinon si l'utilisateur est du groupe propriètaire du fichier
"Je suis du groupe propriètaire du fichier XXX"
"Mes autorisations d'accès sont" (suivant les cas)
"LECTURE"
"ECRITURE"
"EXECUTION"
Si l'utilisateur n'appartient pas au 2 cas précedant
"Je suis ni propriètaire, ni du groupe propriètaire du fichier XXX"
"Mes autorisations d'accès sont" (suivant les cas)
"LECTURE"
"ECRITURE"
"EXECUTION"
Ecrire les fonctions:
char * nom_util(int num_util)
num_util : numéro d'utilisateur
restitue un pointeur sur le nom de l'utilisateur correspondant au numéro
char * nom_grp(int num_grp)
num_grp : numéro de groupe d'utilisateur
restitue un pointeur sur le nom de groupe d'utilisateur correspondant au numéro de groupe
void printmode(int m)
m: autorisation d'accès obtenu de la structure stat , décalé suivant les cas de 0, 3 ou 6 bits
affiche:
LECTURE si m correspond à la constante S_IREAD
ECRITURE si m correspond à la constante S_IWRITE
EXECUTION si m correspond à la constante S_IEXEC