Блок задач

5. Один класс

Темы
Сложность 4

Задача «Парсер правил фаервола»

Разработать парсер правил фаервола, понимающий синтаксис UFW. Это задача, родственная задаче Фаервол.

Входные данные

Файл с одним или несколькими правилами фаервола. В каждой строке — одно правило. Например:

allow 53
deny 53/tcp
allow from 192.168.0.0/24 to any port 22 proto tcp
allow from any to 192.168.0.0/24 port 53 proto udp

Задание

Необходимо реализовать класс-парсер для правил. Результатом парсинга является линейная структура данных (std::list, std::vector), хранящая в себе отдельные правила. Подумайте о том, как инкапсулировать информацию о правиле (со всеми возможными вариантами) в соответствующей структуре (struct FirewallRule).

При некорректном синтаксисе правила парсер должен сигнализировать об ошибке (например, с помощью механизма исключений). Постарайтесь генерировать максимально точное сообщение об ошибке с указанием места и причины.

Тестирование

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