| | |
| | | - $ICL_SSL is not boolean anymore but contains the connection schema (ssl or tls) |
| | | - Removed some debuggers (echo ...) |
| | | File altered by Aleksander Machniak <alec@alec.pl> |
| | | - RFC3501 [7.1] don't call CAPABILITY if was returned in server |
| | | optional resposne in iil_Connect() |
| | | - trim(chop()) replaced by trim() |
| | | - added iil_Escape() with support for " and \ in folder names |
| | | - support \ character in username in iil_C_Login() |
| | |
| | | - code cleanup and identation fixes |
| | | - removed flush() calls in iil_C_HandlePartBody() to prevent from memory leak (#1485187) |
| | | - don't return "??" from iil_C_GetQuota() |
| | | - RFC3501 [7.1] don't call CAPABILITY if was returned in server |
| | | optional resposne in iil_Connect(), added iil_C_GetCapability() |
| | | |
| | | ********************************************************/ |
| | | |
| | |
| | | var $delimiter; |
| | | var $capability = array(); |
| | | var $permanentflags = array(); |
| | | var $capability_readed = false; |
| | | } |
| | | |
| | | /** |
| | |
| | | return strtr($string, array('"'=>'\\"', '\\' => '\\\\')); |
| | | } |
| | | |
| | | function iil_C_GetCapability(&$conn, $name) |
| | | { |
| | | if (in_array($name, $conn->capability)) { |
| | | return $conn->capability[$name]; |
| | | } |
| | | else if ($conn->capability_readed) { |
| | | return false; |
| | | } |
| | | |
| | | // get capabilities (only once) because initial |
| | | // optional CAPABILITY response may differ |
| | | $conn->capability = array(); |
| | | |
| | | iil_PutLine($conn->fp, "cp01 CAPABILITY"); |
| | | do { |
| | | $line = trim(iil_ReadLine($conn->fp, 1024)); |
| | | $a = explode(' ', $line); |
| | | if ($line[0] == '*') { |
| | | while (list($k, $w) = each($a)) { |
| | | if ($w != '*' && $w != 'CAPABILITY') |
| | | $conn->capability[] = strtoupper($w); |
| | | } |
| | | } |
| | | } while ($a[0] != 'cp01'); |
| | | |
| | | $conn->capability_readed = true; |
| | | |
| | | if (in_array($name, $conn->capability)) { |
| | | return $conn->capability[$name]; |
| | | } |
| | | |
| | | return false; |
| | | } |
| | | |
| | | function iil_C_Authenticate(&$conn, $user, $pass, $encChallenge) { |
| | | |
| | | $ipad = ''; |
| | |
| | | function iil_C_NameSpace(&$conn) { |
| | | global $my_prefs; |
| | | |
| | | if (!in_array('NAMESPACE', $conn->capability)) { |
| | | if (!iil_C_GetCapability($conn, 'NAMESPACE')) { |
| | | return false; |
| | | } |
| | | |
| | |
| | | $line = iil_ReadLine($conn->fp, 1024); |
| | | |
| | | // RFC3501 [7.1] optional CAPABILITY response |
| | | // commented out, because it's not working always as should |
| | | // if (preg_match('/\[CAPABILITY ([^]]+)\]/i', $line, $matches)) { |
| | | // $conn->capability = explode(' ', $matches[1]); |
| | | // } else { |
| | | iil_PutLine($conn->fp, "cp01 CAPABILITY"); |
| | | do { |
| | | $line = trim(iil_ReadLine($conn->fp, 1024)); |
| | | |
| | | $conn->message .= "$line\n"; |
| | | |
| | | $a = explode(' ', $line); |
| | | if ($line[0] == '*') { |
| | | while (list($k, $w) = each($a)) { |
| | | if ($w != '*' && $w != 'CAPABILITY') |
| | | $conn->capability[] = $w; |
| | | } |
| | | } |
| | | } while ($a[0] != 'cp01'); |
| | | // } |
| | | if (preg_match('/\[CAPABILITY ([^]]+)\]/i', $line, $matches)) { |
| | | $conn->capability = explode(' ', strtoupper($matches[1])); |
| | | } |
| | | |
| | | if (strcasecmp($auth_method, "check") == 0) { |
| | | //check for supported auth methods |
| | | |
| | | //default to plain text auth |
| | | $auth_method = 'plain'; |
| | | |
| | | //check for CRAM-MD5 |
| | | foreach ($conn->capability as $c) |
| | | if (strcasecmp($c, 'AUTH=CRAM_MD5') == 0 || |
| | | strcasecmp($c, 'AUTH=CRAM-MD5') == 0) { |
| | | $auth_method = 'auth'; |
| | | break; |
| | | } |
| | | if (iil_C_GetCapability($conn, 'AUTH=CRAM-MD5') || iil_C_GetCapability($conn, 'AUTH=CRAM_MD5')) { |
| | | $auth_method = 'auth'; |
| | | } |
| | | else { |
| | | //default to plain text auth |
| | | $auth_method = 'plain'; |
| | | } |
| | | } |
| | | |
| | | if (strcasecmp($auth_method, 'auth') == 0) { |