spambayes/scripts sb_imapfilter.py,1.54,1.55

"Tony Meyer" <[email protected]>
Newsgroups gmane.mail.spam.spambayes.cvs
Message-ID <[email protected]>
Update of /cvsroot/spambayes/spambayes/scripts
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23902/scripts

Modified Files:
	sb_imapfilter.py 
Log Message:
Add [ 1169939 ] Make sb_imapfilter use CRAM MD5 authentication

If available, use CRAM-MD5 authentication when logging in.  I don't have access to
 an IMAP server that supports this, so can't verify that it works (it doesn't break
 my AUTH=Login, at least).  It looks good though, so it seems worth adding to 1.1a1
 to me.

Index: sb_imapfilter.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/scripts/sb_imapfilter.py,v
retrieving revision 1.54
retrieving revision 1.55
diff -C2 -d -r1.54 -r1.55
*** sb_imapfilter.py	16 Mar 2005 03:35:02 -0000	1.54
--- sb_imapfilter.py	29 Mar 2005 03:51:23 -0000	1.55
***************
*** 53,56 ****
--- 53,58 ----
        servers I have access to offer any alternative method, however.  If
        someone's does, then it would be nice to offer this.
+       Thanks to #1169939 we now support CRAM_MD5 if available.  It'd still
+       be good to support others, though.
      o Usernames should be able to be literals as well as quoted strings.
        This might help if the username/password has special characters like
***************
*** 80,83 ****
--- 82,86 ----
  import time
  import sys
+ import hmac
  import getopt
  import types
***************
*** 192,200 ****
          return "".join(buffer)
  
      def login(self, username, pwd):
          """Log in to the IMAP server, catching invalid username/password."""
          assert self.connected, "Must be connected before logging in."
          try:
!             BaseIMAP.login(self, username, pwd)  # superclass login
          except BaseIMAP.error, e:
              msg = "There was an error logging in to the IMAP server." \
--- 195,216 ----
          return "".join(buffer)
  
+     def authenticate_cram_md5(self, username, pwd):
+         """Authenticate (login) with CRAM-MD5.
+ 
+         See RFC 2195 and SpamBayes patch #1169939
+         """
+         def cram_md5(response):
+             return " ".join([username,
+                              hmac.HMAC(pwd, response).hexdigest()])
+         self.authenticate('CRAM-MD5', cram_md5)
+ 
      def login(self, username, pwd):
          """Log in to the IMAP server, catching invalid username/password."""
          assert self.connected, "Must be connected before logging in."
          try:
!             if 'AUTH=CRAM-MD5' in self.capabilities:
!                 self.authenticate_cram_md5(username, pwd)
!             else:
!                 BaseIMAP.login(self, username, pwd)  # superclass login
          except BaseIMAP.error, e:
              msg = "There was an error logging in to the IMAP server." \
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.