From d3d3303dcbe4d6fd38473d1da4df4990cf8c23d7 Mon Sep 17 00:00:00 2001 From: zhongwencool Date: Thu, 4 Jul 2024 10:14:21 +0800 Subject: [PATCH] chore: improve auth error for invalid salt/password type --- apps/emqx/src/emqx_passwd.erl | 6 +++++- apps/emqx/test/emqx_passwd_SUITE.erl | 16 +++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/apps/emqx/src/emqx_passwd.erl b/apps/emqx/src/emqx_passwd.erl index c243442ba..dc3622411 100644 --- a/apps/emqx/src/emqx_passwd.erl +++ b/apps/emqx/src/emqx_passwd.erl @@ -102,7 +102,11 @@ hash({SimpleHash, _Salt, disable}, Password) when is_binary(Password) -> hash({SimpleHash, Salt, prefix}, Password) when is_binary(Password), is_binary(Salt) -> hash_data(SimpleHash, <>); hash({SimpleHash, Salt, suffix}, Password) when is_binary(Password), is_binary(Salt) -> - hash_data(SimpleHash, <>). + hash_data(SimpleHash, <>); +hash({_SimpleHash, Salt, _SaltPos}, _Password) when not is_binary(Salt) -> + error({salt_not_string, Salt}); +hash({_SimpleHash, _Salt, _SaltPos}, Password) when not is_binary(Password) -> + error({password_not_string, Password}). -spec hash_data(hash_type(), binary()) -> binary(). hash_data(plain, Data) when is_binary(Data) -> diff --git a/apps/emqx/test/emqx_passwd_SUITE.erl b/apps/emqx/test/emqx_passwd_SUITE.erl index fd032bdb1..3078a5805 100644 --- a/apps/emqx/test/emqx_passwd_SUITE.erl +++ b/apps/emqx/test/emqx_passwd_SUITE.erl @@ -124,4 +124,18 @@ t_hash(_) -> false = emqx_passwd:check_pass({pbkdf2, sha, Pbkdf2Salt, 2, BadDKlen}, Pbkdf2, Password), %% Invalid derived_length, pbkdf2 fails - ?assertException(error, _, emqx_passwd:hash({pbkdf2, sha, Pbkdf2Salt, 2, BadDKlen}, Password)). + ?assertException(error, _, emqx_passwd:hash({pbkdf2, sha, Pbkdf2Salt, 2, BadDKlen}, Password)), + + %% invalid salt (not binary) + ?assertException( + error, + {salt_not_string, false}, + emqx_passwd:hash({sha256, false, suffix}, Password) + ), + + %% invalid password (not binary) + ?assertException( + error, + {password_not_string, bad_password_type}, + emqx_passwd:hash({sha256, Salt, suffix}, bad_password_type) + ).