diff --git a/src/mod_register.erl b/src/mod_register.erl index 6c422ca51..dfe9ffe76 100644 --- a/src/mod_register.erl +++ b/src/mod_register.erl @@ -267,8 +267,10 @@ process_iq(#iq{type = get, from = From, to = To, id = ID, lang = Lang} = IQ, try_register_or_set_password(User, Server, Password, #iq{from = From, lang = Lang} = IQ, Source, CaptchaSucceed) -> - case From of - #jid{user = User, lserver = Server} -> + case {jid:nodeprep(User), From} of + {error, _} -> + make_stripped_error(IQ, {error, invalid_jid}); + {UserP, #jid{user = User2, lserver = Server}} when UserP == User2 -> try_set_password(User, Server, Password, IQ); _ when CaptchaSucceed -> case check_from(From, Server) of diff --git a/test/ejabberd_SUITE.erl b/test/ejabberd_SUITE.erl index eb5f724f4..b0e47cde6 100644 --- a/test/ejabberd_SUITE.erl +++ b/test/ejabberd_SUITE.erl @@ -436,6 +436,7 @@ db_tests(DB) when DB == mnesia; DB == redis -> mam_tests:single_cases(), csi_tests:single_cases(), push_tests:single_cases(), + test_pass_change, test_unregister]}, muc_tests:master_slave_cases(), privacy_tests:master_slave_cases(), @@ -465,6 +466,7 @@ db_tests(DB) -> offline_tests:single_cases(), mam_tests:single_cases(), push_tests:single_cases(), + test_pass_change, test_unregister]}, muc_tests:master_slave_cases(), privacy_tests:master_slave_cases(), @@ -683,6 +685,25 @@ register(Config) -> password = ?config(password, Config)}]}), Config. +test_pass_change(Config) -> + case ?config(register, Config) of + true -> + #iq{type = result, sub_els = []} = + send_recv( + Config, + #iq{type = set, + sub_els = [#register{username = ?config(user, Config), + password = ?config(password, Config)}]}), + #iq{type = result, sub_els = []} = + send_recv( + Config, + #iq{type = set, + sub_els = [#register{username = str:to_upper(?config(user, Config)), + password = ?config(password, Config)}]}); + _ -> + {skipped, 'registration_not_available'} + end. + test_unregister(Config) -> case ?config(register, Config) of true ->