revisione ACL, prosegue
authorSimone Piccardi <piccardi@gnulinux.it>
Fri, 14 Sep 2018 22:35:01 +0000 (00:35 +0200)
committerSimone Piccardi <piccardi@gnulinux.it>
Fri, 14 Sep 2018 22:35:01 +0000 (00:35 +0200)
filedir.tex

index b86ba337e8a5e53f1b5bb903843f5c9a422af7de..0e6abb55d3d42ad031d9e9b524e0bfa00f3f27b9 100644 (file)
@@ -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 è: