semantica BSD. Linux invece segue normalmente quella che viene chiamata
semantica SVr4: di norma un nuovo file viene creato, seguendo la prima
opzione, con il \ids{GID} del processo, se però la directory in cui viene
-creato ha il bit \acr{sgid} impostato allora viene usata la seconda
-opzione. L'adozione di questa semantica però può essere controllata,
+creato ha il bit \acr{sgid} dei permessi impostato allora viene usata la
+seconda opzione. L'adozione di questa semantica però può essere controllata,
all'interno di alcuni filesystem,\footnote{con il kernel 2.6.25 questi erano
- \acr{ext2}, \acr{ext3}, \acr{ext4}, e XFS.} con l'uso dell'opzione di
+ \acr{ext2}, \acr{ext3}, \acr{ext4}, e \acr{XFS}.} con l'uso dell'opzione di
montaggio \texttt{grpid}, che se attivata fa passare all'uso della semantica
BSD.
stata creata una nuova \textit{system call} per \func{chown} che seguisse i
collegamenti simbolici.} La funzione \func{fchown} opera su un file aperto,
essa è mutuata da BSD, ma non è nello standard POSIX. Un'altra estensione
-rispetto allo standard POSIX è che specificando -1 come valore
-per \param{owner} e \param{group} i valori restano immutati.
+rispetto allo standard POSIX è che specificando $-1$ come valore per
+\param{owner} e \param{group} i valori restano immutati.
Quando queste funzioni sono chiamate con successo da un processo senza i
privilegi di amministratore entrambi i bit \acr{suid} e \acr{sgid} vengono
\const{ACL\_GROUP\_OBJ}).
Per la gestione delle ACL lo standard \textit{POSIX 1003.1e Draft 17} ha
-previsto delle apposite funzioni ed tutta una serie di tipi di dati
-dedicati;\footnote{fino a definire un tipo di dato e delle costanti apposite
- per identificare i permessi standard di lettura, scrittura ed esecuzione.}
-tutte le operazioni devono essere effettuate attraverso tramite questi tipi di
-dati, che incapsulano tutte le informazioni contenute nelle ACL. La prima di
-queste funzioni che prendiamo in esame è \funcd{acl\_init}, il cui prototipo
-è:
+previsto delle apposite funzioni ed tutta una serie di tipi di dati dedicati,
+arrivando fino a definire un tipo di dato e delle costanti apposite per
+identificare i permessi standard di lettura, scrittura ed esecuzione. Tutte
+le operazioni devono essere effettuate attraverso tramite questi tipi di dati,
+che incapsulano tutte le informazioni contenute nelle ACL.
+
+La prima di queste funzioni che prendiamo in esame (si ricordi che come per
+tutte le altre per poterla usare occorre invocare il compilatore con l'opzione
+\texttt{-l acl}) è \funcd{acl\_init}, il cui prototipo è:
\begin{funcproto}{
\fhead{sys/types.h}
in caso di fallimento verrà restituito un puntatore nullo di tipo
``\code{(acl\_t) NULL}'' e si dovrà, in questa come in tutte le funzioni
seguenti che restituiscono un oggetto di tipo \type{acl\_t}, confrontare il
-valore di ritorno della funzione con \val{NULL}.\footnote{a voler essere
- estremamente pignoli si dovrebbe usare ``\code{(acl\_t) NULL}'', ma è
- sufficiente fare un confronto direttamente con \val{NULL} essendo cura del
- compilatore fare le conversioni necessarie.}
+valore di ritorno della funzione con \val{NULL} (anche se, a voler essere
+estremamente pignoli, si dovrebbe usare ``\code{(acl\_t) NULL}'', ma è
+sufficiente fare un confronto direttamente con \val{NULL} essendo cura del
+compilatore fare le conversioni necessarie).
Una volta che si siano completate le operazioni sui dati di una ACL la memoria
allocata per un oggetto \type{acl\_t} dovrà essere liberata esplicitamente
Le due funzioni ritornano, con un oggetto di tipo \type{acl\_t}, il valore
della ACL correntemente associata ad un file, che può essere identificato
tramite un file descriptor usando \func{acl\_get\_fd} o con un
-\textit{pathname} usando \func{acl\_get\_file}. Nel caso di quest'ultima
-funzione, che può richiedere anche la ACL relativa ad una directory, il
-secondo argomento \param{type} consente di specificare se si vuole ottenere la
-ACL di default o quella di accesso. Questo argomento deve essere di tipo
-\typed{acl\_type\_t} e può assumere solo i due valori riportati in
-tab.~\ref{tab:acl_type}.
+\textit{pathname} usando \func{acl\_get\_file}.
+
+Nel caso di quest'ultima funzione, che può richiedere anche la ACL relativa ad
+una directory, il secondo argomento \param{type} consente di specificare se si
+vuole ottenere la ACL di default o quella di accesso. Questo argomento deve
+essere di tipo \typed{acl\_type\_t} e può assumere solo i due valori riportati
+in tab.~\ref{tab:acl_type}.
\begin{table}[htb]
\centering
verrà restituita una ACL vuota.
Infine si potrà creare una ACL direttamente dalla sua rappresentazione
-testuale con la funzione \funcd{acl\_from\_text}, il cui prototipo è:
+testuale con la funzione \funcd{acl\_from\_text}, il cui prototipo è:
\begin{funcproto}{
\fhead{sys/types.h}
la rappresentazione testuale della ACL che si vuole creare, la memoria
necessaria viene automaticamente allocata ed in caso di successo viene
restituito come valore di ritorno un oggetto di tipo \type{acl\_t} con il
-contenuto della stessa, che come per le precedenti funzioni, dovrà essere
+contenuto della stessa, che, come per le precedenti funzioni, dovrà essere
disallocato esplicitamente al termine del suo utilizzo.
La rappresentazione testuale di una ACL è quella usata anche dai comandi
\end{Example}
dove il tipo può essere uno fra \texttt{user}, \texttt{group}, \texttt{other}
e \texttt{mask}. Il qualificatore è presente solo per \texttt{user} e
-\texttt{group} e indica l'utente o il gruppo a cui la voce si riferisce; i
-permessi sono espressi con una tripletta di lettere analoga a quella usata per
-i permessi dei file.\footnote{vale a dire ``\texttt{r}'' per il permesso di
- lettura, ``\texttt{w}'' per il permesso di scrittura, ``\texttt{x}'' per il
- permesso di esecuzione (scritti in quest'ordine) e ``\texttt{-}'' per
- l'assenza del permesso.}
+\texttt{group} ed indica l'utente o il gruppo a cui la voce si riferisce,
+mentrei permessi sono espressi con una tripletta di lettere analoga a quella
+usata per i permessi dei file, vale a dire ``\texttt{r}'' per il permesso di
+lettura, ``\texttt{w}'' per il permesso di scrittura, ``\texttt{x}'' per il
+permesso di esecuzione (scritti in quest'ordine) e ``\texttt{-}'' per
+l'assenza del permesso.
Un possibile esempio di rappresentazione della ACL di un file ordinario a cui,
oltre ai permessi ordinari, si è aggiunto un altro utente con un accesso in
group::r--
other::r--
user:piccardi:r--
+group:gapil:r--
\end{Example}
Va precisato che i due tipi \texttt{user} e \texttt{group} sono usati
-rispettivamente per indicare delle voci relative ad utenti e
-gruppi,\footnote{cioè per voci di tipo \const{ACL\_USER\_OBJ} e
- \const{ACL\_USER} per \texttt{user} e \const{ACL\_GROUP\_OBJ} e
- \const{ACL\_GROUP} per \texttt{group}.} applicate sia a quelli proprietari
-del file che a quelli generici; quelle dei proprietari si riconoscono per
-l'assenza di un qualificatore, ed in genere si scrivono per prima delle altre.
-Il significato delle voci di tipo \texttt{mask} e \texttt{mark} è evidente. In
-questa forma si possono anche inserire dei commenti precedendoli con il
-carattere ``\texttt{\#}''.
+rispettivamente per indicare delle voci relative ad utenti e gruppi (cioè per
+voci di tipo \const{ACL\_USER\_OBJ} e \const{ACL\_USER} per \texttt{user} e
+\const{ACL\_GROUP\_OBJ} e \const{ACL\_GROUP} per \texttt{group}) applicate sia
+a quelli proprietari del file che a quelli generici. Quelle dei proprietari si
+riconoscono per l'assenza di un qualificatore, ed in genere si scrivono per
+prima delle altre. Il significato delle voci di tipo \texttt{mask} e
+\texttt{mark} è evidente. Usando questa forma estesa si possono anche inserire
+dei commenti nel testo precedendoli con il carattere ``\texttt{\#}''.
La forma breve prevede invece la scrittura delle singole voci su una riga,
separate da virgole; come specificatori del tipo di voce si possono usare le
testuale della ACL in caso di successo e \var{NULL} per un errore, nel qual
caso \var{errno} assumerà uno dei valori:
\begin{errlist}
- \item[\errcode{EINVAL}] la ACL indicata da \param{acl} non è valida.
+ \item[\errcode{EINVAL}] o \param{acl} non è un puntatore ad una ACL o la ACL
+ che esso indica non è valida o non può esser tradotta in forma testuale.
\item[\errcode{ENOMEM}] non c'è memoria sufficiente per allocare i dati.
\end{errlist}
}
\end{funcproto}
-La funzione restituisce il puntatore ad una stringa terminata da NUL
-contenente la rappresentazione in forma estesa della ACL passata come
+La funzione restituisce il puntatore ad una stringa, terminata da un NUL,
+contenente la rappresentazione testuale in forma estesa della ACL passata come
argomento, ed alloca automaticamente la memoria necessaria. Questa dovrà poi
-essere liberata, quando non più necessaria, con \func{acl\_free}. Se
-nell'argomento \param{len\_p} si passa un valore puntatore ad una variabile
-intera in questa verrà restituita (come \textit{value result argument}) la
-dimensione della stringa con la rappresentazione testuale, non comprendente il
-carattere nullo finale.
+essere liberata, quando non più necessaria, con \func{acl\_free}. Se
+nell'argomento \param{len\_p} si passa come valore il puntatore ad una
+variabile intera, in questa verrà restituita (come \textit{value result
+ argument}) la dimensione della stringa con la rappresentazione testuale, non
+comprendente il carattere nullo finale.
La seconda funzione, che permette di controllare con una gran dovizia di
particolari la generazione della stringa contenente la rappresentazione
\hline
\hline
\constd{TEXT\_ABBREVIATE} & Stampa le voci in forma abbreviata.\\
- \constd{TEXT\_NUMERIC\_IDS} & non effettua la risoluzione numerica di
- \ids{UID} e \ids{GID}.\\
+ \constd{TEXT\_NUMERIC\_IDS} & Non effettua la risoluzione di
+ \ids{UID} e \ids{GID} lasciando i valori
+ numerici.\\
\constd{TEXT\_SOME\_EFFECTIVE}&Per ciascuna voce che contiene permessi che
vengono eliminati dalla \const{ACL\_MASK}
viene generato un commento con i permessi
}
\end{funcproto}
-Ottenuta con \func{acl\_size} la dimensione per il buffer di una ACL lo si
-potrà allocare direttamente con \func{malloc}. La rappresentazione binaria di
-una ACL si potrà invece ottenere con la funzione \funcd{acl\_copy\_ext}, il
-cui prototipo è:
+Ottenuta con \func{acl\_size} la dimensione del buffer necessaria per potervi
+memorizzare una ACL questo dovrà potrà essere allocato direttamente con
+\func{malloc}, ed a questo punto vi si potrà salvare la rappresentazione
+binaria della precedente ACL utilizzando la funzione \funcd{acl\_copy\_ext},
+il cui prototipo è:
\begin{funcproto}{
\fhead{sys/types.h}
della ACL in caso di successo e $-1$ per un errore, nel qual caso
\var{errno} assumerà uno dei valori:
\begin{errlist}
- \item[\errcode{EINVAL}] la ACL indicata da \param{acl} non è valida o
- \param{size} è negativo o nullo.
+ \item[\errcode{EINVAL}] la ACL indicata da \param{acl} non è valida, o
+ \param{acl} non è un puntatore ad una ACL o \param{size} è negativo o
+ nullo.
\item[\errcode{ERANGE}] il valore di \param{size} è più piccolo della
- dimensione della rappresentazione della ACL.
+ dimensione della rappresentazione binaria della ACL.
\end{errlist}
}
\end{funcproto}
La funzione scriverà la rappresentazione binaria della ACL indicata da
-\param{acl} sul buffer di dimensione \param{size}
-all'indirizzo \param{buf\_p}, restituendo la dimensione della stessa come
-valore di ritorno. Qualora la dimensione della rappresentazione ecceda il
-valore di \param{size} la funzione fallirà con un errore di
-\errcode{ERANGE}. La funzione non ha nessun effetto sulla ACL indicata
-da \param{acl}.
+\param{acl} sul buffer di dimensione \param{size} all'indirizzo
+\param{buf\_p}, restituendo la dimensione della stessa come valore di
+ritorno. Qualora la dimensione della rappresentazione ecceda il valore di
+\param{size} la funzione fallirà con un errore di \errcode{ERANGE}. La
+funzione non ha nessun effetto sulla ACL indicata da \param{acl}.
Viceversa se si vuole ripristinare una ACL a partire da una rappresentazione
binaria si potrà usare la funzione \funcd{acl\_copy\_int}, il cui prototipo è: