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