Ich habe Config.cppdie Datei durchgesehen , die für das Parsen der Konfiguration verantwortlich ist. Die Beispielkonfiguration macht tatsächlich einen ziemlich guten Job beim Erfassen der verfügbaren Optionen - es gibt nicht sehr viele
Wenn ich mich unten auf "die Beispielausgabe" beziehe, spreche ich von dieser Zeile (zufällig von der Beispielseite gezogen):
17:29:35 (src/loggedfs.cpp:136) getattr /var/ {SUCCESS} [ pid = 8700 kded [kdeinit] uid = 1000 ]
Das Root-Tag ist <loggedFS>. Es hat zwei optionale Attribute:
- logEnabled ist eine Zeichenfolge - "true" bedeutet, dass tatsächlich Protokollinformationen ausgegeben werden sollen. Alles andere deaktiviert die gesamte Protokollierung. Der Standardwert ist "true", da dies der springende Punkt des Programms ist
- printProcessName ist eine Zeichenfolge - "true" bedeutet, dass die Protokollausgabe den Prozessnamen enthält, alles andere bedeutet, dass dies nicht der Fall ist. Der Standardwert ist "true". In der Beispielausgabe
kded [kdeinit]ist der Prozessname
Die einzigen untergeordneten Knoten, die es interessiert, sind <include>und <exclude>. Im Beispiel gruppieren sie diese unter <includes>und <excludes>Blöcke, aber diese werden vom Parser ignoriert (wie alle anderen Knoten außer <include>und <exclude>).
Natürlich führen <include>Regeln dazu, dass die Protokollzeile ausgegeben wird, wenn sie übereinstimmt, während <exclude>Zeilen dies nicht tun. Im Falle einer Überlappung <exclude>überschreiben <include>. Normalerweise muss mindestens eine <include>Regel übereinstimmen, damit ein Ereignis protokolliert werden kann. Eine Ausnahme ist jedoch, wenn 0 <include>Regeln vorhanden sind. Alle Ereignisse werden protokolliert, auch wenn übereinstimmende <exclude>Zeilen vorhanden sind .
Beide <include>und <exclude>nehmen die gleichen Attribute:
- Die Erweiterung ist ein regulärer Ausdruck, der mit dem absoluten Pfad der Datei abgeglichen wird, auf die zugegriffen wurde / die geändert wurde / was auch immer (
extensionist ein ziemlich schlechter Name, aber ich denke, das ist die übliche Verwendung). Wenn Sie dies beispielsweise tun touch /mnt/loggedfs/some/file, muss der reguläre Ausdruck in extension(teilweise) übereinstimmen/mnt/loggedfs/some/file
- uid ist eine Zeichenfolge, die entweder eine Ganzzahl oder enthält
*. Die Regel stimmt nur mit einer bestimmten Operation überein, wenn der Eigentümer des Prozesses, der die Operation verursacht hat, über die angegebene Benutzer-ID verfügt (was *natürlich bedeutet, dass eine Benutzer-ID übereinstimmt). In der Beispielausgabe 1000ist die UID
- Aktion ist die spezifische Art der Operation, die auf dem Dateisystem ausgeführt wird. In der Beispielausgabe
getattrist die Aktion. Die möglichen Aktionen sind:
- Zugriff
- chmod
- chown
- getattr
- Verknüpfung
- mkdir
- mkfifo
- mknod
- öffnen
- nur offen lesbar
- Open-Readwrite
- nur offen schreiben
- lesen
- readdir
- readlink
- umbenennen
- rmdir
- statfs
- symlink
- kürzen
- Verknüpfung aufheben
- utime
- utimens
- schreiben
- retname ist ein regulärer Ausdruck. Wenn der Rückkehrcode der von LoggedFS ausgeführten tatsächlichen Dateisystemoperation 0 ist, wird der reguläre Ausdruck mit der Zeichenfolge abgeglichen
SUCCESS. Ein Rückkehrcode ungleich Null bewirkt, dass er mit übereinstimmt FAILURE. Das sind die einzigen möglichen Werte, so dass die meisten wahrscheinlich wirst du entweder hart codieren SUCCESS, FAILUREoder die Verwendung , .*wenn Sie beide wollen. In der Beispielausgabe SUCCESSist dieretname
Im Gegensatz zu den <loggedFS>Attributen haben diese keine Standardeinstellungen. Während der Parser unbekannte Attribute und Fehler erkennt, erkennt er keine fehlenden Attribute. Wenn Sie also ein Attribut vergessen, wird nicht initialisierter Speicher verwendet.
/a, ausschließen/a/bund einschließen/a/b/c, wird/a/b/cbeobachtet? Enthält das Einfügen eines Verzeichnisses immer dessen Inhalt?