[c2] Korekta uprawnień do plików
Data zakończenia: 2024-04-19 14:00
Języki:
c
Limit czasu: 1.0 s
Limit pamięci: 5 MB
Cel
Zadanie na użycie operatorów bitowych i systemu ósemkowego oraz na przypomnienie wiadomości dotyczących uprawnień do plików.
Problem
Administratorowi polecono sprawdzić, czy w katalogu użytkownika nie znajdują się pliki które mogą być modyfikowane przez nieuprawnione osoby (nie będące użytkownikiem). W przypadku znalezienia takich plików (posiadających uprawnienia zapisu dla grupy lub uprawnienia zapisu dla pozostałych) powinien on usunąć stosowne uprawnienie zapisu (zostawiając pozostałe uprawnienia) oraz zgłosić fakt wykrycia niewłaściwych uprawnień.
Zadanie
Napisz program który wczyta najpierw liczbę n będącą liczbą plików do sprawdzenia, a następnie wczyta n par składających się z
O ile wśród wczytanych uprawnień p nie będzie wartości z ustawionym bitem prawa zapisu dla pozostałych ani ustawionym bitem zapisu dla grupy, to program ma wypisać pojedynczą linię zawierającą tekst "
Przykład
Wejście
Uwaga (interpretacja uprawnień do plików)
Zadanie na użycie operatorów bitowych i systemu ósemkowego oraz na przypomnienie wiadomości dotyczących uprawnień do plików.
Problem
Administratorowi polecono sprawdzić, czy w katalogu użytkownika nie znajdują się pliki które mogą być modyfikowane przez nieuprawnione osoby (nie będące użytkownikiem). W przypadku znalezienia takich plików (posiadających uprawnienia zapisu dla grupy lub uprawnienia zapisu dla pozostałych) powinien on usunąć stosowne uprawnienie zapisu (zostawiając pozostałe uprawnienia) oraz zgłosić fakt wykrycia niewłaściwych uprawnień.
Zadanie
Napisz program który wczyta najpierw liczbę n będącą liczbą plików do sprawdzenia, a następnie wczyta n par składających się z
- liczby całkowitej p zapisanej w systemie ósemkowym reprezentującej uprawnienia do pliku zgodnie z ogólnie przyjętą konwencją (patrz uwaga poniżej),
- łańcucha znaków s reprezentującego nazwę pliku (można założyć, że każda nazwa będzie miała nie więcej niż 100 znaków).
O ile wśród wczytanych uprawnień p nie będzie wartości z ustawionym bitem prawa zapisu dla pozostałych ani ustawionym bitem zapisu dla grupy, to program ma wypisać pojedynczą linię zawierającą tekst "
Uprawnienia poprawne
"
W przeciwnym wypadku ma najpierw wypisać pojedynczą linię zawierającą tekst "Skorygowano uprawnienia
" a następnie dla każdej znalezionej pary (p,s) w osobnej linii ma wypisać skorygowaną wartość uprawnień p' oraz nazwę pliku s.
Przykład
Wejście
7 00755 katalog1 00666 plik1 00755 skrypt.sh 00777 katalog2 02771 program 00646 plik2 00715 katalog3Wyjście
Skorygowano uprawnienia 00644 plik1 00755 katalog2 02751 program 00644 plik2
Uwaga (interpretacja uprawnień do plików)
The following symbolic constants are provided for mode:
S_IRWXU 00700 user (file owner) has read, write, and execute permission
S_IRUSR 00400 user has read permission
S_IWUSR 00200 user has write permission
S_IXUSR 00100 user has execute permission
S_IRWXG 00070 group has read, write, and execute permission
S_IRGRP 00040 group has read permission
S_IWGRP 00020 group has write permission
S_IXGRP 00010 group has execute permission
S_IRWXO 00007 others have read, write, and execute permission
S_IROTH 00004 others have read permission
S_IWOTH 00002 others have write permission
S_IXOTH 00001 others have execute permission
According to POSIX, the effect when other bits are set in mode is unspecified. On Linux, the following bits are also honored in mode:
S_ISUID 0004000 set-user-ID bit
S_ISGID 0002000 set-group-ID bit (see inode(7)).
S_ISVTX 0001000 sticky bit (see inode(7)).