Completata revisione capitolo quattro
authorSimone Piccardi <piccardi@gnulinux.it>
Sat, 28 Jan 2012 16:19:49 +0000 (16:19 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Sat, 28 Jan 2012 16:19:49 +0000 (16:19 +0000)
filedir.tex
listati/mygetfacl.c [new file with mode: 0644]
sources/mygetfacl.c

index 050dcf7a5866dd51b2e7a4630a24387a737df041..bfcd9cadb457e0446fb9f89f0a7bc4fd522ea120 100644 (file)
@@ -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 (file)
index 0000000..0ba14cf
--- /dev/null
@@ -0,0 +1,36 @@
+#include <sys/types.h>   /* primitive system data types */
+#include <stdlib.h>      /* C standard library */
+#include <stdio.h>       /* standard I/O library */
+#include <unistd.h>      /* unix standard library */
+#include <sys/acl.h>     /* 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;
+}
index 4d450b6c836278d9024d0640ed3fd905b5112478..2e7fed36f9f0797609e10f7512f1e0e8f8b5a539 100644 (file)
@@ -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;