From 4f2a3554086aec4227ce741322ec1456a6d15e10 Mon Sep 17 00:00:00 2001 From: Alexey Shchepin Date: Mon, 6 Mar 2006 02:30:15 +0000 Subject: [PATCH] * src/mod_muc/mod_muc_room.erl: Bugfix SVN Revision: 516 --- ChangeLog | 4 +++ src/mod_muc/mod_muc_room.erl | 56 +++++++++++++++++++++++++++++------- 2 files changed, 50 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2cff6e91b..a285ac143 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2006-03-06 Alexey Shchepin + + * src/mod_muc/mod_muc_room.erl: Bugfix + 2006-03-05 Alexey Shchepin * src/ejabberd_c2s.erl: Bugfix diff --git a/src/mod_muc/mod_muc_room.erl b/src/mod_muc/mod_muc_room.erl index 51c2d2d19..a31443f48 100644 --- a/src/mod_muc/mod_muc_room.erl +++ b/src/mod_muc/mod_muc_room.erl @@ -1684,10 +1684,28 @@ find_changed_items(UJID, UAffiliation, URole, [StrAffiliation]), {error, ?ERRT_NOT_ACCEPTABLE(Lang, ErrText1)}; SAffiliation -> - case can_change_ra( - UAffiliation, URole, - TAffiliation, TRole, - affiliation, SAffiliation) of + CanChangeRA = + case can_change_ra( + UAffiliation, URole, + TAffiliation, TRole, + affiliation, SAffiliation) of + nothing -> + nothing; + true -> + true; + check_owner -> + case search_affiliation( + owner, StateData) of + [{OJID, _}] -> + jlib:jid_remove_resource(OJID) /= + jlib:jid_tolower(jlib:jid_remove_resource(UJID)); + _ -> + true + end; + _ -> + false + end, + case CanChangeRA of nothing -> find_changed_items( UJID, @@ -1705,7 +1723,7 @@ find_changed_items(UJID, UAffiliation, URole, xml:get_path_s( Item, [{elem, "reason"}, cdata])} | Res]); - _ -> + false -> {error, ?ERR_NOT_ALLOWED} end end @@ -1721,10 +1739,28 @@ find_changed_items(UJID, UAffiliation, URole, [StrRole]), {error, ?ERRT_BAD_REQUEST(Lang, ErrText1)}; SRole -> - case can_change_ra( - UAffiliation, URole, - TAffiliation, TRole, - role, SRole) of + CanChangeRA = + case can_change_ra( + UAffiliation, URole, + TAffiliation, TRole, + role, SRole) of + nothing -> + nothing; + true -> + true; + check_owner -> + case search_affiliation( + owner, StateData) of + [{OJID, _}] -> + jlib:jid_remove_resource(OJID) /= + jlib:jid_tolower(jlib:jid_remove_resource(UJID)); + _ -> + true + end; + _ -> + false + end, + case CanChangeRA of nothing -> find_changed_items( UJID, @@ -1824,7 +1860,7 @@ can_change_ra(owner, _FRole, can_change_ra(owner, _FRole, owner, _TRole, affiliation, _Affiliation) -> - true; + check_owner; can_change_ra(_FAffiliation, _FRole, _TAffiliation, _TRole, affiliation, _Value) ->