Finite ACL, inizio revisione quote
[gapil.git] / filedir.tex
index 0e6abb55d3d42ad031d9e9b524e0bfa00f3f27b9..88745775314ce73bbedf66ae7fabcac0c14746b1 100644 (file)
@@ -5387,7 +5387,7 @@ devono essere attivate esplicitamente montando il filesystem\footnote{che deve
   supportarle, ma questo è ormai vero per praticamente tutti i filesystem più
   comuni, con l'eccezione di NFS per il quale esiste però il supporto per le
   versioni NFSv2 e NFSv3 del protocollo, con NFSv4 esistono invece delle ACL
-  native che hannno una semantica diversa, su di esse possono mappare le ACL
+  native che hanno una semantica diversa, su di esse possono mappare le ACL
   POSIX, ma l'inverso è possibile solo in forma incompleta.} su cui le si
 vogliono utilizzare con l'opzione \texttt{acl} attiva. Dato che si tratta di
 una estensione è infatti opportuno utilizzarle soltanto laddove siano
@@ -5799,7 +5799,7 @@ tipo:qualificatore:permessi
 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} 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
+mentre i 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
@@ -6031,76 +6031,56 @@ essere disallocato esplicitamente al termine del suo utilizzo.
 
 Una volta che si disponga della ACL desiderata, questa potrà essere impostata
 su un file o una directory. Per impostare una ACL sono disponibili due
-funzioni; la prima è \funcd{acl\_set\_file}, che opera sia su file che su
-directory, ed il cui prototipo è:
+funzioni: \funcd{acl\_set\_file}, che opera sia su file che su directory
+usando un \textit{pathname}, e \funcd{acl\_set\_file} che opera solo su file
+usando un file descriptor; i rispettivi prototipi sono:
 
 \begin{funcproto}{
 \fhead{sys/types.h}
 \fhead{sys/acl.h}
 \fdecl{int acl\_set\_file(const char *path, acl\_type\_t type, acl\_t acl)}
 \fdesc{Imposta una ACL su un file o una directory.} 
+\fdecl{int acl\_set\_fd(int fd, acl\_t acl)}
+\fdesc{Imposta una ACL su un file descriptor.} 
 }
 
-{La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
+{Le funzioni ritornano $0$ in caso di successo e $-1$ per un errore, nel qual
   caso \var{errno} assumerà uno dei valori: 
   \begin{errlist}
   \item[\errcode{EACCES}] o un generico errore di accesso a \param{path} o il
     valore di \param{type} specifica una ACL il cui tipo non può essere
     assegnato a \param{path}.
   \item[\errcode{EINVAL}] o \param{acl} non è una ACL valida, o \param{type}
-    ha un valore non corretto.
-  \item[\errcode{ENOSPC}] non c'è spazio disco sufficiente per contenere i
-    dati aggiuntivi della ACL.
-  \item[\errcode{ENOTSUP}] si è cercato di impostare una ACL su un file
-    contenuto in un filesystem che non supporta le ACL.
-  \end{errlist}
-  ed inoltre \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOTDIR},
-  \errval{EPERM}, \errval{EROFS} nel loro significato generico.}
-\end{funcproto}
-
-La funzione consente di assegnare la ACL contenuta in \param{acl} al file o
-alla directory indicate dal \textit{pathname} \param{path}, mentre
-con \param{type} si indica il tipo di ACL utilizzando le costanti di
-tab.~\ref{tab:acl_type}, ma si tenga presente che le ACL di default possono
-essere solo impostate qualora \param{path} indichi una directory. Inoltre
-perché la funzione abbia successo la ACL dovrà essere valida, e contenere
-tutti le voci necessarie, unica eccezione è quella in cui si specifica una ACL
-vuota per cancellare la ACL di default associata a
-\param{path}.\footnote{questo però è una estensione della implementazione delle
-  ACL di Linux, la bozza di standard POSIX.1e prevedeva l'uso della apposita
-  funzione \funcd{acl\_delete\_def\_file}, che prende come unico argomento il
-  \textit{pathname} della directory di cui si vuole cancellare l'ACL di
-  default, per i dettagli si ricorra alla pagina di manuale.}  La seconda
-funzione che consente di impostare una ACL è \funcd{acl\_set\_fd}, ed il suo
-prototipo è:
-
-\begin{funcproto}{
-\fhead{sys/types.h} 
-\fhead{sys/acl.h}
-\fdecl{int acl\_set\_fd(int fd, acl\_t acl)}
-\fdesc{Imposta una ACL su un file descriptor.} 
-}
-
-{La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
-  caso \var{errno} assumerà uno dei valori: 
-  \begin{errlist}
-  \item[\errcode{EINVAL}] o \param{acl} non è una ACL valida, o ha più voci di
-    quante se ne possono assegnare al file indicato da \param{fd}.
+    ha un valore non corretto per \func{acl\_set\_file} o o ha più voci di
+    quante se ne possono assegnare al file per \func{acl\_set\_fd}.
   \item[\errcode{ENOSPC}] non c'è spazio disco sufficiente per contenere i
     dati aggiuntivi della ACL.
   \item[\errcode{ENOTSUP}] si è cercato di impostare una ACL su un file
     contenuto in un filesystem che non supporta le ACL.
   \end{errlist}
-  ed inoltre \errval{EBADF}, \errval{EPERM}, \errval{EROFS} nel loro
-  significato generico.
-}
+  ed inoltre nel loro significato generico \errval{EPERM}, \errval{EROFS} per
+  entrambe, \errval{EBADF} per \func{acl\_set\_fd}, \errval{ENAMETOOLONG},
+  \errval{ENOENT}, \errval{ENOTDIR} per \func{acl\_set\_file}.}
 \end{funcproto}
 
-La funzione è del tutto è analoga a \func{acl\_set\_file} ma opera
-esclusivamente sui file identificati tramite un file descriptor. Non dovendo
-avere a che fare con directory (e con la conseguente possibilità di avere una
-ACL di default) la funzione non necessita che si specifichi il tipo di ACL,
-che sarà sempre di accesso, e prende come unico argomento, a parte il file
+Con \func{acl\_set\_file} si assegna la ACL contenuta in \param{acl} al file o
+alla directory indicate da \param{path}, con \param{type} che indica il tipo
+di ACL con le costanti di tab.~\ref{tab:acl_type}; si tenga presente però che
+le ACL di default possono essere solo impostate qualora \param{path} indichi
+una directory. Inoltre perché la funzione abbia successo la ACL dovrà essere
+valida, e contenere tutti le voci necessarie, con l'eccezione si specifica una
+ACL vuota per cancellare la ACL di default associata a \param{path}, valida
+solo in caso di directory.\footnote{questo però è una estensione della
+  implementazione delle ACL di Linux, la bozza di standard POSIX.1e prevedeva
+  l'uso della apposita funzione \funcd{acl\_delete\_def\_file}, che prende
+  come unico argomento il \textit{pathname} della directory di cui si vuole
+  cancellare l'ACL di default, per i dettagli si ricorra alla pagina di
+  manuale.}
+
+La seconda funzione, \func{acl\_set\_fd}, è del tutto è analoga alla prima, ma
+non dovendo avere a che fare con directory (e la conseguente possibilità di
+avere una ACL di default) non necessita che si specifichi il tipo di ACL, che
+sarà sempre di accesso, e prende come unico argomento, a parte il file
 descriptor, la ACL da impostare.
 
 Le funzioni viste finora operano a livello di una intera ACL, eseguendo in una
@@ -6110,7 +6090,7 @@ voce direttamente con le funzioni previste dallo standard POSIX.1e.  Queste
 funzioni però sono alquanto macchinose da utilizzare per cui è molto più
 semplice operare direttamente sulla rappresentazione testuale. Questo è il
 motivo per non tratteremo nei dettagli dette funzioni, fornendone solo una
-descrizione sommaria; chi fosse interessato potrà ricorrere alle pagine di
+descrizione sommaria; chi fosse interessato p ricorrere alle pagine di
 manuale.
 
 Se si vuole operare direttamente sui contenuti di un oggetto di tipo
@@ -6121,6 +6101,16 @@ funzione \funcm{acl\_create\_entry} per una voce da aggiungere. Nel caso della
 prima funzione si potrà poi ripetere la lettura per ottenere i puntatori alle
 singole voci successive alla prima.
 
+\begin{figure}[!htb]
+  \footnotesize \centering
+  \begin{minipage}[c]{\codesamplewidth}
+    \includecodesample{listati/mygetfacl.c}
+  \end{minipage} 
+  \normalsize
+  \caption{Corpo principale del programma \texttt{mygetfacl.c}.}
+  \label{fig:proc_mygetfacl}
+\end{figure}
+
 Una volta ottenuti detti puntatori si potrà operare sui contenuti delle
 singole voci: con le funzioni \funcm{acl\_get\_tag\_type},
 \funcm{acl\_get\_qualifier}, \funcm{acl\_get\_permset} si potranno leggere
@@ -6139,16 +6129,6 @@ Come esempio di utilizzo di queste funzioni nei sorgenti allegati alla guida
 si è distribuito il programma \texttt{mygetfacl.c}, che consente di leggere le
 ACL di un file, passato come argomento.
 
-\begin{figure}[!htb]
-  \footnotesize \centering
-  \begin{minipage}[c]{\codesamplewidth}
-    \includecodesample{listati/mygetfacl.c}
-  \end{minipage} 
-  \normalsize
-  \caption{Corpo principale del programma \texttt{mygetfacl.c}.}
-  \label{fig:proc_mygetfacl}
-\end{figure}
-
 La sezione principale del programma, da cui si è rimossa la sezione sulla
 gestione delle opzioni, è riportata in fig.~\ref{fig:proc_mygetfacl}. Il
 programma richiede un unico argomento (\texttt{\small 16-20}) che indica il
@@ -6174,13 +6154,13 @@ tetti massimi al consumo delle risorse di un filesystem (spazio disco e
 \textit{inode}) da parte di utenti e gruppi.
 
 Dato che la funzionalità ha senso solo per i filesystem su cui si mantengono i
-dati degli utenti\footnote{in genere la si attiva sul filesystem che contiene
-  le \textit{home} degli utenti, dato che non avrebbe senso per i file di
-  sistema che in genere appartengono all'amministratore.} essa deve essere
-attivata esplicitamente. Questo si fa, per tutti i filesystem che le
-supportano, tramite due distinte opzioni di montaggio, \texttt{usrquota} e
-\texttt{grpquota} che abilitano le quote rispettivamente per gli utenti e per
-i gruppi. Così è possibile usare le limitazioni sulle quote o sugli utenti o
+dati degli utenti essa deve essere attivata esplicitamente.\footnote{in genere
+  la si attiva sul filesystem che contiene le \textit{home} degli utenti, dato
+  che non avrebbe senso per i file di sistema che in genere appartengono
+  all'amministratore.} Questo si fa, per tutti i filesystem che le supportano,
+tramite due distinte opzioni di montaggio, \texttt{usrquota} e
+\texttt{grpquota}, che abilitano le quote rispettivamente per gli utenti e per
+i gruppi. Così è possibile usare le limitazioni delle quote o sugli utenti o
 sui gruppi o su entrambi.
 
 Il meccanismo prevede che per ciascun filesystem che supporta le quote disco
@@ -6244,10 +6224,12 @@ gestione delle quote è \funcd{quotactl}, ed il suo prototipo è:
   caso \var{errno} assumerà uno dei valori: 
   \begin{errlist}
   \item[\errcode{EACCES}] si è richiesto \const{Q\_QUOTAON}, ma il file delle
-    quote indicato da \param{addr} non esiste o non è un file ordinario.
+    quote indicato da \param{addr} esiste ma non è un file ordinario o no sta
+    su \param{dev}.
   \item[\errcode{EBUSY}] si è richiesto \const{Q\_QUOTAON}, ma le quote sono
     già attive.
-  \item[\errcode{EFAULT}] \param{addr} non è un puntatore valido.
+  \item[\errcode{EFAULT}] \param{addr} o \param{dev} non sono un puntatori
+    validi. 
   \item[\errcode{EINVAL}] o \param{cmd} non è un comando valido,
     o il dispositivo \param{dev} non esiste.
   \item[\errcode{EIO}] errore di lettura/scrittura sul file delle quote.
@@ -6297,7 +6279,7 @@ macro \macro{QCMD}:
 }
 
 La macro consente di specificare, oltre al tipo di operazione, da indicare con
-l'argomento \param{subcmd} se questa deve applicarsi alle quote utente o alle
+l'argomento \param{subcmd}, se questa deve applicarsi alle quote utente o alle
 quote gruppo. Questo viene indicato dall'argomento \param{type} che deve
 essere sempre definito ed assegnato ad uno fra i due valori \const{USRQUOTA} o
 \const{GRPQUOTA}.
@@ -6471,11 +6453,12 @@ effettuare qualche conversione per avere un valore in byte.\footnote{in genere
   prestazioni migliori in conseguenza di un minore frazionamento dei dati e di
   indici più corti.}
 
-Come accennato realizzazione delle quote disco ha visto diverse revisioni, con
-modifiche sia del formato delle stesse che dei nomi dei file utilizzate. Per
-questo alcune operazioni di gestione (in particolare \const{Q\_QUOTAON} e
-\const{Q\_GETFMT}) e possono fare riferimento a queste versioni, che vengono
-identificate tramite le costanti di tab.~\ref{tab:quotactl_id_format}.
+Come accennato la realizzazione delle quote disco ha visto diverse revisioni,
+con modifiche sia del formato delle stesse che dei nomi dei file
+utilizzati. Per questo alcune operazioni di gestione (in particolare
+\const{Q\_QUOTAON} e \const{Q\_GETFMT}) e possono fare riferimento a queste
+versioni, che vengono identificate tramite le costanti di
+tab.~\ref{tab:quotactl_id_format}.
 
 \begin{table}[htb]
   \centering