Signatur
Beschreibung
radius_get_vendor_attr() analysiert einen rohen Datenpuffer, der einen herstellerspezifischen RADIUS-Attributwert enthält, und zerlegt ihn in seine drei Bestandteile: Vendor-ID, Attribut-Typ und Attribut-Wert. Die Funktion wird typischerweise eingesetzt, nachdem radius_get_attr() ein Attribut vom Typ RADIUS_VENDOR_SPECIFIC (Typ 26) zurückgegeben hat.
Im RADIUS-Protokoll ermöglichen Vendor-Specific Attributes (VSAs) Herstellern wie Cisco, Juniper oder Microsoft, eigene, nicht standardisierte Attribute zu übertragen. Der rohe Inhalt eines solchen Attributs enthält kodiert die Vendor-ID sowie die eigentlichen Sub-Attribute, die erst durch diese Funktion sinnvoll interpretiert werden können.
Der typische Arbeitsablauf ist: radius_get_attr() in einer Schleife aufrufen, prüfen ob der Typ RADIUS_VENDOR_SPECIFIC ist, und dann den zurückgegebenen Rohwert an radius_get_vendor_attr() weitergeben, um die Vendor-ID und das spezifische Attribut zu erhalten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $data Pflicht | string | Roher Datenpuffer (binärer String) eines herstellerspezifischen RADIUS-Attributs, wie er von radius_get_attr() zurückgegeben wird, wenn der Attributtyp RADIUS_VENDOR_SPECIFIC ist. |
Rückgabewert
vendor (int, die Vendor-ID), type (int, der herstellerspezifische Attributtyp) und data (string, der rohe Attributwert). Im Fehlerfall wird false zurückgegeben.Beispiele
Vendor-Specific Attributes aus einer RADIUS-Antwort auslesen
<?php
// Verbindung zu einem RADIUS-Server herstellen
$radius = radius_auth_open();
radius_add_server($radius, '192.168.1.10', 1812, 'geheimespasswort', 3, 3);
radius_create_request($radius, RADIUS_ACCESS_REQUEST);
radius_put_string_attr($radius, RADIUS_USER_NAME, 'testuser');
radius_put_string_attr($radius, RADIUS_USER_PASSWORD, 'testpass');
$result = radius_send_request($radius);
if ($result === RADIUS_ACCESS_ACCEPT) {
// Alle Attribute der Antwort durchlaufen
while ($attr = radius_get_attr($radius)) {
// Prüfen, ob es sich um ein Vendor-Specific Attribute handelt
if ($attr['attr'] === RADIUS_VENDOR_SPECIFIC) {
$vsa = radius_get_vendor_attr($attr['data']);
if ($vsa !== false) {
echo "Vendor-ID: " . $vsa['vendor'] . PHP_EOL;
echo "Attribut-Typ: " . $vsa['type'] . PHP_EOL;
echo "Attribut-Wert (hex): " . bin2hex($vsa['data']) . PHP_EOL;
}
}
}
}
radius_close($radius);
Microsoft-spezifisches Attribut MS-CHAP-Challenge identifizieren
<?php
// Bekannte Microsoft Vendor-ID (311) und Attribut-Typen
define('VENDOR_MICROSOFT', 311);
define('MS_CHAP_CHALLENGE', 11);
define('MS_CHAP2_RESPONSE', 25);
$radius = radius_auth_open();
// ... Server-Konfiguration und Request-Aufbau ...
while ($attr = radius_get_attr($radius)) {
if ($attr['attr'] === RADIUS_VENDOR_SPECIFIC) {
$vsa = radius_get_vendor_attr($attr['data']);
if ($vsa !== false && $vsa['vendor'] === VENDOR_MICROSOFT) {
switch ($vsa['type']) {
case MS_CHAP_CHALLENGE:
echo "MS-CHAP-Challenge empfangen." . PHP_EOL;
break;
case MS_CHAP2_RESPONSE:
echo "MS-CHAPv2-Response empfangen." . PHP_EOL;
break;
default:
echo "Unbekanntes Microsoft-Attribut Typ " . $vsa['type'] . PHP_EOL;
}
}
}
}
// Wichtig · Fallstricke
PECL-Erweiterung: Diese Funktion gehört zur PECL-Erweiterung radius, die separat installiert werden muss (pecl install radius). Sie ist nicht in der PHP-Standardinstallation enthalten.
Reihenfolge der Verarbeitung: radius_get_vendor_attr() muss immer nach radius_get_attr() aufgerufen werden und nur dann, wenn der zurückgegebene Typ RADIUS_VENDOR_SPECIFIC (26) ist. Ein Aufruf mit beliebigen Strings führt zu undefinierten Ergebnissen oder false.
Binäre Daten: Das Feld data im Rückgabe-Array enthält Rohdaten im Binärformat. Je nach Attributtyp muss es mittels radius_cvt_string(), radius_cvt_int() oder radius_cvt_addr() weiterverarbeitet werden.