Вендор-специфичные Радиус-атрибуты
Posted: 22 Jan 2016, 12:31
Предложение эстетического характера: в AccelPPP широко используются нестандартные Радиус-атрибуты. На мой взгляд, засорять стандартный словарь Радиуса своими атрибутами не вполне хорошо. Я для таких случаев предпочитаю себе завести отдельного "Вендора" и кастомные атрибуты добавлять кучно в словарик этого вендора. Однако в большинстве случаев Accel не понимает ссылки из конфига на вендор-специфичные атрибуты. Предлагаю сделать так, чтобы понимал. Учитывая, что имена вендорских атрибутов должны быть глобально-уникальными, достаточно добавить в поиске атрибута по имени к просмотру неспецифичных атрибутов, также и проход по всем вендорским словарям:
Пардон, оформить патч в виде приложения не удалось ввиду разборчивости форумного движка по отношению к расширениям файлов.
Code: Select all
--- accel-ppp-1.10.0/accel-pppd/radius/dict.c.orig 2015-12-04 15:26:33.000000000 +0200
+++ accel-ppp-1.10.0/accel-pppd/radius/dict.c 2016-01-19 15:25:39.000000000 +0200
@@ -294,7 +294,19 @@
__export struct rad_dict_attr_t *rad_dict_find_attr(const char *name)
{
- return dict_find_attr(&dict->items, name);
+ struct rad_dict_attr_t *res = NULL;
+ struct rad_dict_vendor_t *vendor;
+ res = dict_find_attr(&dict->items, name);
+ if (res)
+ return res;
+
+ list_for_each_entry(vendor, &dict->vendors, entry) {
+ res = dict_find_attr(&vendor->items, name);
+ if (res)
+ return res;
+ }
+
+ return NULL;
}
__export struct rad_dict_attr_t *rad_dict_find_attr_id(struct rad_dict_vendor_t *vendor, int id)