Signatur
Beschreibung
radius_put_attr fügt einem RADIUS-Request ein Attribut in binärer Form hinzu. Diese Funktion wird verwendet, wenn ein Attributwert als roher Binär-String übergeben werden soll – im Gegensatz zu spezialisierteren Funktionen wie radius_put_string oder radius_put_int, die bestimmte Datentypen direkt verarbeiten.
Typische Anwendungsfälle sind herstellerspezifische Attribute (Vendor-Specific Attributes) oder Attribute, deren Wert bereits als Binary-String vorliegt (z. B. verschlüsselte Passwörter, Zertifikate oder sonstige Rohdaten). Der Parameter type entspricht dem RADIUS-Attribut-Code gemäß dem RFC 2865 oder dem jeweiligen Hersteller-RFC.
Die Funktion muss aufgerufen werden, nachdem mit radius_create_request ein neuer Request erstellt wurde und bevor dieser mit radius_send_request abgesendet wird. Es können mehrere Attribute durch wiederholten Aufruf der Funktion hinzugefügt werden.
Im Fehlerfall gibt die Funktion false zurück; mit radius_strerror kann die genaue Fehlermeldung 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 erzeugt wurde. |
|
| $type Pflicht | int | Der numerische RADIUS-Attribut-Typ (z. B. RADIUS_USER_NAME = 1, RADIUS_USER_PASSWORD = 2). Die verfügbaren Typen sind als Konstanten im RADIUS-Modul definiert. |
|
| $value Pflicht | string | Der binäre Wert des Attributs als PHP-String. Dieser wird unverändert in das RADIUS-Paket eingefügt. |
Rückgabewert
true bei Erfolg zurück. Im Fehlerfall wird false zurückgegeben; die genaue Fehlermeldung lässt sich mit radius_strerror($radius_handle) abrufen.Beispiele
Binäres Attribut zu einem RADIUS-Authentication-Request hinzufügen
<?php
$rh = radius_auth_open();
if (!$rh) {
die('Konnte RADIUS-Handle nicht öffnen.');
}
// RADIUS-Server konfigurieren
if (!radius_add_server($rh, '192.168.1.10', 1812, 'geheim', 5, 3)) {
die('Fehler beim Hinzufügen des Servers: ' . radius_strerror($rh));
}
// Neuen Authentication-Request erstellen
if (!radius_create_request($rh, RADIUS_ACCESS_REQUEST)) {
die('Fehler beim Erstellen des Requests: ' . radius_strerror($rh));
}
// Benutzername als Standard-String-Attribut setzen
radius_put_string($rh, RADIUS_USER_NAME, 'maxmustermann');
// Binäres Attribut hinzufügen (z. B. ein benutzerdefiniertes Binär-Feld)
$binaryData = pack('NCC', 12345, 1, 0); // Beispiel-Binärdaten
if (!radius_put_attr($rh, RADIUS_USER_PASSWORD, $binaryData)) {
die('Fehler beim Setzen des Attributs: ' . radius_strerror($rh));
}
// Request absenden
$result = radius_send_request($rh);
if ($result === RADIUS_ACCESS_ACCEPT) {
echo 'Authentifizierung erfolgreich!';
} else {
echo 'Authentifizierung abgelehnt oder Fehler: ' . radius_strerror($rh);
}
radius_close($rh);
?>
Vendor-Specific Attribute (VSA) als Binärwert hinzufügen
<?php
$rh = radius_acct_open();
if (!$rh) {
die('Konnte RADIUS-Accounting-Handle nicht öffnen.');
}
radius_add_server($rh, '10.0.0.1', 1813, 'shared_secret', 5, 3);
radius_create_request($rh, RADIUS_ACCOUNTING_REQUEST);
// Vendor-ID und Vendor-Attribut-Code für ein herstellerspezifisches Attribut
$vendorId = 9; // Cisco Vendor-ID
$vendorType = 1; // Cisco-AV-Pair
$vendorValue = 'service-type=framed';
// Binären VSA-Payload manuell zusammenbauen:
// Vendor-ID (4 Byte, Big-Endian) + Type (1 Byte) + Length (1 Byte) + Wert
$vsa = pack('NCC', $vendorId, $vendorType, strlen($vendorValue) + 2) . $vendorValue;
if (!radius_put_attr($rh, RADIUS_VENDOR_SPECIFIC, $vsa)) {
die('VSA konnte nicht gesetzt werden: ' . radius_strerror($rh));
}
echo 'Vendor-Specific Attribute erfolgreich hinzugefügt.';
radius_close($rh);
?>
// Wichtig · Fallstricke
Vorsicht bei Passwörtern: RADIUS-Passwörter werden im Protokoll verschlüsselt übertragen (MD5-basiert). Wer das Passwort-Attribut (RADIUS_USER_PASSWORD) manuell als Binärwert übergibt, muss die Verschlüsselung gemäß RFC 2865 selbst implementieren. In der Regel ist es sicherer und einfacher, dafür die passende Hilfsfunktion der RADIUS-Erweiterung zu verwenden.
Erweiterung erforderlich: Die Funktion radius_put_attr gehört zur PECL-Erweiterung radius. Diese muss explizit installiert und in der php.ini aktiviert sein (extension=radius). Die Erweiterung steht auf Plattformen wie Linux und macOS zur Verfügung; unter Windows ist die Unterstützung eingeschränkt.
Für einfache Attribut-Typen (Ganzzahlen, Zeichenketten, IP-Adressen) sollten die spezialisierten Funktionen radius_put_int, radius_put_string und radius_put_addr bevorzugt werden, da sie die korrekte Kodierung automatisch übernehmen.