Signatur
Beschreibung
radius_put_vendor_int() erweitert einen laufenden RADIUS-Request um ein herstellerspezifisches Attribut vom Typ Integer. Solche Vendor-Specific Attributes (VSAs) werden verwendet, um proprietäre Konfigurationswerte an einen RADIUS-Server zu übermitteln, die über den standardisierten RFC-2865-Attributsatz hinausgehen – etwa herstellerspezifische Dienstklassen, Bandbreitenlimits oder Rollenbezeichner.
Die Funktion setzt intern das generische Attribut Vendor-Specific (Typ 26) und kapselt darin die angegebene Vendor-ID zusammen mit dem untergeordneten Attributtyp und Wert. Der Wert wird als vorzeichenbehafteter 32-Bit-Integer übertragen.
Sie muss nach radius_create_request() und vor radius_send_request() aufgerufen werden. Für String-Attribute steht radius_put_vendor_attr() zur Verfügung, für reine Binärdaten radius_put_vendor_addr().
Die Funktion gibt true bei Erfolg zurück. Im Fehlerfall liefert sie false; die Fehlermeldung kann dann mit radius_strerror() abgerufen 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 IANA-zugewiesene Vendor-ID (Enterprise Number) des Herstellers, z. B. 9 für Cisco oder 311 für Microsoft. |
|
| $type Pflicht | int | Der herstellerspezifische Attributtyp (Sub-Typ), der im jeweiligen Herstellerdokument definiert ist. Ein Integer im Bereich 0–255. | |
| $value Pflicht | int | Der zu übermittelnde Integer-Wert des Attributs, z. B. eine Dienstklasse oder ein numerisches Limit. |
Rückgabewert
true zurück, wenn das Attribut erfolgreich dem Request hinzugefügt wurde. Bei einem Fehler wird false zurückgegeben; die Ursache kann mit radius_strerror($radius_handle) ermittelt werden.Beispiele
Cisco-spezifisches Service-Type-Attribut in einen Auth-Request einfügen
<?php
// RADIUS-Handle öffnen
$rh = radius_auth_open();
if (!$rh) {
die('Konnte RADIUS-Handle nicht öffnen');
}
// Server konfigurieren
radius_add_server($rh, '192.168.1.10', 1812, 'geheimnis', 3, 3);
// Auth-Request erstellen
if (!radius_create_request($rh, RADIUS_ACCESS_REQUEST)) {
die('Request-Erstellung fehlgeschlagen: ' . radius_strerror($rh));
}
// Standard-Attribute setzen
radius_put_attr($rh, RADIUS_USER_NAME, 'testuser');
radius_put_attr($rh, RADIUS_USER_PASSWORD, 'passwort');
// Cisco Vendor-ID = 9, Attribut-Typ 1 (cisco-avpair als Int-Variante)
$vendorId = 9; // Cisco Systems
$attrType = 1; // Cisco AV-Pair (vereinfacht als Int-Beispiel)
$attrValue = 42; // herstellerspezifischer Wert
if (!radius_put_vendor_int($rh, $vendorId, $attrType, $attrValue)) {
die('Fehler beim Hinzufügen des VSA: ' . radius_strerror($rh));
}
// Request absenden
$result = radius_send_request($rh);
if ($result === RADIUS_ACCESS_ACCEPT) {
echo 'Zugang gewährt.';
} else {
echo 'Zugang verweigert oder Fehler.';
}
radius_close($rh);
Microsoft-VSA (Vendor-ID 311) mit MPPE-Schlüssellänge hinzufügen
<?php
$rh = radius_auth_open();
radius_add_server($rh, '10.0.0.1', 1812, 'radiussecret', 3, 5);
radius_create_request($rh, RADIUS_ACCESS_REQUEST);
radius_put_attr($rh, RADIUS_USER_NAME, 'vpnuser');
radius_put_attr($rh, RADIUS_USER_PASSWORD, 'vpnpass');
// Microsoft Vendor-ID = 311
// MS-MPPE-Encryption-Types (Typ 7): Wert 6 = 40-Bit + 128-Bit erlaubt
if (!radius_put_vendor_int($rh, 311, 7, 6)) {
echo 'VSA konnte nicht gesetzt werden: ' . radius_strerror($rh);
}
$res = radius_send_request($rh);
echo ($res === RADIUS_ACCESS_ACCEPT) ? 'VPN-Authentifizierung erfolgreich.' : 'Fehlgeschlagen.';
radius_close($rh);
// Wichtig · Fallstricke
Reihenfolge beachten: radius_put_vendor_int() darf erst nach radius_create_request() und vor radius_send_request() aufgerufen werden, andernfalls schlägt die Funktion fehl.
Wertebereich: Der Integer-Wert wird als vorzeichenbehafteter 32-Bit-Wert kodiert. Werte außerhalb von −2 147 483 648 bis 2 147 483 647 können zu unerwartetem Verhalten führen.
Vendor-ID-Korrektheit: Eine falsche Vendor-ID führt dazu, dass der RADIUS-Server das Attribut ignoriert oder mit einem Fehler antwortet. Die Enterprise Numbers sind bei der IANA registriert und können dort nachgeschlagen werden.
PECL-Abhängigkeit: Diese Funktion ist Teil der PECL-Erweiterung radius und nicht in der PHP-Standardinstallation enthalten. Sie muss separat installiert und in der php.ini aktiviert werden (extension=radius).