Замена radius-атрибутов при авторизации

Материал из BiTel WiKi

(Различия между версиями)
Перейти к: навигация, поиск
Строка 1: Строка 1:
-
<p>Работает в 4.6 и 5.0</p>
 
-
 
<p>Для некоторых NAS при RADIUS аутентификации
<p>Для некоторых NAS при RADIUS аутентификации
С IOS 12.3 не распознается атрибут <source lang="ini">cisco-avpair=ip:sub-qos-policy-in=; cisco-avpair=ip:sub-qos-policy-out=;</source>
С IOS 12.3 не распознается атрибут <source lang="ini">cisco-avpair=ip:sub-qos-policy-in=; cisco-avpair=ip:sub-qos-policy-out=;</source>
Строка 10: Строка 8:
Событие "radius аутентификация".
Событие "radius аутентификация".
 +
 +
== Версия для 4.6 и 5.0 ==
<source lang="java">
<source lang="java">
Строка 53: Строка 53:
}
}
</source>
</source>
 +
 +
== Версия для 5.1 ==
 +
 +
<source lang="java">
 +
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,1);//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());
 +
}
 +
}
 +
}
 +
}
 +
</source>
 +
 +
 +
ps. Не забываем делать '''./radius.sh flush_script_cache''' после изменения скрипта

Версия 06:59, 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#1=service-policy output.

Событие "radius аутентификация".

Версия для 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++;
		}
	}
}

Версия для 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,1);//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());
		}
	}
}
}


ps. Не забываем делать ./radius.sh flush_script_cache после изменения скрипта

Личные инструменты