acl-linux - syscally -------------------- Prava obecne (hodnoty konstant viz ): FREAD R pravo na soubory FWRITE W pravo na soubory FEXEC X pravo na soubory DREAD R pravo na adresare DWRITE W pravo na adresare DEXEC X pravo na adresare ACTL pravo modifikovat ACL prava UPERM v podstromu kontrolovat klasicka unixova prava v acl-utils jsou prava znacena takto (odshora dolu) : rwxRWXau Filtr: Kazda inoda ma filtr, ktery urcuje, co se na inodu dedi z nadrazenych adresaru. Filtr nema efekt na pravo UPERM. Podstrom adresare s pravem UPERM se chova trochu nestandartne pokud jsou v nem pouzita ACL-prava a nemelo by se to delat. Prava se vyhodnocuji tak, ze se podiva, jaka prava jsou u konkretniho souboru/adresare, zorujou se vsechna, ktera se tykaji daneho uzivatele nebo skupin, do kterych nalezi, a v pripade, ze jsou jiz dostatecna, je pristup povolen, jinak se pta na prava u predku, samozrejme z nich uvazuje jen ta, ktera mohou projit filtrem. Pokud jsou ve filesystemu pouzivane hardlinky, tak muze dojit k tomu, ze jeden soubor ma ruzna pristupova prava podle toho, z ktereho linku se k nemu pristupuje. Syscally (hodnoty syscallu viz arch/i386/kernel/entry.S, implementace viz fs/open.c): obecne platne veci: type typ id - 0 znaci, ze id bude uid, 1 znaci, ze id bude gid id uid/gid vsechny syscally vraci 0 pri uspechu a anstavuji errno, navic oproti jinym vraci EINVAL, kdyz type neni 0 ani 1 int sys_acl_set (char *file, int type, int id, int *perm, int *filter); nastavuje prava je-li perm!=NULL, tak nastavi pro dany file a dane id prava perm je-li filter|=NULL, tak nastavuje pro dany file filter int sys_acl_get (char *file, int type, int id, int *perm, int *filter); vraci prava (ne ta efektivni, ale ta co jsou u dane inody), nenajde-li prislusny zaznam, tak vraci default (zadna prava) je-li perm!=NULL, tak do perm da prava prislusejici danemu id je-li filter!=NULL, tak do filter da prislusny filtr int sys_acl_del (char *file, int type, int id); maze prava pro dany id int sys_acl_iterate (char *file, int num, int *type, int *id, int *perm); prochazi seznam prav u daneho file vraci vzdy pravo s danym poradovym cislem num (zacina od 0), neexistuje-li polozka s danym poradovym cislem, tak vraci chybu ERANGE naplnuje type, id a perm funkce obalujici volani syscall(...) jsou v acl-utils/acl-utils.[hc]