Commit d0e910a16559f0ecf96a2162785196d5d94f29be

Authored by nbm
1 parent 9ce80041

KTS-1117: Don't allow login if the database isn't at the required

version.


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@5704 c91229c3-7414-0410-bfa2-8a42b809f60b
lib/dispatcher.inc.php
... ... @@ -200,43 +200,44 @@ class KTStandardDispatcher extends KTDispatcher {
200 200 $GLOBALS['main'] =& new KTPage;
201 201 }
202 202 $this->oPage =& $GLOBALS['main'];
203   - parent::KTDispatcher();
  203 + parent::KTDispatcher();
204 204 }
205 205  
206 206 function permissionDenied () {
207   - global $default;
208   -
209   - $msg = '<h2>' . _kt('Permission Denied') . '</h2>';
210   - $msg .= '<p>' . _kt('If you feel that this is incorrect, please report both the action and your username to a system administrator.') . '</p>';
211   -
  207 + global $default;
  208 +
  209 + $msg = '<h2>' . _kt('Permission Denied') . '</h2>';
  210 + $msg .= '<p>' . _kt('If you feel that this is incorrect, please report both the action and your username to a system administrator.') . '</p>';
  211 +
212 212 $this->oPage->setPageContents($msg);
213 213 $this->oPage->setUser($this->oUser);
214   - $this->oPage->hideSection();
  214 + $this->oPage->hideSection();
215 215  
216 216 $this->oPage->render();
217 217 exit(0);
218 218 }
219 219  
220 220 function loginRequired() {
221   - $oKTConfig =& KTConfig::getSingleton();
222   - if ($oKTConfig->get('allowAnonymousLogin', false)) {
223   - // anonymous logins are now allowed.
224   - // the anonymous user is -1.
225   - //
226   - // we short-circuit the login mechanisms, setup the session, and go.
227   -
228   - $oUser =& User::get(-2);
229   - if (PEAR::isError($oUser) || ($oUser->getName() != 'Anonymous')) {
230   - ; // do nothing - the database integrity would break if we log the user in now.
231   - } else {
232   - $session = new Session();
  221 + $oKTConfig =& KTConfig::getSingleton();
  222 + if ($oKTConfig->get('allowAnonymousLogin', false)) {
  223 + // anonymous logins are now allowed.
  224 + // the anonymous user is -1.
  225 + //
  226 + // we short-circuit the login mechanisms, setup the session, and go.
  227 +
  228 + $oUser =& User::get(-2);
  229 + if (PEAR::isError($oUser) || ($oUser->getName() != 'Anonymous')) {
  230 + ; // do nothing - the database integrity would break if we log the user in now.
  231 + } else {
  232 + $session = new Session();
233 233 $sessionID = $session->create($oUser);
234   -
235   - return ;
236   - }
237   - }
238   -
239   -
  234 + $this->sessionStatus = $this->session->verify();
  235 + if ($this->sessionStatus === true) {
  236 + return ;
  237 + }
  238 + }
  239 + }
  240 +
240 241 $sErrorMessage = "";
241 242 if (PEAR::isError($this->sessionStatus)) {
242 243 $sErrorMessage = $this->sessionStatus->getMessage();
... ... @@ -268,9 +269,9 @@ class KTStandardDispatcher extends KTDispatcher {
268 269 $this->session = new Session();
269 270 $this->sessionStatus = $this->session->verify();
270 271 if ($this->sessionStatus !== true) {
271   - $this->loginRequired();
  272 + $this->loginRequired();
272 273 }
273   - //var_dump($this->sessionStatus);
  274 + //var_dump($this->sessionStatus);
274 275 $this->oUser =& User::get($_SESSION['userID']);
275 276 $oProvider =& KTAuthenticationUtil::getAuthenticationProviderForUser($this->oUser);
276 277 $oProvider->verify($this->oUser);
... ... @@ -295,37 +296,37 @@ class KTStandardDispatcher extends KTDispatcher {
295 296 return true;
296 297 }
297 298  
298   - function addInfoMessage($sMessage) { $_SESSION['KTInfoMessage'][] = $sMessage; }
299   -
300   - function addErrorMessage($sMessage) { $_SESSION['KTErrorMessage'][] = $sMessage; }
301   -
  299 + function addInfoMessage($sMessage) { $_SESSION['KTInfoMessage'][] = $sMessage; }
  300 +
  301 + function addErrorMessage($sMessage) { $_SESSION['KTErrorMessage'][] = $sMessage; }
  302 +
302 303 function handleOutput($data) {
303   - global $default;
304   - global $sectionName;
  304 + global $default;
  305 + global $sectionName;
305 306 $this->oPage->setSection($this->sSection);
306 307 $this->oPage->setBreadcrumbs($this->aBreadcrumbs);
307 308 $this->oPage->setPageContents($data);
308 309 $this->oPage->setUser($this->oUser);
309   - $this->oPage->setHelp($this->sHelpPage);
310   -
311   - // handle errors that were set using KTErrorMessage.
312   - $errors = KTUtil::arrayGet($_SESSION, 'KTErrorMessage', array());
313   - if (!empty($errors)) {
  310 + $this->oPage->setHelp($this->sHelpPage);
  311 +
  312 + // handle errors that were set using KTErrorMessage.
  313 + $errors = KTUtil::arrayGet($_SESSION, 'KTErrorMessage', array());
  314 + if (!empty($errors)) {
314 315 foreach ($errors as $sError) {
315   - $this->oPage->addError($sError);
316   - }
317   - $_SESSION['KTErrorMessage'] = array(); // clean it out.
318   - }
319   -
320   - // handle notices that were set using KTInfoMessage.
321   - $info = KTUtil::arrayGet($_SESSION, 'KTInfoMessage', array());
322   -
323   - if (!empty($info)) {
  316 + $this->oPage->addError($sError);
  317 + }
  318 + $_SESSION['KTErrorMessage'] = array(); // clean it out.
  319 + }
  320 +
  321 + // handle notices that were set using KTInfoMessage.
  322 + $info = KTUtil::arrayGet($_SESSION, 'KTInfoMessage', array());
  323 +
  324 + if (!empty($info)) {
324 325 foreach ($info as $sInfo) {
325   - $this->oPage->addInfo($sInfo);
326   - }
327   - $_SESSION['KTInfoMessage'] = array(); // clean it out.
328   - }
  326 + $this->oPage->addInfo($sInfo);
  327 + }
  328 + $_SESSION['KTInfoMessage'] = array(); // clean it out.
  329 + }
329 330  
330 331 // Get the portlets to display from the portlet registry
331 332 $oPRegistry =& KTPortletRegistry::getSingleton();
... ...
lib/session/Session.inc
... ... @@ -152,9 +152,6 @@ class Session {
152 152  
153 153 /**
154 154 * Used to verify the current user's session.
155   - *
156   - * @param boolean optional parameter set if we're downloading a file
157   - * @return int session verification status
158 155 */
159 156 function verify() {
160 157 global $default;
... ... @@ -165,6 +162,12 @@ class Session {
165 162 header("Cache-Control: must-revalidate");
166 163 header("Expires: " . gmdate("D, d M Y H:i:s", time() - 3600) . " GMT");
167 164 $sessionID = session_id();
  165 + $version = KTUtil::getSystemSetting('knowledgeTreeVersion');
  166 +
  167 + if ($default->systemVersion != $version) {
  168 + $default->log->info("Session::verify : Database not upgraded");
  169 + return PEAR::raiseError(sprintf(_kt('Incompatible database version (%s, expected version %s) - contact the administrator'), $version, $default->systemVersion));
  170 + }
168 171  
169 172 if (empty($sessionID)) {
170 173 $default->log->info("Session::verify session not in db");
... ... @@ -190,13 +193,13 @@ class Session {
190 193 $iUserID = $aRow["user_id"];
191 194  
192 195 $oKTConfig = KTConfig::getSingleton();
193   - $allowAnon = $oKTConfig->get('session/allowAnonymousLogin', false);
  196 + $allowAnon = $oKTConfig->get('session/allowAnonymousLogin', false);
194 197  
195   - $ANON = -2;
  198 + $ANON = -2;
196 199 if ((!$allowAnon) && ($iUserID == $ANON)) {
197   - Session::destroy(); // delete the anonymous session - config.ini has changed under this session.
198   - return PEAR::raiseError(_kt("Anonymous logins are no longer allowed by the system administrator. Please login."));
199   - }
  200 + Session::destroy(); // delete the anonymous session - config.ini has changed under this session.
  201 + return PEAR::raiseError(_kt("Anonymous logins are no longer allowed by the system administrator. Please login."));
  202 + }
200 203  
201 204 $ipTracking = $oKTConfig->get('session/ipTracking', false);
202 205 // check that ip matches
... ...