X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=functions%2Fimap_general.php;h=8d6d27ee218abf35964e7e5f28e610fc48636466;hb=42b5e8aad02786059e83d41acfb77133ef3b73f3;hp=958e835d17f214daece6f07ae2285889911c72f0;hpb=c4de9863a2cd0e8da286a7d8fa5bf407e3a4d12f;p=squirrelmail.git diff --git a/functions/imap_general.php b/functions/imap_general.php index 958e835d..8d6d27ee 100755 --- a/functions/imap_general.php +++ b/functions/imap_general.php @@ -13,9 +13,8 @@ */ /** Includes.. */ -require_once(SM_PATH . 'functions/page_header.php'); -require_once(SM_PATH . 'functions/auth.php'); -include_once(SM_PATH . 'functions/rfc822address.php'); + +require_once(SM_PATH . 'functions/rfc822address.php'); /** @@ -64,11 +63,10 @@ function sqimap_run_command_list ($imap_stream, $query, $handle_errors, &$respon } else { global $squirrelmail_language, $color; set_up_language($squirrelmail_language); - require_once(SM_PATH . 'functions/display_messages.php'); $string = "\n" . _("ERROR: No available IMAP stream.") . "\n"; - error_box($string,$color); + error_box($string); return false; } } @@ -115,11 +113,10 @@ function sqimap_run_command ($imap_stream, $query, $handle_errors, &$response, } else { global $squirrelmail_language, $color; set_up_language($squirrelmail_language); - require_once(SM_PATH . 'functions/display_messages.php'); $string = "\n" . _("ERROR: No available IMAP stream.") . "\n"; - error_box($string,$color); + error_box($string); return false; } } @@ -317,9 +314,8 @@ function sqimap_fread($imap_stream,$iSize,$filter=false, */ function sqimap_read_data_list($imap_stream, $tag, $handle_errors, &$response, &$message, $query = '') { - global $color, $squirrelmail_language; + global $color, $oTemplate, $squirrelmail_language; set_up_language($squirrelmail_language); - require_once(SM_PATH . 'functions/display_messages.php'); $string = "\n" . _("ERROR: Bad function call.") . "
\n" . @@ -330,8 +326,8 @@ function sqimap_read_data_list($imap_stream, $tag, $handle_errors, 'sqimap_run_command or sqimap_run_command_list instead

'. 'The following query was issued:
'. htmlspecialchars($query) . '
' . "

\n"; - error_box($string,$color); - echo ''; + error_box($string); + $oTemplate->display('footer.tpl'); exit; } @@ -350,7 +346,6 @@ function sqimap_error_box($title, $query = '', $message_title = '', $message = ' global $color, $squirrelmail_language; set_up_language($squirrelmail_language); - require_once(SM_PATH . 'functions/display_messages.php'); $string = "\n" . $title . "
\n"; $cmd = explode(' ',$query); $cmd= strtolower($cmd[0]); @@ -364,7 +359,7 @@ function sqimap_error_box($title, $query = '', $message_title = '', $message = ' $string .= "

\n"; if ($link != '') $string .= $link; - error_box($string,$color); + error_box($string); } /** @@ -392,6 +387,12 @@ function sqimap_retrieve_imap_response($imap_stream, $tag, $handle_errors, $aResponse = ''; $resultlist = array(); $data = array(); + $sCommand = ''; + if (preg_match("/^(\w+)\s*/",$query,$aMatch)) { + $sCommand = strtoupper($aMatch[1]); + } else { + // error reporting (shouldn't happen) + } $read = sqimap_fgets($imap_stream); $i = 0; while ($read) { @@ -455,7 +456,7 @@ function sqimap_retrieve_imap_response($imap_stream, $tag, $handle_errors, case '*': { - if (preg_match('/^\*\s\d+\sFETCH/',$read)) { + if (($sCommand == "FETCH" || $sCommand == "STORE") && preg_match('/^\*\s\d+\sFETCH/',$read)) { /* check for literal */ $s = substr($read,-3); $fetch_data = array(); @@ -742,7 +743,9 @@ function sqimap_create_stream($server,$port,$tls=0) { * Logs the user into the IMAP server. If $hide is set, no error messages * will be displayed. This function returns the IMAP connection handle. * @param string $username user name - * @param string $password encrypted password + * @param string $password password encrypted with onetimepad. Since 1.5.2 + * function can use internal password functions, if parameter is set to + * boolean false. * @param string $imap_server_address address of imap server * @param integer $imap_port port of imap server * @param boolean $hide controls display connection errors @@ -752,11 +755,21 @@ function sqimap_login ($username, $password, $imap_server_address, $imap_port, $ global $color, $squirrelmail_language, $onetimepad, $use_imap_tls, $imap_auth_mech, $sqimap_capabilities; - if (!isset($onetimepad) || empty($onetimepad)) { - sqgetglobalvar('onetimepad' , $onetimepad , SQ_SESSION ); + /* get imap login password */ + if ($password===false) { + /* standard functions */ + $password = sqauth_read_password(); + } else { + /* old way. $key must be extracted from cookie */ + if (!isset($onetimepad) || empty($onetimepad)) { + sqgetglobalvar('onetimepad' , $onetimepad , SQ_SESSION ); + } + /* Decrypt the password */ + $password = OneTimePadDecrypt($password, $onetimepad); } + if (!isset($sqimap_capabilities)) { - sqgetglobalvar('sqimap_capabilities' , $capability , SQ_SESSION ); + sqgetglobalvar('sqimap_capabilities' , $sqimap_capabilities , SQ_SESSION ); } $host = $imap_server_address; @@ -764,9 +777,6 @@ function sqimap_login ($username, $password, $imap_server_address, $imap_port, $ $imap_stream = sqimap_create_stream($imap_server_address,$imap_port,$use_imap_tls); - /* Decrypt the password */ - $password = OneTimePadDecrypt($password, $onetimepad); - if (($imap_auth_mech == 'cram-md5') OR ($imap_auth_mech == 'digest-md5')) { // We're using some sort of authentication OTHER than plain or login $tag=sqimap_session_id(false); @@ -825,7 +835,7 @@ function sqimap_login ($username, $password, $imap_server_address, $imap_port, $ * **/ $tag=sqimap_session_id(false); - $sasl = (isset($capability['SASL-IR']) && $capability['SASL-IR']) ? true : false; + $sasl = (isset($sqimap_capabilities['SASL-IR']) && $sqimap_capabilities['SASL-IR']) ? true : false; $auth = base64_encode("$username\0$username\0$password"); if ($sasl) { // IMAP Extension for SASL Initial Client Response @@ -857,7 +867,6 @@ function sqimap_login ($username, $password, $imap_server_address, $imap_port, $ /* "BAD" and anything else gets reported here. */ $message = htmlspecialchars($message); set_up_language($squirrelmail_language, true); - require_once(SM_PATH . 'functions/display_messages.php'); if ($response == 'BAD') { $string = sprintf (_("Bad request: %s")."
\r\n", $message); } else { @@ -869,7 +878,7 @@ function sqimap_login ($username, $password, $imap_server_address, $imap_port, $ $string .= htmlspecialchars($line) . "
\n"; } } - error_box($string,$color); + error_box($string); exit; } else { /* @@ -884,8 +893,8 @@ function sqimap_login ($username, $password, $imap_server_address, $imap_port, $ */ set_up_language($squirrelmail_language, true); - include_once(SM_PATH . 'functions/display_messages.php' ); sqsession_destroy(); + sqsetcookieflush(); /* terminate the session nicely */ sqimap_logout($imap_stream); logout_error( _("Unknown user or password incorrect.") ); @@ -905,7 +914,6 @@ function sqimap_login ($username, $password, $imap_server_address, $imap_port, $ if ( stristr($message, 'REFERRAL imap') === TRUE ) { sqimap_logout($imap_stream); set_up_language($squirrelmail_language, true); - include_once(SM_PATH . 'functions/display_messages.php' ); sqsession_destroy(); logout_error( _("Your mailbox is not located at this server. Try a different server or consult your system administrator") ); exit; @@ -942,14 +950,22 @@ function sqimap_capability($imap_stream, $capability='', $bUseCache=true) { if (!$bUseCache || ! sqgetGlobalVar('sqimap_capabilities', $sqimap_capabilities, SQ_SESSION)) { $read = sqimap_run_command($imap_stream, 'CAPABILITY', true, $a, $b); - $c = explode(' ', $read[0]); for ($i=2; $i < count($c); $i++) { $cap_list = explode('=', $c[$i]); if (isset($cap_list[1])) { + if(isset($sqimap_capabilities[trim($cap_list[0])]) && + !is_array($sqimap_capabilities[trim($cap_list[0])])) { + // Remove array key that was added in 'else' block below + // This is to accomodate for capabilities like: + // SORT SORT=MODSEQ + unset($sqimap_capabilities[trim($cap_list[0])]); + } $sqimap_capabilities[trim($cap_list[0])][] = $cap_list[1]; } else { - $sqimap_capabilities[trim($cap_list[0])] = TRUE; + if(!isset($sqimap_capabilities[trim($cap_list[0])])) { + $sqimap_capabilities[trim($cap_list[0])] = TRUE; + } } } } @@ -1290,5 +1306,3 @@ function map_yp_alias($username) { $yp = `ypmatch $username aliases`; return chop(substr($yp, strlen($username)+1)); } - -?>