From cead5c727147faac362e742aa7bcecf07f68cd99 Mon Sep 17 00:00:00 2001 From: thomascube <thomas@roundcube.net> Date: Thu, 18 May 2006 17:24:42 -0400 Subject: [PATCH] Updated CHANGELOG --- index.php | 153 ++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 120 insertions(+), 33 deletions(-) diff --git a/index.php b/index.php index 19623aa..eb45503 100644 --- a/index.php +++ b/index.php @@ -1,12 +1,11 @@ <?php - /* +-----------------------------------------------------------------------+ | RoundCube Webmail IMAP Client | - | Version 0.1-20050811 | + | Version 0.1-20060505 | | | | Copyright (C) 2005, RoundCube Dev. - Switzerland | - | All rights reserved. | + | Licensed under the GNU GPL | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions | @@ -41,41 +40,66 @@ */ +define('RCMAIL_VERSION', '0.1-20060505'); + // define global vars -$INSTALL_PATH = './'; +$CHARSET = 'UTF-8'; $OUTPUT_TYPE = 'html'; $JS_OBJECT_NAME = 'rcmail'; +$INSTALL_PATH = dirname($_SERVER['SCRIPT_FILENAME']); +$MAIN_TASKS = array('mail','settings','addressbook','logout'); +if (empty($INSTALL_PATH)) + $INSTALL_PATH = './'; +else + $INSTALL_PATH .= '/'; + +// RC include folders MUST be included FIRST to avoid other +// possible not compatible libraries (i.e PEAR) to be included +// instead the ones provided by RC +ini_set('include_path', $INSTALL_PATH.PATH_SEPARATOR.$INSTALL_PATH.'program'.PATH_SEPARATOR.$INSTALL_PATH.'program/lib'.PATH_SEPARATOR.ini_get('include_path')); -// set environment first -ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.'program'.PATH_SEPARATOR.'program/lib'); ini_set('session.name', 'sessid'); ini_set('session.use_cookies', 1); -//ini_set('session.save_path', $INSTALL_PATH.'session'); - +ini_set('session.gc_maxlifetime', 21600); +ini_set('session.gc_divisor', 500); +ini_set('error_reporting', E_ALL&~E_NOTICE); // increase maximum execution time for php scripts -set_time_limit('120'); - +// (does not work in safe mode) +@set_time_limit(120); // include base files require_once('include/rcube_shared.inc'); require_once('include/rcube_imap.inc'); -require_once('include/rcube_mysql.inc'); require_once('include/bugs.inc'); require_once('include/main.inc'); require_once('include/cache.inc'); +require_once('PEAR.php'); + + +// set PEAR error handling +// PEAR::setErrorHandling(PEAR_ERROR_TRIGGER, E_USER_NOTICE); + +// use gzip compression if supported +if (function_exists('ob_gzhandler') && !ini_get('zlib.output_compression')) + ob_start('ob_gzhandler'); // catch some url/post parameters -$_auth = strlen($_POST['_auth']) ? $_POST['_auth'] : $_GET['_auth']; -$_task = strlen($_POST['_task']) ? $_POST['_task'] : ($_GET['_task'] ? $_GET['_task'] : 'mail'); -$_action = strlen($_POST['_action']) ? $_POST['_action'] : $_GET['_action']; -$_framed = ($_GET['_framed'] || $_POST['_framed']); +$_auth = get_input_value('_auth', RCUBE_INPUT_GPC); +$_task = get_input_value('_task', RCUBE_INPUT_GPC); +$_action = get_input_value('_action', RCUBE_INPUT_GPC); +$_framed = (!empty($_GET['_framed']) || !empty($_POST['_framed'])); + +if (empty($_task)) + $_task = 'mail'; + +if (!empty($_GET['_remote'])) + $REMOTE_REQUEST = TRUE; // start session with requested task rcmail_startup($_task); - // set session related variables $COMM_PATH = sprintf('./?_auth=%s&_task=%s', $sess_auth, $_task); @@ -83,10 +107,10 @@ // add framed parameter -if ($_GET['_framed'] || $_POST['_framed']) +if ($_framed) { $COMM_PATH .= '&_framed=1'; - $SESS_HIDDEN_FIELD = "\n".'<input type="hidden" name="_framed" value="1" />'; + $SESS_HIDDEN_FIELD .= "\n".'<input type="hidden" name="_framed" value="1" />'; } @@ -94,8 +118,16 @@ load_gui(); +// check DB connections and exit on failure +if ($err_str = $DB->is_error()) + { + raise_error(array('code' => 500, 'type' => 'db', 'line' => __LINE__, 'file' => __FILE__, + 'message' => $err_str), FALSE, TRUE); + } + + // error steps -if ($_action=='error' && strlen($_GET['_code'])) +if ($_action=='error' && !empty($_GET['_code'])) { raise_error(array('code' => hexdec($_GET['_code'])), FALSE, TRUE); } @@ -107,11 +139,14 @@ $host = $_POST['_host'] ? $_POST['_host'] : $CONFIG['default_host']; // check if client supports cookies - if (!$_COOKIE[session_name()]) + if (empty($_COOKIE)) { show_message("cookiesdisabled", 'warning'); } - else if ($_POST['_user'] && $_POST['_pass'] && rcmail_login($_POST['_user'], $_POST['_pass'], $host)) + else if (isset($_POST['_user']) && isset($_POST['_pass']) && + rcmail_login(get_input_value('_user', RCUBE_INPUT_POST), + get_input_value('_pass', RCUBE_INPUT_POST), + $host)) { // send redirect header("Location: $COMM_PATH"); @@ -125,42 +160,53 @@ } // end session -else if ($_action=='logout' && $_SESSION['user_id']) +else if ($_action=='logout' && isset($_SESSION['user_id'])) { show_message('loggedout'); rcmail_kill_session(); } // check session cookie and auth string -else if ($_action!='login' && $_auth && $sess_auth) +else if ($_action!='login' && $sess_auth && $_SESSION['user_id']) { - if ($_auth !== $sess_auth || $_auth != rcmail_auth_hash($_SESSION['client_id'], $_SESSION['auth_time'])) + if ($_auth !== $sess_auth || $_auth != rcmail_auth_hash($_SESSION['client_id'], $_SESSION['auth_time']) || + ($CONFIG['session_lifetime'] && isset($SESS_CHANGED) && $SESS_CHANGED + $CONFIG['session_lifetime']*60 < mktime())) { - show_message('sessionerror', 'error'); + $message = show_message('sessionerror', 'error'); rcmail_kill_session(); } } // log in to imap server -if ($_SESSION['user_id'] && $_task=='mail') +if (!empty($_SESSION['user_id']) && $_task=='mail') { - $conn = $IMAP->connect($_SESSION['imap_host'], $_SESSION['username'], decrypt_passwd($_SESSION['password'])); + $conn = $IMAP->connect($_SESSION['imap_host'], $_SESSION['username'], decrypt_passwd($_SESSION['password']), $_SESSION['imap_port'], $_SESSION['imap_ssl']); if (!$conn) { show_message('imaperror', 'error'); $_SESSION['user_id'] = ''; } + else + rcmail_set_imap_prop(); } // not logged in -> set task to 'login -if (!$_SESSION['user_id']) +if (empty($_SESSION['user_id'])) + { + if ($REMOTE_REQUEST) + { + $message .= "setTimeout(\"location.href='\"+this.env.comm_path+\"'\", 2000);"; + rcube_remote_response($message); + } + $_task = 'login'; + } -// set taask and action to client +// set task and action to client $script = sprintf("%s.set_env('task', '%s');", $JS_OBJECT_NAME, $_task); if (!empty($_action)) $script .= sprintf("\n%s.set_env('action', '%s');", $JS_OBJECT_NAME, $_action); @@ -177,12 +223,19 @@ } +// handle keep-alive signal +if ($_action=='keep-alive') + { + rcube_remote_response(''); + exit; + } + // include task specific files if ($_task=='mail') { include_once('program/steps/mail/func.inc'); - + if ($_action=='show' || $_action=='print') include('program/steps/mail/show.inc'); @@ -209,13 +262,34 @@ if ($_action=='addcontact') include('program/steps/mail/addcontact.inc'); + + if ($_action=='expunge' || $_action=='purge') + include('program/steps/mail/folders.inc'); + + if ($_action=='check-recent') + include('program/steps/mail/check_recent.inc'); + + if ($_action=='getunread') + include('program/steps/mail/getunread.inc'); - if ($_action=='list' && $_GET['_remote']) + if ($_action=='list' && isset($_GET['_remote'])) include('program/steps/mail/list.inc'); + + if ($_action=='search') + include('program/steps/mail/search.inc'); + + if ($_action=='spell') + include('program/steps/mail/spell.inc'); + + if ($_action=='rss') + include('program/steps/mail/rss.inc'); // kill compose entry from session if (isset($_SESSION['compose'])) rcmail_compose_cleanup(); + + // make sure the message count is refreshed + $IMAP->messagecount($_SESSION['mbox'], 'ALL', TRUE); } @@ -238,6 +312,9 @@ if ($_action=='list' && $_GET['_remote']) include('program/steps/addressbook/list.inc'); + + if ($_action=='ldappublicsearch') + include('program/steps/addressbook/ldapsearchform.inc'); } @@ -268,6 +345,16 @@ // parse main template -parse_template($_task); +// only allow these templates to be included +if (in_array($_task, $MAIN_TASKS)) + parse_template($_task); -?> \ No newline at end of file + +// if we arrive here, something went wrong +raise_error(array('code' => 404, + 'type' => 'php', + 'line' => __LINE__, + 'file' => __FILE__, + 'message' => "Invalid request"), TRUE, TRUE); + +?> -- Gitblit v1.9.1