Correzioni
[gapil.git] / filedir.tex
index cdbb7c1c5a8647781b9dbaf5cf27c900371479a5..d8ac1181d9411208dcb454994907380b8bc19b12 100644 (file)
@@ -3637,13 +3637,12 @@ sui tre tempi. Il comando \cmd{ls} (quando usato con le opzioni \cmd{-l} o
 \cmd{-t}) mostra i tempi dei file secondo lo schema riportato nell'ultima
 colonna di tab.~\ref{tab:file_file_times}. Si noti anche come in
 tab.~\ref{tab:file_file_times} non venga riportato il \textsl{tempo di
-  creazione} di un file. In un sistema unix-like infatti questo tempo
-tradizionalmente non esiste, e non è previsto dall'interfaccia classica, ma è
-usato da altri sistemi operativi (in particolare Windows) per cui in tutti i
-filesystem più recenti ne viene supportata la registrazione, ed a partire dal
-kernel 4.11 è divento possibile anche ottenerne la lettura con la nuova
-\textit{system call} \func{statx} (che tratteremo in
-sez.~\ref{sec:file_openat}).
+  creazione} di un file; in un sistema unix-like infatti questo non esiste, e
+non è previsto dall'interfaccia classica, ma essendo usato da altri sistemi
+operativi (in particolare Windows) in tutti i filesystem più recenti ne viene
+supportata la registrazione, ed a partire dal kernel 4.11 è diventato
+possibile anche ottenerne la lettura con la nuova \textit{system call}
+\func{statx} (che tratteremo in sez.~\ref{sec:file_openat}).
 
 L'aggiornamento del tempo di ultimo accesso è stato a lungo considerato un
 difetto progettuale di Unix, questo infatti comporta la necessità di
@@ -3893,8 +3892,6 @@ puntatore nullo di nuovo verrà utilizzato il tempo corrente.
 \end{figure}
 
 
-
-
 Oltre ad \func{utimes} su Linux sono presenti altre due funzioni per la
 manipolazione dei tempi dei file,\footnote{le due funzioni non sono definite
   in nessuno standard, ma sono presenti, oltre che su Linux, anche su BSD;
@@ -3936,60 +3933,48 @@ collegamento simbolico; il suo prototipo è:
 Le due funzioni hanno lo stesso comportamento di \texttt{utimes} e richiedono
 gli stessi privilegi per poter operare, la differenza è che con \func{futimes}
 si può indicare il file su cui operare se questo è già aperto facendo
-riferimento al suo file descriptor, mentre con \func{lutimes} nel caso in
-cui \param{filename} sia un collegamento simbolico saranno modificati i suoi
+riferimento al suo file descriptor, mentre con \func{lutimes}, nel caso in cui
+\param{filename} sia un collegamento simbolico, saranno modificati i suoi
 tempi invece di quelli del file a cui esso punta.
 
 Nonostante il kernel nelle versioni più recenti supporti, come accennato,
 risoluzioni dei tempi dei file fino al nanosecondo, le funzioni fin qui
 esaminate non consentono di impostare valori con questa precisione. Per questo
-sono state introdotte due nuove funzioni di sistema, \funcd{futimens} e
-\funcd{utimensat}, in grado di eseguire questo compito; i rispettivi prototipi
-sono:
+sono state introdotte due nuove funzioni di sistema, \func{utimensat} (che
+vedremo in sez.~\ref{sec:file_openat} insieme alle altre
+\textit{at-functions}), e \funcd{futimens}, il cui prototipo è:
 
 \begin{funcproto}{
 \fhead{sys/time.h}
-\fdecl{futimens(int fd, const struct timespec times[2])}
+\fdecl{int futimens(int fd, const struct timespec times[2])}
 \fdesc{Cambia i tempi di un file già aperto.} 
-\fdecl{int utimensat(int dirfd, const char *pathname, const struct
-    timespec times[2], int flags)}
-\fdesc{Cambia i tempi di un file.} 
 }
 
-{Le funzioni ritornano $0$ in caso di successo e $-1$ per un errore, nel qual
-  caso \var{errno} assumerà uno dei valori: 
+{La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
+  caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
   \item[\errcode{EACCES}] si è richiesta l'impostazione del tempo corrente ma
     non si ha il permesso di scrittura sul file, o non si è proprietari del
     file o non si hanno i privilegi di amministratore; oppure il file è
     immutabile (vedi sez.~\ref{sec:file_perm_overview}).
-  \item[\errcode{EBADF}] \param{fd} non è un file descriptor valido (solo
-    \func{futimens}), oppure \param{dirfd} non è \const{AT\_FDCWD} o un file
-    descriptor valido (solo \func{utimensat}).
-  \item[\errcode{EFAULT}] \param{times} non è un puntatore valido (per
-    entrambe), oppure \param{dirfd} è \const{AT\_FDCWD} ma \param{pathname} è
-    \var{NULL} o non è un puntatore valido (solo \func{utimensat}).
-  \item[\errcode{EINVAL}] si sono usati dei valori non corretti per i tempi
-    di \param{times} (per entrambe), oppure è si usato un valore non valido
-    per \param{flags}, oppure \param{pathname} è \var{NULL}, \param{dirfd} non
-    è \const{AT\_FDCWD} e \param{flags} contiene \const{AT\_SYMLINK\_NOFOLLOW}
-    (solo \func{utimensat}).
+  \item[\errcode{EBADF}] \param{fd} non è un file descriptor valido.
+  \item[\errcode{EFAULT}] \param{times} non è un puntatore valido.
+  \item[\errcode{EINVAL}] si sono usati dei valori non corretti per i tempi di
+    \param{times}.
   \item[\errcode{EPERM}] si è richiesto un cambiamento nei tempi non al tempo
     corrente, ma non si è proprietari del file o non si hanno i privilegi di
     amministratore; oppure il file è immutabile o \textit{append-only} (vedi
     sez.~\ref{sec:file_perm_overview}).
-  \item[\errcode{ESRCH}] non c'è il permesso di attraversamento per una delle
-    componenti di \param{pathname} (solo \func{utimensat})
   \end{errlist}
-  ed inoltre per entrambe \errval{EROFS} e per \func{utimensat}
-  \errval{ELOOP}, \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOTDIR} nel
-  loro significato generico.}
+  ed inoltre per entrambe \errval{EROFS} nel suo significato generico.}
 \end{funcproto}
 
-Entrambe le funzioni utilizzano per indicare i valori dei tempi un
-vettore \param{times} di due strutture \struct{timespec}, la cui definizione è
-riportata in fig.~\ref{fig:sys_timespec_struct}, che permette di specificare
-un valore dei tempi con una precisione fino al nanosecondo.
+La funzione è sostanzialmente una estensione di \func{futimes} che consente di
+specificare i tempi con precisione maggiore. Per questo per indicare i valori
+dei tempi da impostare utilizza un vettore \param{times} di due strutture
+\struct{timespec} che permettono di indicare il valore del tempo con una
+precisione fino al nanosecondo (se ne è riportata la definizione in
+fig.~\ref{fig:sys_timespec_struct}).
 
 \begin{figure}[!htb]
   \footnotesize \centering
@@ -4005,48 +3990,23 @@ un valore dei tempi con una precisione fino al nanosecondo.
 Come per le precedenti funzioni il primo elemento di \param{times} indica il
 tempo di ultimo accesso ed il secondo quello di ultima modifica, e se si usa
 il valore \val{NULL} verrà impostato il tempo corrente sia per l'ultimo
-accesso che per l'ultima modifica. Nei singoli elementi di \param{times} si
-possono inoltre utilizzare due valori speciali per il campo \var{tv\_nsec}:
-con \constd{UTIME\_NOW} si richiede l'uso del tempo corrente, mentre con
-\constd{UTIME\_OMIT} si richiede di non impostare il tempo. Si può così
-aggiornare in maniera specifica soltanto uno fra il tempo di ultimo accesso e
-quello di ultima modifica. Quando si usa uno di questi valori speciali per
-\var{tv\_nsec} il corrispondente valore di \var{tv\_sec} viene ignorato.
-
-Queste due funzioni sono una estensione definita nella revisione POSIX.1-2008
-dello standard POSIX, in Linux sono state introdotte a partire dal kernel
-2.6.22,\footnote{si tenga presente però che per kernel precedenti il 2.6.26 le
-  due funzioni sono difettose nel rispetto di alcuni requisiti minori dello
-  standard e nel controllo della correttezza dei tempi, per i dettagli dei
-  quali si rimanda alla pagina di manuale.} e supportate dalla \acr{glibc} a
-partire dalla versione 2.6.\footnote{in precedenza, a partire dal kernel
-  2.6.16, era stata introdotta una \textit{system call} \funcm{futimesat}
-  seguendo una bozza della revisione dello standard poi modificata; questa
-  funzione, sostituita da \func{utimensat}, è stata dichiarata obsoleta, non è
-  supportata da nessuno standard e non deve essere più utilizzata: pertanto
-  non ne parleremo.} La prima è sostanzialmente una estensione di
-\func{futimes} che consente di specificare i tempi con precisione maggiore, la
-seconda supporta invece, rispetto ad \func{utimes}, una sintassi più complessa
-che consente una indicazione sicura del file su cui operare specificando la
-directory su cui si trova tramite il file descriptor \param{dirfd} ed il suo
-nome come \textit{pathname relativo} in \param{pathname}.\footnote{su Linux
-  solo \func{utimensat} è una \textit{system call} e \func{futimens} è una
-  funzione di libreria, infatti se \param{pathname} è \var{NULL} \param{dirfd}
-  viene considerato un file descriptor ordinario e il cambiamento del tempo
-  applicato al file sottostante, qualunque esso sia, per cui
-  \code{futimens(fd, times}) è del tutto equivalente a \code{utimensat(fd,
-    NULL, times, 0)}.}
-
-Torneremo su questa sintassi e sulla sua motivazione in
-sez.~\ref{sec:file_openat}, quando tratteremo tutte le altre funzioni (le
-cosiddette \textit{at-functions}) che la utilizzano; essa prevede comunque
-anche la presenza dell'argomento \param{flags} con cui attivare flag di
-controllo che modificano il comportamento della funzione, nel caso specifico
-l'unico valore consentito è \const{AT\_SYMLINK\_NOFOLLOW} che indica alla
-funzione di non dereferenziare i collegamenti simbolici, cosa che le permette
-di riprodurre le funzionalità di \func{lutimes}.
+accesso che per l'ultima modifica.
 
+Nei singoli elementi di \param{times} si possono inoltre utilizzare due valori
+speciali per il campo \var{tv\_nsec}: con \constd{UTIME\_NOW} si richiede
+l'uso del tempo corrente, mentre con \constd{UTIME\_OMIT} si richiede di non
+impostare il tempo. Si può così aggiornare in maniera specifica soltanto uno
+fra il tempo di ultimo accesso e quello di ultima modifica. Quando si usa uno
+di questi valori speciali per \var{tv\_nsec} il corrispondente valore di
+\var{tv\_sec} viene ignorato.
 
+Questa funzione e \func{utimensat} sono una estensione definita nella
+revisione POSIX.1-2008 dello standard POSIX; in Linux sono state introdotte a
+partire dal kernel 2.6.22, e sono supportate dalla \acr{glibc} a partire dalla
+versione 2.6, si tenga presente però che per kernel precedenti il 2.6.26 le
+due funzioni sono difettose nel rispetto di alcuni requisiti minori dello
+standard e nel controllo della correttezza dei tempi, per i dettagli dei quali
+si rimanda alla pagina di manuale.
 
 
 \section{Il controllo di accesso ai file}
@@ -4123,8 +4083,8 @@ complesse del meccanismo del controllo di accesso su cui torneremo in seguito
 (in sez.~\ref{sec:file_special_perm}), lo schema di allocazione dei bit è
 riportato in fig.~\ref{fig:file_perm_bit}.  Come tutte le altre proprietà di
 un file anche i permessi sono memorizzati nell'\textit{inode}, e come
-accennato in sez.~\ref{sec:file_types} essi sono vengono restituiti in una
-parte del campo \var{st\_mode} della struttura \struct{stat} (si veda di nuovo
+accennato in sez.~\ref{sec:file_types} essi vengono restituiti in una parte
+del campo \var{st\_mode} della struttura \struct{stat} (si veda di nuovo
 fig.~\ref{fig:file_stat_struct}).
 
 In genere ci si riferisce ai tre livelli dei privilegi usando le lettere
@@ -4450,12 +4410,12 @@ consapevolmente, cancellare i file temporanei creati degli altri utenti.
 \subsection{Le funzioni per la gestione dei permessi dei file}
 \label{sec:file_perm_management}
 
-Come visto in sez.~\ref{sec:file_access_control} il controllo di accesso ad un
-file viene fatto utilizzando l'\ids{UID} ed il \ids{GID} effettivo del processo;
-ci sono casi però in cui si può voler effettuare il controllo con l'\ids{UID}
-reale ed il \ids{GID} reale, vale a dire usando i valori di \ids{UID} e
-\ids{GID} relativi all'utente che ha lanciato il programma, e che, come
-accennato in sez.~\ref{sec:file_special_perm} e spiegato in dettaglio in
+Come visto in sez.~\ref{sec:file_perm_overview} il controllo di accesso ad un
+file viene fatto utilizzando l'\ids{UID} ed il \ids{GID} effettivo del
+processo; ci sono casi però in cui si può voler effettuare il controllo con
+l'\ids{UID} reale ed il \ids{GID} reale, vale a dire usando i valori di
+\ids{UID} e \ids{GID} relativi all'utente che ha lanciato il programma, e che,
+come accennato in sez.~\ref{sec:file_special_perm} e spiegato in dettaglio in
 sez.~\ref{sec:proc_perms}, non è detto siano uguali a quelli effettivi.
 
 Per far questo si può usare la funzione di sistema \funcd{access}, il cui
@@ -4763,12 +4723,13 @@ completamente i problemi di accesso da parte di altri utenti dello stesso
 gruppo, in quanto di default i permessi assegnati al gruppo non sono
 sufficienti per un accesso in scrittura; in questo caso si deve aver cura di
 usare prima della creazione dei file un valore per \textit{umask} lasci il
-permesso di scrittura.\footnote{in tal caso si può assegnare agli utenti del
-  gruppo una \textit{umask} di $002$, anche se la soluzione migliore in questo
-  caso è usare una ACL di default (vedi sez.~\ref{sec:file_ACL}).}
+permesso di scrittura per il gruppo.\footnote{in tal caso si può assegnare
+  agli utenti del gruppo una \textit{umask} di $002$, anche se la soluzione
+  migliore in questo caso è usare una ACL di default (vedi
+  sez.~\ref{sec:file_ACL}).}
 
 Come avviene nel caso dei permessi esistono anche delle appropriate funzioni
-di sistema, \funcd{chown} \funcd{fchown} e \funcd{lchown}, che permettono di
+di sistema, \funcd{chown}, \funcd{fchown} e \funcd{lchown}, che permettono di
 cambiare sia l'utente che il gruppo a cui un file appartiene; i rispettivi
 prototipi sono:
 
@@ -4781,7 +4742,7 @@ prototipi sono:
 \fdesc{Cambiano proprietario e gruppo proprietario di un file.} 
 }
 
-{La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
+{Le funzioni ritornano $0$ in caso di successo e $-1$ per un errore, nel qual
   caso \var{errno} assumerà uno dei valori: 
   \begin{errlist}
   \item[\errcode{EPERM}] l'\ids{UID} effettivo non corrisponde a quello del
@@ -4946,12 +4907,13 @@ trovare spazio nei dati classici mantenuti negli \textit{inode}.
 Per risolvere questo problema alcuni sistemi unix-like (e fra questi anche
 Linux) hanno introdotto un meccanismo generico, detto \textit{Extended
   Attributes} che consente di associare delle informazioni ulteriori ai
-singoli file.\footnote{essi ad esempio vengono usati per le ACL, che
-  tratteremo in sez.~\ref{sec:file_ACL} e le \textit{file capabilities}, che
-  vedremo in sez.~\ref{sec:proc_capabilities}.} Gli \textsl{attributi estesi}
-non sono altro che delle coppie nome/valore che sono associate permanentemente
-ad un oggetto sul filesystem, analoghi di quello che sono le variabili di
-ambiente (vedi sez.~\ref{sec:proc_environ}) per un processo.
+singoli file; ad esempio vengono usati per la gestione delle ACL, che
+tratteremo in sez.~\ref{sec:file_ACL} e per le \textit{file capabilities}, che
+vedremo in sez.~\ref{sec:proc_capabilities}. Gli \textsl{attributi estesi}
+(abbreviati in \textsl{xattr}) non sono altro che delle coppie nome/valore che
+sono associate permanentemente ad un oggetto sul filesystem, analoghi di
+quello che sono le variabili di ambiente (vedi sez.~\ref{sec:proc_environ})
+per un processo.
 
 Altri sistemi (come Solaris, MacOS e Windows) hanno adottato un meccanismo
 diverso in cui ad un file sono associati diversi flussi di dati, su cui
@@ -4973,18 +4935,20 @@ che ogni valore precedente sia sovrascritto.
 Si tenga presente che non tutti i filesystem supportano gli \textit{Extended
   Attributes}; al momento della scrittura di queste dispense essi sono
 presenti solo sui vari \textsl{extN}, \textsl{ReiserFS}, \textsl{JFS},
-\textsl{XFS} e \textsl{Btrfs}.\footnote{l'elenco è aggiornato a Luglio 2011.}
-Inoltre a seconda della implementazione ci possono essere dei limiti sulla
-quantità di attributi che si possono utilizzare.\footnote{ad esempio nel caso
-  di \textsl{ext2} ed \textsl{ext3} è richiesto che essi siano contenuti
+\textsl{XFS}, \textsl{Btrfs}, \textsl{Lustre} e \textsl{OCFS2}.  Inoltre a
+seconda della implementazione ci possono essere dei limiti sulla quantità di
+attributi che si possono utilizzare.\footnote{ad esempio nel caso di
+  \textsl{ext2} ed \textsl{ext3} è richiesto che essi siano contenuti
   all'interno di un singolo blocco, pertanto con dimensioni massime pari a
   1024, 2048 o 4096 byte a seconda delle dimensioni di quest'ultimo impostate
-  in fase di creazione del filesystem, mentre con \textsl{XFS} non ci sono
-  limiti ed i dati vengono memorizzati in maniera diversa (nell'\textit{inode}
-  stesso, in un blocco a parte, o in una struttura ad albero dedicata) per
-  mantenerne la scalabilità.} Infine lo spazio utilizzato per mantenere gli
-attributi estesi viene tenuto in conto per il calcolo delle quote di utente e
-gruppo proprietari del file.
+  in fase di creazione del filesystem, mentre con \textsl{XFS} e
+  \textsl{Btrfs} non ci sono limiti ed i dati vengono memorizzati in maniera
+  diversa (nell'\textit{inode} stesso, in un blocco a parte, o in una
+  struttura ad albero dedicata) per mantenerne la scalabilità; lasciamo i
+  dettagli dei vari filesystem alla documentazione accessibile con \texttt{man
+    xattr}.} Infine lo spazio utilizzato per mantenere gli attributi estesi
+viene tenuto in conto per il calcolo delle quote di utente e gruppo
+proprietari del file.
 
 Come meccanismo per mantenere informazioni aggiuntive associate al singolo
 file, gli \textit{Extended Attributes} possono avere usi anche molto diversi
@@ -4994,9 +4958,9 @@ gestione. Per questo motivo il nome di un attributo deve essere sempre
 specificato nella forma \texttt{namespace.attribute}, dove \texttt{namespace}
 fa riferimento alla classe a cui l'attributo appartiene, mentre
 \texttt{attribute} è il nome ad esso assegnato. In tale forma il nome di un
-attributo esteso deve essere univoco. Al momento\footnote{della scrittura di
-  questa sezione, kernel 2.6.23, ottobre 2007.} sono state definite le quattro
-classi di attributi riportate in tab.~\ref{tab:extended_attribute_class}.
+attributo esteso deve essere univoco. Al momento sono state definite le
+quattro classi di attributi riportate in
+tab.~\ref{tab:extended_attribute_class}.
 
 \begin{table}[htb]
   \centering
@@ -5012,13 +4976,13 @@ classi di attributi riportate in tab.~\ref{tab:extended_attribute_class}.
                       di meccanismi evoluti di controllo di accesso come
                       \textit{SELinux} o le \textit{capabilities} dei
                       file di sez.~\ref{sec:proc_capabilities}.\\ 
-    \texttt{system} & Gli \textit{extended security attributes}: sono usati
+    \texttt{system} & Gli \textit{extended system attributes}: sono usati
                       dal kernel per memorizzare dati di sistema associati ai
                       file come le ACL (vedi sez.~\ref{sec:file_ACL}) o le
                       \textit{capabilities} (vedi
                       sez.~\ref{sec:proc_capabilities}).\\
     \texttt{trusted}& I \textit{trusted extended attributes}: vengono
-                      utilizzati per poter realizzare in user space 
+                      utilizzati per poter realizzare in \textit{user space} 
                       meccanismi che consentano di mantenere delle
                       informazioni sui file che non devono essere accessibili
                       ai processi ordinari.\\
@@ -5035,8 +4999,8 @@ classi di attributi riportate in tab.~\ref{tab:extended_attribute_class}.
 
 
 Dato che uno degli usi degli \textit{Extended Attributes} è di impiegarli per
-realizzare delle estensioni (come le ACL, \textit{SELinux}, ecc.) al
-tradizionale meccanismo dei controlli di accesso di Unix, l'accesso ai loro
+realizzare delle estensioni al tradizionale meccanismo dei controlli di
+accesso di Unix (come le ACL, \textit{SELinux}, ecc.), l'accesso ai loro
 valori viene regolato in maniera diversa a seconda sia della loro classe che
 di quali, fra le estensioni che li utilizzano, sono poste in uso. In
 particolare, per ciascuna delle classi riportate in
@@ -5050,8 +5014,8 @@ tab.~\ref{tab:extended_attribute_class}, si hanno i seguenti casi:
   modulo di sicurezza che si sta utilizzando al momento (ciascuno avrà le
   sue). Se non è stato caricato nessun modulo di sicurezza l'accesso in
   lettura sarà consentito a tutti i processi, mentre quello in scrittura solo
-  ai processi con privilegi amministrativi dotati della capacità
-  \const{CAP\_SYS\_ADMIN}.
+  ai processi con privilegi amministrativi (per la precisione dotati della
+  capacità \const{CAP\_SYS\_ADMIN}, vedi sez.~\ref{sec:proc_capabilities}).
 
 \item[\texttt{system}] Anche l'accesso agli \textit{extended system
     attributes} dipende dalle politiche di accesso che il kernel realizza
@@ -5060,15 +5024,15 @@ tab.~\ref{tab:extended_attribute_class}, si hanno i seguenti casi:
   ai processi che hanno la capacità di eseguire una ricerca sul file (cioè
   hanno il permesso di lettura sulla directory che contiene il file) ed in
   scrittura al proprietario del file o ai processi dotati della capacità
-  \const{CAP\_FOWNER}.\footnote{vale a dire una politica di accesso analoga a
-    quella impiegata per gli ordinari permessi dei file.}
+  \const{CAP\_FOWNER}, vale a dire una politica di accesso analoga a quella
+  impiegata per gli ordinari permessi dei file.
 
 \item[\texttt{trusted}] L'accesso ai \textit{trusted extended attributes}, sia
   per la lettura che per la scrittura, è consentito soltanto ai processi con
   privilegi amministrativi dotati della capacità \const{CAP\_SYS\_ADMIN}. In
-  questo modo si possono utilizzare questi attributi per realizzare in user
-  space dei meccanismi di controllo che accedono ad informazioni non
-  disponibili ai processi ordinari.
+  questo modo si possono utilizzare questi attributi per realizzare in
+  \textit{user space} dei meccanismi di controllo che accedono ad informazioni
+  non disponibili ai processi ordinari.
 
 \item[\texttt{user}] L'accesso agli \textit{extended user attributes} è
   regolato dai normali permessi dei file: occorre avere il permesso di lettura
@@ -5095,9 +5059,9 @@ tab.~\ref{tab:extended_attribute_class}, si hanno i seguenti casi:
   due casi hanno a che fare con il contenuto del file, e nella discussione
   relativa all'uso degli \textit{extended user attributes} nessuno è mai stato
   capace di indicare una qualche forma sensata di utilizzo degli stessi per
-  collegamenti simbolici o file di dispositivo, e neanche per le \textit{fifo} o i
-  socket.  Per questo motivo essi sono stati completamente disabilitati per
-  tutto ciò che non sia un file regolare o una directory.\footnote{si può
+  collegamenti simbolici o file di dispositivo, e neanche per le \textit{fifo}
+  o i socket.  Per questo motivo essi sono stati completamente disabilitati
+  per tutto ciò che non sia un file regolare o una directory.\footnote{si può
     verificare la semantica adottata consultando il file \texttt{fs/xattr.c}
     dei sorgenti del kernel.} Inoltre per le directory è stata introdotta una
   ulteriore restrizione, dovuta di nuovo alla presenza ordinaria di permessi
@@ -5162,35 +5126,41 @@ il nome dell'attributo di cui si vuole ottenere il valore. Il nome deve essere
 indicato comprensivo di prefisso del \textit{namespace} cui appartiene (uno
 dei valori di tab.~\ref{tab:extended_attribute_class}) nella forma
 \texttt{namespace.attributename}, come stringa terminata da un carattere NUL.
-Il suo valore verrà restituito nel buffer puntato dall'argomento \param{value}
-per una dimensione massima di \param{size} byte;\footnote{gli attributi estesi
-  possono essere costituiti arbitrariamente da dati testuali o binari.}  se
-quest'ultima non è sufficiente si avrà un errore di \errcode{ERANGE}.
+Il valore dell'attributo richiesto verrà restituito nel buffer puntato
+dall'argomento \param{value} per una dimensione massima di \param{size} byte
+(gli attributi estesi possono essere costituiti arbitrariamente da dati
+testuali o binari); se quest'ultima non è sufficiente si avrà un errore di
+\errcode{ERANGE}.
 
 Per evitare di dover indovinare la dimensione di un attributo per tentativi si
 può eseguire una interrogazione utilizzando un valore nullo per \param{size};
 in questo caso non verrà letto nessun dato, ma verrà restituito come valore di
 ritorno della funzione chiamata la dimensione totale dell'attributo esteso
 richiesto, che si potrà usare come stima per allocare un buffer di dimensioni
-sufficienti.\footnote{si parla di stima perché anche se le funzioni
-  restituiscono la dimensione esatta dell'attributo al momento in cui sono
-  eseguite, questa potrebbe essere modificata in qualunque momento da un
-  successivo accesso eseguito da un altro processo.}
+sufficienti.
 
-Un secondo gruppo di funzioni è quello che consente di impostare il valore di
-un attributo esteso, queste sono \funcd{setxattr}, \funcd{lsetxattr} e
-\funcd{fsetxattr}, e consentono di operare rispettivamente su un file, su un
-collegamento simbolico o specificando un file descriptor; i loro prototipi sono:
+Si tenga conto che questa è comunque una stima perché anche se le funzioni
+restituiscono la dimensione esatta dell'attributo al momento in cui sono
+eseguite, questa potrebbe essere modificata in qualunque momento da un
+successivo accesso eseguito da un altro processo, pertanto si verifichi sempre
+il valore di ritorni ed il codice di errore della funzione usata, senza dare
+per scontato che essa abbia sempre successo.
+
+Un secondo gruppo di funzioni sono quelle che consentono di impostare il
+valore di un attributo esteso, le funzioni sono \funcd{setxattr},
+\funcd{lsetxattr} e \funcd{fsetxattr} e consentono di operare rispettivamente
+su un file, su un collegamento simbolico o utilizzando un file descriptor; i
+rispettivi prototipi sono:
 
 \begin{funcproto}{
 \fhead{sys/types.h}
 \fhead{attr/xattr.h}
-\fdecl{int setxattr(const char *path, const char *name, const void *value,
-  size\_t size, int flags)} 
-\fdecl{int lsetxattr(const char *path, const char *name, const void *value,
-  size\_t size, int flags)} 
-\fdecl{int fsetxattr(int filedes, const char *name, const void *value, size\_t
-  size, int flags)} 
+\fdecl{int setxattr(const char *path, const char *name, const void *value,\\
+  \phantom{int setxattr(}size\_t size, int flags)} 
+\fdecl{int lsetxattr(const char *path, const char *name, const void *value,\\
+  \phantom{int lsetxattr(}size\_t size, int flags)} 
+\fdecl{int fsetxattr(int filedes, const char *name, const void *value,\\
+  \phantom{int fsetxattr(}size\_t size, int flags)} 
 \fdesc{Impostano il valore di un attributo esteso.} 
 }
 
@@ -5209,28 +5179,31 @@ collegamento simbolico o specificando un file descriptor; i loro prototipi sono:
   permessi di accesso all'attributo.}
 \end{funcproto}
 
-Le tre funzioni prendono come primo argomento un valore adeguato al loro
-scopo, usato in maniera del tutto identica a quanto visto in precedenza per le
-analoghe che leggono gli attributi estesi. Il secondo argomento \param{name}
-deve indicare, anche in questo caso con gli stessi criteri appena visti per le
+Le tre funzioni prendono come primo argomento un valore adeguato al loro scopo
+(un \textit{pathname} le prime due, un file descriptor la terza), usato in
+maniera del tutto identica a quanto visto in precedenza per le analoghe che
+leggono gli attributi estesi. Il secondo argomento, \param{name}, deve
+indicare, anche in questo caso con gli stessi criteri appena visti per le
 analoghe \func{getxattr}, \func{lgetxattr} e \func{fgetxattr}, il nome
-(completo di suffisso) dell'attributo su cui si vuole operare. 
-
-Il valore che verrà assegnato all'attributo dovrà essere preparato nel buffer
-puntato da \param{value}, e la sua dimensione totale (in byte) sarà indicata
-dall'argomento \param{size}. Infine l'argomento \param{flag} consente di
-controllare le modalità di sovrascrittura dell'attributo esteso, esso può
-prendere due valori: con \constd{XATTR\_REPLACE} si richiede che l'attributo
-esista, nel qual caso verrà sovrascritto, altrimenti si avrà errore, mentre
-con \constd{XATTR\_CREATE} si richiede che l'attributo non esista, nel qual
-caso verrà creato, altrimenti si avrà errore ed il valore attuale non sarà
+(completo di suffisso) dell'attributo su cui si vuole operare.  Il valore che
+verrà assegnato all'attributo dovrà essere preparato nel buffer puntato da
+\param{value}, e la sua dimensione totale (in byte) dovrà essere indicata
+dall'argomento \param{size}.
+
+Infine l'argomento \param{flag} consente di controllare le modalità di
+sovrascrittura dell'attributo esteso, esso può prendere due valori: con
+\constd{XATTR\_REPLACE} si richiede che l'attributo esista, nel qual caso
+verrà sovrascritto, altrimenti si avrà errore, mentre con
+\constd{XATTR\_CREATE} si richiede che l'attributo non esista, nel qual caso
+verrà creato, altrimenti si avrà errore ed il valore attuale non sarà
 modificato.  Utilizzando per \param{flag} un valore nullo l'attributo verrà
 modificato se è già presente, o creato se non c'è.
 
 Le funzioni finora illustrate permettono di leggere o scrivere gli attributi
-estesi, ma sarebbe altrettanto utile poter vedere quali sono gli attributi
-presenti; a questo provvedono le funzioni di sistema \funcd{listxattr},
-\funcd{llistxattr} e \funcd{flistxattr} i cui prototipi sono:
+estesi presenti su un file, ma sarebbe altrettanto utile poter sapere quali
+sono questi attributi; per questo sono disponibili le ulteriori tre funzioni
+di sistema \funcd{listxattr}, \funcd{llistxattr} e \funcd{flistxattr} i cui
+prototipi sono:
 
 \begin{funcproto}{
 \fhead{sys/types.h}
@@ -5319,7 +5292,7 @@ estesi.
 Il modello classico dei permessi di Unix, per quanto funzionale ed efficiente,
 è comunque piuttosto limitato e per quanto possa aver coperto per lunghi anni
 le esigenze più comuni con un meccanismo semplice e potente, non è in grado di
-rispondere in maniera adeguata a situazioni che richiedono una gestione
+rispondere in maniera adeguata a situazioni che richiedono una gestione più
 complessa dei permessi di accesso.\footnote{già un requisito come quello di
   dare accesso in scrittura ad alcune persone ed in sola lettura ad altre non
   si può soddisfare in maniera semplice.}
@@ -6764,11 +6737,11 @@ librerie) di cui il server potrebbe avere bisogno.
 % LocalWords:  member scan attack EOVERFLOW BITS blkcnt rdev FDCWD functions
 % LocalWords:  faccessat grpid lacl AppArmor capsetp mygetfacl table Tb MSK
 %  LocalWords:  LAZYTIME submount peer protected hardlink symlinks silly RDWR
+%  LocalWords:  renames unreachable CLOEXEC mkstemps mkostemps suffixlen Aug
+%  LocalWords:  prefissoXXXXXXsuffisso nell'I fstatat statx sull' drwxrwxrwt
+%  LocalWords:  Disalloca
 
 %%% Local Variables: 
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
-%  LocalWords:  renames unreachable CLOEXEC mkstemps mkostemps suffixlen Aug
-%  LocalWords:  prefissoXXXXXXsuffisso nell'I fstatat statx sull' drwxrwxrwt
-%  LocalWords:  Disalloca