Расширение функциональности TLS Terminator

Механизм плагинов расширяет функциональность TLS Terminator, позволяя внедрять пользовательскую логику в работу компонента TLS Terminator без изменения его исходного кода. Плагины для компонента TLS Terminator представляют собой динамические библиотеки. При разработке плагинов необходимо соблюдать условия, необходимые для использования динамических библиотек. Чтобы использовать механизм плагинов, необходимо выполнить следующие действия:

  1. Разработать плагин, реализующий интерфейс, определенный в файле /opt/KasperskyOS-Community-Edition-<platform>-<version>/sysroot-*-kos/include/tls/tls_plugin_interface.h. Обязательны для реализации следующие функции интерфейса:
    • plugin_init() – инициализация плагина.
    • plugin_fini() – завершение работы плагина.
    • plugin_get_version() – получение версии плагина.

    Реализация остальных функций интерфейса опциональна и зависит от задач, для которых разрабатывается плагин.

  2. При запуске TLS Terminator необходимо передать путь к разработанному плагину через параметр запуска --plugin_path. Подробнее см. "Параметры запуска и переменные окружения TLS Terminator".

Детали работы механизма плагинов:

  1. Плагин загружается в память с использованием POSIX-функции dlopen().
  2. Проверяется совместимость версий с использованием функции plugin_get_version() и инициализация плагина через вызов plugin_init().
  3. При вызове функции, которая может быть перехвачена компонентом TLS Terminator, компонент
    1. Проверяет наличие реализации вызываемой функции в плагине с использованием POSIX-функции dlsym().
    2. Если функция реализована в плагине, то выполняется плагинная версия функции. В противном случае выполняется собственная версия функции компонента TLS Terminator.

    Компонент TLS Terminator при инициализации передает плагину набор указателей на свои собственные реализации функций через структуру tls_functions. Это позволяет плагину вызывать эти реализации, если необходимо.

  4. При завершении работы компонент TLS Terminator завершает работу плагина вызовом функции plugin_fini().
  5. Плагин выгружается из памяти с использованием POSIX-функции dlclose().
В начало