Start · Sprachen · PHP · Referenz · radius_put_vendor_int

radius_put_vendor_int

Funktion

Fügt einem RADIUS-Request ein herstellerspezifisches Integer-Attribut (Vendor-Specific Attribute) hinzu.

seit PHP pecl/radius 1.1.0 Kategorie: misc

Signatur

radius_put_vendor_int(resource $radius_handle, int $vendor, int $type, int $value): bool

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

Typ
bool
Beschreibung
Gibt 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);
Zugang gewährt.

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);
VPN-Authentifizierung erfolgreich.

// 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).