Signatur
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
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);
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";
}
// 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.