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
 %%
 %% 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}
 
     \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
 \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}
 
     \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
 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}
 
   \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
 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.
 \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
 \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}
 
 \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)} 
 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:
 
   \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])} 
 \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:
 
   \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},
 \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
   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
 \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
 (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
 \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
 
 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
   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
 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
 
 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}
   
   \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}
 
   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{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,
     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. 
       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.
   \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}
 
 }
 \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}}
 
 
 \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
   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
 
 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
   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
 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}
 \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
   \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
 \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}
 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
 
 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
 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
 
 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
 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
 
 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
 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
   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:
 
 
 % 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: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
     \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
     \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}), 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
 
 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
 
 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
 \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 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
 
 
 \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
 
 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:  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:  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:  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
 % 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:  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:  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:  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:  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
 % 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:  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:  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:  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
 
 %%% Local Variables: 
 %%% mode: latex