}
{La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
- caso \var{errno} assumerà il valore:
+ caso \var{errno} può assumere solo il valore:
\begin{errlist}
\item[\errcode{EINVAL}] \param{obj\_p} non è valido.
\end{errlist}
}
{La funzione ritorna un oggetto di tipo \type{acl\_t} in caso di successo e
- \val{NULL} per un errore, nel qual caso \var{errno} potra assumere
- solo il valore \errval{ENOMEM} nel suo significato generico.}
+ \val{NULL} per un errore, nel qual caso \var{errno} può assumere solo
+ il valore \errval{ENOMEM}.}
\end{funcproto}
dei valori:
\begin{errlist}
\item[\errcode{ENOMEM}] non c'è memoria sufficiente per allocare i dati.
+ \item[\errcode{EINVAL}] \param{type} non ha un valore valido (solo per
+ \func{acl\_get\_file}).
\item[\errcode{ENOTSUP}] il filesystem cui fa riferimento il file non
supporta le ACL.
\end{errlist}
- ed inoltre \errval{EBADF} per \func{acl\_get\_fd}, ed \errval{EINVAL} per
- valori scorretti di \param{type} e tutti i possibili errori per l'accesso ad
- un file per \func{acl\_get\_file}. }
+ ed inoltre \errval{EBADF} per \func{acl\_get\_fd}, e \errval{EACCES},
+ \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOTDIR}, per
+ \func{acl\_get\_file}. }
\end{funcproto}
Le due funzioni ritornano, con un oggetto di tipo \type{acl\_t}, il valore
\item[\errcode{EINVAL}] la rappresentazione testuale all'indirizzo
\param{buf\_p} non è valida.
\end{errlist}
- ed inoltre
-nel loro significato generico.}
+}
\end{funcproto}
La funzione prende come argomento il puntatore ad un buffer dove si è inserita
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.}
+ 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
+lettura, è il seguente:
+\begin{Example}
+user::rw-
+group::r--
+other::r--
+user:piccardi: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
voce sono le stesse. In questo caso non sono consentiti permessi.
Per la conversione inversa, che consente di ottenere la rappresentazione
-testuale di una ACL, sono invece disponibili due funzioni, la prima delle due,
-di uso più immediato, è \funcd{acl\_to\_text}, il cui prototipo è:
+testuale di una ACL, sono invece disponibili due funzioni. La prima delle due,
+di uso più immediato, è \funcd{acl\_to\_text}, ed il suo prototipo è:
\begin{funcproto}{
\fhead{sys/types.h}
\textit{value result argument}) la dimensione della stringa con la
rappresentazione testuale, non comprendente il carattere nullo finale.
-La seconda funzione, \funcd{acl\_to\_any\_text}, permette di controllare con
-dovizia di dettagli la generazione della stringa contenente la
-rappresentazione testuale della ACL, il suo prototipo è:
+La seconda funzione, che permette di controllare con dovizia di dettagli la
+generazione della stringa contenente la rappresentazione testuale della ACL, è
+\funcd{acl\_to\_any\_text}, ed il suo prototipo è:
+
\begin{funcproto}{
\fhead{sys/types.h}
\fhead{sys/acl.h}
{La funzione ritorna la dimensione in byte della rappresentazione binaria
della ACL in caso di successo e $-1$ per un errore, nel qual caso
- \var{errno} assumerà uno dei valori:
+ \var{errno} può assumere solo il valore:
\begin{errlist}
\item[\errcode{EINVAL}] la ACL indicata da \param{acl} non è valida.
\end{errlist}
}
\end{funcproto}
-Prima di effettuare la lettura della rappresentazione binaria è sempre
-necessario allocare un buffer di dimensione sufficiente a contenerla, pertanto
-prima si dovrà far ricorso a \funcd{acl\_size} per ottenere tale dimensione e
-poi allocare il buffer con una delle funzioni di
-sez.~\ref{sec:proc_mem_alloc}. Una volta terminato l'uso della
-rappresentazione binaria, il buffer dovrà essere esplicitamente disallocato,
-in questo caso con \func{free}.
-
-La funzione che consente di leggere la rappresentazione binaria di una ACL è
-\funcd{acl\_copy\_ext}, il cui prototipo è:
+Ottenuta con \func{acl\_size} la dimensione per il buffer lo si potrà allocare
+direttamente con \func{malloc}. La rappresentazione binaria di una ACL si
+potrà poi ottenere con la funzione \funcd{acl\_copy\_ext}, il cui prototipo è:
\begin{funcproto}{
\fhead{sys/types.h}
}
\end{funcproto}
-La funzione salverà la rappresentazione binaria della ACL indicata da
-\param{acl} sul buffer posto all'indirizzo \param{buf\_p} e lungo \param{size}
-byte, 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}.
+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}.
-Viceversa se si vuole ripristinare una ACL a partire dalla rappresentazione
-binaria della stessa disponibile in un buffer si potrà usare la funzione
-\funcd{acl\_copy\_int}, il cui prototipo è:
+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 è:
\begin{funcproto}{
\fhead{sys/types.h}
\fhead{sys/acl.h}
\fdecl{acl\_t acl\_copy\_int(const void *buf\_p)}
-\fdesc{.}
+\fdesc{Ripristina la rappresentazione binaria di una ACL.}
}
{La funzione ritorna un oggetto di tipo \type{acl\_t} in caso di successo e
}
\end{funcproto}
-La funzione in caso di successo alloca autonomamente un oggetto di tipo
-\type{acl\_t} che viene restituito come valore di ritorno con il contenuto
-della ACL rappresentata dai dati contenuti nel buffer puntato da
-\param{buf\_p}. Si ricordi che come per le precedenti funzioni l'oggetto
-\type{acl\_t} dovrà essere disallocato esplicitamente al termine del suo
-utilizzo.
+La funzione alloca autonomamente un oggetto di tipo \type{acl\_t}, restituito
+come valore di ritorno, con il contenuto della ACL rappresentata dai dati del
+buffer puntato da \param{buf\_p}. Al solito l'oggetto \type{acl\_t} dovrà
+essere disallocato esplicitamente al termine del suo utilizzo.
Una volta che si disponga della ACL desiderata, questa potrà essere impostata
su un file o una directory. Per impostare una ACL sono disponibili due
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.
+esplicitamente richiesta. Questo si fa, per tutti i filesystem che le
+supportano, tramite due distinte opzioni di montaggio, \texttt{usrquota} e
+\texttt{grpquota} che abilitano le quote rispettivamente per gli utenti e per
+i gruppi. Così è possibile usare le limitazioni sulle quote o sugli utenti o
+sui gruppi o su entrambi.
Il meccanismo prevede che per ciascun filesystem che supporta le quote disco
(i vari \textit{extN}, \textit{btrfs}, \textit{XFS}, \textit{JFS},
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
-vengono aggiornati soltanto se il filesystem è stato montato con il supporto
-delle quote, se si abilita questo in un secondo tempo (o se si eseguono
-operazioni sul filesystem senza averlo abilitato) i dati contenuti possono non
-corrispondere esattamente allo stato corrente del consumo delle risorse; per
-questo in genere prima di montare in scrittura un filesystem su cui sono
-abilitate le quote in genere viene utilizzato il comando \cmd{quotacheck} per
-verificare e aggiornare i dati.
+precedenza erano \texttt{quota.user} e \texttt{quota.group}.
+
+Dato che i file vengono aggiornati soltanto se il filesystem è stato montato
+con il supporto delle quote, se si abilita questo in un secondo tempo, o se si
+eseguono operazioni sul filesystem senza averlo abilitato, i dati contenuti
+possono non corrispondere esattamente allo stato corrente del consumo delle
+risorse. Per questo in genere prima di montare 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
quote indicato da \param{addr} non esiste o 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{EINVAL}] o \param{cmd} non è un comando valido,
o il dispositivo \param{dev} non esiste.
\item[\errcode{EIO}] errore di lettura/scrittura sul file delle quote.
\const{Q\_SETQUOTA}, \const{Q\_SETUSE}, \const{Q\_SETQLIM} per un
filesystem senza quote attivate.
\end{errlist}
+ ed inoltre \errval{EFAULT} e nel suo significato generico.
}
\end{funcproto}