36require_once
'PEAR.php';
148 function addServer($servername =
'localhost', $port = 0, $sharedSecret =
'testing123', $timeout = 3, $maxtries = 3)
150 $this->_servers[] = array($servername, $port, $sharedSecret, $timeout, $maxtries);
161 return radius_strerror($this->res);
173 $this->_configfile =
$file;
188 $type = gettype($value);
194 return radius_put_int($this->res,
$attrib, $value);
197 return radius_put_addr($this->res,
$attrib, $value);
201 return radius_put_attr($this->res,
$attrib, $value);
220 $type = gettype($value);
226 return radius_put_vendor_int($this->res, $vendor,
$attrib, $value);
229 return radius_put_vendor_addr($this->res, $vendor,
$attrib, $value);
233 return radius_put_vendor_attr($this->res, $vendor,
$attrib, $value);
245 foreach ($this->attributes as $name =>
$data) {
246 echo
"$name:$data<br>\n";
275 if (!$this->useStandardAttributes)
281 $var = &
$GLOBALS[
'HTTP_SERVER_VARS'];
284 $this->
putAttribute(RADIUS_NAS_IDENTIFIER, isset($var[
'HTTP_HOST']) ? $var[
'HTTP_HOST'] :
'localhost');
285 $this->
putAttribute(RADIUS_NAS_PORT_TYPE, RADIUS_VIRTUAL);
286 $this->
putAttribute(RADIUS_SERVICE_TYPE, RADIUS_FRAMED);
287 $this->
putAttribute(RADIUS_FRAMED_PROTOCOL, RADIUS_PPP);
288 $this->
putAttribute(RADIUS_CALLING_STATION_ID, isset($var[
'REMOTE_HOST']) ? $var[
'REMOTE_HOST'] :
'127.0.0.1');
298 if (isset($this->username)) {
315 function putServer($servername, $port = 0, $sharedsecret =
'testing123', $timeout = 3, $maxtries = 3)
317 if (!radius_add_server($this->res, $servername, $port, $sharedsecret, $timeout, $maxtries)) {
332 if (!radius_config($this->res,
$file)) {
346 if (!$this->
open()) {
350 foreach ($this->_servers as $s) {
352 if (!$this->
putServer($s[0], $s[1], $s[2], $s[3], $s[4])) {
357 if (!empty($this->_configfile)) {
377 $req = radius_send_request($this->res);
383 case RADIUS_ACCESS_ACCEPT:
384 if (is_subclass_of($this,
'auth_radius_acct')) {
385 return $this->
raiseError(
'RADIUS_ACCESS_ACCEPT is unexpected for accounting');
389 case RADIUS_ACCESS_REJECT:
392 case RADIUS_ACCOUNTING_RESPONSE:
393 if (is_subclass_of($this,
'auth_radius_pap')) {
394 return $this->
raiseError(
'RADIUS_ACCOUNTING_RESPONSE is unexpected for authentication');
399 return $this->
raiseError(
"Unexpected return value: $req");
419 while (
$attrib = radius_get_attr($this->res)) {
428 $this->rawAttributes[$attr] =
$data;
431 case RADIUS_FRAMED_IP_ADDRESS:
432 $this->attributes[
'framed_ip'] = radius_cvt_addr(
$data);
435 case RADIUS_FRAMED_IP_NETMASK:
436 $this->attributes[
'framed_mask'] = radius_cvt_addr(
$data);
439 case RADIUS_FRAMED_MTU:
440 $this->attributes[
'framed_mtu'] = radius_cvt_int(
$data);
443 case RADIUS_FRAMED_COMPRESSION:
444 $this->attributes[
'framed_compression'] = radius_cvt_int(
$data);
447 case RADIUS_SESSION_TIMEOUT:
448 $this->attributes[
'session_timeout'] = radius_cvt_int(
$data);
451 case RADIUS_IDLE_TIMEOUT:
452 $this->attributes[
'idle_timeout'] = radius_cvt_int(
$data);
455 case RADIUS_SERVICE_TYPE:
456 $this->attributes[
'service_type'] = radius_cvt_int(
$data);
460 $this->attributes[
'class'] = radius_cvt_string(
$data);
463 case RADIUS_FRAMED_PROTOCOL:
464 $this->attributes[
'framed_protocol'] = radius_cvt_int(
$data);
467 case RADIUS_FRAMED_ROUTING:
468 $this->attributes[
'framed_routing'] = radius_cvt_int(
$data);
471 case RADIUS_FILTER_ID:
472 $this->attributes[
'filter_id'] = radius_cvt_string(
$data);
475 case RADIUS_REPLY_MESSAGE:
476 $this->attributes[
'reply_message'] = radius_cvt_string(
$data);
479 case RADIUS_VENDOR_SPECIFIC:
480 $attribv = radius_get_vendor_attr(
$data);
481 if (!is_array($attribv)) {
485 $vendor = $attribv[
'vendor'];
486 $attrv = $attribv[
'attr'];
487 $datav = $attribv[
'data'];
489 $this->rawVendorAttributes[$vendor][$attrv] = $datav;
491 if ($vendor == RADIUS_VENDOR_MICROSOFT) {
494 case RADIUS_MICROSOFT_MS_CHAP2_SUCCESS:
495 $this->attributes[
'ms_chap2_success'] = radius_cvt_string($datav);
498 case RADIUS_MICROSOFT_MS_CHAP_ERROR:
499 $this->attributes[
'ms_chap_error'] = radius_cvt_string(substr($datav,1));
502 case RADIUS_MICROSOFT_MS_CHAP_DOMAIN:
503 $this->attributes[
'ms_chap_domain'] = radius_cvt_string($datav);
506 case RADIUS_MICROSOFT_MS_MPPE_ENCRYPTION_POLICY:
507 $this->attributes[
'ms_mppe_encryption_policy'] = radius_cvt_int($datav);
510 case RADIUS_MICROSOFT_MS_MPPE_ENCRYPTION_TYPES:
511 $this->attributes[
'ms_mppe_encryption_types'] = radius_cvt_int($datav);
514 case RADIUS_MICROSOFT_MS_CHAP_MPPE_KEYS:
515 $demangled = radius_demangle($this->res, $datav);
516 $this->attributes[
'ms_chap_mppe_lm_key'] = substr($demangled, 0, 8);
517 $this->attributes[
'ms_chap_mppe_nt_key'] = substr($demangled, 8, RADIUS_MPPE_KEY_LEN);
520 case RADIUS_MICROSOFT_MS_MPPE_SEND_KEY:
521 $this->attributes[
'ms_chap_mppe_send_key'] = radius_demangle_mppe_key($this->res, $datav);
524 case RADIUS_MICROSOFT_MS_MPPE_RECV_KEY:
525 $this->attributes[
'ms_chap_mppe_recv_key'] = radius_demangle_mppe_key($this->res, $datav);
528 case RADIUS_MICROSOFT_MS_PRIMARY_DNS_SERVER:
529 $this->attributes[
'ms_primary_dns_server'] = radius_cvt_string($datav);
551 if ($this->res !=
null) {
552 radius_close($this->res);
555 $this->username = str_repeat(
"\0", strlen($this->username));
556 $this->password = str_repeat(
"\0", strlen($this->password));
595 $this->res = radius_auth_open();
612 if (!radius_create_request($this->res, RADIUS_ACCESS_REQUEST)) {
625 if (isset($this->username)) {
628 if (isset($this->password)) {
629 $this->
putAttribute(RADIUS_USER_PASSWORD, $this->password);
690 if (isset($this->username)) {
693 if (isset($this->response)) {
697 if (isset($this->challenge)) {
698 $this->
putAttribute(RADIUS_CHAP_CHALLENGE, $this->challenge);
713 $this->challenge = str_repeat(
"\0", strlen($this->challenge));
714 $this->response = str_repeat(
"\0", strlen($this->response));
757 if (isset($this->username)) {
760 if (isset($this->response) || isset($this->lmResponse)) {
761 $lmResp = isset($this->lmResponse) ? $this->lmResponse : str_repeat (
"\0", 24);
762 $ntResp = isset($this->response) ? $this->response : str_repeat (
"\0", 24);
763 $resp = pack(
'CC', $this->chapid, $this->flags) . $lmResp . $ntResp;
764 $this->
putVendorAttribute(RADIUS_VENDOR_MICROSOFT, RADIUS_MICROSOFT_MS_CHAP_RESPONSE, $resp);
766 if (isset($this->challenge)) {
767 $this->
putVendorAttribute(RADIUS_VENDOR_MICROSOFT, RADIUS_MICROSOFT_MS_CHAP_CHALLENGE, $this->challenge);
810 if (isset($this->username)) {
813 if (isset($this->response) && isset($this->peerChallenge)) {
815 $resp = pack(
'CCa16a8a24',$this->chapid , 1, $this->peerChallenge, str_repeat(
"\0", 8), $this->response);
816 $this->
putVendorAttribute(RADIUS_VENDOR_MICROSOFT, RADIUS_MICROSOFT_MS_CHAP2_RESPONSE, $resp);
818 if (isset($this->challenge)) {
819 $this->
putVendorAttribute(RADIUS_VENDOR_MICROSOFT, RADIUS_MICROSOFT_MS_CHAP_CHALLENGE, $this->challenge);
834 $this->peerChallenge = str_repeat(
"\0", strlen($this->peerChallenge));
886 $var = &
$GLOBALS[
'HTTP_SERVER_VARS'];
889 $this->session_id = sprintf(
"%s:%d-%s", isset($var[
'REMOTE_ADDR']) ? $var[
'REMOTE_ADDR'] :
'127.0.0.1' , getmypid(), get_current_user());
902 $this->res = radius_acct_open();
919 if (!radius_create_request($this->res, RADIUS_ACCOUNTING_REQUEST)) {
934 $this->
putAttribute(RADIUS_ACCT_SESSION_ID, $this->session_id);
935 $this->
putAttribute(RADIUS_ACCT_STATUS_TYPE, $this->status_type);
936 if (isset($this->session_time) && $this->status_type == RADIUS_STOP) {
937 $this->
putAttribute(RADIUS_ACCT_SESSION_TIME, $this->session_time);
939 if (isset($this->authentic)) {
940 $this->
putAttribute(RADIUS_ACCT_AUTHENTIC, $this->authentic);
981if (!defined(
'RADIUS_UPDATE'))
982 define(
'RADIUS_UPDATE', 3);
$attrib
Regular expression to match HTML/XML attribute pairs within a tag.
Auth_RADIUS_Acct()
Constructor.
putAuthAttributes()
Put attributes for accounting.
createRequest()
Creates an accounting request.
open()
Creates a RADIUS resource.
putAuthAttributes()
Put CHAP-MD5 specific attributes.
Auth_RADIUS_CHAP_MD5($username=null, $challenge=null, $chapid=1)
Constructor.
putAuthAttributes()
Put MS-CHAPv1 specific attributes.
putAuthAttributes()
Put MS-CHAPv2 specific attributes.
Auth_RADIUS_PAP($username=null, $password=null)
Constructor.
open()
Creates a RADIUS resource.
putAuthAttributes()
Put authentication specific attributes.
createRequest()
Creates an authentication request.
createRequest()
Overwrite this.
dumpAttributes()
Prints known attributes received from the server.
getAttributes()
Reads all received attributes after sending the request.
start()
Initiates a RADIUS request.
Auth_RADIUS()
Constructor.
getError()
Returns an error message, if an error occurred.
setConfigfile($file)
Sets the configuration-file.
putVendorAttribute($vendor, $attrib, $value, $type=null)
Puts a vendor-specific attribute.
putStandardAttributes()
Puts standard attributes.
addServer($servername='localhost', $port=0, $sharedSecret='testing123', $timeout=3, $maxtries=3)
Adds a RADIUS server to the list of servers for requests.
send()
Sends a prepared RADIUS request and waits for a response.
putAttribute($attrib, $value, $type=null)
Puts an attribute.
putAuthAttributes()
Puts custom attributes.
putServer($servername, $port=0, $sharedsecret='testing123', $timeout=3, $maxtries=3)
Configures the radius library.
putConfigfile($file)
Configures the radius library via external configurationfile.
loadExtension($ext)
OS independant PHP extension load.
PEAR($error_class=null)
Constructor.
& raiseError($message=null, $code=null, $mode=null, $options=null, $userinfo=null, $error_class=null, $skipmsg=false)
This method is a wrapper that returns an instance of the configured error class with this object's de...
$GLOBALS['PHPCAS_CLIENT']
This global variable is used by the interface class phpCAS.
Client implementation of RADIUS.
if((!isset($_SERVER['DOCUMENT_ROOT'])) OR(empty($_SERVER['DOCUMENT_ROOT']))) $_SERVER['DOCUMENT_ROOT']