Start · Sprachen · PHP · Referenz · radius_get_tagged_attr_data

radius_get_tagged_attr_data

Funktion

Extrahiert den Datenteil aus einem getaggten RADIUS-Attribut-Wert.

Kategorie: misc

Signatur

radius_get_tagged_attr_data(string $data): string|false

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

Typ
string|false
Beschreibung
Gibt den Datenteil des getaggten Attributs als String zurück. Im Fehlerfall (z. B. bei einem ungültigen oder zu kurzen Eingabewert) wird 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";
}
Tag: 1 Daten: Hello

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