我有一些用于管理一些 Cyrus-IMAPd 服务器的遗留应用程序。他们为本地 IMAPlib Python 模块使用第三方包装器。
由于我开始将存储在这些服务器中的邮箱迁移到其他运行 Debian Stretch (2.5.10-3) 上最新版本的 cyrus-imapd 的邮箱,一些新服务器停止使用这些应用程序。
我已经做了一些调查,并找到了一些有用的信息。我首先转储应用程序和服务器之间的通信。成功登录后,应用程序向服务器发送以下命令:
标记转储无
答案是:
TAG NO 权限被拒绝
对于停止工作的服务器,并且:
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
代表什么,但没有成功。
因此,我需要帮助才能成功地以服务器管理员身份进行身份验证,或者找到另一个让我管理服务器的应用程序。