Better error handling for doveadm call.

This commit is contained in:
Antoine Nguyen
2021-02-11 20:51:48 +01:00
parent b0e308034c
commit 302a4a2f4d
2 changed files with 15 additions and 4 deletions
+6 -2
View File
@@ -42,12 +42,16 @@ def get_dovecot_schemes():
:return: A list of supported '{SCHEME}'
"""
schemes = getattr(settings, "DOVECOT_SUPPORTED_SCHEMES", None)
default_schemes = "MD5-CRYPT PLAIN"
if not schemes:
try:
_, schemes = doveadm_cmd("pw -l")
retcode, schemes = doveadm_cmd("pw -l")
except OSError:
schemes = "MD5-CRYPT PLAIN"
schemes = default_schemes
else:
if retcode:
schemes = default_schemes
return ["{{{}}}".format(smart_text(scheme))
for scheme in schemes.split()]
+9 -2
View File
@@ -171,9 +171,16 @@ class AuthenticationTestCase(ModoTestCase):
self.assertEqual(parameters.memory_cost, 1000)
self.assertEqual(parameters.parallelism, 2)
@override_settings(DOVEADM_LOOKUP_PATH=[DOVEADM_TEST_PATH])
def test_dovecot_supported_schemes(self):
@mock.patch("modoboa.lib.sysutils.exec_cmd")
def test_dovecot_supported_schemes(self, exec_cmd_mock):
"""Validate Dovecot supported schemes with fake command output."""
exec_cmd_mock.return_value = (
0,
"MD5 MD5-CRYPT SHA SHA1 SHA256 SHA512 SMD5 SSHA SSHA256 SSHA512 "
"PLAIN CLEAR CLEARTEXT PLAIN-TRUNC CRAM-MD5 SCRAM-SHA-1 HMAC-MD5 "
"DIGEST-MD5 PLAIN-MD4 PLAIN-MD5 LDAP-MD5 LANMAN NTLM OTP SKEY RPA "
"PBKDF2 CRYPT SHA256-CRYPT SHA512-CRYPT"
)
supported_schemes = get_dovecot_schemes()
self.assertEqual(supported_schemes,
["{MD5}",