Source for file redirect.php

Documentation is available at redirect.php

  1. <?php
  2.  
  3. /**
  4.  * Prevents users from reposting their form data after a successful logout.
  5.  *
  6.  * Derived from webmail.php by Ralf Kraudelt <kraude@wiwi.uni-rostock.de>
  7.  *
  8.  * @copyright 1999-2012 The SquirrelMail Project Team
  9.  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  10.  * @version $Id: redirect.php 14249 2012-01-02 02:09:17Z pdontthink $
  11.  * @package squirrelmail
  12.  */
  13.  
  14. /** This is the redirect page */
  15. define('PAGE_NAME''redirect');
  16.  
  17. /**
  18.  * Include the SquirrelMail initialization file.
  19.  */
  20. require('../include/init.php');
  21.  
  22. /* SquirrelMail required files. */
  23. require_once(SM_PATH 'functions/imap_general.php');
  24. require_once(SM_PATH 'functions/strings.php');
  25.  
  26. // Disable browser caching
  27. //
  28. header('Cache-Control: no-cache, no-store, must-revalidate, max-age=0');
  29. header('Pragma: no-cache');
  30. header('Expires: Sat, 1 Jan 2000 00:00:00 GMT');
  31. $location get_location();
  32.  
  33. // session_set_cookie_params (0, $base_uri);
  34.  
  35. sqsession_unregister ('user_is_logged_in');
  36. sqsession_register ($base_uri'base_uri');
  37.  
  38. /* get globals we me need */
  39. sqGetGlobalVar('login_username'$login_username);
  40. sqGetGlobalVar('secretkey'$secretkey);
  41. if(!sqGetGlobalVar('squirrelmail_language'$squirrelmail_language|| $squirrelmail_language == ''{
  42.     $squirrelmail_language $squirrelmail_default_language;
  43. }
  44. if (!sqgetGlobalVar('mailtodata'$mailtodata)) {
  45.     $mailtodata '';
  46. }
  47.  
  48. /* end of get globals */
  49.  
  50. set_up_language($squirrelmail_languagetrue);
  51. /* Refresh the language cookie. */
  52. sqsetcookie('squirrelmail_language'$squirrelmail_languagetime()+2592000,
  53.           $base_uri);
  54.  
  55. if (!isset($login_username)) {
  56.     logout_error_("You must be logged in to access this page.") );
  57.     exit;
  58. }
  59.  
  60. do_hook('login_before'$null);
  61.  
  62. $onetimepad OneTimePadCreate(strlen($secretkey));
  63. $key OneTimePadEncrypt($secretkey$onetimepad);
  64.  
  65. /* remove redundant spaces */
  66. $login_username trim($login_username);
  67.  
  68. /* Case-normalise username if so desired */
  69. if ($force_username_lowercase{
  70.     $login_username strtolower($login_username);
  71. }
  72.  
  73. /* Verify that username and password are correct. */
  74. $imapConnection sqimap_login($login_username$key$imapServerAddress$imapPort0);
  75. /* From now on we are logged it. If the login failed then sqimap_login handles it */
  76.  
  77. /**
  78.  * Regenerate session id to make sure that authenticated session uses
  79.  * different ID than one used before user authenticated.  This is a
  80.  * countermeasure against session fixation attacks.
  81.  * NB: session_regenerate_id() was added in PHP 4.3.2 (and new session
  82.  *     cookie is only sent out in this call as of PHP 4.3.3), but PHP 4
  83.  *     is not vulnerable to session fixation problems in SquirrelMail
  84.  *     because it prioritizes $base_uri subdirectory cookies differently
  85.  *     than PHP 5, which is otherwise vulnerable.  If we really want to,
  86.  *     we could define our own session_regenerate_id() when one does not
  87.  *     exist, but there seems to be no reason to do so.
  88.  */
  89. if (function_exists('session_regenerate_id')) {
  90. }
  91.  
  92. /**
  93. * The cookie part. session_start and session_regenerate_session normally set
  94. * their own cookie. SquirrelMail sets another cookie which overwites the
  95. * php cookies. The sqsetcookie function sets the cookie by using the header
  96. * function which gives us full control how the cookie is set. We do that
  97. * to add the HttpOnly cookie attribute which blocks javascript access on
  98. * IE6 SP1.
  99. */
  100. sqsetcookie(session_name(),session_id(),false,$base_uri);
  101. sqsetcookie('key'$keyfalse$base_uri);
  102.  
  103. sqsession_register($onetimepad'onetimepad');
  104.  
  105. $sqimap_capabilities sqimap_capability($imapConnection);
  106.  
  107. /* Server side sorting control */
  108. if (isset($sqimap_capabilities['SORT']&& $sqimap_capabilities['SORT'== true &&
  109.     isset($disable_server_sort&& $disable_server_sort{
  110.     unset($sqimap_capabilities['SORT']);
  111. }
  112.  
  113. /* Thread sort control */
  114. if (isset($sqimap_capabilities['THREAD']&& $sqimap_capabilities['THREAD'== true &&
  115.     isset($disable_thread_sort&& $disable_thread_sort{
  116.     unset($sqimap_capabilities['THREAD']);
  117. }
  118.  
  119. sqsession_register($sqimap_capabilities'sqimap_capabilities');
  120. $delimiter sqimap_get_delimiter ($imapConnection);
  121.  
  122. if (isset($sqimap_capabilities['NAMESPACE']&& $sqimap_capabilities['NAMESPACE'== true{
  123.     $namespace sqimap_get_namespace($imapConnection);
  124.     sqsession_register($namespace'sqimap_namespace');
  125. }
  126.  
  127. sqimap_logout($imapConnection);
  128. sqsession_register($delimiter'delimiter');
  129.  
  130. $username $login_username;
  131. sqsession_register ($username'username');
  132. do_hook('login_verified'$null);
  133.  
  134. /* Set the login variables. */
  135. $user_is_logged_in true;
  136. $just_logged_in true;
  137.  
  138. /* And register with them with the session. */
  139. sqsession_register ($user_is_logged_in'user_is_logged_in');
  140. sqsession_register ($just_logged_in'just_logged_in');
  141.  
  142. /* parse the accepted content-types of the client */
  143. $attachment_common_types array();
  144. $attachment_common_types_parsed array();
  145. sqsession_register($attachment_common_types'attachment_common_types');
  146. sqsession_register($attachment_common_types_parsed'attachment_common_types_parsed');
  147.  
  148. if sqgetGlobalVar('HTTP_ACCEPT'$http_acceptSQ_SERVER&&
  149.     !isset($attachment_common_types_parsed[$http_accept]) ) {
  150.     attachment_common_parse($http_accept);
  151. }
  152.  
  153. // having just logged in, need to synch the template file cache
  154. // so the right template set is displayed (per user prefs)
  155. require(SM_PATH 'include/load_prefs.php');
  156. global $sTemplateID;
  157.  
  158. /* Complete autodetection of Javascript. */
  159.  
  160. /* Compute the URL to forward the user to. */
  161. $redirect_url $location '/webmail.php';
  162.  
  163. if sqgetGlobalVar('session_expired_location'$session_expired_locationSQ_SESSION) ) {
  164.     sqsession_unregister('session_expired_location');
  165.     if $session_expired_location == 'compose' {
  166.         $compose_new_win getPref($data_dir$username'compose_new_win'0);
  167.         if ($compose_new_win{
  168.             // do not prefix $location here because $session_expired_location is set to the PAGE_NAME
  169.             // of the last page
  170.             $redirect_url $location '/' $session_expired_location '.php';
  171.         else {
  172.             $redirect_url $location '/webmail.php?right_frame=' urlencode($session_expired_location '.php');
  173.         }
  174.     else if ($session_expired_location != 'webmail' 
  175.             && $session_expired_location != 'left_main'{
  176.         $redirect_url $location '/webmail.php?right_frame=' urlencode($session_expired_location '.php');
  177.     }
  178.     unset($session_expired_location);
  179. }
  180.  
  181. if($mailtodata != ''{
  182.     $redirect_url  $location '/webmail.php?right_frame=compose.php&mailtodata=';
  183.     $redirect_url .= urlencode($mailtodata);
  184. }
  185.  
  186. /* Write session data and send them off to the appropriate page. */
  187. header("Location: $redirect_url");
  188. exit;
  189.  
  190. /* --------------------- end main ----------------------- */
  191.  
  192. function attachment_common_parse($str{
  193.     global $attachment_common_types$attachment_common_types_parsed;
  194.  
  195.     /*
  196.      * Replace ", " with "," and explode on that as Mozilla 1.x seems to
  197.      * use "," to seperate whilst IE, and earlier versions of Mozilla use
  198.      * ", " to seperate
  199.      */
  200.  
  201.     $str str_replace', ' ',' $str );
  202.     $types explode(','$str);
  203.  
  204.     foreach ($types as $val{
  205.         // Ignore the ";q=1.0" stuff
  206.         if (strpos($val';'!== false{
  207.             $val substr($val0strpos($val';'));
  208.         }
  209.         if (isset($attachment_common_types[$val])) {
  210.             $attachment_common_types[$valtrue;
  211.         }
  212.     }
  213.     sqsession_register($attachment_common_types'attachment_common_types');
  214.  
  215.     /* mark as parsed */
  216.     $attachment_common_types_parsed[$strtrue;
  217. }

Documentation generated on Thu, 20 Jun 2013 04:20:45 +0200 by phpDocumentor 1.4.3