From: Simone Piccardi Date: Wed, 19 Sep 2018 01:03:08 +0000 (+0200) Subject: Revisione ACL finita X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=commitdiff_plain;h=ba1abcbbbbf35e297b1a38d0b2030e6fcf7f7543 Revisione ACL finita --- diff --git a/filedir.tex b/filedir.tex index 0e6abb5..5b00cc8 100644 --- a/filedir.tex +++ b/filedir.tex @@ -6031,76 +6031,56 @@ 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 -funzioni; la prima è \funcd{acl\_set\_file}, che opera sia su file che su -directory, ed il cui prototipo è: +funzioni: \funcd{acl\_set\_file}, che opera sia su file che su directory +usando un \textit{pathname}, e \funcd{acl\_set\_file} che opera solo su file +usando un file descriptor; i rispettivi prototipi sono: \begin{funcproto}{ \fhead{sys/types.h} \fhead{sys/acl.h} \fdecl{int acl\_set\_file(const char *path, acl\_type\_t type, acl\_t acl)} \fdesc{Imposta una ACL su un file o una directory.} +\fdecl{int acl\_set\_fd(int fd, acl\_t acl)} +\fdesc{Imposta una ACL su un file descriptor.} } -{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{EACCES}] o un generico errore di accesso a \param{path} o il valore di \param{type} specifica una ACL il cui tipo non può essere assegnato a \param{path}. \item[\errcode{EINVAL}] o \param{acl} non è una ACL valida, o \param{type} - ha un valore non corretto. - \item[\errcode{ENOSPC}] non c'è spazio disco sufficiente per contenere i - dati aggiuntivi della ACL. - \item[\errcode{ENOTSUP}] si è cercato di impostare una ACL su un file - contenuto in un filesystem che non supporta le ACL. - \end{errlist} - ed inoltre \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOTDIR}, - \errval{EPERM}, \errval{EROFS} nel loro significato generico.} -\end{funcproto} - -La funzione consente di assegnare la ACL contenuta in \param{acl} al file o -alla directory indicate dal \textit{pathname} \param{path}, mentre -con \param{type} si indica il tipo di ACL utilizzando le costanti di -tab.~\ref{tab:acl_type}, ma si tenga presente che le ACL di default possono -essere solo impostate qualora \param{path} indichi una directory. Inoltre -perché la funzione abbia successo la ACL dovrà essere valida, e contenere -tutti le voci necessarie, unica eccezione è quella in cui si specifica una ACL -vuota per cancellare la ACL di default associata a -\param{path}.\footnote{questo però è una estensione della implementazione delle - ACL di Linux, la bozza di standard POSIX.1e prevedeva l'uso della apposita - funzione \funcd{acl\_delete\_def\_file}, che prende come unico argomento il - \textit{pathname} della directory di cui si vuole cancellare l'ACL di - default, per i dettagli si ricorra alla pagina di manuale.} La seconda -funzione che consente di impostare una ACL è \funcd{acl\_set\_fd}, ed il suo -prototipo è: - -\begin{funcproto}{ -\fhead{sys/types.h} -\fhead{sys/acl.h} -\fdecl{int acl\_set\_fd(int fd, acl\_t acl)} -\fdesc{Imposta una ACL su un file descriptor.} -} - -{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{EINVAL}] o \param{acl} non è una ACL valida, o ha più voci di - quante se ne possono assegnare al file indicato da \param{fd}. + ha un valore non corretto per \func{acl\_set\_file} o o ha più voci di + quante se ne possono assegnare al file per \func{acl\_set\_fd}. \item[\errcode{ENOSPC}] non c'è spazio disco sufficiente per contenere i dati aggiuntivi della ACL. \item[\errcode{ENOTSUP}] si è cercato di impostare una ACL su un file contenuto in un filesystem che non supporta le ACL. \end{errlist} - ed inoltre \errval{EBADF}, \errval{EPERM}, \errval{EROFS} nel loro - significato generico. -} + ed inoltre nel loro significato generico \errval{EPERM}, \errval{EROFS} per + entrambe, \errval{EBADF} per \func{acl\_set\_fd}, \errval{ENAMETOOLONG}, + \errval{ENOENT}, \errval{ENOTDIR} per \func{acl\_set\_file}.} \end{funcproto} -La funzione è del tutto è analoga a \func{acl\_set\_file} ma opera -esclusivamente sui file identificati tramite un file descriptor. Non dovendo -avere a che fare con directory (e con la conseguente possibilità di avere una -ACL di default) la funzione non necessita che si specifichi il tipo di ACL, -che sarà sempre di accesso, e prende come unico argomento, a parte il file +Con \func{acl\_set\_file} si assegnara la ACL contenuta in \param{acl} al file +o alla directory indicate da \param{path} con \param{type} che indica il tipo +di ACL con le costanti di tab.~\ref{tab:acl_type}; si tenga presente però che +le ACL di default possono essere solo impostate qualora \param{path} indichi +una directory; Inoltre perché la funzione abbia successo la ACL dovrà essere +valida, e contenere tutti le voci necessarie, con l'eccezione di quando in +caso di directory si specifica una ACL vuota per cancellare la ACL di default +associata a \param{path}.\footnote{questo però è una estensione della + implementazione delle ACL di Linux, la bozza di standard POSIX.1e prevedeva + l'uso della apposita funzione \funcd{acl\_delete\_def\_file}, che prende + come unico argomento il \textit{pathname} della directory di cui si vuole + cancellare l'ACL di default, per i dettagli si ricorra alla pagina di + manuale.} + +La seconda funzione, \func{acl\_set\_fd} è del tutto è analoga alla prima, ma +non dovendo avere a che fare con directory (e la conseguente possibilità di +avere una ACL di default) non necessita che si specifichi il tipo di ACL, che +sarà sempre di accesso, e prende come unico argomento, a parte il file descriptor, la ACL da impostare. Le funzioni viste finora operano a livello di una intera ACL, eseguendo in una