ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
RADIUS.php
Go to the documentation of this file.
1 <?php
2 /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker: */
3 
29 require_once "Auth/Container.php";
33 require_once "Auth/RADIUS.php";
34 
49 {
50 
51  // {{{ properties
52 
57  var $radius;
58 
63  var $authtype;
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 ?>