#include /* testStatEtcShadow.c */ #include #include #include int main (int argc, char **argv) { struct stat sts; char *fileName; int erreur=0; if (argc==1) fileName="/etc/shadow"; else fileName=argv[1]; if ( stat (fileName, & sts) != 0) { fprintf (stderr, "%s : erreur %X\n", argv [0], errno); exit (1); } fprintf (stdout, "Peripherique : %d\n", (int)sts . st_dev); fprintf (stdout, "Noeud : %ld\n", sts . st_ino); fprintf (stdout, "Protection (octal) : %o\n", (unsigned short)sts . st_mode); fprintf (stdout, "Protection (hexa) : %X\n", (unsigned short)sts . st_mode); fprintf (stdout, "nb liens materiels: %d\n", (int)sts . st_nlink); fprintf (stdout, "ID proprietaire : %d\n", (int)sts . st_uid); fprintf (stdout, "ID groupe: %d\n", (int)sts . st_gid); fprintf (stdout, "Taille : %lu octets\n", sts . st_size); fprintf (stdout, "Taille de bloc : %lu\n", sts . st_blksize); fprintf (stdout, "Nombre de blocs : %lu\n", sts . st_blocks); if (sts . st_uid != 0) { fprintf(stderr,"Attention, %s: le proprietaire n'est pas root\n",fileName); erreur=1; } #if 1 if (sts . st_mode != (S_IFREG | S_IRUSR | S_IWUSR)) #else if (sts.st_mode != (S_IFREG | S_IRUSR)) /* Sur ma machine */ #endif { fprintf(stderr,"Attention, %s: les droits ne sont pas les bons!\n",fileName); printf("S_IFREG:%x S_IRUSR:%x S_IWUSR:%x Res:%x\n", S_IFREG,S_IRUSR,S_IWUSR,S_IFREG|S_IRUSR|S_IWUSR); erreur=1; } if (!erreur) printf("C'est bon: %s : -rw------- pour root\n",fileName); return 0; }