HS 2.0: CoA-Request from Terms and Conditions server

This extends the terms.php implementation of Hotspot 2.0 Terms and
Conditions server to allow it to interact with hostapd(AS) to clear the
filtering rules from the AP. After requesting hostapd to send out the
CoA-Request, terms.php waits for up to 10 seconds to see whether the
current_sessions table gets an update to indicate that filtering has
been successfully disabled.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
This commit is contained in:
Jouni Malinen 2018-06-22 20:22:40 +03:00 committed by Jouni Malinen
parent 6ccab679c2
commit 73d3f88418
3 changed files with 41 additions and 0 deletions

View File

@ -71,3 +71,13 @@ CREATE TABLE pending_tc(
mac_addr TEXT PRIMARY KEY, mac_addr TEXT PRIMARY KEY,
identity TEXT identity TEXT
); );
CREATE TABLE current_sessions(
mac_addr TEXT PRIMARY KEY,
identity TEXT,
start_time TEXT,
nas TEXT,
hs20_t_c_filtering BOOLEAN,
waiting_coa_ack BOOLEAN,
coa_ack_received BOOLEAN
);

View File

@ -3,4 +3,5 @@ $osu_root = "/home/user/hs20-server";
$osu_db = "sqlite:$osu_root/AS/DB/eap_user.db"; $osu_db = "sqlite:$osu_root/AS/DB/eap_user.db";
$t_c_file = "$osu_root/terms-and-conditions"; $t_c_file = "$osu_root/terms-and-conditions";
$t_c_timestamp = 123456789; $t_c_timestamp = 123456789;
$hostapd_ctrl = "udg:///home/user/hs20-server/AS/ctrl/as"
?> ?>

View File

@ -41,6 +41,36 @@ if (!$accept) {
echo "<p>Terms and conditions were accepted.</p>"; echo "<p>Terms and conditions were accepted.</p>";
} }
$fp = fsockopen($hostapd_ctrl);
if (!$fp) {
die("Could not connect to hostapd(AS)");
}
fwrite($fp, "DAC_REQUEST coa $addr t_c_clear");
fclose($fp);
$waiting = true;
$ack = false;
for ($i = 1; $i <= 10; $i++) {
$res = $db->prepare("SELECT waiting_coa_ack,coa_ack_received FROM current_sessions WHERE mac_addr=?");
$res->execute(array($addr));
$row = $res->fetch();
if (!$row) {
die("No current session for the specified MAC address");
}
$waiting = $row[0] == 1;
$ack = $row[1] == 1;
$res->closeCursor();
if (!$waiting)
break;
sleep(1);
}
if ($ack) {
echo "<P>Filtering disabled.</P>\n";
} else {
echo "<P>Failed to disable filtering.</P>\n";
}
} }
?> ?>