Bug 17406

Summary: В eGroupWare перестал работать php5-imap для коннекта к courier-imap
Product: Sisyphus Reporter: Василий Терешко <tolmi>
Component: php5-imapAssignee: Anton Farygin <rider>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P2 CC: boyarsh, gray_graff, lav
Version: unstableKeywords: qawanted
Hardware: x86   
OS: Linux   
Bug Depends on: 18215    
Bug Blocks:    

Description Василий Терешко 2008-10-01 20:19:14 MSD
После сегодняшнего обновления
php5-imap_5.2.7.20080920-alt1_i586.rpm перестал работать с IMAP сервером на основе Courier-IMAP, всё из текущего сизифа.
Пока откатился на php5-5.2.5 ( с соответствующими модулями), в такой связке всё работает. ( т.е. это не Courier виноват)
Comment 1 Alexey Gladkov 2008-10-01 21:44:57 MSD
Что в error.log? Какие запросы делаются через этот модуль? Какие модули были установлены? Пробовали ли вы проверить работу модуля простым скриптом?

Нужна дополнительная информация. При данной постановке задачи, ошибку устранить нельзя.
Comment 2 Василий Терешко 2008-10-01 22:07:52 MSD
(In reply to comment #1)
> Что в error.log? Какие запросы делаются через этот модуль? Какие модули были
> установлены? Пробовали ли вы проверить работу модуля простым скриптом?
В error.log абсолютно пусто. tcpdump показывает, что соединение проходит, сервер отдает 
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS XMAGICTRASH] Courier-IMAP ready. Copyright 1998-2008 Double Precision, Inc.  See COPYING for distribution information.
После чего сессия останавливается совсем и отваливается по таймауту. Соответсвенно eGroupWare пишет про "Can't connect to IMAP server".
Проверить каким-нибудь скриптом не могу - не писатель я на PHP. Если поделитесь готовым - могу потестировать. До сегодняшнего обновления всё работало.
> Нужна дополнительная информация. При данной постановке задачи, ошибку
> устранить нельзя.
Какая информация ещё нужна?

Comment 3 Alexey Gladkov 2008-10-01 23:07:59 MSD
(In reply to comment #2)
> После чего сессия останавливается совсем и отваливается по таймауту.

Какая операция производится в eGroupWare ?

> Какая информация ещё нужна?

В каком значении в php.ini директива error_reporting ?
Comment 4 Василий Терешко 2008-10-02 17:12:19 MSD
(In reply to comment #3)
> (In reply to comment #2)
> > После чего сессия останавливается совсем и отваливается по таймауту.
> 
> Какая операция производится в eGroupWare ?

Обращение к почтовому ящику. В eGroupWare для этого есть только один путь - обращение к внешнему IMAP серверу.
> 
> > Какая информация ещё нужна?
> 
> В каком значении в php.ini директива error_reporting ?
> 
[tolmi@serval ~]$ grep error_reporting /etc/php/5.2.7/apache2-mod_php/php.ini
; - error_reporting = E_ALL        [Code Cleanliness, Security(?)]
; error_reporting is a bit-field.  Or each number up to get desired error
;error_reporting = E_ALL & ~E_NOTICE
;error_reporting = E_ALL & ~E_NOTICE | E_STRICT
;error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR
error_reporting  =  E_ALL
[tolmi@serval ~]$       
Comment 5 Василий Терешко 2008-10-02 18:53:32 MSD
(In reply to comment #1)
> Что в error.log? Какие запросы делаются через этот модуль? Какие модули были
> установлены? Пробовали ли вы проверить работу модуля простым скриптом?

Моя диагностика была неверной, для работы с IMAP используется своя обертка
--- cut ---
* Provides an implementation of the IMAP protocol using PEAR's
* Net_Socket:: class.
---- end cut ---
Меня смутило то, что php5-imap прописан в Requirements к eGroupware

Оказывается, в недрах eGroupWare простой скрипт для проверки уже лежит -
---- cut testimapserver.php -----
$startTime = microtime(true);

print "<pre>";

set_include_path('../egw-pear'. PATH_SEPARATOR .'/usr/share/php'. PATH_SEPARATOR . get_include_path());

require_once 'Net/IMAP.php';

print "<h1><span style='color:red;'>ATTENTION: THIS OUTPUT CONTAINS YOUR USERNAME AND PASSWORD!!!</span></h1>";

$elapsedTime = microtime(true) - $startTime;
print "<h1> $elapsedTime :: Login as user $username1 </h1>";
$imapClient = new Net_IMAP($host, $port, $enableSTARTTLS);
$imapClient->setDebug(true);
$imapClient->login($username1, $password1, true, false);
$imapClient->selectMailbox($testFolder);

if(!empty($username2) && !empty($password2)) {
        $elapsedTime = microtime(true) - $startTime;
        print "<h1> $elapsedTime :: Login as user $username2 </h1>";
        $imapClient2 = new Net_IMAP($host);
        $imapClient2->setDebug(true);
        $imapClient2->login($username2, $password2, true, false);
}

$elapsedTime = microtime(true) - $startTime;
print "<h1> $elapsedTime :: Getting hierarchy delimiter </h1>";
$delimiter = $imapClient->getHierarchyDelimiter();
print "delimiter is: $delimiter<br>";

$elapsedTime = microtime(true) - $startTime;
print "<h1> $elapsedTime :: List all folders </h1>";
$imapClient->getMailboxes();

$elapsedTime = microtime(true) - $startTime;
print "<h1> $elapsedTime :: List all subscribed folders </h1>";
$imapClient->listsubscribedMailboxes();
---------- end cut ----------
Результаты вывода :

ATTENTION: THIS OUTPUT CONTAINS YOUR USERNAME AND PASSWORD!!!
0.034209012985229 :: Login as user tolmi
S: S: S: 
60.056734085083 :: Getting hierarchy delimiter
S: delimiter is: the IMAP Server does not support HIERACHY_DELIMITER!
60.057229995728 :: List all folders
S: 
60.057718992233 :: List all subscribed folders
S: 
-------------
Как я уже упоминал, откат php на 5.2.5 решает проблему.
Прошу перевесить ошибку на что-то более соответствуещее.
Comment 6 Alexey Gladkov 2008-10-04 18:14:53 MSD
Какой PEAR модуль используется для работы с php5-imap и какой версии ?

Я знаю точно, что напрямую php5-imap работает.
Comment 7 Василий Терешко 2008-10-06 04:08:02 MSD
(In reply to comment #6)
> Какой PEAR модуль используется для работы с php5-imap и какой версии ?

А там ставится свой собственный набор eGroupWare-pear. 
Код находится в 
/usr/share/egroupware/egw-pear/Net/IMAP.php
/usr/share/egroupware/egw-pear/Net/IMAPProtocol.php
а там
IMAP.php:require_once 'Net/IMAPProtocol.php';
IMAPProtocol.php:require_once 'Net/Socket.php'
Socket.php:require_once 'PEAR.php';
И как-бы всё.

> 
> Я знаю точно, что напрямую php5-imap работает.
> 
В /usr/share/egroupware/felamimail/Changelog :
--------------- cut -------------
2006-12-31 Lars Kneschke  <l.kneschke@metaways.de>
        * major rewrite of the imap backend. php-imap is mostly gone. all imap code
          is now based on the PEAR class Net_IMAP
--------------- cut ---------------


Comment 8 Василий Терешко 2008-10-06 04:12:02 MSD
Ещё раз, выяснилось, что это не ошибка php5-imap, это ошибка чего-то другого. Я пока копаю на тестовой машине. 
Comment 9 Alexey Gladkov 2008-10-06 04:16:04 MSD
У меня подозрение, что сломалась обвязка вокруг php5-imap.
Comment 10 Aeliya Grevnyov 2008-10-16 10:57:00 MSD
тоже наткнулся на такую большую неприятность на боевам сервере. в итоге после бессонной ночи вернул 5.2.5
буду на тестовом сервере ковырять
Comment 11 Aeliya Grevnyov 2008-10-28 14:15:55 MSK
простите, но решил открыть ошибку. очень уж надо решение. может проблема и не в php5-imap, но...
вот что выдал testimapserver.php (все остально в выводе вроде нормально)
отрабатывал дооолго - минут 10-20

511.15171504021 :: Checking for SORT support: supported
511.15173006058 :: Sorting INBOX by DATE:
C: A0009 SORT (DATE) US-ASCII 
S: A0009 BAD Error in IMAP command SORT: Missing or invalid arguments.

571.15477895737 :: Sorting INBOX by SUBJECT:
C: A00010 SORT (SUBJECT) US-ASCII 
S: A00010 BAD Error in IMAP command SORT: Missing or invalid arguments.

в логах dovecot вот что появилось
dovecot: Oct 28 17:55:15 Info: imap-login: Login: user=<admin>, method=PLAIN, rip=192.168.2.11, lip=192.168.2.2
dovecot: Oct 28 17:56:18 Info: imap-login: Login: user=<admin>, method=LOGIN, rip=192.168.2.11, lip=192.168.2.2
dovecot: Oct 28 17:56:25 Info: imap-login: Login: user=<admin>, method=PLAIN, rip=192.168.2.11, lip=192.168.2.2
Смущает method=PLAIN - быть его не должно. и при php 5.2.5 в логах фигурирует только method=LOGIN

еще из странного, если таки попытаться зайти в felamimail, то минут через 20-30 он таки откроет почту и покажет содержимое имап папок
Comment 12 Aeliya Grevnyov 2008-12-16 08:19:37 MSK
собрал для себя релиз php 5.2.8 с нужными модулями
Проблема просто испарилась(+еще с десяток багов в eGroupWare, на которые я сам наткнулся) :)

так что #18215 очень надо!
Comment 13 Alexey Gladkov 2009-02-10 16:57:28 MSK
Обновлено. php5-imap-5.2.9.20090205-alt1
Comment 14 Aeliya Grevnyov 2009-02-19 20:43:16 MSK
радует. спасибо