Start · Sprachen · PHP · Referenz · radius_get_tagged_attr_tag

radius_get_tagged_attr_tag

Funktion

Extrahiert den numerischen Tag-Wert aus einem getaggten RADIUS-Attribut (Tagged Attribute).

Kategorie: misc

Signatur

radius_get_tagged_attr_tag(string $data): int|false

Beschreibung

Die Funktion radius_get_tagged_attr_tag() gehört zur RADIUS-Erweiterung von PHP und wird eingesetzt, wenn RADIUS-Server getaggte Attribute gemäß RFC 2868 übermitteln. Getaggte Attribute erlauben es, mehrere Instanzen eines Attributs (z. B. Tunnel-Parameter) in einer einzigen RADIUS-Antwort zu gruppieren, indem jede Gruppe einen gemeinsamen numerischen Tag trägt.

Der Tag ist ein einzelnes Byte am Anfang des Attributwerts und hat den Wertebereich 1–31. Die Funktion radius_get_tagged_attr_tag() liest exakt dieses führende Byte aus dem binären Rohdaten-String und gibt ihn als Integer zurück. Sie wird typischerweise zusammen mit radius_get_tagged_attr_data() verwendet: Erstere liefert den Tag, Letztere den eigentlichen Nutzdaten-Teil des Attributs.

Das $data-Argument ist der rohe Binärwert, den man zuvor z. B. über radius_get_attr() als RADIUS_TAGGED_STRING-Typ erhalten hat. Ist der Wert korrekt formatiert, gibt die Funktion den Tag-Integer zurück; andernfalls liefert sie false.

  • Typischer Einsatz: Auswertung von Tunnel-Attributen (Tunnel-Type, Tunnel-Medium-Type, Tunnel-Private-Group-ID).
  • Tags ermöglichen, zusammengehörige Attribut-Tupel zu einer logischen Gruppe zusammenzufassen.

Parameter

Name Typ Default Beschreibung
$data Pflicht string Roher Binär-String eines getaggten RADIUS-Attributs, wie er z. B. von radius_get_attr() zurückgegeben wird. Der erste Byte dieses Strings muss der Tag-Wert (1–31) sein.

Rückgabewert

Typ
int|false
Beschreibung
Gibt den numerischen Tag-Wert (Integer im Bereich 1–31) zurück, der im ersten Byte des Attribut-Datenstrings kodiert ist. Bei einem Fehler oder ungültig formatiertem Eingabe-String wird false zurückgegeben.

Beispiele

Tag und Daten eines getaggten Tunnel-Attributs auslesen

<?php
// Verbindung zum RADIUS-Server aufbauen
$radius = radius_auth_open();
radius_add_server($radius, '127.0.0.1', 1812, 'geheimesSecret', 3, 3);
radius_create_request($radius, RADIUS_ACCESS_REQUEST);
radius_put_attr($radius, RADIUS_USER_NAME, 'testuser');
radius_put_attr($radius, RADIUS_USER_PASSWORD, 'testpass');

$result = radius_send_request($radius);

if ($result === RADIUS_ACCESS_ACCEPT) {
    // Alle Attribute der Antwort durchlaufen
    while ($attr = radius_get_attr($radius)) {
        $type  = $attr['attr'];
        $value = $attr['data'];

        // Nur getaggte String-Attribute auswerten
        if ($type === RADIUS_TUNNEL_PRIVATE_GROUP_ID) {
            $tag  = radius_get_tagged_attr_tag($value);
            $data = radius_get_tagged_attr_data($value);

            if ($tag !== false && $data !== false) {
                echo "Tag: $tag, Tunnel-Group-ID: $data\n";
            } else {
                echo "Fehler beim Lesen des getaggten Attributs.\n";
            }
        }
    }
} else {
    echo "Authentifizierung fehlgeschlagen.\n";
}

radius_close($radius);
Tag: 1, Tunnel-Group-ID: Meine-VLAN-Gruppe

Manuelles Testen mit einem synthetisch erzeugten getaggten Attribut-String

<?php
// Getaggter Attribut-String: 1 Byte Tag (0x01) + Nutzdaten
$taggedData = "\x01VPN-Gruppe-42";

$tag  = radius_get_tagged_attr_tag($taggedData);
$data = radius_get_tagged_attr_data($taggedData);

if ($tag !== false) {
    echo "Extrahierter Tag:  " . $tag . "\n";   // 1
    echo "Extrahierte Daten: " . $data . "\n";  // VPN-Gruppe-42
} else {
    echo "Ungültiges getaggtes Attribut.\n";
}
Extrahierter Tag: 1 Extrahierte Daten: VPN-Gruppe-42

// Wichtig · Fallstricke

Verfügbarkeit: Diese Funktion ist nur verfügbar, wenn die PECL-Erweiterung radius installiert ist (pecl install radius). Sie ist nicht Teil der PHP-Standardinstallation.

Tag-Bereich: Laut RFC 2868 sind nur Tag-Werte von 1–31 gültig. Der Wert 0 gilt als kein Tag und sollte mit radius_get_attr() als ungetaggtes Attribut ausgewertet werden. Ungültige oder nicht getaggte Daten können zu false oder unerwarteten Ergebnissen führen.

Zusammenspiel: Verwende radius_get_tagged_attr_tag() immer zusammen mit radius_get_tagged_attr_data(), um sowohl Tag als auch Nutzdaten korrekt zu trennen, statt den Rohdaten-String manuell zu manipulieren.