From: Simone Piccardi Date: Sat, 28 Jan 2012 16:19:49 +0000 (+0000) Subject: Completata revisione capitolo quattro X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=commitdiff_plain;h=d8546ab4e0814e573709702217c6335f7513d8dc;p=gapil.git Completata revisione capitolo quattro --- diff --git a/filedir.tex b/filedir.tex index 050dcf7..bfcd9ca 100644 --- a/filedir.tex +++ b/filedir.tex @@ -5484,31 +5484,31 @@ estensione usata dalle ACL di Linux e non è portabile, ma consente di semplificare l'inizializzazione in maniera molto comoda. Altre due funzioni che consentono di creare una ACL già inizializzata sono -\funcd{acl\_get\_fd} e \funcd{acl\_get\_file}, che però sono per lo più -utilizzate per leggere la ACL corrente di un file; i rispettivi prototipi -sono: +\funcd{acl\_get\_fd} e \funcd{acl\_get\_file}, che consentono di leggere la +ACL di un file; i rispettivi prototipi sono: \begin{funcproto}{ \fhead{sys/types.h} \fhead{sys/acl.h} \fdecl{acl\_t acl\_get\_file(const char *path\_p, acl\_type\_t type)} \fdecl{acl\_t acl\_get\_fd(int fd)} -\fdesc{Ottiene i dati delle ACL di un file.} +\fdesc{Leggono i dati delle ACL di un file.} } -{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} assumerà uno - dei valori: +{Le funzioni ritornano un oggetto di tipo \type{acl\_t} in caso di successo e + \val{NULL} per un errore, nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} - \item[\errcode{ENOMEM}] non c'è memoria sufficiente per allocare i dati. + \item[\errcode{ACCESS}] non c'è accesso per una componente di + \param{path\_p} o si è richiesta una ACL di default per un file (solo per + \func{acl\_get\_file}). \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}, e \errval{EACCES}, - \errval{ENAMETOOLONG}, \errval{ENOENT}, \errval{ENOTDIR}, per - \func{acl\_get\_file}. } + ed inoltre \errval{ENOMEM} per entrambe, \errval{EBADF} per + \func{acl\_get\_fd}, e \errval{ENAMETOOLONG}, \errval{ENOENT}, + \errval{ENOTDIR}, per \func{acl\_get\_file} nel loro significato generico. } \end{funcproto} Le due funzioni ritornano, con un oggetto di tipo \type{acl\_t}, il valore @@ -5939,10 +5939,10 @@ un messaggio di errore in caso contrario. Ottenuta la ACL la si converte in formato testuale (\texttt{\small 27}) con la funzione \func{acl\_to\_text}, controllando di nuovo se l'operazione ha -successo (\texttt{\small 23--26}) ed uscendo in caso contrario. Si provvede -infine a stampare la rappresentazione testuale (\texttt{\small 28}) e dopo -aver liberato (\texttt{\small 29--30}) le risorse allocate automaticamente, -si conclude l'esecuzione. +successo (\texttt{\small 28--31}) ed uscendo in caso contrario. Si provvede +infine a stampare la rappresentazione testuale (\texttt{\small 32}) e dopo +aver liberato (\texttt{\small 33--34}) le risorse allocate automaticamente, si +conclude l'esecuzione. \subsection{La gestione delle quote disco} @@ -7057,7 +7057,7 @@ basso livello; i loro rispettivi prototipi sono: \fdesc{Imposta le \textit{capabilities}.} } -{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{EFAULT}] si è indicato un puntatore sbagliato o nullo @@ -7877,7 +7877,7 @@ librerie) di cui il server potrebbe avere bisogno. % LocalWords: lazy encfs sshfs setfsent getfsent getfsfile getfsspec endfsent % LocalWords: setmntent getmntent addmntent endmntent hasmntopt such offsetof % LocalWords: member scan attack EOVERFLOW BITS blkcnt rdev FDCWD functions -% LocalWords: faccessat grpid lacl AppArmor capsetp +% LocalWords: faccessat grpid lacl AppArmor capsetp mygetfacl %%% Local Variables: %%% mode: latex diff --git a/listati/mygetfacl.c b/listati/mygetfacl.c new file mode 100644 index 0000000..0ba14cf --- /dev/null +++ b/listati/mygetfacl.c @@ -0,0 +1,36 @@ +#include /* primitive system data types */ +#include /* C standard library */ +#include /* standard I/O library */ +#include /* unix standard library */ +#include /* acl library (use -l acl) */ + +int main(int argc, char *argv[]) +{ +/* + * Variables definition + */ + acl_t acl; + ssize_t size; + char * buffer; + ... + /* must have an argument */ + if ((argc - optind) != 1) { + printf("Wrong number of arguments %d\n", argc - optind); + usage(); + } + /* main body */ + acl = acl_get_file(argv[1], ACL_TYPE_ACCESS); + if (acl == NULL) { + perror("cannot get acl for file"); + return 1; + } + buffer = acl_to_text(acl, &size); + if (buffer == NULL) { + perror("cannot convert acl"); + return 1; + } + printf("ACL for file '%s':\n%s\n", argv[1], buffer); + acl_free(acl); + acl_free(buffer); + return 0; +} diff --git a/sources/mygetfacl.c b/sources/mygetfacl.c index 4d450b6..2e7fed3 100644 --- a/sources/mygetfacl.c +++ b/sources/mygetfacl.c @@ -98,7 +98,7 @@ int main(int argc, char *argv[]) perror("cannot convert acl"); return 1; } - printf("ACL:%s\n", buffer); + printf("ACL for file '%s':\n%s\n", argv[1], buffer); acl_free(acl); acl_free(buffer); return 0;