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

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

(Различия между версиями)
Перейти к: навигация, поиск
(Версия для 5.1)
 
(2 промежуточные версии не показаны)
Строка 3: Строка 3:
Скрипт заменяет атрибуты на:
Скрипт заменяет атрибуты на:
<source lang="ini">
<source lang="ini">
-
lcp:interface-config#1=service-policy input  и lcp:interface-config#1=service-policy output.
+
lcp:interface-config#1=service-policy input  и lcp:interface-config#2=service-policy output.
</source>
</source>
</p>
</p>
Событие "radius аутентификация".
Событие "radius аутентификация".
-
 
-
== Версия для 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>
 
== Версия для 5.1 ==
== Версия для 5.1 ==
Строка 78: Строка 33:
// [1] cisco-avpair
// [1] cisco-avpair
-
list = response.getAttributes(Vendors.CISCO,1);//cisco-avpair
+
list = response.getAttributes(Vendors.CISCO,CiscoVendor.Cisco_AVPair);
if (list != null)
if (list != null)
Строка 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 после изменения скрипта

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