ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
RADIUS.php
Go to the documentation of this file.
1<?php
2/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker: */
3
29require_once "Auth/Container.php";
33require_once "Auth/RADIUS.php";
34
49{
50
51 // {{{ properties
52
58
64
65 // }}}
66 // {{{ Auth_Container_RADIUS() [constructor]
67
82 {
83 $this->authtype = 'PAP';
84 if (isset($options['authtype'])) {
85 $this->authtype = $options['authtype'];
86 }
87 $classname = 'Auth_RADIUS_' . $this->authtype;
88 if (!class_exists($classname)) {
89 PEAR::raiseError("Unknown Authtype, please use one of: "
90 ."PAP, CHAP_MD5, MSCHAPv1, MSCHAPv2!", 41, PEAR_ERROR_DIE);
91 }
92
93 $this->radius = new $classname;
94
95 if (isset($options['configfile'])) {
96 $this->radius->setConfigfile($options['configfile']);
97 }
98
99 $servers = $options['servers'];
100 if (is_array($servers)) {
101 foreach ($servers as $server) {
102 $servername = $server[0];
103 $port = isset($server[1]) ? $server[1] : 0;
104 $sharedsecret = isset($server[2]) ? $server[2] : 'testing123';
105 $timeout = isset($server[3]) ? $server[3] : 3;
106 $maxtries = isset($server[4]) ? $server[4] : 3;
107 $this->radius->addServer($servername, $port, $sharedsecret, $timeout, $maxtries);
108 }
109 }
110
111 if (!$this->radius->start()) {
112 PEAR::raiseError($this->radius->getError(), 41, PEAR_ERROR_DIE);
113 }
114 }
115
116 // }}}
117 // {{{ fetchData()
118
126 function fetchData($username, $password, $challenge = null)
127 {
128 $this->log('Auth_Container_RADIUS::fetchData() called.', AUTH_LOG_DEBUG);
129
130 switch($this->authtype) {
131 case 'CHAP_MD5':
132 case 'MSCHAPv1':
133 if (isset($challenge)) {
134 $this->radius->challenge = $challenge;
135 $this->radius->chapid = 1;
136 $this->radius->response = pack('H*', $password);
137 } else {
138 require_once 'Crypt/CHAP.php';
139 $classname = 'Crypt_' . $this->authtype;
140 $crpt = new $classname;
141 $crpt->password = $password;
142 $this->radius->challenge = $crpt->challenge;
143 $this->radius->chapid = $crpt->chapid;
144 $this->radius->response = $crpt->challengeResponse();
145 }
146 break;
147
148 case 'MSCHAPv2':
149 require_once 'Crypt/CHAP.php';
150 $crpt = new Crypt_MSCHAPv2;
151 $crpt->username = $username;
152 $crpt->password = $password;
153 $this->radius->challenge = $crpt->authChallenge;
154 $this->radius->peerChallenge = $crpt->peerChallenge;
155 $this->radius->chapid = $crpt->chapid;
156 $this->radius->response = $crpt->challengeResponse();
157 break;
158
159 default:
160 $this->radius->password = $password;
161 break;
162 }
163
164 $this->radius->username = $username;
165
166 $this->radius->putAuthAttributes();
167 $result = $this->radius->send();
168 if (PEAR::isError($result)) {
169 return false;
170 }
171
172 $this->radius->getAttributes();
173// just for debugging
174// $this->radius->dumpAttributes();
175
176 return $result;
177 }
178
179 // }}}
180
181}
182?>
const AUTH_LOG_DEBUG
Auth Log level - DEBUG.
Definition: Auth.php:59
$result
const PEAR_ERROR_DIE
Definition: PEAR.php:34
fetchData($username, $password, $challenge=null)
Authenticate.
Definition: RADIUS.php:126
Auth_Container_RADIUS($options)
Constructor of the container class.
Definition: RADIUS.php:81
log($message, $level=AUTH_LOG_DEBUG)
Log a message to the Auth log.
Definition: Container.php:246
isError($data, $code=null)
Tell whether a value is a PEAR error.
Definition: PEAR.php:279
& 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...
Definition: PEAR.php:524
$server
if(!is_array($argv)) $options