@@ -391,40 +391,31 @@ def cmd_AUTHENTICATE(self, tag, args):
391
391
392
392
@hashlib_helper .requires_hashdigest ('md5' , openssl = True )
393
393
def test_login_cram_md5_bytes (self ):
394
- class AuthHandler (SimpleIMAPHandler ):
395
- capabilities = 'LOGINDISABLED AUTH=CRAM-MD5'
396
- def cmd_AUTHENTICATE (self , tag , args ):
397
- self ._send_textline ('+ PDE4OTYuNjk3MTcwOTUyQHBvc3RvZmZpY2Uucm'
398
- 'VzdG9uLm1jaS5uZXQ=' )
399
- r = yield
400
- if (r == b'dGltIGYxY2E2YmU0NjRiOWVmYT'
401
- b'FjY2E2ZmZkNmNmMmQ5ZjMy\r \n ' ):
402
- self ._send_tagged (tag , 'OK' , 'CRAM-MD5 successful' )
403
- else :
404
- self ._send_tagged (tag , 'NO' , 'No access' )
405
- client , _ = self ._setup (AuthHandler )
406
- self .assertTrue ('AUTH=CRAM-MD5' in client .capabilities )
394
+ client , _ = self ._setup (AuthHandler_CRAM_MD5 )
395
+ self .assertIn ('AUTH=CRAM-MD5' , client .capabilities )
407
396
ret , _ = client .login_cram_md5 ("tim" , b"tanstaaftanstaaf" )
408
397
self .assertEqual (ret , "OK" )
409
398
410
399
@hashlib_helper .requires_hashdigest ('md5' , openssl = True )
411
400
def test_login_cram_md5_plain_text (self ):
412
- class AuthHandler (SimpleIMAPHandler ):
413
- capabilities = 'LOGINDISABLED AUTH=CRAM-MD5'
414
- def cmd_AUTHENTICATE (self , tag , args ):
415
- self ._send_textline ('+ PDE4OTYuNjk3MTcwOTUyQHBvc3RvZmZpY2Uucm'
416
- 'VzdG9uLm1jaS5uZXQ=' )
417
- r = yield
418
- if (r == b'dGltIGYxY2E2YmU0NjRiOWVmYT'
419
- b'FjY2E2ZmZkNmNmMmQ5ZjMy\r \n ' ):
420
- self ._send_tagged (tag , 'OK' , 'CRAM-MD5 successful' )
421
- else :
422
- self ._send_tagged (tag , 'NO' , 'No access' )
423
- client , _ = self ._setup (AuthHandler )
424
- self .assertTrue ('AUTH=CRAM-MD5' in client .capabilities )
401
+ client , _ = self ._setup (AuthHandler_CRAM_MD5 )
402
+ self .assertIn ('AUTH=CRAM-MD5' , client .capabilities )
425
403
ret , _ = client .login_cram_md5 ("tim" , "tanstaaftanstaaf" )
426
404
self .assertEqual (ret , "OK" )
427
405
406
+ def test_login_cram_md5_blocked (self ):
407
+ def side_effect (* a , ** kw ):
408
+ raise ValueError
409
+
410
+ client , _ = self ._setup (AuthHandler_CRAM_MD5 )
411
+ self .assertIn ('AUTH=CRAM-MD5' , client .capabilities )
412
+ msg = re .escape ("CRAM-MD5 authentication is not supported" )
413
+ with (
414
+ mock .patch ("hmac.HMAC" , side_effect = side_effect ),
415
+ self .assertRaisesRegex (imaplib .IMAP4 .error , msg )
416
+ ):
417
+ client .login_cram_md5 ("tim" , b"tanstaaftanstaaf" )
418
+
428
419
def test_aborted_authentication (self ):
429
420
class MyServer (SimpleIMAPHandler ):
430
421
def cmd_AUTHENTICATE (self , tag , args ):
0 commit comments