Разрабатываю решение для точки доступа, и у меня проблема с RADIUS. У меня freeradius на Debian, настроен на работу с MySQL. Аутентификация и назначение атрибутов работают отлично, а вот нужно, чтобы я мог обновлять значения в таблицах MySQL, уменьшая их (например, xmit-limit, recv-limit и session-timeout). RADIUS-сервер назначает эти значения точке доступа без проблем. Например, пользователя можно ограничить использованием на 1 час и 50 МБ. Проблема в том, что если они выходят из сети и снова входят, они получают свои 50 МБ и 1 час обратно. Мне нужно, чтобы MT могла обновлять SQL-таблицы с соответствующими значениями при выходе пользователей из сети и также постепенно, каждую минуту или около того, используя RADIUS-accounting. FreeRADIUS SQL-коннектор уже выполняет SQL-запрос при обновлении accounting и при accounting stop, что работает отлично, но он только добавляет записи в таблицу учета (radacct). Мне нужно, чтобы я мог модифицировать значения в radreply, а также в таблице учета. Вот запрос, который freeradius выполняет в данный момент при accounting stop:
`accounting_stop_query = "UPDATE ${acct_table2} SET ${acct_table2}.AcctStopTime = ‘%S’, ${acct_table2}.AcctSessionTime = ‘%{Acct-Session-Time}’, ${acct_table2}.AcctInputOctets = ‘%{Acct-Input-Octets}’, ${acct_table2}.AcctOutputOctets = ‘%{Acct-Output-Octets}’, ${acct_table2}.AcctTerminateCause = ‘%{Acct-Terminate-Cause}’, ${acct_table2}.AcctStopDelay = ‘%{Acct-Delay-Time}’, ${acct_table2}.ConnectInfo_stop = ‘%{Connect-Info}’ WHERE ${acct_table2}.AcctSessionId = ‘%{Acct-Session-Id}’ AND ${acct_table2}.UserName = ‘%{SQL-User-Name}’ AND ${acct_table2}.NASIPAddress = ‘%{NAS-IP-Address}’;`
И вот что я бы хотел делать также (чтобы обновлять значения данных):
`“UPDATE radreply SET Value = (CASE Attribute WHEN ‘Recv-Limit’ THEN Value - ‘%{Acct-Input-Octets}’ WHEN ‘Xmit-Limit’ THEN Value - ‘%{Acct-Output-Octets}’ END) WHERE UserName = ‘%{SQL-User-Name}’”`
Если у кого-нибудь уже есть подобная конфигурация и кто может помочь – был бы очень признателен. В качестве альтернативы, если вы любитель SQL и можете объединить эти два запроса – тоже было бы здорово. Кажется, что это довольно фундаментальная возможность – обновлять такие атрибуты.
С уважением,
Russell Tester.
`accounting_stop_query = "UPDATE ${acct_table2} SET ${acct_table2}.AcctStopTime = ‘%S’, ${acct_table2}.AcctSessionTime = ‘%{Acct-Session-Time}’, ${acct_table2}.AcctInputOctets = ‘%{Acct-Input-Octets}’, ${acct_table2}.AcctOutputOctets = ‘%{Acct-Output-Octets}’, ${acct_table2}.AcctTerminateCause = ‘%{Acct-Terminate-Cause}’, ${acct_table2}.AcctStopDelay = ‘%{Acct-Delay-Time}’, ${acct_table2}.ConnectInfo_stop = ‘%{Connect-Info}’ WHERE ${acct_table2}.AcctSessionId = ‘%{Acct-Session-Id}’ AND ${acct_table2}.UserName = ‘%{SQL-User-Name}’ AND ${acct_table2}.NASIPAddress = ‘%{NAS-IP-Address}’;`
И вот что я бы хотел делать также (чтобы обновлять значения данных):
`“UPDATE radreply SET Value = (CASE Attribute WHEN ‘Recv-Limit’ THEN Value - ‘%{Acct-Input-Octets}’ WHEN ‘Xmit-Limit’ THEN Value - ‘%{Acct-Output-Octets}’ END) WHERE UserName = ‘%{SQL-User-Name}’”`
Если у кого-нибудь уже есть подобная конфигурация и кто может помочь – был бы очень признателен. В качестве альтернативы, если вы любитель SQL и можете объединить эти два запроса – тоже было бы здорово. Кажется, что это довольно фундаментальная возможность – обновлять такие атрибуты.
С уважением,
Russell Tester.
