Биллинговая система 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>
Тег file задает имя выходного файла, это обязательный тег. template необязательный тег, если не задан - принимается равным 1, указывает на номер шаблона дополнительных данных. Дополнительные данные - это необязательные данные клиентов, которые создаются дополнительно самим администратором. Этими данными могут быть технические данные, паспортные данные и т.д.

Тег 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>
Здесь `dopdata-_mac` указывает, что в данном месте конфига будет вставлено значение дополнительных данных клиентов, которое имеет имя (алиас) _mac. Обратите внимание на фильтры - в примере их 2:

сначала будет выведен список соответствий логин/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>
В примере конфиг формируется только для клиентов в сети 10.0.0.0/24 и у которых доступ не заблокирован.

формат фильтров
<filtr поле1='условие' поле2='условие' поле3='условие'>
Обратитие внимание, что условие обязательно должно быть в одинарных кавычках. Если в условии необходимо использовать такую кавычку - экранируйте ее символом `\`. Условие представляет собой регулярное выражение, например:

<filtr dopdata-_mac='^..:..:..:..:..:..$' state='^on$'>
проверяет, что мак-адрес задан верно, т.е. включает шесть пар символов, разделенных двоеточием. Также проверяется, что поле state равно `on`. Символы `^` и `$` указывают на начало и конец строки. Это стандартный механизм регулярных выражений т.к. 'on' будет соответствовать любой строке, содержащей построку `on`, например, `stone`.

При тестировании используйте ключ `v`, что приведет к выводу отладочных сообщений на экран:

команда bash
perl nomake.pl -v example2.txt