4 /10

mlogtail

https://github.com/aadz/mlogtail
Плохо

Прожарка: mlogtail

Оценка: 4/10

Критично

  • [✓ ФАКТ: Код-Рентген] main.go:123uint32‑приведение к int без проверки знака (semgrep). При больших значениях может получиться отрицательное число и сбой подсчётов.
  • [⚠ МНЕНИЕ] main.go:71fmt.Printf("Cannot open %s: %s\n", cfg.listen, err) – выводит cfg.listen, которое всегда пусто; реальный адрес хранится в cfg.lnAddress. Пользователь получит вводящий в заблуждение лог.
  • [⚠ МНЕНИЕ] main.go:84‑90 – парсинг socketMode через fmt.Sprintf("0%d", cfg.socketMode) формирует строку вида 0123, а ParseInt интерпретирует её как десятичную, а не как восьмеричную. В результате права сокета могут быть заданы неверно.
  • [⚠ МНЕНИЕ] main.go:27‑33 – импортированы runtime, regexp, syscall, но нигде не используются → лишний код, мешает статическому анализу и увеличивает размер бинарника.
  • [⚠ МНЕНИЕ] main.go:44‑58 – блок с pprof полностью закомментирован, но оставлен в репозитории. Если включить, то в продакшн‑бинарник попадёт отладочный код без защиты.

Надо переделать

  • [⚠ МНЕНИЕ] Удалить неиспользуемые импорты и закомментированный pprof‑блок; добавить go.mod и go.sum для управления зависимостями.
  • [⚠ МНЕНИЕ] Переписать вывод ошибок в createListener так, чтобы использовалась cfg.lnAddress. Сейчас сообщение «Cannot open : …» не помогает.
  • [⚠ МНЕНИЕ] Заменить парсинг прав сокета на mode, _ := strconv.ParseUint(fmt.Sprintf("%03o", cfg.socketMode), 8, 32) либо принять режим уже в восьмеричном виде.
  • [⚠ МНЕНИЕ] Добавить обработку сигналов (os/signal.Notify) и корректное закрытие listener через defer closeListener(ln, cfg).
  • [⚠ МНЕНИЕ] Переместить парсинг флагов в отдельный файл (flags.go) и вынести бизнес‑логику из main.go в пакет (parser), чтобы тестировать её отдельно.

Мелочи

  • [⚠ МНЕНИЕ] Имена полей Config (например, lnNetworkType) используют «ln», а не «listener», что снижает читаемость.
  • [⚠ МНЕНИЕ] В строке fmt.Printf("Canot open logfile: %s\n", err) опечатка «Canot».
  • [⚠ МНЕНИЕ] В README и README_ru дублируется информация, а LICENSE содержит текст FSF, не совпадающий с автором – подозрение на копипаст.
  • [⚠ МНЕНИЕ] Нет go.mod, gitignore и CI‑конфигураций – проект трудно собрать в чистой среде.
  • [⚠ МНЕНИЕ] Отсутствует тестовый пакет, хотя файл postfix_test.go пустой.

Что хорошо

  • [⚠ МНЕНИЕ] Приложение действительно умеет «tail‑ить» postfix‑лог и выдавать статистику через UNIX‑socket – полезно для мониторинга.
  • [⚠ МНЕНИЕ] Используется проверенный пакет github.com/hpcloud/tail, что упрощает работу с «живыми» файлами.
  • [⚠ МНЕНИЕ] В репозитории есть mlogtail.service – готовый systemd‑юнит, позволяющий запускать демона как сервис.
  • [⚠ МНЕНИЕ] Версия хранится в отдельном файле version.go, что упрощает bump‑версий.
  • [⚠ МНЕНИЕ] Присутствует конфигурация Zabbix‑шаблонов, что сразу делает интеграцию в систему мониторинга.
  • [⚠ МНЕНИЕ] Код компилируется в один статический бинарник (bin/mlogtail-linux_amd64), удобно развёртывать.

Вердикт

Рабочий, но копипаст‑потрошенный проект: без тестов, с «мусором» в коде и минимумом оригинальности.


Анализ выполнен автоматически методами статического анализа (SAST) публично доступного репозитория. Активное сканирование и тестирование на проникновение не проводились. Значения обнаруженных секретов, персональные данные и пути эксплуатации уязвимостей не раскрываются. Цитирование кода — в соответствии со ст. 1274 ГК РФ. Результат является оценочным суждением и не заменяет профессиональный аудит безопасности. Пункты помечены: ✓ факт (линтер), ⚠ мнение (AI), ✗ неверно (опровергнуто).

Raw Markdown Прожарить ещё