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
 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)}
 
 \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}
   \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}
   \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
 \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
 
 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}
 
 
 \subsection{La gestione delle quote disco}
@@ -7057,7 +7057,7 @@ basso livello; i loro rispettivi prototipi sono:
 \fdesc{Imposta le \textit{capabilities}.} 
 }
 
 \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
   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:  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
 
 %%% 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;
     }
        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;
     acl_free(acl);
     acl_free(buffer);
     return 0;