Start · Sprachen · PHP · Referenz · radius_put_vendor_string

radius_put_vendor_string

Funktion

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

seit PHP pecl_radius 1.1.0 Kategorie: misc

Signatur

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

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

Typ
bool
Beschreibung
Gibt 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);
Authentifizierung erfolgreich.

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);
Vendor-String-Attribut erfolgreich hinzugefügt.

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