diff --git a/src/ejabberd_piefxis.erl b/src/ejabberd_piefxis.erl index fbbaaba9f..fb744b89a 100644 --- a/src/ejabberd_piefxis.erl +++ b/src/ejabberd_piefxis.erl @@ -196,35 +196,44 @@ process_element(El,State) -> add_user(El, Domain) -> User = exmpp_xml:get_attribute(El,name,none), Password = exmpp_xml:get_attribute(El,password,none), - add_user(El, Domain, ?BTL(User), ?BTL(Password)). + add_user(El, Domain, User, Password). -%% @spec (El::xmlel(), Domain::string(), User::string(), Password::string()) +%% @spec (El::xmlel(), Domain::string(), User::binary(), Password::binary() | none) %% -> ok | {error, ErrorText::string()} %% @doc Add a new user to the database. %% If user already exists, it will be only updated. -add_user(El, Domain, User, Password) -> +add_user(El, Domain, UserBinary, none) -> + User = ?BTL(UserBinary), + io:format("Account ~s@~s will not be created, updating it...~n", + [User, Domain]), + io:format(""), + populate_user_with_elements(El, Domain, User), + ok; +add_user(El, Domain, UserBinary, PasswordBinary) -> + User = ?BTL(UserBinary), + Password = ?BTL(PasswordBinary), case create_user(User,Password,Domain) of ok -> - ok = exmpp_xml:foreach( - fun(_,Child) -> - populate_user(User,Domain,Child) - end, - El), + populate_user_with_elements(El, Domain, User), ok; {atomic, exists} -> io:format("Account ~s@~s already exists, updating it...~n", [User, Domain]), io:format(""), - ok = exmpp_xml:foreach( - fun(_,Child) -> - populate_user(User,Domain,Child) - end, - El); + populate_user_with_elements(El, Domain, User), + ok; {error, Other} -> ?ERROR_MSG("Error adding user ~s@~s: ~p~n", [User, Domain, Other]), {error, Other} end. +populate_user_with_elements(El, Domain, User) -> + exmpp_xml:foreach( + fun (_,Child) -> + populate_user(User,Domain,Child) + end, + El). + %% @spec (User::string(), Password::string(), Domain::string()) %% -> ok | {atomic, exists} | {error, not_allowed} %% @doc Create a new user