Esempi rimasti indietro.
[gapil.git] / filedir.tex
index 18bbdc04692e6cb1b66c9ae180762e097dfb203e..c3a284b976ade0fc31a5f3c9af1c8a8ede170446 100644 (file)
@@ -1,4 +1,4 @@
-4%% filedir.tex
+%% filedir.tex
 %%
 %% Copyright (C) 2000-2011 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
@@ -1484,7 +1484,7 @@ il suo prototipo è:
     \end{errlist}}
 \end{prototype}
 
-La funzionne genera un nome univoco sostituendo le \code{XXXXXX} finali di
+La funzionane genera un nome univoco sostituendo le \code{XXXXXX} finali di
 \param{template}; dato che \param{template} deve poter essere modificata dalla
 funzione non si può usare una stringa costante.  Tutte le avvertenze riguardo
 alle possibili \itindex{race~condition} \textit{race condition} date per
@@ -1597,7 +1597,7 @@ funzioni \funcd{stat}, \funcd{fstat} e \funcd{lstat}, i cui prototipi sono:
     \errval{EACCES}, \errval{ENOMEM}, \errval{ENAMETOOLONG}.}
 \end{functions}
 
-La funzione \func{stat} legge le informazion del file il cui pathname è
+La funzione \func{stat} legge le informazioni del file il cui pathname è
 specificato dalla stringa puntata da \param{file\_name} e le inserisce nel
 buffer puntato dall'argomento \param{buf}; la funzione \func{lstat} è identica
 a \func{stat} eccetto che se \param{file\_name} è un link simbolico vengono
@@ -1793,9 +1793,9 @@ dimensione si possono usare le due funzioni \funcd{truncate} e
   \errval{EROFS}, \errval{EIO}, \errval{EFAULT}, \errval{ELOOP}.}
 \end{functions}
 
-Emtrambe le funzioni fan sì che la dimensione del file sia troncata ad un
+Entrambe le funzioni fan sì che la dimensione del file sia troncata ad un
 valore massimo specificato da \param{length}, e si distinguono solo per il
-fatto che il file viene indicato con il pathame \param{file\_name} per
+fatto che il file viene indicato con il pathname \param{file\_name} per
 \func{truncate} e con il file descriptor \param{fd} per \funcd{ftruncate}; se
 il file è più lungo della lunghezza specificata i dati in eccesso saranno
 perduti.
@@ -1806,7 +1806,7 @@ lunghezza scelta; nel caso di Linux viene esteso con la creazione di un
 \index{file!\textit{hole}} \textsl{buco} nel \itindex{sparse~file} file e ad
 una lettura si otterranno degli zeri; si tenga presente però che questo
 comportamento è supportato solo per filesystem nativi, ad esempio su un
-filesystem non nativo come il VFAT di windows questo non è possibile.
+filesystem non nativo come il VFAT di Windows questo non è possibile.
 
 \subsection{I tempi dei file}
 \label{sec:file_file_times}
@@ -1996,7 +1996,7 @@ I tempi di ultimo accesso e modifica possono essere modificati esplicitamente
 usando la funzione \funcd{utime}, il cui prototipo è:
 \begin{prototype}{utime.h}
   {int utime(const char *filename, struct utimbuf *times)} 
-  Modidica i tempi di ultimo accesso e modifica di un file.
+  Modifica i tempi di ultimo accesso e modifica di un file.
 
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
     errore, nel qual caso \var{errno} assumerà uno dei valori:
@@ -2058,7 +2058,7 @@ precisione; il suo prototipo è:
 \begin{prototype}
   {sys/time.h}
   {int utimes(const char *filename, struct timeval times[2])} 
-  Modidica i tempi di ultimo accesso e modifica di un file.
+  Modifica i tempi di ultimo accesso e modifica di un file.
 
   \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
     errore, nel qual caso \var{errno} assumerà uno dei valori:
@@ -2709,7 +2709,7 @@ in particolare accade che:
 \end{enumerate}
 
 Per alcuni filesystem\footnote{i filesystem più comuni (\textsl{ext2},
-  \textsl{ext3}, \textsl{ext4}, \textsl{reiserfs}) supportano questa
+  \textsl{ext3}, \textsl{ext4}, \textsl{ReiserFS}) supportano questa
   caratteristica, che è mutuata da BSD.} è inoltre prevista un'ulteriore
 misura di sicurezza, volta a scongiurare l'abuso dei \itindex{suid~bit} bit
 \acr{suid} e \acr{sgid}; essa consiste nel cancellare automaticamente questi
@@ -4151,30 +4151,32 @@ ad un altra con \funcd{acl\_copy\_entry} o eliminare una voce da una ACL con
 \label{sec:disk_quota}
 
 Quella delle quote disco è una funzionalità introdotta inizialmente da BSD, e
-presente in Linux fino dalla serie 2.0, che consente di porre dei tetti
-massimi al consumo delle risorse di un filesystem (spazio disco e
-\textit{inode}) da parte degli utenti e dei 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 abilitata
-esplicitamente, questo si fa tramite due distinte opzioni di montaggio,
-\texttt{usrquota} e \texttt{grpquota} che la attivano rispettivamente per gli
-utenti e per i gruppi, cosa che consente di abilitare solo quelle che
-interessano veramente.
-
-Il meccanismo delle quote prevede che per ciascun filesystem che le supporta
+presente in Linux fino dai kernel dalla serie 2.0, che consente di porre dei
+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 esplicitamente richiesta;
+questo si fa tramite due distinte opzioni di montaggio, \texttt{usrquota} e
+\texttt{grpquota} che abilitano le quote rispettivamente per gli utenti e per
+i gruppi. Grazie a questo è possibile usare le limitazioni sulle quote solo
+sugli utenti o solo sui gruppi.
+
+Il meccanismo prevede che per ciascun filesystem che supporta le quote disco
 (i vari \textit{extN}, \textit{btrfs}, \textit{XFS}, \textit{JFS},
 \textit{ReiserFS}) il kernel provveda sia a mantenere aggiornati i dati
 relativi al consumo delle risorse da parte di utenti e/o gruppi che a far
-rispettare i limiti imposti dal sistema con la generazione di un errore di
+rispettare i limiti imposti dal sistema, con la generazione di un errore di
 \errval{EDQUOT} per tutte le operazioni sui file che porterebbero ad un
-superamento degli stessi. 
+superamento degli stessi. Si tenga presente che questi due compiti sono
+separati, il primo si attiva al montaggio del filesystem con le quote
+attivate, il secondo deve essere abilitato esplicitamente.
 
 Per il mantenimento dei dati di consumo delle risorse vengono usati due file
 riservati (uno per le quote utente e l'altro per le quote gruppo) nella
-directory radice del filesytem su cui si sono attivate le quote;\footnote{la
-  cosa vale per tutti i fileystem tranne \textit{XFS} che mantiene i dati
+directory radice del filesystem su cui si sono attivate le quote;\footnote{la
+  cosa vale per tutti i filesystem tranne \textit{XFS} che mantiene i dati
   internamente.} con la versione 2 del supporto delle quote, l'unica rimasta
 in uso, questi file sono \texttt{aquota.user} e \texttt{aquota.group}, in
 precedenza erano \texttt{quota.user} e \texttt{quota.group}. Dato che i file
@@ -4182,9 +4184,9 @@ vengono aggiornati soltanto se il filesystem è stato montato con il supporto
 delle quote, se si abilita questo in un secondo tempo (o se si eseguono
 operazioni sul filesystem senza averlo abilitato) i dati contenuti possono non
 corrispondere esattamente allo stato corrente del consumo delle risorse; per
-questo in genere prima di montare un filesystem su cui sono abilitate le quote
-viene utilizzato il comando \cmd{quotacheck} per verificare e aggiornare i
-dati.
+questo in genere prima di montare in scrittura un filesystem su cui sono
+abilitate le quote in genere viene utilizzato il comando \cmd{quotacheck} per
+verificare e aggiornare i dati.
 
 Le restrizioni sul consumo delle risorse prevedono due limiti, il primo viene
 detto \textit{soft limit} e può essere superato per brevi periodi di tempo, il
@@ -4202,28 +4204,28 @@ delle quote è \funcd{quotactl}, ed il suo prototipo è:
   \headdecl{sys/types.h} 
   \headdecl{sys/quota.h}
   
-  \funcdecl{quotactl(int cmd, const char *special, int id, caddr\_t addr)}
+  \funcdecl{quotactl(int cmd, const char *dev, int id, caddr\_t addr)}
 
   Esegue una operazione di controllo sulle quote disco.
 
   \bodydesc{La funzione restituisce $0$ in caso di successo e $-1$ in caso di
     errore, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
-  \item[\errcode{EACCES}] il file delle quote non è un file normale.
+  \item[\errcode{EACCES}] il file delle quote non è un file ordinario.
   \item[\errcode{EBUSY}] si è richiesto \const{Q\_QUOTAON} ma le quote sono
     già attive.
   \item[\errcode{EFAULT}] l'indirizzo \param{addr} non è valido.
   \item[\errcode{EIO}] errore di lettura/scrittura sul file delle quote.
-  \item[\errcode{EMFILE}] non si può aprire il file delle quote avando
+  \item[\errcode{EMFILE}] non si può aprire il file delle quote avendo
     superato il limite sul numero di file aperti nel sistema. 
   \item[\errcode{EINVAL}] o \param{cmd} non è un comando valido,
-    o il dispositivo \param{special} non esiste.
-  \item[\errcode{ENODEV}] \param{special} non corrisponde ad un \textit{mount
+    o il dispositivo \param{dev} non esiste.
+  \item[\errcode{ENODEV}] \param{dev} non corrisponde ad un \textit{mount
       point} attivo.
   \item[\errcode{ENOPKG}] il kernel è stato compilato senza supporto per le
     quote. 
-  \item[\errcode{ENOTBLK}] \param{special} non è un dispositivo a blocchi.
-  \item[\errcode{EPERM}] il .
+  \item[\errcode{ENOTBLK}] \param{dev} non è un dispositivo a blocchi.
+  \item[\errcode{EPERM}] non si hanno i permessi per l'operazione richiesta.
   \item[\errcode{ESRCH}] è stato richiesto uno fra \const{Q\_GETQUOTA},
     \const{Q\_SETQUOTA}, \const{Q\_SETUSE}, \const{Q\_SETQLIM} per un
     filesystem senza quote attivate.
@@ -4231,26 +4233,338 @@ delle quote è \funcd{quotactl}, ed il suo prototipo è:
 }
 \end{functions}
 
-La funzione richiede che si indichi il filesystem sul quale si vuole operare
-tramite il secondo argomento \param{special} che deve indicare il nome del
-file di dispositivo ad esso associato, la funzione richiede che il filesystem
-sia montato con il supporto per le quote. Il terzo argomento \param{id}
-indica, per le operazioni che lo richiedono l'utente o il gruppo (specificati
-rispettivamente per \acr{uid} e \acr{gid}) su cui si vuole operare, infine
-l'ultimo argomento specifica l'indirizzo di una struttura dati che dipende di
-nuovo dal comando. 
+La funzione richiede che il filesystem sul quale si vuole operare sia montato
+con il supporto delle quote abilitato; esso deve essere specificato con il
+nome del file di dispositivo nell'argomento \param{dev}. Per le operazioni che
+lo richiedono inoltre si dovrà indicare con l'argomento \param{id} l'utente o
+il gruppo (specificati rispettivamente per \acr{uid} e \acr{gid}) su cui si
+vuole operare. Alcune operazioni usano l'argomento \param{addr} per indicare
+un indirizzo ad un area di memoria il cui utilizzo dipende dall'operazione
+stessa.
+
+Il tipo di operazione che si intende effettuare deve essere indicato tramite
+il primo argomento \param{cmd}, questo in genere viene specificato con
+l'ausilio della macro \macro{QCMD}:
+\begin{functions}
+  \funcdecl{int QCMD(subcmd,type)} Imposta il comando \param{subcmd} per il
+  tipo di quote (utente o gruppo) \param{type}.
+\end{functions}
+\noindent che consente di specificare, oltre al tipo di operazione, se questa
+deve applicarsi alle quote utente o alle quote gruppo, nel qual
+caso \param{type} deve essere rispettivamente \const{USRQUOTA} o
+\const{GRPQUOTA}.
 
 
-Il funzionamento di \func{quotactl} è controllato dal valore del primo
-argomento, che indica l'operazione che si vuole eseguire e se la si vuole
-eseguire per le quote disco o le quote gruppo (posto che siano entrm
+\begin{table}[htb]
+  \centering
+  \footnotesize
+  \begin{tabular}{|l|p{10cm}|}
+    \hline
+    \textbf{Comando} & \textbf{Descrizione} \\
+    \hline
+    \hline
+    \const{Q\_QUOTAON}  & Attiva l'applicazione delle quote disco per il
+                          filesystem indicato da \param{dev}, si deve passare
+                          in \param{addr} il pathname al file che mantiene le
+                          quote, che deve esistere, e \param{id} deve indicare
+                          la versione del formato con uno dei valori di
+                          tab.~\ref{tab:quotactl_id_format}; l'operazione
+                          richiede i privilegi di amministratore.\\
+    \const{Q\_QUOTAOFF} & Disattiva l'applicazione delle quote disco per il
+                          filesystem indicato da \param{dev}, \param{id}
+                          e \param{addr} vengono ignorati; l'operazione
+                          richiede i privilegi di amministratore.\\  
+    \const{Q\_GETQUOTA} & Legge i limiti ed i valori correnti delle quote nel
+                          filesystem indicato da \param{dev} per l'utente o
+                          il gruppo specificato da \param{id}; si devono avere
+                          i privilegi di amministratore per leggere i dati
+                          relativi ad altri utenti o a gruppi di cui non si fa
+                          parte, il risultato viene restituito in una struttura
+                          \struct{dqblk} all'indirizzo indicato
+                          da \param{addr}.\\
+    \const{Q\_SETQUOTA} & Imposta i limiti per le quote nel filesystem
+                          indicato da \param{dev} per l'utente o il gruppo
+                          specificato da \param{id} secondo i valori ottenuti
+                          dalla struttura \struct{dqblk} puntata
+                          da \param{addr}; l'operazione richiede i privilegi
+                          di amministratore.\\ 
+    \const{Q\_GETINFO}  & Legge le informazioni (in sostanza i \textit{grace
+                            time}) delle quote del filesystem indicato
+                          da \param{dev} sulla struttura \struct{dqinfo} 
+                          puntata da \param{addr}, \param{id} viene ignorato.\\
+    \const{Q\_SETINFO}  & Imposta le informazioni delle quote del filesystem
+                          indicato da \param{dev} come ottenuti dalla
+                          struttura \struct{dqinfo} puntata
+                          da \param{addr}, \param{id} viene ignorato;  
+                          l'operazione richiede i privilegi di amministratore.\\
+    \const{Q\_GETFMT}   & Richiede il valore identificativo (quello di
+                          tab.~\ref{tab:quotactl_id_format}) per il formato
+                          delle quote attualmente in uso sul filesystem
+                          indicato da \param{dev}, che sarà memorizzato
+                          sul buffer di 4 byte puntato da \param{addr}.\\
+    \const{Q\_SYNC}     & Aggiorna la copia su disco dei dati delle quote del
+                          filesystem indicato da \param{dev}; in questo
+                          caso \param{dev} può anche essere \val{NULL} nel
+                          qual caso verranno aggiornati i dati per tutti i
+                          filesystem con quote attive, \param{id}
+                          e \param{addr} vengono comunque ignorati.\\ 
+    \const{Q\_GETSTATS} & Ottiene statistiche ed altre informazioni generali 
+                          relative al sistema delle quote per il filesystem
+                          indicato da \param{dev}, richiede che si
+                          passi come argomento \param{addr} l'indirizzo di una
+                          struttura \struct{dqstats}, mentre i valori
+                          di \param{id} e \param{dev} vengono ignorati;
+                          l'operazione è obsoleta e non supportata nei kernel
+                          più recenti, che espongono la stessa informazione
+                          nei file sotto \procfile{/proc/self/fs/quota/}.\\
+%    \const{} & .\\
+    \hline
+  \end{tabular}
+  \caption{Possibili valori per l'argomento \param{subcmd} di
+    \macro{QCMD}.} 
+  \label{tab:quotactl_commands}
+\end{table}
 
 
+Le diverse operazioni supportate da \func{quotactl}, da indicare con
+l'argomento \param{subcmd} di \macro{QCMD}, sono riportate in
+tab.~\ref{tab:quotactl_commands}. In generale le operazione di attivazione,
+disattivazione e di modifica dei limiti delle quote sono riservate e
+richiedono i privilegi di amministratore.\footnote{per essere precisi tutte le
+  operazioni indicate come privilegiate in tab.~\ref{tab:quotactl_commands}
+  richiedono la \textit{capability} \const{CAP\_SYS\_ADMIN}.} Inoltre gli
+utenti possono soltanto richiedere i dati relativi alle proprie quote, solo
+l'amministratore può ottenere i dati di tutti.
 
-% TODO trattare quote disco 
-% vedi man quotactl
+\begin{table}[htb]
+  \centering
+  \footnotesize
+  \begin{tabular}{|l|p{10cm}|}
+    \hline
+    \textbf{Identificatore} & \textbf{Descrizione} \\
+    \hline
+    \hline
+    \const{QFMT\_VFS\_OLD}& il vecchio (ed obsoleto) formato delle quote.\\
+    \const{QFMT\_VFS\_V0} & la versione 0 usata dal VFS di Linux (supporta
+                            \acr{uid} e \acr{gid} a 32 bit e limiti fino a
+                            $2^{42}$ byte e $2^{32}$ file.\\
+    \const{QFMT\_VFS\_V1} & la versione 1 usata dal VFS di Linux (supporta
+                            \acr{uid} e \acr{GID} a 32 bit e limiti fino a
+                            $2^{64}$ byte e $2^{64}$ file.\\
+    \hline
+  \end{tabular}
+  \caption{Valori di identificazione del formato delle quote.} 
+  \label{tab:quotactl_id_format}
+\end{table}
 
+Alcuni dei comandi di tab.~\ref{tab:quotactl_commands} sono alquanto complessi
+e richiedono un approfondimento maggiore, in particolare \const{Q\_GETQUOTA} e
+\const{Q\_SETQUOTA} fanno riferimento ad una specifica struttura
+\struct{dqblk}, la cui definizione è riportata in
+fig.~\ref{fig:dqblk_struct},\footnote{la definizione mostrata è quella usata
+  fino dal kernel 2.4.22, non prenderemo in considerazione le versioni
+  obsolete.} nella quale vengono inseriti i dati relativi alle quote di un
+singolo utente.
 
+\begin{figure}[!htb]
+  \footnotesize \centering
+  \begin{minipage}[c]{15cm}
+    \includestruct{listati/dqblk.h}
+  \end{minipage} 
+  \normalsize 
+  \caption{La struttura \structd{dqblk} per i dati delle quote disco.}
+  \label{fig:dqblk_struct}
+\end{figure}
+
+La struttura viene usata sia con \const{Q\_GETQUOTA} per ottenere i valori
+correnti dei limiti e dell'occupazione delle risorse, che con
+\const{Q\_SETQUOTA} per effettuare modifiche ai limiti; come si può notare ci
+sono alcuni campi (in sostanza \val{dqb\_curspace}, \val{dqb\_curinodes},
+\val{dqb\_btime}, \val{dqb\_itime}) che hanno senso solo in lettura in quanto
+riportano uno stato non modificabile da \func{quotactl}, come l'uso corrente
+di spazio e \textit{inode} o il tempo che resta nel caso si sia superato un
+\textit{soft limit}.
+
+\begin{table}[htb]
+  \centering
+  \footnotesize
+  \begin{tabular}{|l|p{10cm}|}
+    \hline
+    \textbf{Costante} & \textbf{Descrizione} \\
+    \hline
+    \hline
+    \const{QIF\_BLIMITS}& Limiti sui blocchi di 
+                          spazio disco (\val{dqb\_bhardlimit} e
+                          \val{dqb\_bsoftlimit}).\\
+    \const{QIF\_SPACE}  & Uso corrente
+                          dello spazio disco (\val{dqb\_curspace}).\\
+    \const{QIF\_ILIMITS}& Limiti sugli \textit{inode}
+                          (\val{dqb\_ihardlimit} e \val{dqb\_isoftlimit}).\\
+    \const{QIF\_INODES} & Uso corrente
+                          degli \textit{inode} (\val{dqb\_curinodes}).\\
+    \const{QIF\_BTIME}  & Tempo di
+                          sforamento del \textit{soft limit} sul numero di
+                          blocchi (\val{dqb\_btime}).\\
+    \const{QIF\_ITIME}  & Tempo di
+                          sforamento del \textit{soft limit} sul numero di
+                          \textit{inode} (\val{dqb\_itime}).\\ 
+    \const{QIF\_LIMITS} & L'insieme di \const{QIF\_BLIMITS} e
+                          \const{QIF\_ILIMITS}.\\
+    \const{QIF\_USAGE}  & L'insieme di \const{QIF\_SPACE} e
+                          \const{QIF\_INODES}.\\
+    \const{QIF\_TIMES}  & L'insieme di \const{QIF\_BTIME} e
+                          \const{QIF\_ITIME}.\\ 
+    \const{QIF\_ALL}    & Tutti i precedenti.\\
+    \hline
+  \end{tabular}
+  \caption{Costanti per il campo \val{dqb\_valid} di \struct{dqblk}.} 
+  \label{tab:quotactl_qif_const}
+\end{table}
+
+
+Inoltre in caso di modifica di un limite si può voler operare solo su una
+delle risorse (blocchi o \textit{inode});\footnote{non è possibile modificare
+  soltanto uno dei limiti (\textit{hard} o \textit{soft}) occorre sempre
+  rispecificarli entrambi.} per questo la struttura prevede un campo apposito,
+\val{dqb\_valid}, il cui scopo è quello di indicare quali sono gli altri campi
+che devono essere considerati validi. Questo campo è una maschera binaria che
+deve essere espressa nei termini di OR aritmetico delle apposite costanti di
+tab.~\ref{tab:quotactl_qif_const}, dove si è riportato il significato di
+ciascuna di esse ed i campi a cui fanno riferimento.
+
+In lettura con \const{Q\_SETQUOTA} eventuali valori presenti in \struct{dqblk}
+vengono comunque ignorati, al momento la funzione sovrascrive tutti i campi e
+li marca come validi in \val{dqb\_valid}. Si possono invece usare
+\const{QIF\_BLIMITS} o \const{QIF\_ILIMITS} per richiedere di impostare solo
+la rispettiva tipologia di limiti con \const{Q\_SETQUOTA}. Si tenga presente
+che il sistema delle quote richiede che l'occupazione di spazio disco sia
+indicata in termini di blocchi e non di byte; dato che questo dipende da come
+si è creato il filesystem potrà essere necessario effettuare qualche
+controllo.\footnote{in genere viene usato un default di 1024 byte per blocco,
+  ma quando si hanno file di dimensioni medie maggiori può convenire usare
+  valori più alti per ottenere prestazioni migliori in conseguenza di un
+  minore frazionamento dei dati e di indici più corti.}
+
+Altre due operazioni che necessitano di un approfondimento sono
+\const{Q\_GETINFO} e \const{Q\_SETINFO}, che sostanzialmente consentono di
+ottenere i dati relativi alle impostazioni delle altre proprietà delle quote,
+che si riducono poi alla durata del \textit{grace time} per i due tipi di
+limiti. In questo caso queste si proprietà generali sono identiche per tutti
+gli utenti, per cui viene usata una operazione distinta dalle
+precedenti. Anche in questo caso le due operazioni richiedono l'uso di una
+apposita struttura \struct{dqinfo}, la cui definizione è riportata in
+fig.~\ref{fig:dqinfo_struct}.
+
+\begin{figure}[!htb]
+  \footnotesize \centering
+  \begin{minipage}[c]{15cm}
+    \includestruct{listati/dqinfo.h}
+  \end{minipage} 
+  \normalsize 
+  \caption{La struttura \structd{dqinfo} per i dati delle quote disco.}
+  \label{fig:dqinfo_struct}
+\end{figure}
+
+Come per \struct{dqblk} anche in questo caso viene usato un campo della
+struttura, \val{dqi\_valid} come maschera binaria per dichiarare quale degli
+altri campi sono validi; le costanti usate per comporre questo valore sono
+riportate in tab.~\ref{tab:quotactl_iif_const} dove si è riportato il
+significato di ciascuna di esse ed i campi a cui fanno riferimento.
+
+\begin{table}[htb]
+  \centering
+  \footnotesize
+  \begin{tabular}{|l|l|}
+    \hline
+    \textbf{Costante} & \textbf{Descrizione} \\
+    \hline
+    \hline
+    \const{IIF\_BGRACE}& Il \textit{grace period} per i blocchi
+                         (\val{dqi\_bgrace}).\\
+    \const{IIF\_IGRACE}& Il \textit{grace period} per gli \textit{inode} 
+                         (\val{dqi\_igrace}).\\ 
+    \const{IIF\_FLAGS} & I flag delle quote (\val{dqi\_flags}) (inusato ?).\\
+    \const{IIF\_ALL}   & Tutti i precedenti.\\
+    \hline
+  \end{tabular}
+  \caption{Costanti per il campo \val{dqi\_valid} di \struct{dqinfo}.} 
+  \label{tab:quotactl_iif_const}
+\end{table}
+
+Come in precedenza con \const{Q\_GETINFO} tutti i valori vengono letti
+sovrascrivendo il contenuto di \struct{dqinfo} e marcati come validi in
+\val{dqi\_valid}. In scrittura con \const{Q\_SETINFO} si può scegliere quali
+impostare, si tenga presente che i tempi dei campi \val{dqi\_bgrace} e
+\val{dqi\_igrace} devono essere specificati in secondi.
+
+Come esempi dell'uso di \func{quotactl} utilizzeremo estratti del codice di un
+modulo Python usato per fornire una interfaccia diretta a \func{quotactl}
+senza dover passare dalla scansione dei risultati di un comando. Il modulo si
+trova fra i pacchetti Debian messi a disposizione da Truelite Srl,
+all'indirizzo \url{http://labs.truelite.it/projects/packages}.\footnote{in
+  particolare il codice C del modulo è nel file \texttt{quotamodule.c}
+  visionabile a partire dall'indirizzo indicato nella sezione
+  \textit{Repository}.}
+
+\begin{figure}[!htb]
+  \footnotesize \centering
+  \begin{minipage}[c]{15.6cm}
+    \includecodesample{listati/get_quota.c}
+  \end{minipage}
+  \caption{Esempio di codice per ottenere i dati delle quote.} 
+  \label{fig:get_quota}
+\end{figure}
+
+Il primo esempio, riportato in fig.~\ref{fig:get_quota}, riporta il codice
+della funzione che consente di leggere le quote. La funzione fa uso
+dell'interfaccia dal C verso Python, che definisce i vari simboli \texttt{Py*}
+(tipi di dato e funzioni). Non staremo ad approfondire i dettagli di questa
+interfaccia, per la quale esistono numerose trattazioni dettagliate, ci
+interessa solo esaminare l'uso di \func{quotactl}. 
+
+In questo caso la funzione prende come argomenti (\texttt{\small 1}) l'intero
+\texttt{who} che indica se si vuole operare sulle quote utente o gruppo,
+l'identificatore \texttt{id} dell'utente o del gruppo scelto, ed il nome del
+file di dispositivo del filesystem su cui si sono attivate le
+quote.\footnote{questi vengono passati come argomenti dalle funzioni mappate
+  come interfaccia pubblica del modulo (una per gruppi ed una per gli utenti)
+  che si incaricano di decodificare i dati passati da una chiamata nel codice
+  Python.} Questi argomenti vengono passati direttamente alla chiamata a
+\func{quotactl} (\texttt{\small 5}), a parte \texttt{who} che viene abbinato
+con \macro{QCMD} al comando \const{Q\_GETQUOTA} per ottenere i dati.
+
+La funzione viene eseguita all'interno di un condizionale (\texttt{\small
+  5--16}) che in caso di successo provvede a costruire (\texttt{\small 6--12})
+opportunamente una risposta restituendo tramite la opportuna funzione di
+interfaccia un oggetto Python contenente i dati della struttura \struct{dqblk}
+relativi a uso corrente e limiti sia per i blocchi che per gli
+\textit{inode}. In caso di errore (\texttt{\small 13--15}) si usa un'altra
+funzione dell'interfaccia per passare il valore di \var{errno} come eccezione.
+
+\begin{figure}[!htb]
+  \footnotesize \centering
+  \begin{minipage}[c]{15.6cm}
+    \includecodesample{listati/set_block_quota.c}
+  \end{minipage}
+  \caption{Esempio di codice per impostare i limiti sullo spazio disco.}
+  \label{fig:set_block_quota}
+\end{figure}
+
+Per impostare i limiti sullo spazio disco si potrà usare una seconda funzione,
+riportata in fig.~\ref{fig:set_block_quota}, che prende gli stessi argomenti
+della precedente, con lo stesso significato, a cui si aggiungono i valori per
+il \textit{soft limit} e l'\textit{hard limit}. In questo caso occorrerà,
+prima di chiamare \func{quotactl}, inizializzare opportunamente
+(\texttt{\small 5--7}) i campi della struttura \struct{dqblk} che si vogliono
+utilizzare (quelli relativi ai limiti sui blocchi) e specificare gli stessi
+con \const{QIF\_BLIMITS} in \var{dq.dqb\_valid}. 
+
+Fatto questo la chiamata a \func{quotactl}, stavolta con il comando
+\const{Q\_SETQUOTA}, viene eseguita come in precedenza all'interno di un
+condizionale (\texttt{\small 9--14}). In questo caso non essendovi da
+restituire nessun dato in caso di successo si usa (\texttt{\small 10}) una
+apposita funzione di uscita, mentre si restituisce come prima una eccezione
+con il valore di \var{errno} in caso di errore (\texttt{\small 12--13}).
 
 
 \subsection{La gestione delle \textit{capabilities}}
@@ -4291,21 +4605,21 @@ Il meccanismo completo delle \textit{capabilities}\footnote{l'implementazione
   si rifà ad una bozza di quello che doveva diventare lo standard POSIX.1e,
   poi abbandonato.} prevede inoltre la possibilità di associare le stesse ai
 singoli file eseguibili, in modo da poter stabilire quali capacità possono
-essere utilizzate quando viene messo in esecuzione uno specifico programma
-(una sorta di \acr{suid} anch'esso parcellizzato); ma il supporto per questa
-funzionalità, chiamata \textit{file capabilities}, è stato introdotto soltanto
-a partire dal kernel 2.6.24. Fino ad allora doveva essere il programma stesso
-ad eseguire una riduzione esplicita delle sue capacità, cosa che ha reso l'uso
-di questa funzionalità poco diffuso, vista la presenza di meccanismi
-alternativi per ottenere limitazioni delle capacità dell'amministratore a
-livello di sistema operativo, come \index{SELinux} SELinux.
+essere utilizzate quando viene messo in esecuzione uno specifico programma; ma
+il supporto per questa funzionalità, chiamata \textit{file capabilities}, è
+stato introdotto soltanto a partire dal kernel 2.6.24. Fino ad allora doveva
+essere il programma stesso ad eseguire una riduzione esplicita delle sue
+capacità, cosa che ha reso l'uso di questa funzionalità poco diffuso, vista la
+presenza di meccanismi alternativi per ottenere limitazioni delle capacità
+dell'amministratore a livello di sistema operativo, come \index{SELinux}
+SELinux.
 
 Con questo supporto e con le ulteriori modifiche introdotte con il kernel
 2.6.25 il meccanismo delle \textit{capabilities} è stato totalmente
-rivoluzionato, rendendolo più aderente alle intezioni originali dello standard
-POSIX, rimovendo il significato che fino ad allora aveva avuto la capacità
-\macro{CAP\_SETPCAP} e le modalità di funzionamento del cosiddetto
-\itindex{capabilities~bounding~set} \textit{capabilities bounding
+rivoluzionato, rendendolo più aderente alle intenzioni originali dello
+standard POSIX, rimuovendo il significato che fino ad allora aveva avuto la
+capacità \macro{CAP\_SETPCAP} e cambiando le modalità di funzionamento del
+cosiddetto \itindex{capabilities~bounding~set} \textit{capabilities bounding
   set}. Ulteriori modifiche sono state apportate con il kernel 2.6.26 per
 consentire la rimozione non ripristinabile dei privilegi di
 amministratore. Questo fa sì che il significato ed il comportamento del kernel
@@ -4333,7 +4647,7 @@ L'utilizzo di tre distinti insiemi serve a fornire una interfaccia flessibile
 per l'uso delle \textit{capabilities}, con scopi analoghi a quelli per cui
 sono mantenuti i diversi insiemi di identificatori di
 sez.~\ref{sec:proc_setuid}; il loro significato, che è rimasto sostanzialmente
-lo stesso anche dopo le modifiche seguite alla instroduzione delle
+lo stesso anche dopo le modifiche seguite alla introduzione delle
 \textit{file capabilities} è il seguente:
 \begin{basedescript}{\desclabelwidth{2.1cm}\desclabelstyle{\nextlinelabel}}
 \item[\textit{permitted}] l'insieme delle \textit{capabilities}
@@ -4363,9 +4677,10 @@ altri tre insiemi associabili a ciascun file.\footnote{la realizzazione viene
   \macro{CAP\_SYS\_ADMIN}.} Le \textit{file capabilities} hanno effetto
 soltanto quando il file che le porta viene eseguito come programma con una
 \func{exec}, e forniscono un meccanismo che consente l'esecuzione dello stesso
-con maggiori privilegi; in sostanza sono una sorta di estensione dell'uso del
-\acr{suid} di root.  Anche questi tre insiemi sono identicati con gli stessi
-nomi, ma il loro significato è diverso:
+con maggiori privilegi; in sostanza sono una sorta di estensione del
+\acr{suid} bit limitato ai privilegi di amministratore. Anche questi tre
+insiemi sono identificati con gli stessi nomi di quello dei processi, ma il
+loro significato è diverso:
 \begin{basedescript}{\desclabelwidth{2.1cm}\desclabelstyle{\nextlinelabel}}
 \item[\textit{permitted}] (chiamato originariamente \textit{forced}) l'insieme
   delle capacità che con l'esecuzione del programma verranno aggiunte alle
@@ -4413,7 +4728,7 @@ non sarà più disponibile per nessun processo a meno di un riavvio, eliminando
 così in forma definitiva quella capacità per tutti, compreso
 l'amministratore.\footnote{la qual cosa, visto il default usato per il
   \textit{capabilities bounding set}, significa anche che \const{CAP\_SETPCAP}
-  non è stata praticamente mai usata nella sua forma orginale.}
+  non è stata praticamente mai usata nella sua forma originale.}
 
 Con il kernel 2.6.25 e le \textit{file capabilities} il \textit{bounding set}
 è diventato una proprietà di ciascun processo, che viene propagata invariata
@@ -4427,14 +4742,14 @@ ruolo analogo al precedente nel passaggio attraverso una \func{exec}, come
 limite alle capacità che possono essere aggiunte al processo in quanto
 presenti nel \textit{permitted set} del programma messo in esecuzione, in
 sostanza il nuovo programma eseguito potrà ricevere una capacità presente nel
-suo \textit{permitted set} solo se questa è anche nel \textit{bounding
-  set}. In questo modo si possono rimuovere definitivamente certe capacità da
-un processo, anche qualora questo dovesse eseguire un programma
-privilegiato. 
+suo \textit{permitted set} (quello del file) solo se questa è anche nel
+\textit{bounding set} (del processo). In questo modo si possono rimuovere
+definitivamente certe capacità da un processo, anche qualora questo dovesse
+eseguire un programma privilegiato che prevede di riassegnarle.
 
 Si tenga presente però che in questo caso il \textit{bounding set} blocca
 esclusivamente le capacità indicate nel \textit{permitted set} del programma
-che verrebbero attivate in caso di esecuzione, non quelle eventualmente già
+che verrebbero attivate in caso di esecuzione, non quelle eventualmente già
 presenti nell'\textit{inheritable set} del processo (ad esempio perché
 presenti prima di averle rimosse dal \textit{bounding set}). In questo caso
 eseguendo un programma che abbia anche lui dette capacità nel suo
@@ -4442,26 +4757,70 @@ eseguendo un programma che abbia anche lui dette capacità nel suo
 
 In questa seconda versione inoltre il \textit{bounding set} costituisce anche
 un limite per le capacità che possono essere aggiunte all'\textit{inheritable
-  set} del processo con \func{capset}, sempre nel senso che queste devono
-essere presenti nel \textit{bounding set} oltre che nel \textit{permitted set}
-del processo.
-\itindend{capabilities~bounding~set}
+  set} del processo stesso con \func{capset}, sempre nel senso che queste
+devono essere presenti nel \textit{bounding set} oltre che nel
+\textit{permitted set} del processo. Questo limite vale anche per processi con
+i privilegi di amministratore,\footnote{si tratta sempre di avere la
+  \textit{capability} \const{CAP\_SETPCAP}.} per i quali non vale la
+condizione che le \textit{capabilities} da aggiungere nell'\textit{inheritable
+  set} debbano essere presenti nel proprio \textit{permitted set}.\footnote{lo
+  scopo anche in questo caso è ottenere una rimozione definitiva della
+  possibilità di passare una capacità rimossa dal \textit{bounding set}.}
+
 Come si può notare per fare ricorso alle \textit{capabilities} occorre
 comunque farsi carico di una notevole complessità di gestione, aggravata dalla
 presenza di una radicale modifica del loro funzionamento con l'introduzione
 delle \textit{file capabilities}. Considerato che il meccanismo originale era
 incompleto e decisamente problematico nel caso di programmi che non ne
-sappiano tener conto,\footnote{si ebbe un grosso problema di sicurezza con
-  \texttt{sendmail}, riuscendo a rimuovere \const{CAP\_SETGID}
-  dall'\textit{inheritable set} si ottenne di far fallire una \func{setuid},
-  in maniera inaspettata per il programma (che aspettandosi il successo della
-  funzione non ne controllava lo stato di uscita) con la conseguenza di
-  effettuare come amministratore operazioni che altrimenti sarebbero state
-  eseguite, senza poter apportare danni, da utente normale.}  ci soffermeremo
-solo sulla implementazione completa presente a partire dal kernel 2.6.25,
-tralasciando ulteriori dettagli riguardo la versione precedente.
+sappessero tener conto,\footnote{si ebbe un grosso problema di sicurezza con
+  \texttt{sendmail}: riuscendo a rimuovere \const{CAP\_SETGID}
+  dall'\textit{inheritable set} di un processo si ottenne di far fallire
+  \func{setuid} in maniera inaspettata per il programma (che aspettandosi
+  sempre il successo della funzione non ne controllava lo stato di uscita) con
+  la conseguenza di effettuare come amministratore operazioni che altrimenti
+  sarebbero state eseguite, senza poter apportare danni, da utente normale.}
+ci soffermeremo solo sulla implementazione completa presente a partire dal
+kernel 2.6.25, tralasciando ulteriori dettagli riguardo la versione
+precedente.
+
+Riassumendo le regole finora illustrate tutte le \textit{capabilities} vengono
+ereditate senza modifiche attraverso una \func{fork} mentre, indicati con
+\texttt{orig\_*} i valori degli insiemi del processo chiamante, con
+\texttt{file\_*} quelli del file eseguito e con \texttt{bound\_set} il
+\textit{capabilities bounding set}, dopo l'invocazione di \func{exec} il
+processo otterrà dei nuovi insiemi di capacità \texttt{new\_*} secondo la
+formula (espressa in pseudocodice C) di fig.~\ref{fig:cap_across_exec}; si
+noti come in particolare il \textit{capabilities bounding set} non viene
+comunque modificato e resta lo stesso sia attraverso una \func{fork} che
+attraverso una \func{exec}.
+
+\begin{figure}[!htb]
+  \footnotesize \centering
+  \begin{minipage}[c]{12cm}
+    \includecodesnip{listati/cap-results.c}
+  \end{minipage}
+  \caption{Espressione della modifica delle \textit{capabilities} attraverso
+    una \func{exec}.}
+  \label{fig:cap_across_exec}
+\end{figure}
+
+\itindend{capabilities~bounding~set}
+
+A queste regole se ne aggiungono delle altre che servono a riprodurre il
+comportamento tradizionale di un sistema unix-like quando viene eseguito un
+file senza \textit{capabilities}, se si applicassero sempre così infatti, non
+essendo definite delle capacità né nel \textit{permitted set} né
+nell'\textit{inheritable set} del file, anche l'amministratore perderebbe
+tutti i privilegi eventualmente avuti dal processo.
+
+Per questo motivo se un programma senza \textit{capabilities} viene eseguito
+da un processo con \textit{real user-ID} 0, o se ha attivo il \acr{suid} bit
+ed appartiene all'amministratore, esso viene trattato come se tanto il
+\textit{permitted set} che l'\textit{inheritable set} fossero con tutte le
+\textit{capabilities} abilitate, e con l'\textit{effective set} attivo, col
+risultato di fornire comunque al processo tutte le capacità presenti nel
+proprio \textit{bounding set}.
+
 
 
 
@@ -4476,8 +4835,7 @@ ottiene tutte le \textit{capabilities} presenti nel \textit{capabilities
   bounding set}. In questo modo si può far si che ad un processo eseguito in
 un secondo tempo possano essere trasmesse solo un insieme limitato di
 capacità, impedendogli di recuperare quelle assenti nell'insieme
-\textit{inherited}. Si tenga presente invece che attraverso una \func{fork}
-vengono mantenute le stesse capacità del processo padre.
+\textit{inherited}. 
 
 
 % TODO verificare per process capability bounding set, vedi:
@@ -4617,10 +4975,10 @@ che è opportuno dettagliare maggiormente.
                               sez.~\ref{sec:sys_bsd_accounting}).\\ 
     \const{CAP\_SYS\_PTRACE}& La capacità di tracciare qualunque processo con
                               \func{ptrace} (vedi 
-                              sez.~\ref{sec:xxx_ptrace}).\\
+                              sez.~\ref{sec:process_ptrace}).\\
     \const{CAP\_SYS\_RAWIO} & La capacità di operare sulle porte
                               di I/O con \func{ioperm} e \func{iopl} (vedi
-                              sez.~\ref{sec:file_io_port}).\\
+                              sez.~\ref{sec:process_io_port}).\\
     \const{CAP\_SYS\_RESOURCE}& La capacità di superare le varie limitazioni
                               sulle risorse.\\ 
     \const{CAP\_SYS\_TIME}  & La capacità di modificare il tempo di sistema
@@ -4706,9 +5064,8 @@ assegnare classi privilegiate per lo scheduling dell'I/O (vedi
 sez.~\ref{sec:io_priority}), superare il limite di sistema sul numero massimo
 di file aperti,\footnote{quello indicato da \procfile{/proc/sys/fs/file-max}.}
 effettuare operazioni privilegiate sulle chiavi mantenute dal kernel (vedi
-sez.~\ref{sec:io_priority}), usare la funzione \func{lookup\_dcookie} (vedi
-sez.~\ref{sec:xxx_profiling}), usare \const{CLONE\_NEWNS} con \func{unshare},
-(vedi sez.~\ref{sec:process_clone}).
+sez.~\ref{sec:io_priority}), usare la funzione \func{lookup\_dcookie}, usare
+\const{CLONE\_NEWNS} con \func{unshare}, (vedi sez.~\ref{sec:process_clone}).
 
 Originariamente \const{CAP\_SYS\_NICE} riguardava soltanto la capacità di
 aumentare le priorità di esecuzione dei processi, come la diminuzione del
@@ -4731,7 +5088,7 @@ messaggi delle code del SysV IPC (vedi sez.~\ref{sec:ipc_sysv_mq}).
 
 Questo modo di intendere ... da fare ...  per cui
 a partire dal 2.6.24/5 è divenuta quella di impostare una capacità del
-\textit{bounding set} nelle proprie \textit{inheritable} o rimoverla dal
+\textit{bounding set} nelle proprie \textit{inheritable} o rimuoverla dal
 \textit{bounding set} stesso.
 
 Per la gestione delle \textit{capabilities} il kernel mette a disposizione due
@@ -5158,14 +5515,14 @@ funzione.
 
 % TODO vedi http://lwn.net/Articles/198557/ e 
 % http://www.madore.org/~david/linux/newcaps/
-% TODO documentare prctl ...
+
 
 
 \subsection{La funzione \func{chroot}}
 \label{sec:file_chroot}
 
 % TODO introdurre nuova sezione sulle funzionalità di sicurezza avanzate, con
-% dentro chroot SELinux e AppArmor ???
+% dentro chroot SELinux e AppArmor, Tomoyo, Smack, cgroup o che altro ???
 
 Benché non abbia niente a che fare con permessi, utenti e gruppi, la funzione
 \func{chroot} viene usata spesso per restringere le capacità di accesso di un
@@ -5261,15 +5618,15 @@ programmi e librerie) di cui il server potrebbe avere bisogno.
 % LocalWords:  int const char oldpath newpath errno EXDEV EPERM st Smack SysV
 % LocalWords:  EEXIST EMLINK EACCES ENAMETOOLONG ENOTDIR EFAULT ENOMEM EROFS ls
 % LocalWords:  ELOOP ENOSPC EIO pathname nlink stat vfat fsck EISDIR ENOENT cap
-% LocalWords:  POSIX socket fifo sticky root system call count crash nell' init
+% LocalWords:  POSIX socket fifo sticky root system call count crash init linux
 % LocalWords:  descriptor remove rename rmdir stdio glibc libc NFS DT obj dup
 % LocalWords:  ENOTEMPTY EBUSY mount point EINVAL soft symbolic tab symlink fig
 % LocalWords:  dangling access chdir chmod chown creat exec lchown lstat mkdir
 % LocalWords:  mkfifo mknod opendir pathconf readlink truncate path buff size
-% LocalWords:  grub bootloader grep linux MAXSYMLINKS cat VFS sys dirname fcntl
+% LocalWords:  grub bootloader grep MAXSYMLINKS cat VFS sys dirname fcntl tv Py
 % LocalWords:  dev umask IFREG IFBLK IFCHR IFIFO SVr sgid BSD SVID NULL from to
 % LocalWords:  stream dirent EMFILE ENFILE dirfd SOURCE fchdir readdir struct
-% LocalWords:  EBADF namlen HAVE thread entry result value argument fileno ino
+% LocalWords:  EBADF namlen HAVE thread entry result value argument fileno ext
 % LocalWords:  name TYPE OFF RECLEN UNKNOWN REG SOCK CHR BLK type IFTODT DTTOIF
 % LocalWords:  DTYPE off reclen seekdir telldir void rewinddir closedir select
 % LocalWords:  namelist compar malloc qsort alphasort versionsort strcoll myls
@@ -5279,21 +5636,21 @@ programmi e librerie) di cui il server potrebbe avere bisogno.
 % LocalWords:  EINTR mktemp mkstemp stlib template filename XXXXXX OpenBSD buf
 % LocalWords:  mkdtemp fstat filedes nell'header padding ISREG ISDIR ISCHR IFMT
 % LocalWords:  ISBLK ISFIFO ISLNK ISSOCK IFSOCK IFLNK IFDIR ISUID UID ISGID GID
-% LocalWords:  ISVTX IRUSR IWUSR IXUSR IRGRP IWGRP IXGRP IROTH IWOTH IXOTH du
-% LocalWords:  blocks blksize holes lseek TRUNC ftruncate length lenght ETXTBSY
+% LocalWords:  ISVTX IRUSR IWUSR IXUSR IRGRP IWGRP IXGRP IROTH IWOTH IXOTH  OLD
+% LocalWords:  blocks blksize holes lseek TRUNC ftruncate ETXTBSY length QCMD
 % LocalWords:  hole atime read utime mtime write ctime modification leafnode cp
 % LocalWords:  make fchmod fchown utimbuf times actime modtime Mac owner uid fs
 % LocalWords:  gid Control List patch mandatory control execute group other all
-% LocalWords:  dell' effective passwd IGID locking swap saved text IRWXU IRWXG
-% LocalWords:  IRWXO ext reiser capability FSETID mask capabilities chroot jail
-% LocalWords:  FTP Di filter reiserfs Attributes Solaris FreeBSD libacl hash
+% LocalWords:  effective passwd IGID locking swap saved text IRWXU IRWXG subcmd
+% LocalWords:  IRWXO capability FSETID mask capabilities chroot jail QUOTAOFF
+% LocalWords:  FTP filter Attributes Solaris FreeBSD libacl hash at dqblk SYNC
 % LocalWords:  XFS SELinux namespace attribute security trusted Draft Modules
 % LocalWords:  attributes mime ADMIN FOWNER libattr lattr getxattr lgetxattr of
 % LocalWords:  fgetxattr attr ssize ENOATTR ENOTSUP NUL setxattr lsetxattr list
 % LocalWords:  fsetxattr flags XATTR REPLACE listxattr llistxattr flistxattr by
-% LocalWords:  removexattr lremovexattr fremovexattr attributename lacl acl tv
+% LocalWords:  removexattr lremovexattr fremovexattr attributename acl GETINFO
 % LocalWords:  OBJ setfacl len any prefix separator options NUMERIC IDS SMART
-% LocalWords:  INDENT major number IDE Documentation makedev proc copy
+% LocalWords:  INDENT major number IDE Documentation makedev proc copy LNK long
 % LocalWords:  euidaccess eaccess delete def tag qualifier permset calendar NOW
 % LocalWords:  mutt noatime relatime strictatime atim nsec mtim ctim atimensec
 % LocalWords:  mtimensec utimes timeval futimes lutimes ENOSYS futimens OMIT
@@ -5302,12 +5659,20 @@ programmi e librerie) di cui il server potrebbe avere bisogno.
 % LocalWords:  setresuid setfsuid IMMUTABLE immutable append only BIND SERVICE
 % LocalWords:  BROADCAST broadcast multicast multicasting RAW PACKET IPC LOCK
 % LocalWords:  memory mlock mlockall shmctl mmap MODULE RAWIO ioperm iopl PACCT
-% LocalWords:  PTRACE ptrace accounting NICE RESOURCE TTY CONFIG hangup vhangup
+% LocalWords:  ptrace accounting NICE RESOURCE TTY CONFIG hangup vhangup
 % LocalWords:  LEASE lease SETFCAP AUDIT permitted inherited inheritable AND
 % LocalWords:  bounding execve fork capget capset header hdrp datap ESRCH undef
 % LocalWords:  version libcap lcap clear ncap caps pag capgetp CapInh CapPrm
-% LocalWords:  fffffeff CapEff getcap dell'IPC scheduling dell'I lookup dcookie
+% LocalWords:  fffffeff CapEff getcap scheduling lookup  dqinfo SETINFO GETFMT
 % LocalWords:  NEWNS unshare nice NUMA ioctl journaling close XOPEN fdopendir
+% LocalWords:  btrfs mkostemp extN ReiserFS JFS Posix usrquota grpquota EDQUOT
+% LocalWords:  aquota quotacheck limit grace period quotactl cmd caddr addr dqb
+% LocalWords:  QUOTAON ENODEV ENOPKG ENOTBLK GETQUOTA SETQUOTA SETUSE SETQLIM
+% LocalWords:  forced allowed sendmail SYSLOG WAKE ALARM CLOCK BOOTTIME dqstats
+% LocalWords:  REALTIME securebits GETSTATS QFMT curspace curinodes btime itime
+% LocalWords:  QIF BLIMITS bhardlimit bsoftlimit ILIMITS ihardlimit isoftlimit
+% LocalWords:  INODES LIMITS USAGE valid dqi IIF BGRACE bgrace IGRACE igrace
+% LocalWords:  Python Truelite Srl quotamodule Repository who
 
 %%% Local Variables: 
 %%% mode: latex