Do spisu tresci tematu 6
6.9.2 Funkcja chroot()
Spis tresci
Wprowadzenie
Funkcja chroot() sluzy do zmiany aktualnego glownego korzenia
drzewa plikow (ang. root) na inny. Moze ja wykonac jedynie uzytkownik
o statusie superusera
Opis dzialania
Dzialanie tej funkcji jest bardzo zblizone do dzialania funkcji chdir().
Jako parametr otrzymuje ona wskazniznik na lancuch, zawierajacy sciezke
do pliku (katalogu), ktory ma byc nowym korzeniem drzewa plikow.
- Najpierw odszukiwany jest za pomoca funkcji namei() i-wezel
odpowiadajacy danej sciezce. Jezeli taki nie istnieje zwracany jest blad
otrzymany z funkcji namei().
- Jezeli dany i-wezel istnieje, sprawdzane jest za pomoca makra S_ISDIR()
czy odpowiada on katalogowi. Jesli nie (np. mamy plik albo dowiazanie),
zwalniany jest ten i-wezel oraz zwracany jest blad.
- Poniewaz ta funkcje moze wywolac tylko superuser, sprawdzane jest,
czy dany uzytkownik posiada odpowiednie uprawnienia. Jesli nie, zwalniany
jest i-wezel oraz zwracany jest blad.
- W przeciwnym wypadku zwalniany jest i-wezel odpowiadajacy aktualnemu
korzeniowi, a na jego miejsce wpisywany jest i-wezel sciezki, ktora byla
parametrem (zmienna current->fs->root) oraz funkcja konczy
dzialanie z kodem odpowiadajacym sukcesowi (patrz dalej).
Deklaracja, argumenty oraz wartosci zwracane przez funkcje
Deklaracja funkcji:
int sys_chroot(const char* filename);
Argumenty:
filename jest wskaznikiem na lancuch zawierajacy sciezke nowego
korzenia.
Wyniki:
W przypadku powodzenia funkcja zwraca 0, w przeciwnym wypadku wartosc
rozna od zera:
- Jezeli podany plik nie istnieje, jest to blad otrzymany od funkci namei().
- Jezeli podany plik nie jest katalogiem, zwracana jest wartosc -ENOTDIR.
- Jezeli uzytkownik nie ma praw superusera: -EPERM.
Zrodla informacji
- Zrodla jadra:
Pytania i odpowiedzi
Na razie brak jednych i drugich..
Autor: Lukasz
Masko