Администрирование Cyrus-IMAP с помощью Python IMAPlib
У меня есть несколько устаревших приложений, используемых для администрирования некоторых серверов Cyrus-IMAPd. Они используют стороннюю оболочку для собственного модуля Python IMAPlib.
Поскольку я начал переносить почтовые ящики, хранящиеся на этих серверах, на другие, использующие самую последнюю версию cyrus-imapd в Debian Stretch (2.5.10-3), некоторые из новых серверов перестали работать с этими приложениями.
Я уже провел некоторое расследование и нашел некоторую полезную информацию. Я начал с демпинга связи между приложением и серверами. После успешного входа в систему приложение отправляет на сервер следующую команду:
TAG DUMP NIL
на который отвечают:
TAG Нет разрешения отказано
для серверов, которые перестали работать, и:
TAG NO Почтовый ящик не существует
для тех, кто еще работает. Где TAG - это тег команды IMAP, автоматически добавляемый приложением.
Странно, если команда запускается непосредственно на сервере, она отвечает тем же ответом, который дают работающие серверы. Это означает, что это связано с используемой оболочкой. И вот что я нашел в части входа исходного кода:
def login(self, username, password, forceNoAdmin = False):
if self.AUTH:
self.__doexception("LOGIN", self.ERROR.get("AUTH")[1])
try:
res, msg = self.m.login(username, password)
admin = self.m.isadmin()
except Exception, info:
error = info.args[0].split(':').pop().strip()
self.__doexception("LOGIN", error)
if admin or forceNoAdmin:
self.ADMIN = username
else:
self.__doexception("LOGIN", self.ERROR.get("ADMIN")[1])
self.SEP = self.m.getsep()
self.AUTH = True
self.__verbose( '[LOGIN %s] %s: %s' % (username, res, msg[0]) )
def isadmin(self):
### A trick to check if the user is admin or not
### normal users cannot use dump command
try:
res, msg = self._simple_command('DUMP', 'NIL')
if msg[0].lower().find('denied') == -1:
return True
except:
pass
return False
это isadmin()
Функция отправляет DUMP NIL
Команда на сервер, но, похоже, ничего плохого в этом нет.
Я пытался выяснить, что DUMP NIL
означает, без успеха.
Поэтому мне нужна помощь для успешной аутентификации на серверах в качестве администратора или для поиска другого приложения, которое позволяет мне администрировать серверы.