diff options
| -rw-r--r-- | mail/src/leap/mail/imap/service/imap.py | 30 | 
1 files changed, 30 insertions, 0 deletions
| diff --git a/mail/src/leap/mail/imap/service/imap.py b/mail/src/leap/mail/imap/service/imap.py index 8c5b488e..6e03456c 100644 --- a/mail/src/leap/mail/imap/service/imap.py +++ b/mail/src/leap/mail/imap/service/imap.py @@ -146,6 +146,36 @@ class LeapIMAPServer(imap4.IMAP4Server):      select_FETCH = (do_FETCH, imap4.IMAP4Server.arg_seqset,                      imap4.IMAP4Server.arg_fetchatt) +    def _cbSelectWork(self, mbox, cmdName, tag): +        """ +        Callback for selectWork, patched to avoid conformance errors due to +        incomplete UIDVALIDITY line. +        """ +        if mbox is None: +            self.sendNegativeResponse(tag, 'No such mailbox') +            return +        if '\\noselect' in [s.lower() for s in mbox.getFlags()]: +            self.sendNegativeResponse(tag, 'Mailbox cannot be selected') +            return + +        flags = mbox.getFlags() +        self.sendUntaggedResponse(str(mbox.getMessageCount()) + ' EXISTS') +        self.sendUntaggedResponse(str(mbox.getRecentCount()) + ' RECENT') +        self.sendUntaggedResponse('FLAGS (%s)' % ' '.join(flags)) + +        # Patched ------------------------------------------------------- +        # imaptest was complaining about the incomplete line, we're adding +        # "UIDs valid" here. +        self.sendPositiveResponse( +            None, '[UIDVALIDITY %d] UIDs valid' % mbox.getUIDValidity()) +        # ---------------------------------------------------------------- + +        s = mbox.isWriteable() and 'READ-WRITE' or 'READ-ONLY' +        mbox.addListener(self) +        self.sendPositiveResponse(tag, '[%s] %s successful' % (s, cmdName)) +        self.state = 'select' +        self.mbox = mbox +  class IMAPAuthRealm(object):      """ | 
