Ответы:
Я проколол Config.cppфайл, отвечающий за анализ конфигурации. Конфигурация примера на самом деле довольно неплохо справляется со сборкой доступных опций - их не так много.
Когда я ссылаюсь на «пример выходных данных» ниже, я говорю об этой строке (случайно взятой со страницы примера):
17:29:35 (src/loggedfs.cpp:136) getattr /var/ {SUCCESS} [ pid = 8700 kded [kdeinit] uid = 1000 ]
Корневой тег есть <loggedFS>. У него есть два необязательных атрибута:
kded [kdeinit]имя процессаЕдинственные дочерние узлы, о которых он заботится - это <include>и <exclude>. В этом примере они группируют блоки under <includes>и <excludes>блоки, но они игнорируются парсером (как и любые другие узлы, кроме <include>и <exclude>).
Естественно, <include>правила заставляют его выводить строку журнала, если они совпадают, в то время как <exclude>строки заставляют это не делать. В случае перекрытия <exclude>переопределяет <include>. Обычно <include>для регистрации события требуется по крайней мере одно правило, но исключение составляет 0 <include>правил - все события регистрируются, даже если есть совпадающие <exclude>строки .
Оба <include>и <exclude>принимают одинаковые атрибуты:
extensionэто довольно плохое имя, но я думаю, что это обычное использование). Например, если вы touch /mnt/loggedfs/some/file, регулярное выражение в extensionдолжно соответствовать (частично)/mnt/loggedfs/some/file*. Правило соответствует данной операции только в том случае, если владелец процесса, вызвавшего операцию, имеет указанный идентификатор пользователя ( *естественно, это означает, что совпадает любой идентификатор пользователя). В выходных данных примера, 1000UIDgetattrэто действие. Возможные действия:
SUCCESS. Ненулевой код возврата приводит к его сопоставлению FAILURE. Таков возможное только значение, так что скорее всего вы либо собираетесь жёстко SUCCESS, FAILUREили использование , .*если вы хотите , и другие. В выходных данных примера SUCCESSэтоretnameВ отличие от <loggedFS>атрибутов, они не имеют значений по умолчанию. Кроме того, хотя анализатор распознает неизвестные атрибуты и выдает ошибку, он не обнаруживает отсутствующие атрибуты, поэтому, если вы забудете атрибут, он будет использовать неинициализированную память.
<include extension="/a" uid="*" action=".*" retname=".*" />что будет соответствовать каждой операции, которая работает с файлом, путь которого содержит /a- это может даже быть /foo/abc/bar. Вы, вероятно, хотите связать их всех с помощью ^и $, но затем вам нужно включить весь путь, чтобы он соответствовал
/a, исключаете/a/bи включаете/a/b/c, это/a/b/cсмотреть? Включает ли каталог всегда его содержимое?