any other GPL-like (LGPL, GPL2) License. $Id: radius-acct.php,v 1.2 2003/02/01 22:35:45 mbretter Exp $ */ if (!extension_loaded('radius')) { if (preg_match('/windows/i', getenv('OS'))) { dl('php_radius.dll'); } else { dl('radius.so'); } } require_once "Auth/RADIUS.php"; $username = '******'; $starttime = time(); $racct = new Auth_RADIUS_Acct_Start(); $racct->addServer('localhost', 0, 'testing123'); $racct->username = $username; // RADIUS_AUTH_RADIUS => authenticated via Radius // RADIUS_AUTH_LOCAL => authenicated local // RADIUS_AUTH_REMOTE => authenticated remote $racct->authentic = RADIUS_AUTH_LOCAL; $status = $racct->start(); if (PEAR::isError($status)) { printf("Radius start: %s<br>\n", $status->getMessage()); exit; } // you can put any additional attributes here // $racct->putAttribute(RADIUS_ACCT_INPUT_PACKETS, 45236); // $racct->putAttribute(RADIUS_ACCT_OUTPUT_PACKETS, 1212); $result = $racct->send(); if (PEAR::isError($result)) {
/** * Start accounting traffic for the user * * @param string $conn_id The connection id for the connection to work on * @param string $errmsg Reference of error message * * @return bool Returns whether successful or not */ public function acctStart($conn_id, &$errmsg = null) { $db = AbstractDb::getObject(); // Init values $info = null; if (Dependency::check("Auth_RADIUS", $errmsg)) { $conn_id = $db->escapeString($conn_id); $db->execSqlUniqueRes("SELECT CURRENT_TIMESTAMP, *, CASE WHEN ((CURRENT_TIMESTAMP - reg_date) > networks.validation_grace_time) THEN true ELSE false END AS validation_grace_time_expired FROM connections JOIN users ON (users.user_id=connections.user_id) JOIN networks ON (users.account_origin = networks.network_id) WHERE connections.conn_id={$conn_id}", $info, false); // RADIUS accounting start $radius_acct = new Auth_RADIUS_Acct_Start(); $radius_acct->addServer($this->mRadius_hostname, $this->mRadius_acct_port, $this->mRadius_secret_key); // Specify the user for which accounting will be done $radius_acct->username = $info['username']; // Specify the way the user has been authenticated ( via RADIUS, the class did it ) $radius_acct->authentic = RADIUS_AUTH_RADIUS; // Set the session ID to the generated token $radius_acct->session_id = $info['token']; $status = $radius_acct->start(); if (PEAR::isError($status)) { return false; } $result = $radius_acct->send(); if (PEAR::isError($result)) { $errmsg = "Could not send accounting request to RADIUS server."; return false; } else { if ($result !== true) { $radius_acct->close(); $errmsg = "Accounting request rejected by RADIUS server."; return false; } } $radius_acct->close(); // Run generic accounting (local traffic counters) only if RADIUS went OK parent::acctStart($conn_id); return true; } else { return false; } }