From: Simone Piccardi Date: Fri, 14 Sep 2018 22:35:01 +0000 (+0200) Subject: revisione ACL, prosegue X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=commitdiff_plain;h=ed66d56eb0d488205184fc1cc8bfc2e805b7d58f;p=gapil.git revisione ACL, prosegue --- diff --git a/filedir.tex b/filedir.tex index b86ba33..0e6abb5 100644 --- a/filedir.tex +++ b/filedir.tex @@ -4750,10 +4750,10 @@ In genere BSD usa sempre la seconda possibilità, che viene per questo chiamata semantica BSD. Linux invece segue normalmente quella che viene chiamata semantica SVr4: di norma un nuovo file viene creato, seguendo la prima opzione, con il \ids{GID} del processo, se però la directory in cui viene -creato ha il bit \acr{sgid} impostato allora viene usata la seconda -opzione. L'adozione di questa semantica però può essere controllata, +creato ha il bit \acr{sgid} dei permessi impostato allora viene usata la +seconda opzione. L'adozione di questa semantica però può essere controllata, all'interno di alcuni filesystem,\footnote{con il kernel 2.6.25 questi erano - \acr{ext2}, \acr{ext3}, \acr{ext4}, e XFS.} con l'uso dell'opzione di + \acr{ext2}, \acr{ext3}, \acr{ext4}, e \acr{XFS}.} con l'uso dell'opzione di montaggio \texttt{grpid}, che se attivata fa passare all'uso della semantica BSD. @@ -4825,8 +4825,8 @@ direttamente su un collegamento simbolico si deve usare la funzione stata creata una nuova \textit{system call} per \func{chown} che seguisse i collegamenti simbolici.} La funzione \func{fchown} opera su un file aperto, essa è mutuata da BSD, ma non è nello standard POSIX. Un'altra estensione -rispetto allo standard POSIX è che specificando -1 come valore -per \param{owner} e \param{group} i valori restano immutati. +rispetto allo standard POSIX è che specificando $-1$ come valore per +\param{owner} e \param{group} i valori restano immutati. Quando queste funzioni sono chiamate con successo da un processo senza i privilegi di amministratore entrambi i bit \acr{suid} e \acr{sgid} vengono @@ -5566,13 +5566,15 @@ associati al gruppo proprietario del file (vale a dire su \const{ACL\_GROUP\_OBJ}). Per la gestione delle ACL lo standard \textit{POSIX 1003.1e Draft 17} ha -previsto delle apposite funzioni ed tutta una serie di tipi di dati -dedicati;\footnote{fino a definire un tipo di dato e delle costanti apposite - per identificare i permessi standard di lettura, scrittura ed esecuzione.} -tutte le operazioni devono essere effettuate attraverso tramite questi tipi di -dati, che incapsulano tutte le informazioni contenute nelle ACL. La prima di -queste funzioni che prendiamo in esame è \funcd{acl\_init}, il cui prototipo -è: +previsto delle apposite funzioni ed tutta una serie di tipi di dati dedicati, +arrivando fino a definire un tipo di dato e delle costanti apposite per +identificare i permessi standard di lettura, scrittura ed esecuzione. Tutte +le operazioni devono essere effettuate attraverso tramite questi tipi di dati, +che incapsulano tutte le informazioni contenute nelle ACL. + +La prima di queste funzioni che prendiamo in esame (si ricordi che come per +tutte le altre per poterla usare occorre invocare il compilatore con l'opzione +\texttt{-l acl}) è \funcd{acl\_init}, il cui prototipo è: \begin{funcproto}{ \fhead{sys/types.h} @@ -5602,10 +5604,10 @@ che un puntatore all'area di memoria allocata per i dati richiesti. Pertanto in caso di fallimento verrà restituito un puntatore nullo di tipo ``\code{(acl\_t) NULL}'' e si dovrà, in questa come in tutte le funzioni seguenti che restituiscono un oggetto di tipo \type{acl\_t}, confrontare il -valore di ritorno della funzione con \val{NULL}.\footnote{a voler essere - estremamente pignoli si dovrebbe usare ``\code{(acl\_t) NULL}'', ma è - sufficiente fare un confronto direttamente con \val{NULL} essendo cura del - compilatore fare le conversioni necessarie.} +valore di ritorno della funzione con \val{NULL} (anche se, a voler essere +estremamente pignoli, si dovrebbe usare ``\code{(acl\_t) NULL}'', ma è +sufficiente fare un confronto direttamente con \val{NULL} essendo cura del +compilatore fare le conversioni necessarie). Una volta che si siano completate le operazioni sui dati di una ACL la memoria allocata per un oggetto \type{acl\_t} dovrà essere liberata esplicitamente @@ -5727,12 +5729,13 @@ ACL di un file; i rispettivi prototipi sono: Le due funzioni ritornano, con un oggetto di tipo \type{acl\_t}, il valore della ACL correntemente associata ad un file, che può essere identificato tramite un file descriptor usando \func{acl\_get\_fd} o con un -\textit{pathname} usando \func{acl\_get\_file}. Nel caso di quest'ultima -funzione, che può richiedere anche la ACL relativa ad una directory, il -secondo argomento \param{type} consente di specificare se si vuole ottenere la -ACL di default o quella di accesso. Questo argomento deve essere di tipo -\typed{acl\_type\_t} e può assumere solo i due valori riportati in -tab.~\ref{tab:acl_type}. +\textit{pathname} usando \func{acl\_get\_file}. + +Nel caso di quest'ultima funzione, che può richiedere anche la ACL relativa ad +una directory, il secondo argomento \param{type} consente di specificare se si +vuole ottenere la ACL di default o quella di accesso. Questo argomento deve +essere di tipo \typed{acl\_type\_t} e può assumere solo i due valori riportati +in tab.~\ref{tab:acl_type}. \begin{table}[htb] \centering @@ -5758,7 +5761,7 @@ soltanto per una directory, e verrà restituita solo se presente, altrimenti verrà restituita una ACL vuota. Infine si potrà creare una ACL direttamente dalla sua rappresentazione -testuale con la funzione \funcd{acl\_from\_text}, il cui prototipo è: +testuale con la funzione \funcd{acl\_from\_text}, il cui prototipo è: \begin{funcproto}{ \fhead{sys/types.h} @@ -5782,7 +5785,7 @@ La funzione prende come argomento il puntatore ad un buffer dove si è inserita la rappresentazione testuale della ACL che si vuole creare, la memoria necessaria viene automaticamente allocata ed in caso di successo viene restituito come valore di ritorno un oggetto di tipo \type{acl\_t} con il -contenuto della stessa, che come per le precedenti funzioni, dovrà essere +contenuto della stessa, che, come per le precedenti funzioni, dovrà essere disallocato esplicitamente al termine del suo utilizzo. La rappresentazione testuale di una ACL è quella usata anche dai comandi @@ -5795,12 +5798,12 @@ tipo:qualificatore:permessi \end{Example} dove il tipo può essere uno fra \texttt{user}, \texttt{group}, \texttt{other} e \texttt{mask}. Il qualificatore è presente solo per \texttt{user} e -\texttt{group} e indica l'utente o il gruppo a cui la voce si riferisce; i -permessi sono espressi con una tripletta di lettere analoga a quella usata per -i permessi dei file.\footnote{vale a dire ``\texttt{r}'' per il permesso di - lettura, ``\texttt{w}'' per il permesso di scrittura, ``\texttt{x}'' per il - permesso di esecuzione (scritti in quest'ordine) e ``\texttt{-}'' per - l'assenza del permesso.} +\texttt{group} ed indica l'utente o il gruppo a cui la voce si riferisce, +mentrei permessi sono espressi con una tripletta di lettere analoga a quella +usata per i permessi dei file, vale a dire ``\texttt{r}'' per il permesso di +lettura, ``\texttt{w}'' per il permesso di scrittura, ``\texttt{x}'' per il +permesso di esecuzione (scritti in quest'ordine) e ``\texttt{-}'' per +l'assenza del permesso. Un possibile esempio di rappresentazione della ACL di un file ordinario a cui, oltre ai permessi ordinari, si è aggiunto un altro utente con un accesso in @@ -5810,18 +5813,18 @@ user::rw- group::r-- other::r-- user:piccardi:r-- +group:gapil:r-- \end{Example} Va precisato che i due tipi \texttt{user} e \texttt{group} sono usati -rispettivamente per indicare delle voci relative ad utenti e -gruppi,\footnote{cioè per voci di tipo \const{ACL\_USER\_OBJ} e - \const{ACL\_USER} per \texttt{user} e \const{ACL\_GROUP\_OBJ} e - \const{ACL\_GROUP} per \texttt{group}.} applicate sia a quelli proprietari -del file che a quelli generici; quelle dei proprietari si riconoscono per -l'assenza di un qualificatore, ed in genere si scrivono per prima delle altre. -Il significato delle voci di tipo \texttt{mask} e \texttt{mark} è evidente. In -questa forma si possono anche inserire dei commenti precedendoli con il -carattere ``\texttt{\#}''. +rispettivamente per indicare delle voci relative ad utenti e gruppi (cioè per +voci di tipo \const{ACL\_USER\_OBJ} e \const{ACL\_USER} per \texttt{user} e +\const{ACL\_GROUP\_OBJ} e \const{ACL\_GROUP} per \texttt{group}) applicate sia +a quelli proprietari del file che a quelli generici. Quelle dei proprietari si +riconoscono per l'assenza di un qualificatore, ed in genere si scrivono per +prima delle altre. Il significato delle voci di tipo \texttt{mask} e +\texttt{mark} è evidente. Usando questa forma estesa si possono anche inserire +dei commenti nel testo precedendoli con il carattere ``\texttt{\#}''. La forma breve prevede invece la scrittura delle singole voci su una riga, separate da virgole; come specificatori del tipo di voce si possono usare le @@ -5844,20 +5847,21 @@ di uso più immediato, è \funcd{acl\_to\_text}, ed il suo prototipo è: testuale della ACL in caso di successo e \var{NULL} per un errore, nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} - \item[\errcode{EINVAL}] la ACL indicata da \param{acl} non è valida. + \item[\errcode{EINVAL}] o \param{acl} non è un puntatore ad una ACL o la ACL + che esso indica non è valida o non può esser tradotta in forma testuale. \item[\errcode{ENOMEM}] non c'è memoria sufficiente per allocare i dati. \end{errlist} } \end{funcproto} -La funzione restituisce il puntatore ad una stringa terminata da NUL -contenente la rappresentazione in forma estesa della ACL passata come +La funzione restituisce il puntatore ad una stringa, terminata da un NUL, +contenente la rappresentazione testuale in forma estesa della ACL passata come argomento, ed alloca automaticamente la memoria necessaria. Questa dovrà poi -essere liberata, quando non più necessaria, con \func{acl\_free}. Se -nell'argomento \param{len\_p} si passa un valore puntatore ad una variabile -intera in questa verrà restituita (come \textit{value result argument}) la -dimensione della stringa con la rappresentazione testuale, non comprendente il -carattere nullo finale. +essere liberata, quando non più necessaria, con \func{acl\_free}. Se +nell'argomento \param{len\_p} si passa come valore il puntatore ad una +variabile intera, in questa verrà restituita (come \textit{value result + argument}) la dimensione della stringa con la rappresentazione testuale, non +comprendente il carattere nullo finale. La seconda funzione, che permette di controllare con una gran dovizia di particolari la generazione della stringa contenente la rappresentazione @@ -5903,8 +5907,9 @@ tab.~\ref{tab:acl_to_text_options}. \hline \hline \constd{TEXT\_ABBREVIATE} & Stampa le voci in forma abbreviata.\\ - \constd{TEXT\_NUMERIC\_IDS} & non effettua la risoluzione numerica di - \ids{UID} e \ids{GID}.\\ + \constd{TEXT\_NUMERIC\_IDS} & Non effettua la risoluzione di + \ids{UID} e \ids{GID} lasciando i valori + numerici.\\ \constd{TEXT\_SOME\_EFFECTIVE}&Per ciascuna voce che contiene permessi che vengono eliminati dalla \const{ACL\_MASK} viene generato un commento con i permessi @@ -5965,10 +5970,11 @@ buffer di dimensione sufficiente, il suo prototipo è: } \end{funcproto} -Ottenuta con \func{acl\_size} la dimensione per il buffer di una ACL lo si -potrà allocare direttamente con \func{malloc}. La rappresentazione binaria di -una ACL si potrà invece ottenere con la funzione \funcd{acl\_copy\_ext}, il -cui prototipo è: +Ottenuta con \func{acl\_size} la dimensione del buffer necessaria per potervi +memorizzare una ACL questo dovrà potrà essere allocato direttamente con +\func{malloc}, ed a questo punto vi si potrà salvare la rappresentazione +binaria della precedente ACL utilizzando la funzione \funcd{acl\_copy\_ext}, +il cui prototipo è: \begin{funcproto}{ \fhead{sys/types.h} @@ -5981,21 +5987,21 @@ cui prototipo è: della ACL in caso di successo e $-1$ per un errore, nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} - \item[\errcode{EINVAL}] la ACL indicata da \param{acl} non è valida o - \param{size} è negativo o nullo. + \item[\errcode{EINVAL}] la ACL indicata da \param{acl} non è valida, o + \param{acl} non è un puntatore ad una ACL o \param{size} è negativo o + nullo. \item[\errcode{ERANGE}] il valore di \param{size} è più piccolo della - dimensione della rappresentazione della ACL. + dimensione della rappresentazione binaria della ACL. \end{errlist} } \end{funcproto} La funzione scriverà la rappresentazione binaria della ACL indicata da -\param{acl} sul buffer di dimensione \param{size} -all'indirizzo \param{buf\_p}, restituendo la dimensione della stessa come -valore di ritorno. Qualora la dimensione della rappresentazione ecceda il -valore di \param{size} la funzione fallirà con un errore di -\errcode{ERANGE}. La funzione non ha nessun effetto sulla ACL indicata -da \param{acl}. +\param{acl} sul buffer di dimensione \param{size} all'indirizzo +\param{buf\_p}, restituendo la dimensione della stessa come valore di +ritorno. Qualora la dimensione della rappresentazione ecceda il valore di +\param{size} la funzione fallirà con un errore di \errcode{ERANGE}. La +funzione non ha nessun effetto sulla ACL indicata da \param{acl}. Viceversa se si vuole ripristinare una ACL a partire da una rappresentazione binaria si potrà usare la funzione \funcd{acl\_copy\_int}, il cui prototipo è: