5.3-003-update15, проблема с rpcf_set_radius_attr

Технические вопросы по UTM 5.0
Ответить
cyb3r_ang31
Сообщения: 25
Зарегистрирован: Сб авг 02, 2014 07:38
Откуда: Красноярский край
Контактная информация:

5.3-003-update15, проблема с rpcf_set_radius_attr

Сообщение cyb3r_ang31 »

Господа гуру, подскажите куда копнуть.
Пытаюсь при помощи офциального урфа клиента внести изменения в радиус-атрибуты сервиса, имеем следующую картину:
Биллинг:

Код: Выделить всё

NetUP UTM billing system core. Compile date: Apr  1 2016 12:55:21
Version:5.3-003-update15-centos6_x64 Rev #15609
Описание функции из api.xml

Код: Выделить всё

<function name="rpcf_set_radius_attr" id="0x10103">
    <input>
      <integer name="sid" />
      <integer name="st" />
      <integer name="cnt" />
      <for name="i" from="0" count="cnt">
        <integer name="vendor" array_index="i" />
        <integer name="attr" array_index="i" />
        <integer name="usage_flags" array_index="i" />
        <integer name="expire_date" array_index="i" default="2000000000"/>
        <integer name="param1" array_index="i" />
        <if variable="param1" value="1" condition="eq">
          <string name="cval" array_index="i" />
        </if>
        <if variable="param1" value="2" condition="eq">
          <integer name="ival" array_index="i" />
        </if>
        <if variable="param1" value="3" condition="eq">
          <string name="val" array_index="i" />
        </if>
        <integer name="prop_size" array_index="i"/>
        <for name="p" from="0" count="prop_size">
          <integer name="type" array_index="i,p"/>
          <string name="value" array_index="i,p"/>
        </for>
      </for>
    </input>
    <output/>
  </function>
Имеется следующий урфа-скрипт set_radius_attr.xml:

Код: Выделить всё

<urfa>
    <parameter name="sid" />
    <parameter name="st" value="5" />
    <parameter name="cnt" />
    <call function="rpcf_set_radius_attr" />
</urfa>
st - я так понял service_type, 5 для dialup

Имеется следующий дата-файл:

Код: Выделить всё

<?xml version='1.0' encoding='utf-8'?>
<urfa>
    <array comment="" dimension="2" name="vendor">
        <dim>14988</dim>
        <dim>14122</dim>
    </array>
    <array comment="" dimension="2" name="attr">
        <dim>17</dim>
        <dim>4</dim>
    </array>
    <array comment="" dimension="2" name="usage_flags">
        <dim>17</dim>
        <dim>17</dim>
    </array>
    <array comment="" dimension="2" name="param1">
        <dim>0</dim>
        <dim>1</dim>
    </array>
    <array comment="" dimension="2" name="cval">
        <dim>300</dim>
        <dim>http&#58;//www.example.com</dim>
    </array>
    <array comment="" dimension="2" name="ival">
        <dim>300</dim>
        <dim>http&#58;//www.example.com</dim>
    </array>
    <array comment="" dimension="2" name="val">
        <dim>300</dim>
        <dim>http&#58;//www.example.com</dim>
    </array>
    <array comment="" dimension="2" name="prop_size">
        <dim>0</dim>
        <dim>0</dim>
    </array>
</urfa>
Пытаюсь запустить официальную урфу

Код: Выделить всё

utm5_urfaclient -a set_radius_attr -sid 10 -cnt 2 -datafile /tmp/blafoo
Урфа выводит:

Код: Выделить всё

<?xml version="1.0"?>
<urfa>
  <session key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>
  <call function="rpcf_set_radius_attr">
    <output/>
  </call>
</urfa>
Т.е. вроде все нормально, НО при этом в биллинге ничего не меняется
В debug.log видим следующее:

Код: Выделить всё

Dec 06 18&#58;38&#58;01 ?Debug &#58; ace0d700 RPCConn&#91;SSL&#93;<xxx@xxx.xxx.xxx.xxx>&#58; Call&#58; 0x10103 &#40;rpcf_set_radius_attr&#41;
Dec 06 18&#58;38&#58;01 ?Debug &#58; ace0d700 RPCConn&#91;SSL&#93;<xxx@xxx.xxx.xxx.xxx>&#58; Real Call&#58; 0x10103 &#40;rpcf_set_radius_attr&#41;
Dec 06 18&#58;38&#58;01  ERROR &#58; ace0d700 RPCServer@xxx.xxx.xxx.xxx&#58; Exception in void* rpcf_set_radius_attr&#40;void*&#41;&#58; &#91;unknown&#93;
Dec 06 18&#58;38&#58;01 ?Debug &#58; ace0d700 RPCConn&#91;SSL&#93;<xxx@xxx.xxx.xxx.xxx>&#58; Call 0x10103 &#40;rpcf_set_radius_attr&#41; finished in 0.05 sec
Т.е. урфа клиент говорит, что он отработал, а в биллинге функция не выполнилась

При этом если изменить массив param1 и поставить там все 1, то скрипт отрабатывает полостью, но тип у радиус атрибутов выставляется в "Строка"

Т.е. почему то rpcf_set_radius_attr работает только если в массиве param1 передать все 1. Любые другие значения (0, 2, 3) приводят к вышеуказанной ошибке в debug.log.

Подскажите, может я как-то неверно передаю параметры? Или это баг и стоит писать в hotline?

Аватара пользователя
Magnum72
Сообщения: 1947
Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:

Сообщение Magnum72 »

Есть такое, пофиксили недавно.

cyb3r_ang31
Сообщения: 25
Зарегистрирован: Сб авг 02, 2014 07:38
Откуда: Красноярский край
Контактная информация:

Сообщение cyb3r_ang31 »

А в какой версии пофиксили не подскажите?

Аватара пользователя
Magnum72
Сообщения: 1947
Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:

Сообщение Magnum72 »

не уверен точно , но вроде это:

T528 Устранена проблема, в ряде случаев приводившая к ошибкам сохранения RADIUS-атрибутов сервисной связки ip-трафика

cyb3r_ang31
Сообщения: 25
Зарегистрирован: Сб авг 02, 2014 07:38
Откуда: Красноярский край
Контактная информация:

Сообщение cyb3r_ang31 »

Обновился до 5.3-004 up2
Мало того, что ничего не изменилось, так еще и функции в api.xml не поправили, хотя в новой версии
rpcf_get_radius_attr - это 0x10106
rpcf_set_radius_attr - это 0x10105

Кому нужно вот пока примерные описания:

Код: Выделить всё

<function name="rpcf_set_radius_attr_new" id="0x10105">
    <input>
      <integer name="sid" />
      <integer name="st" />
      <integer name="cnt" />
      <for name="i" from="0" count="cnt">
        <integer name="vendor" array_index="i" />
        <integer name="attr" array_index="i" />
        <integer name="tag" array_index="i" />
        <integer name="usage_flags" array_index="i" />
        <integer name="expire_date" array_index="i" default="2000000000"/>
        <integer name="param1" array_index="i" />
        <if variable="param1" value="0" condition="eq">
          <string name="ival" array_index="i" />
        </if>
        <if variable="param1" value="1" condition="eq">
          <string name="cval" array_index="i" />
        </if>
        <if variable="param1" value="2" condition="eq">
          <integer name="ival" array_index="i" />
        </if>
        <if variable="param1" value="3" condition="eq">
          <string name="cval" array_index="i" />
        </if>
        <integer name="prop_size" array_index="i"/>
        <for name="p" from="0" count="prop_size">
          <integer name="type" array_index="i,p"/>
          <string name="value" array_index="i,p"/>
        </for>
      </for>
    </input>
    <output/>
  </function>

Код: Выделить всё

<function name="rpcf_get_radius_attr_new" id="0x10106">
    <input>
      <integer name="sid"/>
      <integer name="st"/>
    </input>
    <output>
      <integer name="radius_data_size"/>
      <for name="i" from="0" count="radius_data_size">
        <integer name="vendor" array_index="i"/>
        <integer name="attr" array_index="i"/>
        <integer name="tag" array_index="i"/>
        <integer name="usage_flags" array_index="i"/>
        <integer name="expire_date" array_index="i"/>
        <integer name="param1" array_index="i" />
        <set dst="tmp_type" src="param1" src_index="i"/>
        <!-- integer -->
        <if variable="tmp_type" array_index="i" value="0" condition="eq">
          <integer name="val" array_index="i" />
        </if>
        <!-- string -->
        <if variable="tmp_type" value="1" condition="eq">
          <string name="val" array_index="i" />
        </if>
        <!-- IP-address -->
        <if variable="tmp_type" value="2" condition="eq">
          <integer name="val" array_index="i" />
        </if>
        <!-- HEX string -->
        <if variable="tmp_type" value="3" condition="eq">
          <string name="val" array_index="i" />
        </if>
        <!-- Other -->
        <if variable="tmp_type" value="-1" condition="eq">
          <string name="val" array_index="i" />
        </if>

        <integer name="prop_size" array_index="i"/>
        <for name="p" from="0" count="prop_size">
          <integer name="type" array_index="i,p"/>
          <string name="value" array_index="i,p"/>
        </for>
      </for>
    </output>
  </function>

cyb3r_ang31
Сообщения: 25
Зарегистрирован: Сб авг 02, 2014 07:38
Откуда: Красноярский край
Контактная информация:

Сообщение cyb3r_ang31 »

Видимо придется писать в хотлайн

Ответить