浏览代码

Roll back signout.php changes and move the fix to auth.php, since checking $_SESSION at the top of signout.php *before* the session was even started meant that the user was always considered to be logged out, even before they really were. This broke most all of the plugins that hooked into signout.php

pdontthink 20 年之前
父节点
当前提交
a808976923
共有 2 个文件被更改,包括 23 次插入36 次删除
  1. 12 5
      functions/auth.php
  2. 11 31
      src/signout.php

+ 12 - 5
functions/auth.php

@@ -45,10 +45,9 @@ function is_logged_in() {
         global $PHP_SELF, $session_expired_post,
         global $PHP_SELF, $session_expired_post,
                $session_expired_location, $squirrelmail_language;
                $session_expired_location, $squirrelmail_language;
 
 
-        /*  First we store some information in the new session to prevent
-         *  information-loss.
-         */
-
+        //  First we store some information in the new session to prevent
+        //  information-loss.
+        //
         $session_expired_post = $_POST;
         $session_expired_post = $_POST;
         $session_expired_location = $PHP_SELF;
         $session_expired_location = $PHP_SELF;
         if (!sqsession_is_registered('session_expired_post')) {
         if (!sqsession_is_registered('session_expired_post')) {
@@ -57,6 +56,14 @@ function is_logged_in() {
         if (!sqsession_is_registered('session_expired_location')) {
         if (!sqsession_is_registered('session_expired_location')) {
             sqsession_register($session_expired_location,'session_expired_location');
             sqsession_register($session_expired_location,'session_expired_location');
         }
         }
+
+        // signout page will deal with users who aren't logged
+        // in on its own; don't show error here
+        //
+        if (strpos($PHP_SELF, 'signout.php') !== FALSE) {
+           return;
+        }
+
         include_once( SM_PATH . 'functions/display_messages.php' );
         include_once( SM_PATH . 'functions/display_messages.php' );
         set_up_language($squirrelmail_language, true);
         set_up_language($squirrelmail_language, true);
         logout_error( _("You must be logged in to access this page.") );
         logout_error( _("You must be logged in to access this page.") );
@@ -242,4 +249,4 @@ function get_smtp_user(&$user, &$pass) {
     }
     }
 }
 }
 
 
-?>
+?>

+ 11 - 31
src/signout.php

@@ -18,40 +18,20 @@
  */
  */
 define('SM_PATH','../');
 define('SM_PATH','../');
 
 
-/* check if we're already logged out (e.g. when this page is reloaded),
- * so we can skip to the output and not give error messages */
-if( ! isset($_SESSION) || empty($_SESSION['user_is_logged_in']) ) {
-    $loggedin = false;
-} else {
-    $loggedin = true;
-}
-
-if($loggedin) {
-    require_once(SM_PATH . 'include/validate.php');
-    require_once(SM_PATH . 'functions/prefs.php');
-} else {
-    // this comes in through validate.php usually
-    require_once(SM_PATH . 'config/config.php');
-    require_once(SM_PATH . 'functions/i18n.php');
-    require_once(SM_PATH . 'functions/page_header.php');
-    if (@file_exists($theme[$theme_default]['PATH'])) {
-        @include ($theme[$theme_default]['PATH']);
-    }
-}
+require_once(SM_PATH . 'include/validate.php');
+require_once(SM_PATH . 'functions/prefs.php');
 require_once(SM_PATH . 'functions/plugin.php');
 require_once(SM_PATH . 'functions/plugin.php');
 require_once(SM_PATH . 'functions/strings.php');
 require_once(SM_PATH . 'functions/strings.php');
 require_once(SM_PATH . 'functions/html.php');
 require_once(SM_PATH . 'functions/html.php');
 
 
-if($loggedin) {
-    /* Erase any lingering attachments */
-    if (isset($attachments) && is_array($attachments)
-        && sizeof($attachments)){
-        $hashed_attachment_dir = getHashedDir($username, $attachment_dir);
-        foreach ($attachments as $info) {
-            $attached_file = "$hashed_attachment_dir/$info[localfilename]";
-            if (file_exists($attached_file)) {
-                unlink($attached_file);
-            }
+/* Erase any lingering attachments */
+if (isset($attachments) && is_array($attachments)
+    && sizeof($attachments)){
+    $hashed_attachment_dir = getHashedDir($username, $attachment_dir);
+    foreach ($attachments as $info) {
+        $attached_file = "$hashed_attachment_dir/$info[localfilename]";
+        if (file_exists($attached_file)) {
+            unlink($attached_file);
         }
         }
     }
     }
 }
 }
@@ -116,4 +96,4 @@ html_tag( 'table',
 'center', $color[4], 'width="50%" cols="1" cellpadding="2" cellspacing="0" border="0"' )
 'center', $color[4], 'width="50%" cols="1" cellpadding="2" cellspacing="0" border="0"' )
 ?>
 ?>
 </body>
 </body>
-</html>
+</html>