![]() |
Биллинговая система NoDeny. Скрипт создания конфигурационных файлов nomake.pl. |
Скрипт nomake.pl предназначен для формирования конфигурационных файлов для программ, которым необходимы данные NoDeny. К примеру, dhсp-серверу необходимо предоставить список соответствий ip = mac для каждого клиента.
nomake.pl работает как сателлит, т.е. для него в меню «операции» → «настройки» → «сателлиты» необходимо создать конфиг.
Для работы nomake.pl использует шаблон, по которому формирует выходной файл, например, используем в качестве шаблона example1.txt:
команда bash
perl nomake.pl example1.txt
Если в шаблоне нет ошибок, то скрипт останется в запущенном состоянии и будет периодически перезаписывать заданный выходной файл в случае, если какие-либо данные изменились.
В шаблоне задаются команды в виде тегов по типу html:
содержимое example1.txt
<file>example1.conf</file> <template>1</template> hello. All NoDeny users: <filtr> <lat_login> = <ip> </filtr>
Тег filtr указывает, что фрагмент внутри него будет растиражирован для каждого клиента, для которого будет выполнено условие. В примере условие не указано (об условиях будет сказано ниже). Фильтры важны, поскольку обычно конфиги состоят из общих и персональных данных. В примере строка `hello. All NoDeny users:` - это общие данные, она будет вставлена в выходной файл example1.conf всего один раз, а данные внутри блока filtr будут скопированы для каждого клиента:
содержимое example1.conf
hello. All NoDeny users: login1 = 10.0.0.2 login2 = 10.0.0.8 login3 = 10.0.0.9 login4 = 10.0.1.5
В тексте шаблона конфига необходимо экранировать спецсимволы < или > путем вставки перед ними символа `\`, например:
\< <lat_login> = <ip> \>
содержимое example1.conf
< login1 = 10.0.0.2 > < login2 = 10.0.0.8 > < login3 = 10.0.0.9 > < login4 = 10.0.1.5 >
В качестве тегов, указывающих на данные клиента, nomake воспринимает:
ip - ip адрес; login - логин; lat_login - логин, сконвертированный в латиницу; pass - пароль; state - состояние доступа (on/off); auth - режим авторизации (no/on/ong/off/1/2/3...).
Доступ к дополнительным данным осуществляется через префикс `dopdata-`, после которого идет название (точнее алиас - смотри настройки дополнительных полей) поля. Например:
пример шаблона
<file>test.conf</file> <reload>/usr/local/etc/rc.d/isc-dhcpd restart</reload> <template>1</template> Users in 10.0.0.0/24: <filtr net='10.0.0.0/24'> login: <login>, mac: <dopdata-_mac> </filtr> Users in 10.0.1.0/24: <filtr net='10.0.1.0/24'> login: <login>, speed: <dopdata-_speed_in> </filtr>
сначала будет выведен список соответствий логин/mac для сети 10.0.0.0/24, потом список логин/входящая скорость для сети 10.0.1.0/24.
В теге reload (необязательный) задается команда, которая будет выполнена после того как nomake (пере)создаст конфиг. nomake мониторит изменение данных клиентов, после чего перезаписывает конфиг и вызывает команду тега reload - в данном примере рестарт dhcp-сервера.
Условий может быть несколько:
пример шаблона
<file>test2.conf</file> <template>1</template> Users in 10.0.0.0/24: <filtr net='10.0.0.0/24' state='^on$'> login: <login>, mac: <dopdata-_mac> </filtr>
формат фильтров
<filtr поле1='условие' поле2='условие' поле3='условие'>
<filtr dopdata-_mac='^..:..:..:..:..:..$' state='^on$'>
При тестировании используйте ключ `v`, что приведет к выводу отладочных сообщений на экран:
команда bash
perl nomake.pl -v example2.txt