Start · Sprachen · PHP · Referenz · radius_cvt_int

radius_cvt_int

Funktion

Wandelt Rohdaten (aus einem RADIUS-Attributwert) in einen PHP-Integer um.

Kategorie: misc

Signatur

radius_cvt_int(string $data): int

Beschreibung

radius_cvt_int() gehört zur RADIUS-Erweiterung (pecl/radius) und konvertiert den binären Rohdaten-String, den radius_get_attr() oder radius_get_vendor_attr() für Integer-Attribute zurückliefert, in einen lesbaren PHP-int-Wert.

RADIUS-Attribute werden über das Netzwerk als binäre Byte-Strings übertragen. Bevor man mit dem Wert eines Integer-Attributs (z. B. Framed-MTU, Session-Timeout oder Service-Type) rechnen oder ihn vergleichen kann, muss er zunächst in den entsprechenden PHP-Typ gewandelt werden. radius_cvt_int() erledigt genau diese Umwandlung für Integer-Attribute.

Die Funktion ist nur in Kombination mit den anderen radius_*-Funktionen sinnvoll. Zuerst ruft man radius_get_attr() auf, prüft den zurückgegebenen Typ (sollte RADIUS_INTEGER entsprechen) und übergibt dann den data-Schlüssel des Ergebnis-Arrays an radius_cvt_int().

Parameter

Name Typ Default Beschreibung
$data Pflicht string Der binäre Rohdaten-String eines RADIUS-Integer-Attributs, wie er von radius_get_attr() im Schlüssel 'data' zurückgegeben wird.

Rückgabewert

Typ
int
Beschreibung
Der entpackte Integer-Wert des RADIUS-Attributs als PHP-int.

Beispiele

Session-Timeout aus RADIUS-Antwort auslesen

<?php
// RADIUS-Verbindung aufbauen
$res = radius_auth_open();
radius_add_server($res, '127.0.0.1', 1812, 'geheimnis', 3, 3);
radius_create_request($res, RADIUS_ACCESS_REQUEST);
radius_put_attr($res, RADIUS_USER_NAME, 'testuser');
radius_put_attr($res, RADIUS_USER_PASSWORD, 'passwort');

if (radius_send_request($res) === RADIUS_ACCESS_ACCEPT) {
    // Alle Attribute der Antwort durchgehen
    while ($attr = radius_get_attr($res)) {
        if ($attr['attr'] === RADIUS_SESSION_TIMEOUT) {
            // Rohdaten in Integer umwandeln
            $timeout = radius_cvt_int($attr['data']);
            echo "Session-Timeout: " . $timeout . " Sekunden\n";
        }
    }
}

radius_close($res);
Session-Timeout: 3600 Sekunden

Service-Type-Attribut konvertieren und auswerten

<?php
$res = radius_auth_open();
radius_add_server($res, '192.168.1.1', 1812, 'secret', 3, 3);
radius_create_request($res, RADIUS_ACCESS_REQUEST);
radius_put_attr($res, RADIUS_USER_NAME, 'admin');
radius_put_attr($res, RADIUS_USER_PASSWORD, 'adminpass');

if (radius_send_request($res) === RADIUS_ACCESS_ACCEPT) {
    while ($attr = radius_get_attr($res)) {
        if ($attr['attr'] === RADIUS_SERVICE_TYPE) {
            $serviceType = radius_cvt_int($attr['data']);
            // RADIUS_ADMINISTRATIVE_USER = 6
            if ($serviceType === RADIUS_ADMINISTRATIVE_USER) {
                echo "Administrativer Zugriff gewährt.\n";
            } else {
                echo "Normaler Nutzer, Service-Typ: " . $serviceType . "\n";
            }
        }
    }
}

radius_close($res);
Administrativer Zugriff gewährt.

// Wichtig · Fallstricke

Typprüfung empfohlen: Bevor radius_cvt_int() aufgerufen wird, sollte sichergestellt werden, dass das Attribut tatsächlich vom Typ Integer ist. Wird ein Attribut eines anderen Typs (z. B. String oder IP-Adresse) übergeben, ist das Ergebnis undefiniert. Die Konstante RADIUS_INTEGER hilft beim Vergleich des 'attr'-Schlüssels oder des Typs.

Die RADIUS-Erweiterung ist nicht Bestandteil des PHP-Kerns und muss über PECL installiert werden (pecl install radius). Auf vielen Systemen ist sie nicht standardmäßig verfügbar. Alternativ kann unpack('N', $data)[1] denselben Effekt erzielen, da RADIUS-Integer als 32-Bit-Big-Endian-Wert kodiert sind.