Appunti vari sparsi
authorSimone Piccardi <piccardi@truelite.it>
Wed, 17 Apr 2019 20:29:34 +0000 (22:29 +0200)
committerSimone Piccardi <piccardi@truelite.it>
Wed, 17 Apr 2019 20:29:34 +0000 (22:29 +0200)
fileio.tex

index 2e839f01739fde7225dac8d8e02de5f58ac99b6b..b1b78b4aede1f4b794fe19ba562e41505351a780 100644 (file)
@@ -2188,15 +2188,34 @@ destinazione) aggiunge a ciascuno di essi un argomento (rispettivamente
 \param{olddirfd} e \param{newdirfd}) per poter indicare entrambi come relativi
 a due directory aperte in precedenza.
 
 \param{olddirfd} e \param{newdirfd}) per poter indicare entrambi come relativi
 a due directory aperte in precedenza.
 
-In questo caso dato che su Linux il comportamento di \func{link} è quello di
+In questo caso, dato che su Linux il comportamento di \func{link} è quello di
 non seguire mai i collegamenti simbolici, \const{AT\_SYMLINK\_NOFOLLOW} non
 non seguire mai i collegamenti simbolici, \const{AT\_SYMLINK\_NOFOLLOW} non
-viene utilizzato; a partire dal kernel 2.6.18 è stato aggiunto a questa
+viene utilizzato. A partire dal kernel 2.6.18 è stato aggiunto a questa
 funzione la possibilità di usare il valore \const{AT\_SYMLINK\_FOLLOW} per
 l'argomento \param{flags},\footnote{nei kernel precendenti, dall'introduzione
   nel 2.6.16, l'argomento \param{flags} era presente, ma senza alcun valore
   valido, e doveva essere passato sempre con valore nullo.}  che richiede di
 funzione la possibilità di usare il valore \const{AT\_SYMLINK\_FOLLOW} per
 l'argomento \param{flags},\footnote{nei kernel precendenti, dall'introduzione
   nel 2.6.16, l'argomento \param{flags} era presente, ma senza alcun valore
   valido, e doveva essere passato sempre con valore nullo.}  che richiede di
-dereferenziare i collegamenti simbolici, inoltre a partire dal kernel 3.11 si
-può usare \const{AT\_EMPTY\_PATH} con il significato illustrato in precedenza.
+dereferenziare i collegamenti simbolici. Inoltre a partire dal kernel 3.11 si
+può usare \const{AT\_EMPTY\_PATH} per creare un nuovo \textit{hard link} al
+file associato al file descriptor \param{olddirfd} (ottenuto ad esempio usando
+\func{open} con \const{O\_PATH}) che però in questo caso non può essere una
+directory.
+
+% NOTE per la discussione sui problemi di sicurezza relativi a questa
+% funzionalità vedi http://lwn.net/Articles/562488/
+
+La funzione però prevede un comportamento specifico nel caso che
+\param{olddirfd} faccia riferimento ad un file anonimo ottenuto usando
+\func{open} con \const{O\_TMPFILE}. In generale quando il file associato ad
+\param{olddirfd} ha un numero di link nullo, la funzione fallisce, c'è però
+una 
+
+
+l'uso di \const{AT\_EMPTY\_PATH} assume un significato
+ulteriore, e richiede i privilegi di amministratore (la \textit{capability}
+\const{CAP\_DAC\_READ\_SEARCH}) quando viene usato con un file descriptor
+anomino ottenuto usando \const{O\_TMPFILE} con \func{open}. In generale
+
 
 Altre due funzioni che utilizzano due \textit{pathname} (e due file
 descriptor) sono \funcd{renameat} e \funcd{renameat2}, corrispondenti alla
 
 Altre due funzioni che utilizzano due \textit{pathname} (e due file
 descriptor) sono \funcd{renameat} e \funcd{renameat2}, corrispondenti alla
@@ -2328,9 +2347,6 @@ che esso non appaia più è possibile creare
 % https://lwn.net/Articles/707602/ e
 % https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a528d35e8bfcc521d7cb70aaf03e1bd296c8493f) 
 
 % https://lwn.net/Articles/707602/ e
 % https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a528d35e8bfcc521d7cb70aaf03e1bd296c8493f) 
 
-% TODO manca prototipo di linkat, verificare se metterlo o metter menzione
-% altre modifiche al riguardo nel 3.11 (AT_EMPTY_PATH?) vedi
-%  http://lwn.net/Articles/562488/
 
 % TODO: Trattare esempio di inzializzazione di file e successivo collegamento
 % con l'uso di O_TMPFILE e linkat, vedi man open
 
 % TODO: Trattare esempio di inzializzazione di file e successivo collegamento
 % con l'uso di O_TMPFILE e linkat, vedi man open
@@ -3448,7 +3464,6 @@ sistemi più moderni.
 % TODO: mettere prototipi espliciti fseeko e ftello o menzione?
 
 
 % TODO: mettere prototipi espliciti fseeko e ftello o menzione?
 
 
-
 \subsection{Input/output binario}
 \label{sec:file_binary_io}
 
 \subsection{Input/output binario}
 \label{sec:file_binary_io}