Функции Radius

Содержание

  • radius_acct_open — Создаёт дескриптор Radius для учёта
  • radius_add_server — Добавляет сервер
  • radius_auth_open — Создаёт дескриптор Radius для аутентификации
  • radius_close — Освобождает все ресурсы
  • radius_config — Заставляет библиотеку читать данный файл конфигурации
  • radius_create_request — Создаёт учётную запись или запрос аутентификации
  • radius_cvt_addr — Преобразует необработанные данные в IP-адрес
  • radius_cvt_int — Преобразует необработанные данные в целое число
  • radius_cvt_string — Преобразует необработанные данные в строку
  • radius_demangle_mppe_key — Получает mppe-ключи из искажённых данных
  • radius_demangle — Расшифровывает данные
  • radius_get_attr — Извлекает атрибут
  • radius_get_tagged_attr_data — Извлекает данные из помеченного атрибута
  • radius_get_tagged_attr_tag — Извлекает тег из помеченного атрибута
  • radius_get_vendor_attr — Извлекает атрибут, зависящий от поставщика
  • radius_put_addr — Присоединяет атрибут IP-адреса
  • radius_put_attr — Присоединяет бинарный атрибут
  • radius_put_int — Присоединяет целочисленный атрибут
  • radius_put_string — Присоединяет строковый атрибут
  • radius_put_vendor_addr — Присоединяет атрибут IP-адреса конкретного поставщика
  • radius_put_vendor_attr — Присоединяет бинарный атрибут, зависящий от поставщика
  • radius_put_vendor_int — Присоединяет целочисленный атрибут, зависящий от поставщика
  • radius_put_vendor_string — Присоединяет строковый атрибут, зависящий от поставщика
  • radius_request_authenticator — Возвращает аутентификатор запроса
  • radius_salt_encrypt_attr — Зашифровывает значение с помощью соли
  • radius_send_request — Отправляет запрос и ждёт ответ
  • radius_server_secret — Возвращает общий секрет
  • radius_strerror — Возвращает сообщение об ошибке
add a note add a note

User Contributed Notes 5 notes

up
2
SysCo/al - developer [at] sysco[dot] ch
13 years ago
Pure PHP radius class (do not need the radius package !)

We have implemented a pure PHP radius class following the RFC 2865 rules. Using this class, it is also possible to do WWW realm authentication.

Class abstract, full class implementation (LGPL) with helper files and examples can be found at http://developer.sysco.ch/php/

<?php

// (...)

class Radius
{
   
// (...)

   
public function Radius($ip_radius_server = '127.0.0.1', $shared_secret = '', $radius_suffix = '', $udp_timeout = 5, $authentication_port = 1812, $accounting_port = 1813)
    {
       
// (...)
   
}

   
// (...)

   
function AccessRequest($username = '', $password = '', $udp_timeout = 0)
    {

       
// (...)

       
$_socket_to_server = socket_create(AF_INET, SOCK_DGRAM, 17); // UDP packet = 17
       
       
if ($_socket_to_server === FALSE)
        {
           
// (...)
       
}
        elseif (
FALSE === socket_connect($_socket_to_server, $this->_ip_radius_server, $this->_authentication_port))
        {
           
// (...)
       
}
        elseif (
FALSE === socket_write($_socket_to_server, $packet_data, $packet_length))
        {
           
// (...)
       
}
        else
        {
           
// (...)
           
$read_socket_array   = array($_socket_to_server);
           
$write_socket_array  = NULL;
           
$except_socket_array = NULL;

           
$received_packet = chr(0);

            if (!(
FALSE === socket_select($read_socket_array, $write_socket_array, $except_socket_array, $this->_udp_timeout)))
            {
                if (
in_array($_socket_to_server, $read_socket_array))
                {
                    if (
FALSE === ($received_packet = @socket_read($_socket_to_server, 1024))) // @ used, than no error is displayed if the connection is closed by the remote host
                   
{
                       
// (...)
                   
}
                    else
                    {
                       
socket_close($_socket_to_server);
                    }
                }
            }
            else
            {
               
socket_close($_socket_to_server);
            }
        }

       
// (...)
       
       
return (2 == ($this->_radius_packet_received));
    }
}

?>

Example
<?php
   
require_once('radius.class.php');
   
$radius = new Radius('127.0.0.1', 'secret');
    if (
$radius->AccessRequest('user', 'pass'))
    {
        echo
"Authentication accepted.";
    }
    else
    {
        echo
"Authentication rejected.";
    }
?>
up
0
andac dot aydin at code64 dot de
15 years ago
If you are constantly getting the errormessage:

Fatal error: Unknown function: radius_auth_open() in...

And your Server is a Windows-System (for example standard-xampp installation), you propably did not remove the comment symbol ";" in front of "extension=php_radius.dll" in php.ini.

If you did that, but get the error anyway:

Additionally be sure you edited the right php.ini, since xampp installs several php.exe's but only "xampp/apache/bin/php.ini"  is the correct one!

It did cost me 2 days to find that out!
up
0
shaun at verticalevolution dot com
15 years ago
To expand on the simple example by jengo at phpgroupware dot org you can add a NAS IP address to the request by using:

radius_put_addr($radius, RADIUS_NAS_IP_ADDRESS, '127.0.0.1');

and not radius_put_attr or radius_put_string. I also had to use radius_put_string for the user name and password.
up
-3
jengo at phpgroupware dot org
16 years ago
Here is a simple example on how to auth against radius.  Note:  This doesn't handle challenge responses.

<?php
    $radius
= radius_auth_open();
    if (!
radius_add_server($radius,'localhost',0,'radiussecret',5,3))
    {
        die(
'Radius Error: ' . radius_strerror($radius));
    }

    if (!
radius_create_request($radius,RADIUS_ACCESS_REQUEST))
    {
        die(
'Radius Error: ' . radius_strerror($radius));
    }

   
radius_put_attr($radius,RADIUS_USER_NAME,'username');
   
radius_put_attr($radius,RADIUS_USER_PASSWORD,'password');

    switch (
radius_send_request($radius))
    {
        case
RADIUS_ACCESS_ACCEPT:
            echo
'GOOD LOGIN';
            break;
        case
RADIUS_ACCESS_REJECT:
            echo
'BAD LOGIN';
            break;
        case
RADIUS_ACCESS_CHALLENGE:
            echo
'CHALLENGE REQUESTED';
            break;
        default:
            die(
'Radius Error: ' . radius_strerror($radius));
    }
?>
up
-3
brett at silcon dot com
15 years ago
Here's a longer example that DOES do Challenge Response and works with SecurID Authentication Managers.

http://www.webtrotter.com/securid_radius.txt

(script wouldn't let me post it because of the long lines, plus it was too long of an example).
To Top