Ho frugato Config.cpp, il file responsabile dell'analisi della configurazione. La configurazione di esempio in realtà fa un ottimo lavoro nel catturare le opzioni disponibili - non ce ne sono molte
Quando faccio riferimento a "l'output di esempio" di seguito, sto parlando di questa riga (estratta a caso dalla pagina di esempio):
17:29:35 (src/loggedfs.cpp:136) getattr /var/ {SUCCESS} [ pid = 8700 kded [kdeinit] uid = 1000 ]
Il tag root è <loggedFS>. Ha due attributi opzionali:
- logEnabled è una stringa - "true" significa che dovrebbe effettivamente generare informazioni sul registro; qualsiasi altra cosa disabilita tutta la registrazione. Il valore predefinito è "true", poiché è un po 'l'intero punto del programma
- printProcessName è una stringa: "true" indica che l'output del registro includerà il nome del processo, altrimenti significa che non lo sarà. Il valore predefinito è "vero". Nell'output di esempio,
kded [kdeinit]è il nome del processo
Gli unici nodi figlio a cui tiene sono <include>e <exclude>. Nell'esempio raggruppano quelli sotto <includes>e i <excludes>blocchi, ma quelli vengono ignorati dal parser (come lo sono tutti gli altri nodi tranne <include>e <exclude>).
Naturalmente, le <include>regole causano l'output della riga di registro se corrispondono, mentre le <exclude>righe lo impediscono. In caso di sovrapposizione, <exclude>sostituisce <include>. Normalmente è necessaria almeno una <include>regola da abbinare per registrare un evento, ma un'eccezione è se ci sono 0 <include>regole - quindi tutti gli eventi vengono registrati, anche se ci sono <exclude>linee corrispondenti .
Entrambi <include>e <exclude>assumono gli stessi attributi:
- estensione è un'espressione regolare che viene confrontata con il percorso assoluto del file a cui è stato effettuato l'accesso / modificato / qualunque cosa (
extensionè un nome piuttosto scadente, ma immagino che sia l'uso comune). Ad esempio, se tu touch /mnt/loggedfs/some/file, l'espressione regolare in extensiondovrebbe corrispondere (parzialmente)/mnt/loggedfs/some/file
- uid è una stringa che contiene un numero intero o
*. La regola corrisponde a una determinata operazione solo se il proprietario del processo che ha causato l'operazione ha l'ID utente specificato ( *naturalmente significa che qualsiasi ID utente corrisponde). Nell'output di esempio, 1000è l'UID
- action è il tipo specifico di operazione eseguita sul filesystem. Nell'output di esempio,
getattrè l'azione. Le azioni possibili sono:
- accesso
- chmod
- chown
- getattr
- collegamento
- mkdir
- mkfifo
- mknod
- Aperto
- open-sola lettura
- open-readwrite
- open-writeonly
- leggere
- readdir
- readlink
- rinominare
- rmdir
- statfs
- link simbolico
- troncare
- unlink
- utime
- utimens
- Scrivi
- retname è un'espressione regolare. Se il codice di ritorno dell'operazione effettiva del filesystem eseguita da LoggedFS è 0, l'espressione regolare viene confrontata con la stringa
SUCCESS. Un codice di ritorno diverso da zero fa sì che corrisponda a FAILURE. Questi sono i valori possibili soltanto, in modo molto probabilmente sei o andando a hardcode SUCCESS, FAILUREo l'uso .*se si vuole entrambi. Nell'output di esempio, SUCCESSè ilretname
A differenza degli <loggedFS>attributi, questi non hanno valori predefiniti. Inoltre, mentre il parser riconoscerà gli attributi sconosciuti e gli errori, non rileva gli attributi mancanti, quindi se si dimentica un attributo userà la memoria non inizializzata.
/a, escludi/a/be includi/a/b/c, viene/a/b/cguardato? Includere una directory include sempre il suo contenuto?