Signatur
Beschreibung
radius_get_tagged_attr_data() ist Teil der PECL-Erweiterung radius und dient dazu, aus einem getaggten RADIUS-Attribut-Wert (Tagged Attribute) ausschließlich den eigentlichen Datenanteil zu extrahieren, ohne den vorangestellten Tag-Byte.
In manchen RADIUS-Erweiterungen (z. B. Tunnel-Attribute gemäß RFC 2868) werden Attributwerte mit einem führenden Tag-Byte versehen, das eine logische Gruppierung mehrerer Attribute ermöglicht. Der rohe Attributwert enthält dabei sowohl den Tag als auch die eigentlichen Nutzdaten. radius_get_tagged_attr_data() isoliert dabei nur den Datenteil, während radius_get_tagged_attr_tag() den Tag-Wert zurückgibt.
Typischerweise liest man zunächst den rohen Attributwert über radius_get_attr() aus und übergibt diesen anschließend an radius_get_tagged_attr_data(), um die eigentlichen Nutzdaten weiterzuverarbeiten – beispielsweise einen Tunnel-Server-Endpunkt oder ein Passwort.
- Wird nur benötigt, wenn das betreffende RADIUS-Attribut tatsächlich als getaggtes Attribut definiert ist.
- Für nicht-getaggte Attribute ist diese Funktion nicht sinnvoll.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $data Pflicht | string | Der rohe Wert eines getaggten RADIUS-Attributs, wie er z. B. von radius_get_attr() zurückgegeben wird. Er enthält sowohl das führende Tag-Byte als auch die eigentlichen Nutzdaten. |
Rückgabewert
false zurückgegeben.Beispiele
Getaggtes RADIUS-Attribut auslesen und Daten extrahieren
<?php
// RADIUS-Ressource erstellen und Antwort-Paket parsen
$res = radius_auth_open();
radius_add_server($res, '127.0.0.1', 1812, 'geheimesSecret', 3, 3);
radius_create_request($res, RADIUS_ACCESS_REQUEST);
radius_put_attr($res, RADIUS_USER_NAME, 'testuser');
radius_put_attr($res, RADIUS_USER_PASSWORD, 'testpassword');
$result = radius_send_request($res);
if ($result === RADIUS_ACCESS_ACCEPT) {
// Attribute der Antwort durchlaufen
while ($attr = radius_get_attr($res)) {
// Nur Tunnel-Attribute (z. B. Typ 64–67) sind typischerweise getaggt
if ($attr['attr'] === RADIUS_TUNNEL_TYPE) {
$rawValue = $attr['data'];
$tag = radius_get_tagged_attr_tag($rawValue);
$data = radius_get_tagged_attr_data($rawValue);
if ($data !== false) {
echo "Tag: " . $tag . "\n";
echo "Daten (Tunnel-Typ): " . bin2hex($data) . "\n";
}
}
}
} else {
echo "Authentifizierung fehlgeschlagen: " . radius_strerror($res) . "\n";
}
radius_close($res);
Manuelles Testen mit einem simulierten getaggten Attribut-Wert
<?php
// Ein getaggter Attribut-Wert besteht aus:
// Byte 0: Tag (1–31), Bytes 1–n: eigentliche Daten
// Hier simulieren wir Tag=1, Daten="Hello"
$rawTaggedValue = chr(1) . "Hello";
$tag = radius_get_tagged_attr_tag($rawTaggedValue);
$data = radius_get_tagged_attr_data($rawTaggedValue);
if ($data !== false) {
echo "Tag: " . $tag . "\n"; // 1
echo "Daten: " . $data . "\n"; // Hello
} else {
echo "Fehler beim Extrahieren der Daten.\n";
}
// Wichtig · Fallstricke
PECL-Erweiterung: radius_get_tagged_attr_data() gehört zur PECL-Erweiterung radius, die separat installiert werden muss (pecl install radius). Sie ist nicht im Standard-PHP-Lieferumfang enthalten.
RFC 2868: Getaggte Attribute sind in RFC 2868 spezifiziert und dienen der Gruppierung zusammengehöriger Tunnel-Attribute. Nur diese Attribute sollten mit dieser Funktion verarbeitet werden; bei regulären Attributen sind die Ergebnisse nicht definiert.
Eingabevalidierung: Stellen Sie sicher, dass der übergebene Wert tatsächlich ein getaggtes Attribut ist und mindestens 2 Bytes lang ist, da sonst false zurückgegeben werden kann oder unerwartete Ergebnisse auftreten.