]> granicus.if.org Git - ejabberd/commitdiff
* src/mod_register.erl: Change password using mod_register always
authorBadlop <badlop@process-one.net>
Mon, 18 Aug 2008 18:21:10 +0000 (18:21 +0000)
committerBadlop <badlop@process-one.net>
Mon, 18 Aug 2008 18:21:10 +0000 (18:21 +0000)
returns success regardless of real result (EJAB-723)
* src/ejabberd_auth.erl: Likewise
* src/ejabberd_auth_external.erl: Likewise
* src/ejabberd_auth_internal.erl: Likewise
* src/ejabberd_auth_odbc.erl: Likewise

SVN Revision: 1530

ChangeLog
src/ejabberd_auth.erl
src/ejabberd_auth_external.erl
src/ejabberd_auth_internal.erl
src/ejabberd_auth_odbc.erl
src/mod_register.erl

index 8e4c963030db85893c1a7f9cc2523014aa5378c0..7c3be484370c5809f43fd87131768bac00c23004 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2008-08-18  Badlop  <badlop@process-one.net>
+
+       * src/mod_register.erl: Change password using mod_register always
+       returns success regardless of real result (EJAB-723)
+       * src/ejabberd_auth.erl: Likewise
+       * src/ejabberd_auth_external.erl: Likewise
+       * src/ejabberd_auth_internal.erl: Likewise
+       * src/ejabberd_auth_odbc.erl: Likewise
+
 2008-08-16  Badlop  <badlop@process-one.net>
 
        * src/msgs/sv.msg: Fixed formatting typos
index 8f8a293ac42f71600d1b4f920cbc9e776040c80d..be48bcff2f6cc58e911e708ab11b7afe5eb0483c 100644 (file)
@@ -127,6 +127,12 @@ check_password_with_authmodule(User, Server, Password, StreamID, Digest) ->
        [AuthMod | _] -> {true, AuthMod}
     end.
 
+%% @spec (User::string(), Server::string(), Password::string()) ->
+%%       ok | {error, ErrorType}
+%% where ErrorType = empty_password | not_allowed | invalid_jid
+set_password(_User, _Server, "") ->
+    %% We do not allow empty password
+    {error, empty_password};
 set_password(User, Server, Password) ->
     lists:foldl(
       fun(M, {error, _}) ->
@@ -135,6 +141,9 @@ set_password(User, Server, Password) ->
              Res
       end, {error, not_allowed}, auth_modules(Server)).
 
+try_register(_User, _Server, "") ->
+    %% We do not allow empty password
+    {error, not_allowed};    
 try_register(User, Server, Password) ->
     case is_user_exists(User,Server) of
        true ->
index 447a1b103c385b20356b8817466ecdb7f4d10409..aff82270b85ecc97a22ebbb4e74709b675310289 100644 (file)
@@ -61,7 +61,10 @@ check_password(User, Server, Password, _StreamID, _Digest) ->
     check_password(User, Server, Password).
 
 set_password(User, Server, Password) ->
-    extauth:set_password(User, Server, Password).
+    case extauth:set_password(User, Server, Password) of
+       true -> ok;
+       _ -> {error, unknown_problem}
+    end.
 
 try_register(_User, _Server, _Password) ->
     {error, not_allowed}.
index 2e2165a056c075cae6b3e0bfb5edfde4a1259951..b5661539f65e79fa3a1be9428ba9c0896c4bb7dd 100644 (file)
@@ -98,6 +98,8 @@ check_password(User, Server, Password, StreamID, Digest) ->
            false
     end.
 
+%% @spec (User::string(), Server::string(), Password::string()) ->
+%%       ok | {error, invalid_jid}
 set_password(User, Server, Password) ->
     LUser = jlib:nodeprep(User),
     LServer = jlib:nameprep(Server),
@@ -110,7 +112,8 @@ set_password(User, Server, Password) ->
                        mnesia:write(#passwd{us = US,
                                             password = Password})
                end,
-           mnesia:transaction(F)
+           {atomic, ok} = mnesia:transaction(F),
+           ok
     end.
 
 
index b1f12afb0bca1e3c83cf4ae5060dc528748caf54..38bb4760a1d1bac18f541bf6ce217227da0001ee 100644 (file)
@@ -101,6 +101,8 @@ check_password(User, Server, Password, StreamID, Digest) ->
            end
     end.
 
+%% @spec (User::string(), Server::string(), Password::string()) ->
+%%       ok | {error, invalid_jid}
 set_password(User, Server, Password) ->
     case jlib:nodeprep(User) of
        error ->
@@ -109,7 +111,10 @@ set_password(User, Server, Password) ->
            Username = ejabberd_odbc:escape(LUser),
            Pass = ejabberd_odbc:escape(Password),
            LServer = jlib:nameprep(Server),
-           catch odbc_queries:set_password_t(LServer, Username, Pass)
+           case catch odbc_queries:set_password_t(LServer, Username, Pass) of
+               {atomic, ok} -> ok;
+               Other -> {error, Other}
+           end
     end.
 
 
index f591daef59b95bdd7b11671ac9608bfddeb9daa0..7a4eca79f7c82c7f7adce3ac41280c0f6496a44e 100644 (file)
@@ -163,8 +163,7 @@ process_iq(From, To,
                    Password = xml:get_tag_cdata(PTag),
                    case From of
                        #jid{user = User, lserver = Server} ->
-                           ejabberd_auth:set_password(User, Server, Password),
-                           IQ#iq{type = result, sub_el = [SubEl]};
+                           try_set_password(User, Server, Password, IQ, SubEl);
                        _ ->
                            case try_register(User, Server, Password,
                                              Source, Lang) of
@@ -194,6 +193,20 @@ process_iq(From, To,
                              {xmlelement, "password", [], []}]}]}
     end.
 
+%% @doc Try to change password and return IQ response
+try_set_password(User, Server, Password, IQ, SubEl) ->
+    case ejabberd_auth:set_password(User, Server, Password) of
+       ok ->
+            IQ#iq{type = result, sub_el = [SubEl]};
+       {error, empty_password} ->
+           IQ#iq{type = error, sub_el = [SubEl, ?ERR_BAD_REQUEST]};
+       {error, not_allowed} ->
+           IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
+       {error, invalid_jid} ->
+           IQ#iq{type = error, sub_el = [SubEl, ?ERR_ITEM_NOT_FOUND]};
+       _ ->
+           IQ#iq{type = error, sub_el = [SubEl, ?ERR_INTERNAL_SERVER_ERROR]}
+    end.
 
 try_register(User, Server, Password, Source, Lang) ->
     case jlib:is_nodename(User) of