X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=filedir.tex;h=e174c5bb37040e7778c9677d6dfdca6bf86cbd27;hp=b65232d88cdd5605f965032d302482c610bd203b;hb=8f0d759b2a9864c839d8803b2ea12860f386f17d;hpb=63f9d744845289fad432dbb642152bdf6a803c0d diff --git a/filedir.tex b/filedir.tex index b65232d..e174c5b 100644 --- a/filedir.tex +++ b/filedir.tex @@ -1,6 +1,6 @@ %% filedir.tex %% -%% Copyright (C) 2000-2012 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2015 Simone Piccardi. Permission is granted to %% copy, distribute and/or modify this document under the terms of the GNU Free %% Documentation License, Version 1.1 or any later version published by the %% Free Software Foundation; with the Invariant Sections being "Un preambolo", @@ -1623,26 +1623,22 @@ Un altro punto da tenere sempre presente è che, come abbiamo accennato, un collegamento simbolico può fare riferimento anche ad un file che non esiste; ad esempio possiamo usare il comando \cmd{ln} per creare un collegamento simbolico nella nostra directory con: -\begin{Command} -$ ln -s /tmp/tmp_file symlink -\end{Command} +\begin{Console} +piccardi@hain:~/gapil$ \textbf{ln -s /tmp/tmp_file symlink} +\end{Console} %$ e questo avrà successo anche se \file{/tmp/tmp\_file} non esiste: -\begin{Command} -$ ls symlink -\end{Command} -\begin{Terminal} +\begin{Console} +piccardi@hain:~/gapil$ \textbf{ls symlink} symlink -\end{Terminal} +\end{Console} %$ ma questo può generare confusione, perché accedendo in sola lettura a \file{symlink}, ad esempio con \cmd{cat}, otterremmo un errore: -\begin{Command} -$ cat symlink -\end{Command} -\begin{Terminal} +\begin{Console} +piccardi@hain:~/gapil$ \textbf{cat symlink} cat: symlink: No such file or directory -\end{Terminal} +\end{Console} %$ con un errore che può sembrare sbagliato, dato che \cmd{ls} ci ha mostrato l'esistenza di \file{symlink}, se invece scrivessimo su \file{symlink} @@ -2446,10 +2442,10 @@ la stampa della sintassi, anch'essa omessa, ma il codice completo può essere trovato coi sorgenti allegati alla guida nel file \file{myls.c}. In sostanza tutto quello che fa il programma, dopo aver controllato -(\texttt{\small 12--15}) di avere almeno un argomento, che indicherà la +(\texttt{\small 12-15}) di avere almeno un argomento, che indicherà la directory da esaminare, è chiamare (\texttt{\small 16}) la funzione \myfunc{dir\_scan} per eseguire la scansione, usando la funzione \code{do\_ls} -(\texttt{\small 22--29}) per fare tutto il lavoro. +(\texttt{\small 22-29}) per fare tutto il lavoro. Quest'ultima si limita (\texttt{\small 26}) a chiamare \func{stat} sul file indicato dalla directory entry passata come argomento (il cui nome è appunto @@ -2476,15 +2472,15 @@ Tutto il grosso del lavoro è svolto dalla funzione \myfunc{dir\_scan}, riportata in fig.~\ref{fig:file_dirscan}. La funzione è volutamente generica e permette di eseguire una funzione, passata come secondo argomento, su tutte le voci di una directory. La funzione inizia con l'aprire (\texttt{\small - 18--22}) uno \textit{stream} sulla directory passata come primo argomento, + 18-22}) uno \textit{stream} sulla directory passata come primo argomento, stampando un messaggio in caso di errore. -Il passo successivo (\texttt{\small 23--24}) è cambiare +Il passo successivo (\texttt{\small 23-24}) è cambiare \index{directory~di~lavoro} directory di lavoro (vedi sez.~\ref{sec:file_work_dir}), usando in sequenza le funzioni \func{dirfd} e \func{fchdir} (in realtà si sarebbe potuto usare direttamente \func{chdir} su \var{dirname}), in modo che durante il successivo ciclo (\texttt{\small - 26--30}) sulle singole voci dello \textit{stream} ci si trovi all'interno + 26-30}) sulle singole voci dello \textit{stream} ci si trovi all'interno della directory.\footnote{questo è essenziale al funzionamento della funzione \code{do\_ls}, e ad ogni funzione che debba usare il campo \var{d\_name}, in quanto i nomi dei file memorizzati all'interno di una struttura @@ -4233,12 +4229,10 @@ condizioni: Un classico esempio di directory che ha questo bit impostato è \file{/tmp}, i cui permessi infatti di solito sono i seguenti: -\begin{Command} -$ ls -ld /tmp -\end{Command} -\begin{Terminal} +\begin{Console} +piccardi@hain:~/gapil$ \textbf{ls -ld /tmp} drwxrwxrwt 6 root root 1024 Aug 10 01:03 /tmp -\end{Terminal} +\end{Console} %$ quindi con lo \textit{sticky bit} bit impostato. In questo modo qualunque utente nel sistema può creare dei file in questa directory, che come @@ -5937,17 +5931,17 @@ ACL di un file, passato come argomento. La sezione principale del programma, da cui si è rimossa la sezione sulla gestione delle opzioni, è riportata in fig.~\ref{fig:proc_mygetfacl}. Il -programma richiede un unico argomento (\texttt{\small 16--20}) che indica il +programma richiede un unico argomento (\texttt{\small 16-20}) che indica il file di cui si vuole leggere la ACL. Se questo è presente si usa (\texttt{\small 22}) la funzione \func{get\_acl\_file} per leggerne la ACL, e -si controlla (\texttt{\small 23--26}) se l'operazione ha successo, uscendo con +si controlla (\texttt{\small 23-26}) se l'operazione ha successo, uscendo con 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 28--31}) ed uscendo in caso contrario. Si provvede +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 +aver liberato (\texttt{\small 33-34}) le risorse allocate automaticamente, si conclude l'esecuzione. @@ -6377,11 +6371,11 @@ quote.\footnote{questi vengono passati come argomenti dalle funzioni mappate con \macro{QCMD} al comando \const{Q\_GETQUOTA} per ottenere i dati. La funzione viene eseguita all'interno di un condizionale (\texttt{\small - 5--16}) che in caso di successo provvede a costruire (\texttt{\small 6--12}) + 5-16}) che in caso di successo provvede a costruire (\texttt{\small 6-12}) opportunamente una risposta restituendo tramite la opportuna funzione di interfaccia un oggetto Python contenente i dati della struttura \struct{dqblk} relativi a uso corrente e limiti sia per i blocchi che per gli \itindex{inode} -\textit{inode}. In caso di errore (\texttt{\small 13--15}) si usa un'altra +\textit{inode}. In caso di errore (\texttt{\small 13-15}) si usa un'altra funzione dell'interfaccia per passare il valore di \var{errno} come eccezione. \begin{figure}[!htbp] @@ -6398,16 +6392,16 @@ riportata in fig.~\ref{fig:set_block_quota}, che prende gli stessi argomenti della precedente, con lo stesso significato, a cui si aggiungono i valori per il \textit{soft limit} e l'\textit{hard limit}. In questo caso occorrerà, prima di chiamare \func{quotactl}, inizializzare opportunamente -(\texttt{\small 5--7}) i campi della struttura \struct{dqblk} che si vogliono +(\texttt{\small 5-7}) i campi della struttura \struct{dqblk} che si vogliono utilizzare (quelli relativi ai limiti sui blocchi) e specificare gli stessi con \const{QIF\_BLIMITS} in \var{dq.dqb\_valid}. Fatto questo la chiamata a \func{quotactl}, stavolta con il comando \const{Q\_SETQUOTA}, viene eseguita come in precedenza all'interno di un -condizionale (\texttt{\small 9--14}). In questo caso non essendovi da +condizionale (\texttt{\small 9-14}). In questo caso non essendovi da restituire nessun dato in caso di successo si usa (\texttt{\small 10}) una apposita funzione di uscita, mentre si restituisce come prima una eccezione -con il valore di \var{errno} in caso di errore (\texttt{\small 12--13}). +con il valore di \var{errno} in caso di errore (\texttt{\small 12-13}). \subsection{La gestione delle \textit{capabilities}} @@ -6836,6 +6830,8 @@ opportuno dettagliare maggiormente. \const{CAP\_AUDIT\_WRITE}&Scrivere dati nel giornale di auditing del kernel (dal kernel 2.6.11).\\ % TODO verificare questa roba dell'auditing + \const{CAP\_BLOCK\_SUSPEND}&Utilizzare funzionalità che possono bloccare + la sospensione del sistema (dal kernel 3.5).\\ \const{CAP\_CHOWN} & Cambiare proprietario e gruppo proprietario di un file (vedi sez.~\ref{sec:file_ownership_management}).\\ @@ -6883,7 +6879,8 @@ opportuno dettagliare maggiormente. funzioni \func{mlock}, \func{mlockall}, \func{shmctl}, \func{mmap} (vedi sez.~\ref{sec:proc_mem_lock} e - sez.~\ref{sec:file_memory_map}). \\ + sez.~\ref{sec:file_memory_map}). \\ +% TODO verificare l'interazione con SHM_HUGETLB \const{CAP\_IPC\_OWNER} & Evitare il controllo dei permessi per le operazioni sugli oggetti di intercomunicazione fra processi (vedi @@ -7597,16 +7594,14 @@ allocare autonomamente e che al solito deve essere disallocato con \errval{ESRCH}. Gli stessi valori possono essere letti direttamente nel filesystem \textit{proc}, nei file \texttt{/proc//status}; ad esempio per \texttt{init} si otterrà qualcosa del tipo: -\begin{Command} -$ cat /proc/1/status -\end{Command} -\begin{Terminal} +\begin{Console} +piccardi@hain:~/gapil$ \textbf{cat /proc/1/status} ... CapInh: 0000000000000000 CapPrm: 00000000fffffeff CapEff: 00000000fffffeff ... -\end{Terminal} +\end{Console} %$ \itindend{capability~state} @@ -7673,14 +7668,14 @@ e si basa su una condizione sulla variabile \var{pid} che se si è usato l'opzione \texttt{-p} è impostata (nella sezione di gestione delle opzioni, che si è tralasciata) al valore del \ids{PID} del processo di cui si vuole leggere le \textit{capabilities} e nulla altrimenti. Nel primo caso -(\texttt{\small 1--6}) si utilizza (\texttt{\small 2}) \func{cap\_get\_proc} +(\texttt{\small 1-6}) si utilizza (\texttt{\small 2}) \func{cap\_get\_proc} per ottenere lo stato delle capacità del processo, nel secondo (\texttt{\small - 7--13}) si usa invece \func{cap\_get\_pid} (\texttt{\small 8}) per leggere + 7-13}) si usa invece \func{cap\_get\_pid} (\texttt{\small 8}) per leggere il valore delle capacità del processo indicato. Il passo successivo è utilizzare (\texttt{\small 15}) \func{cap\_to\_text} per tradurre in una stringa lo stato, e poi (\texttt{\small 16}) stamparlo; infine -(\texttt{\small 18--19}) si libera la memoria allocata dalle precedenti +(\texttt{\small 18-19}) si libera la memoria allocata dalle precedenti funzioni con \func{cap\_free} per poi ritornare dal ciclo principale della funzione.