acl-linux - kernel ------------------ Prilozen je patch pro kernel 2.3.99-pre6 (mohl by fungovat i na novejsich, mozna). Zaplata se provede nasledovne : cd linux_kernel_directory patch -p1 < linux-2.3.99-pre6.acl.diff Kazda inoda filesystemu, ktery je mountovan s flagem MS_ACL, ma u sebe seznam vsech aktualnich acl prav, ktery se prochazi, je-li treba otestovat nejaka prava. Kdyz je inoda nactena do pameti, tak jsou ze souboru acl_perm a acl_index (jejichz jmena se vygeneruji pri mountu a jsou ulozena v superblocku - jmena viz acl-utils.txt) nactena vsechna prava, stejne tak kdyz se inoda uklada tak se vsechna prava ulozi. veskere oprace s acl inodami se provadi ve fs/inode.c ve funkcich inode_acl_*. Format souboru : acl_index se sklada z nize popsanych polozek, pricemz jedna polozka odpovida jedne inode struct acl_i_entry { __u32 filter; filter spolecny pro celou inode (viz syscalls.txt) __u32 index; index do souboru acl_perm 0 znamena, ze nema zadna prava }; acl_perm se sklada z nize popsanych polozek, pricemz tyto polozky jsou zretezeny a na prvni z nich ukazuje index z acl_i_entry struct acl_p_entry { __u32 type; typ id (0 je uid, 1 je gid) __u32 id; uid/gid __u32 perm; prava __u32 next; odkaz na dalsi v retezci nebo 0 pro konec retezce }; acl_p_entry s indexem 0 je specialni, protoze ta se nevyuziva k pravum, ale v polozce id uchovava prvni neexistujici polozku (tj. index prvni polozky, ktera lezi za koncem souboru) a v polozce next uchovava odkaz na prvni volnou polozku Zapisuji-li se prava do souboru, tak se nejprve novymi pravy prepisou stara prava a kdyz je novych prav mene, tak se zbytek stareho retezce pripoji k volnym polozkam, kdyz je jich vice, tak se ukusuje z volnych polozek a kdyz i ty dojdou, tak se zacina acl_perm zvetsovat a ukusuji se neexistujici polozky. V pameti temto souborum odpovida struktura inode_acl.