36 require_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)
278 if (isset($_SERVER)) {
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);
650 var $challenge = null;
656 var $response = null;
676 $this->challenge = $challenge;
677 $this->chapid = $chapid;
690 if (isset($this->username)) {
693 if (isset($this->response)) {
694 $response = pack(
'C', $this->chapid) . $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));
732 var $lmResponse = null;
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);
785 var $challenge = null;
791 var $peerChallenge = null;
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));
852 var $authentic = null;
859 var $status_type = null;
865 var $session_time = null;
871 var $session_id = null;
883 if (isset($_SERVER)) {
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);
961 var $status_type = RADIUS_START;
978 var $status_type = RADIUS_STOP;
981 if (!defined(
'RADIUS_UPDATE'))
982 define(
'RADIUS_UPDATE', 3);
998 var $status_type = RADIUS_UPDATE;
Client implementation of RADIUS.
createRequest()
Overwrite this.
loadExtension($ext)
OS independant PHP extension load.
Auth_RADIUS_Acct()
Constructor.
$attrib
Regular expression to match HTML/XML attribute pairs within a tag.
putAuthAttributes()
Puts custom attributes.
Auth_RADIUS_CHAP_MD5($username=null, $challenge=null, $chapid=1)
Constructor.
addServer($servername='localhost', $port=0, $sharedSecret='testing123', $timeout=3, $maxtries=3)
Adds a RADIUS server to the list of servers for requests.
open()
Creates a RADIUS resource.
putAuthAttributes()
Put authentication specific attributes.
putConfigfile($file)
Configures the radius library via external configurationfile.
Auth_RADIUS_PAP($username=null, $password=null)
Constructor.
dumpAttributes()
Prints known attributes received from the server.
send()
Sends a prepared RADIUS request and waits for a response.
putAuthAttributes()
Put MS-CHAPv1 specific attributes.
putStandardAttributes()
Puts standard attributes.
Auth_RADIUS()
Constructor.
putAuthAttributes()
Put MS-CHAPv2 specific attributes.
PEAR($error_class=null)
Constructor.
putAttribute($attrib, $value, $type=null)
Puts an attribute.
createRequest()
Creates an accounting request.
putAuthAttributes()
Put attributes for accounting.
start()
Initiates a RADIUS request.
& 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...
getAttributes()
Reads all received attributes after sending the request.
setConfigfile($file)
Sets the configuration-file.
createRequest()
Creates an authentication request.
putAuthAttributes()
Put CHAP-MD5 specific attributes.
putServer($servername, $port=0, $sharedsecret='testing123', $timeout=3, $maxtries=3)
Configures the radius library.
getError()
Returns an error message, if an error occurred.
open()
Creates a RADIUS resource.
putVendorAttribute($vendor, $attrib, $value, $type=null)
Puts a vendor-specific attribute.