k-shym / URFAClient

URFAClient PHP (api.xml)
GNU General Public License v3.0
27 stars 9 forks source link

Не работает rpcf_get_radius_attr #22

Closed EvgeniyKorepov closed 6 years ago

EvgeniyKorepov commented 6 years ago

URFAClient-1.3.0, api_53-003.xml Не работает rpcf_get_radius_attr

$URFAParams = array (
  'sid' => 85312,
  'st' => 10000,
);
$radius_attr = $urfa_admin->rpcf_get_radius_attr($URFAParams);

Передача параметров и вызов проходят правильно, в логах билинга вижу

Jul 13 15:10:33 ?Debug : a8bf3b40 DBConnection_mysql: <0x8edc760> SQL SELECT query: SELECT attr_type,vendor,attr,value,flags,expire_date,id FROM radius_data WHERE owner_type='10000' AND owner_id='85312'
Jul 13 15:10:33 ?Debug : a8bf3b40 DBConnection_mysql: <0x8edc760> SQL SELECT query: 1 rows in 0.000 sec

Но с получением результата проблема:

PHP Notice:  Undefined offset: 8 in /opt/URFAClient/classes/URFAClient/Packet.php on line 139

Notice: Undefined offset: 8 in /opt/URFAClient/classes/URFAClient/Packet.php on line 139
PHP Notice:  Undefined offset: 9 in /opt/URFAClient/classes/URFAClient/Packet.php on line 95

Notice: Undefined offset: 9 in /opt/URFAClient/classes/URFAClient/Packet.php on line 95
PHP Warning:  unpack(): Type N: not enough input, need 4, have 0 in /opt/URFAClient/classes/URFAClient/Packet.php on line 275

Warning: unpack(): Type N: not enough input, need 4, have 0 in /opt/URFAClient/classes/URFAClient/Packet.php on line 275
PHP Notice:  Undefined offset: 10 in /opt/URFAClient/classes/URFAClient/Packet.php on line 139

Notice: Undefined offset: 10 in /opt/URFAClient/classes/URFAClient/Packet.php on line 139
PHP Notice:  Undefined offset: 11 in /opt/URFAClient/classes/URFAClient/Packet.php on line 95

Notice: Undefined offset: 11 in /opt/URFAClient/classes/URFAClient/Packet.php on line 95
PHP Warning:  unpack(): Type N: not enough input, need 4, have 0 in /opt/URFAClient/classes/URFAClient/Packet.php on line 275

Warning: unpack(): Type N: not enough input, need 4, have 0 in /opt/URFAClient/classes/URFAClient/Packet.php on line 275
PHP Notice:  Undefined offset: 12 in /opt/URFAClient/classes/URFAClient/Packet.php on line 139

Notice: Undefined offset: 12 in /opt/URFAClient/classes/URFAClient/Packet.php on line 139
PHP Notice:  Undefined offset: 13 in /opt/URFAClient/classes/URFAClient/Packet.php on line 95

Notice: Undefined offset: 13 in /opt/URFAClient/classes/URFAClient/Packet.php on line 95
PHP Warning:  unpack(): Type N: not enough input, need 4, have 0 in /opt/URFAClient/classes/URFAClient/Packet.php on line 275

Warning: unpack(): Type N: not enough input, need 4, have 0 in /opt/URFAClient/classes/URFAClient/Packet.php on line 275
PHP Notice:  Undefined offset: 14 in /opt/URFAClient/classes/URFAClient/Packet.php on line 139

И так до бесконечности пока не остановишь.

EvgeniyKorepov commented 6 years ago

Забыл добавить. В базе по запросу

SELECT attr_type,vendor,attr,value,flags,expire_date,id FROM radius_data WHERE owner_type='10000' AND owner_id='85312'

Выдается результат, т.е. данные есть.

k-shym commented 6 years ago

На utm5-5.3.003-update15 всё работает, тесты написал. Какой update у версии биллинга?

EvgeniyKorepov commented 6 years ago

Хм, вы поставили меня в тупик. Каким образом можно определить версию update?

k-shym commented 6 years ago

1-й вариант $urfa->rpcf_liburfa_list() 2-й вариант Админка -> Дополнительно -> Плагины

EvgeniyKorepov commented 6 years ago

Version:5.3-003-update15-debian_wheezy

k-shym commented 6 years ago

Должно работать. Тестировал на 5.3-003-update15-debian_jessie_x64 Покажите описание функции XML, которую используете.

EvgeniyKorepov commented 6 years ago
  <function name="rpcf_get_radius_attr" id="0x10104">
    <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="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>
        <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>
EvgeniyKorepov commented 6 years ago

А не может быть проблемой 32 разрядная OS?

k-shym commented 6 years ago

Думаю нет, скорее всего проблема с определёнными данными в базе. Откройте сервисные связки, далее RADIUS атрибуты, и сделайте скриншоты параметров всех атрибутов, попробую у себя воспроизвести проблему.

EvgeniyKorepov commented 6 years ago

image Вот собственно и все. Единственный атрибут.

EvgeniyKorepov commented 6 years ago

Думаю списать эту ошибку на фазу Луны ;-) Для обхода сделал SQL-версию функции, дергаю нужное из базы билинга. Так что может ну ее, эту проблему, нафик ;-)

k-shym commented 6 years ago

Проблему воспроизвести мне не удалось. Прогнал тесты на FreeBSD 9 x32. Возможно, у вас ошибка возникает из-за массива prop_size(ваш биллинг отдает данные), заполнить этот массив данными не получается.