audd обработка событий в реальном времени C / Stack Overflow

Я пытаюсь написать процесс на C / C ++, который будет анализировать события audd в режиме реального времени.

В настоящее время я использую плагин af_unix для чтения событий аудита из сокета Unix (/var/run/audisp_events по умолчанию).

Я пытался с помощью select(), recv() потреблять события из сокета следующим образом:

select(FD_SETSIZE, &set, NULL, NULL, NULL);
recv(sockfd, message, size, MSG_DONTWAIT);

А затем отправка в auparse callback для синтаксического анализа буфера пример:

auparse_feed(au, buf, (size_t)len);
auparse_flush_feed(au);

Проблема здесь в том, что события audd могут быть событиями с несколькими записями (например, SYSCALL) и использовать recv() потребляют только некоторые записи, а не все, поэтому при обратном вызове синтаксического анализа у меня нет всей информации.

Затем я попытался с помощью getline() потреблять одну запись за раз, но я все еще не могу определить, является ли запись одним событием записи или событиями с несколькими записями.

После прочтения документации audd Вот, Я нашел это:

EOE Triggered to record the end of a multi-record event.

Я могу использовать это, чтобы знать, когда прекратить потребление (потому что getline() это операция блокировки) но EOE Событие существует только в событиях с несколькими записями.

Мои вопросы:

  • Использует af_unix плагин — лучший способ использовать события audd в режиме реального времени?
  • Есть ли способ узнать из информации о записи, если это событие с несколькими записями? если нет, есть ли документация о том, какие события являются событиями с несколькими записями?

1

Решение

Для этого вы должны использовать плагин Audit Dispatcher (audisp).

Вот некоторые ресурсы:

Чтобы узнать количество записей в событии, позвоните auparse_get_num_records.

0

Другие решения

Других решений пока нет …