Администрирование 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 означает, без успеха.

Поэтому мне нужна помощь для успешной аутентификации на серверах в качестве администратора или для поиска другого приложения, которое позволяет мне администрировать серверы.

0 ответов

Другие вопросы по тегам