ILIAS  Release_5_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilAuthContainerMDB2.php
Go to the documentation of this file.
1 <?php
2 /*
3  +-----------------------------------------------------------------------------+
4  | ILIAS open source |
5  +-----------------------------------------------------------------------------+
6  | Copyright (c) 1998-2006 ILIAS open source, University of Cologne |
7  | |
8  | This program is free software; you can redistribute it and/or |
9  | modify it under the terms of the GNU General Public License |
10  | as published by the Free Software Foundation; either version 2 |
11  | of the License, or (at your option) any later version. |
12  | |
13  | This program is distributed in the hope that it will be useful, |
14  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16  | GNU General Public License for more details. |
17  | |
18  | You should have received a copy of the GNU General Public License |
19  | along with this program; if not, write to the Free Software |
20  | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
21  +-----------------------------------------------------------------------------+
22 */
23 
24 include_once 'Auth/Container/MDB2.php';
25 
36 {
37 
41  public function __construct()
42  {
43  global $ilClientIniFile, $ilDB, $ilIliasIniFile;
44 
45  $options['dsn'] = $ilDB->getDSN();
46  $options['table'] = $ilClientIniFile->readVariable('auth', 'table');
47  $options['usernamecol'] = $ilClientIniFile->readVariable('auth', 'usercol');
48  $options['passwordcol'] = $ilClientIniFile->readVariable('auth', 'passcol');
49 
50  // studip mode: check against submitted md5 password for ilSoapUserAdministration::login()
51  // todo: check whether we should put this to another place
52  if (isset($_POST['password']) && preg_match('/^[a-f0-9]{32,32}$/i', $_POST['password']))
53  {
54  if ($ilIliasIniFile->readVariable('server', 'studip'))
55  {
56  $options['cryptType'] = 'none';
57  }
58  }
59 
61  }
62 
63 
67  public static function toUsernameWithoutDomain($username)
68  {
69  // Remove all characters including the last slash or the last backslash
70  // in the username
71  $pos = strrpos($username, '/');
72  $pos2 = strrpos($username, '\\');
73  if ($pos === false || $pos < $pos2)
74  {
75  $pos = $pos2;
76  }
77  if ($pos !== false)
78  {
79  $username = substr($username, $pos + 1);
80  }
81  return $username;
82  }
83 
84 
90  public function loginObserver($a_username,$a_auth)
91  {
92  $usr_id = ilObjUser::_lookupId($a_username);
93  $auth_mode = ilObjUser::_lookupAuthMode($usr_id);
94  $auth_id = ilAuthUtils::_getAuthMode($auth_mode);
95 
96  $GLOBALS['ilLog']->write(__METHOD__.': auth id = ' . $auth_id);
97 
98  switch($auth_id)
99  {
100  case AUTH_APACHE:
101  case AUTH_LOCAL:
102  return true;
103 
104  default:
106  {
107  return true;
108  }
109  }
110 
111 
112  $a_auth->status = AUTH_WRONG_LOGIN;
113  $a_auth->logout();
114 
115  return false;
116  }
117 
121  public function supportsCaptchaVerification()
122  {
123  return true;
124  }
125 
132  public function verifyPassword($raw, $encoded, $crypt_type = 'md5')
133  {
134  $this->log(__METHOD__ . ' called.', AUTH_LOG_DEBUG);
135 
136  if(in_array($crypt_type, array('none', '')))
137  {
138  return parent::verifyPassword($raw, $encoded, $crypt_type);
139  }
140 
141  require_once 'Services/User/classes/class.ilUserPasswordManager.php';
142  $crypt_type = ilUserPasswordManager::getInstance()->getEncoderName();
143 
144  if(ilUserPasswordManager::getInstance()->isEncodingTypeSupported($crypt_type))
145  {
149  $user = ilObjectFactory::getInstanceByObjId(ilObjUser::_loginExists($this->_auth_obj->username));
150  $user->setPasswd($encoded, IL_PASSWD_CRYPTED);
151 
152  return ilUserPasswordManager::getInstance()->verifyPassword($user, $raw);
153  }
154 
155  // Fall through: Let pear verify the password
156  return parent::verifyPassword($raw, $encoded, $crypt_type);
157  }
158 }