Замена radius-атрибутов при авторизации
Материал из BiTel WiKi
(Различия между версиями)
(→Версия для 5.1) |
(→Версия для 5.1) |
||
Строка 8: | Строка 8: | ||
Событие "radius аутентификация". | Событие "radius аутентификация". | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
== Версия для 5.1 == | == Версия для 5.1 == | ||
Строка 136: | Строка 91: | ||
</source> | </source> | ||
+ | == Версия для 4.6 и 5.0 == | ||
+ | |||
+ | <source lang="java"> | ||
+ | import bitel.billing.server.contract.bean.*; | ||
+ | import java.util.*; | ||
+ | import bitel.billing.server.util.*; | ||
+ | import bitel.billing.server.radius.*; | ||
+ | import java.sql.*; | ||
+ | import java.util.*; | ||
+ | import bitel.billing.common.CommonTimeUtils; | ||
+ | import bitel.billing.server.util.Utils; | ||
+ | import bitel.billing.server.card.bean.*; | ||
+ | |||
+ | request = event.getRequest(); | ||
+ | response = event.getResponse(); | ||
+ | |||
+ | if (request.hasAttribute(32) && request.getStringAttribute(32).equals("010.010.002.001")) | ||
+ | { | ||
+ | list = response.getVendorAttributes(Vendors.CISCO, 1); | ||
+ | if (list != null) | ||
+ | { | ||
+ | int i = 1; | ||
+ | for (it = list.iterator(); it.hasNext();) | ||
+ | { | ||
+ | ra = (RadiusVendorAttribute)it.next(); | ||
+ | s = ra.getStringValue(); | ||
+ | |||
+ | if (s.indexOf("ip:sub-qos-policy-in=") >= 0) | ||
+ | { | ||
+ | print (s.replaceFirst("ip:sub-qos-policy-in=","lcp:interface-config#" + i + "=service-policy input ")); | ||
+ | ra.setStringValue(s.replaceFirst("ip:sub-qos-policy-in=","lcp:interface-config#" + i + "=service-policy input ")); | ||
+ | } | ||
+ | |||
+ | if (s.indexOf("ip:sub-qos-policy-out=") >= 0) | ||
+ | { | ||
+ | print (s.replaceFirst("ip:sub-qos-policy-out=","lcp:interface-config#" + i +"=service-policy output ")); | ||
+ | ra.setStringValue(s.replaceFirst("ip:sub-qos-policy-out=","lcp:interface-config#" + i +"=service-policy output ")); | ||
+ | } | ||
+ | |||
+ | i++; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
ps. Не забываем делать '''./radius.sh flush_script_cache''' после изменения скрипта | ps. Не забываем делать '''./radius.sh flush_script_cache''' после изменения скрипта |
Текущая версия на 08:04, 10 ноября 2010
Для некоторых NAS при RADIUS аутентификации С IOS 12.3 не распознается атрибут
cisco-avpair=ip:sub-qos-policy-in=; cisco-avpair=ip:sub-qos-policy-out=;
Скрипт заменяет атрибуты на:
lcp:interface-config#1=service-policy input и lcp:interface-config#2=service-policy output.
Событие "radius аутентификация".
Версия для 5.1
import bitel.billing.server.radius.*; import ru.bitel.bgbilling.kernel.network.radius.*; request = event.getRequest(); response = event.getResponse(); List attributesToRemove = new ArrayList(); List attributesToAdd = new ArrayList(); //Чтобы следующий if сработал, нужно, чтобы NAS слал свой ip в атрибуте с № 32 : NAS-Identifier if (request.getStringAttribute(-1,32,null)!=null){ if ( request.getStringAttribute(-1,32,"").equals("010.010.002.001") || request.getStringAttribute(-1,32,"").equals("010.010.002.002") || request.getStringAttribute(-1,32,"").equals("010.010.002.003") ) { int i = 1; // [1] cisco-avpair list = response.getAttributes(Vendors.CISCO,CiscoVendor.Cisco_AVPair); if (list != null) { for (it = list.iterator(); it.hasNext();) { ra = (RadiusAttribute.RadiusAttributeString)it.next(); s = ra.getValue(); if (s.indexOf("ip:sub-qos-policy-in=") >= 0) { print (s.replaceFirst("ip:sub-qos-policy-in=","lcp:interface-config#" + i + "=service-policy input ")); //С версии 5.1 мы не можем сделать следующую строчку, т.е. заменить содержимое атрибута: //ra.setStringValue(s.replaceFirst("ip:sub-qos-policy-in=","lcp:interface-config#" + i + "=service-policy input ")); //Поэтому удаляем старый атрибут и добавляем новый. //Сделать это прямо в цикле мы не можем, поэтому запоминаем текущий элемент attributesToRemove.add(ra); RadiusAttribute.RadiusAttributeString ra_new = new RadiusAttribute.RadiusAttributeString(Vendors.CISCO,1,s.replaceFirst("ip:sub-qos-policy-in=","lcp:interface-config#" + i + "=service-policy input ")); attributesToAdd.add(ra_new); } if (s.indexOf("ip:sub-qos-policy-out=") >= 0) { print (s.replaceFirst("ip:sub-qos-policy-out=","lcp:interface-config#" + i +"=service-policy output ")); //С версии 5.1 мы не можем сделать следующую строчку, т.е. заменить содержимое атрибута: //ra.setStringValue(s.replaceFirst("ip:sub-qos-policy-out=","lcp:interface-config#" + i +"=service-policy output ")); //Поэтому удаляем старый атрибут и добавляяем новый. //Сделать это прямо в цикле мы не можем, поэтому запоминаем текущий элемент attributesToRemove.add(ra); RadiusAttribute.RadiusAttributeString ra_new = new RadiusAttribute.RadiusAttributeString(Vendors.CISCO,1,s.replaceFirst("ip:sub-qos-policy-out=","lcp:interface-config#" + i +"=service-policy output ")); attributesToAdd.add(ra_new); } if (s.indexOf("ip:sub-qos-policy-in=BW-ISG-IN") >= 0){ attributesToRemove.add(ra); } if (s.indexOf("ip:sub-qos-policy-out=BW-ISG") >= 0){ attributesToRemove.add(ra); } i++; } //Удаляем ненужные атрибуты из списка for(it = attributesToRemove.iterator(); it.hasNext();){ list.remove(it.next()); } //Добавляем новые атрибуты из списка for(it = attributesToAdd.iterator(); it.hasNext();){ list.add(it.next()); } } } }
Версия для 4.6 и 5.0
import bitel.billing.server.contract.bean.*; import java.util.*; import bitel.billing.server.util.*; import bitel.billing.server.radius.*; import java.sql.*; import java.util.*; import bitel.billing.common.CommonTimeUtils; import bitel.billing.server.util.Utils; import bitel.billing.server.card.bean.*; request = event.getRequest(); response = event.getResponse(); if (request.hasAttribute(32) && request.getStringAttribute(32).equals("010.010.002.001")) { list = response.getVendorAttributes(Vendors.CISCO, 1); if (list != null) { int i = 1; for (it = list.iterator(); it.hasNext();) { ra = (RadiusVendorAttribute)it.next(); s = ra.getStringValue(); if (s.indexOf("ip:sub-qos-policy-in=") >= 0) { print (s.replaceFirst("ip:sub-qos-policy-in=","lcp:interface-config#" + i + "=service-policy input ")); ra.setStringValue(s.replaceFirst("ip:sub-qos-policy-in=","lcp:interface-config#" + i + "=service-policy input ")); } if (s.indexOf("ip:sub-qos-policy-out=") >= 0) { print (s.replaceFirst("ip:sub-qos-policy-out=","lcp:interface-config#" + i +"=service-policy output ")); ra.setStringValue(s.replaceFirst("ip:sub-qos-policy-out=","lcp:interface-config#" + i +"=service-policy output ")); } i++; } } }
ps. Не забываем делать ./radius.sh flush_script_cache после изменения скрипта