Signatur
Beschreibung
radius_put_vendor_string() ergänzt einen zuvor erstellten RADIUS-Request um ein Vendor-Specific Attribute (VSA) vom Typ String. Diese Attribute werden verwendet, um herstellerspezifische Erweiterungen des RADIUS-Protokolls zu übermitteln, die über die standardisierten RADIUS-Attribute (RFC 2865) hinausgehen.
Vendor-Specific Attributes sind in RADIUS-Paketen über das generische Attribut Vendor-Specific (Typ 26) eingebettet. Die Kombination aus Vendor-ID (eine von der IANA zugewiesene Enterprise-Nummer) und dem herstellerspezifischen Attributtyp ($type) identifiziert das Attribut eindeutig. Bekannte Vendor-IDs sind z. B. RADIUS_VENDOR_MICROSOFT für Microsoft-spezifische MPPE-Attribute.
Die Funktion muss aufgerufen werden, nachdem der Request mit radius_create_request() erstellt und bevor er mit radius_send_request() abgeschickt wurde. Sie gibt true bei Erfolg zurück, andernfalls false; Fehlerdetails lassen sich mit radius_strerror() abrufen.
- Für Integer-Werte steht
radius_put_vendor_int()zur Verfügung. - Für binäre Rohdaten kann
radius_put_vendor_attr()genutzt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $radius_handle Pflicht | resource | Ein gültiges RADIUS-Handle, das zuvor mit radius_auth_open() oder radius_acct_open() erstellt wurde. |
|
| $vendor Pflicht | int | Die Vendor-ID (IANA Enterprise Number) des Herstellers. Vordefinierte Konstanten wie RADIUS_VENDOR_MICROSOFT können verwendet werden. |
|
| $type Pflicht | int | Der herstellerspezifische Attributtyp als Integer. Die gültigen Werte sind in der Dokumentation des jeweiligen Herstellers oder in dessen RADIUS-Dictionary definiert. | |
| $value Pflicht | string | Der String-Wert des Attributs, der in den RADIUS-Request eingebettet werden soll. |
Rückgabewert
true bei Erfolg zurück. Bei einem Fehler wird false zurückgegeben; der Fehlergrund kann mit radius_strerror() abgefragt werden.Beispiele
Herstellerspezifisches String-Attribut in einen RADIUS-Auth-Request einfügen
<?php
// RADIUS-Handle für Authentifizierung öffnen
$radius = radius_auth_open();
if (!$radius) {
die('Konnte RADIUS-Handle nicht öffnen');
}
// Server-Konfiguration hinzufügen
if (!radius_add_server($radius, '192.168.1.10', 1812, 'geheimespasswort', 5, 3)) {
die('Fehler beim Hinzufügen des RADIUS-Servers: ' . radius_strerror($radius));
}
// Neuen Auth-Request erstellen
if (!radius_create_request($radius, RADIUS_ACCESS_REQUEST)) {
die('Fehler beim Erstellen des Requests: ' . radius_strerror($radius));
}
// Standard-Attribute setzen
radius_put_attr($radius, RADIUS_USER_NAME, 'benutzer@example.com');
radius_put_attr($radius, RADIUS_USER_PASSWORD, 'geheimes_passwort');
// Vendor-ID 9 = Cisco, Attributtyp 1 = cisco-avpair
$vendorId = 9; // Cisco Systems
$attrType = 1; // cisco-avpair
$attrValue = 'shell:priv-lvl=15';
if (!radius_put_vendor_string($radius, $vendorId, $attrType, $attrValue)) {
die('Fehler beim Setzen des Vendor-Attributs: ' . radius_strerror($radius));
}
// Request absenden
$result = radius_send_request($radius);
if ($result === RADIUS_ACCESS_ACCEPT) {
echo 'Authentifizierung erfolgreich.' . PHP_EOL;
} elseif ($result === RADIUS_ACCESS_REJECT) {
echo 'Authentifizierung abgelehnt.' . PHP_EOL;
} else {
echo 'Unerwartetes Ergebnis: ' . radius_strerror($radius) . PHP_EOL;
}
radius_close($radius);
Microsoft MPPE-Richtlinienattribut als Vendor-String senden
<?php
// Hinweis: MPPE-Attribute werden normalerweise als binäre Daten übermittelt,
// dieses Beispiel zeigt das Prinzip mit einem String-basierten VSA.
$radius = radius_auth_open();
radius_add_server($radius, '10.0.0.1', 1812, 's3cr3t', 5, 3);
radius_create_request($radius, RADIUS_ACCESS_REQUEST);
radius_put_attr($radius, RADIUS_USER_NAME, 'vpn_user');
radius_put_attr($radius, RADIUS_USER_PASSWORD, 'vpn_pass');
// Vendor-ID 311 = Microsoft, benutzerdefinierter String-Typ 80
$ok = radius_put_vendor_string(
$radius,
RADIUS_VENDOR_MICROSOFT, // 311
80,
'custom-policy-string'
);
if (!$ok) {
echo 'Fehler: ' . radius_strerror($radius) . PHP_EOL;
} else {
echo 'Vendor-String-Attribut erfolgreich hinzugefügt.' . PHP_EOL;
// Request ggf. hier senden ...
}
radius_close($radius);
// Wichtig · Fallstricke
Reihenfolge beachten: Attribute müssen nach radius_create_request() und vor radius_send_request() gesetzt werden. Ein Aufruf außerhalb dieses Rahmens führt zu einem Fehler.
Binäre Daten: Wenn der Attributwert binäre oder verschlüsselte Daten enthält (z. B. MPPE-Schlüssel), sollte stattdessen radius_put_vendor_attr() verwendet werden, da String-Attribute unter Umständen als null-terminiert interpretiert werden können.
Vendor-IDs: Die Vendor-ID muss eine gültige, von der IANA zugewiesene Enterprise-Nummer sein. Falsche IDs führen zu abgelehnten Paketen auf Server-Seite, ohne dass PHP selbst einen Fehler meldet.
Die RADIUS-Extension ist eine PECL-Extension (pecl/radius) und nicht Teil des PHP-Kerns. Sie muss separat installiert werden.