diff options
author | Badlop <badlop@process-one.net> | 2009-04-22 12:05:10 +0000 |
---|---|---|
committer | Badlop <badlop@process-one.net> | 2009-04-22 12:05:10 +0000 |
commit | b59ecb83e8df04316ad8656444f7ded0fd610fee (patch) | |
tree | d82c10f84c6e703d1c772af6aeefdbe7c557bb36 /src/mod_muc/mod_muc_room.erl | |
parent | * src/cyrsasl.erl: Change API of check_password: pass a function (diff) |
* src/mod_muc/mod_muc.erl: Limit number of characters in Room ID,
Name and Description (EJAB-899)
* src/mod_muc/mod_muc_room.erl: Likewise
* doc/guide.tex: Likewise
* doc/guide.html: Likewise
SVN Revision: 2034
Diffstat (limited to 'src/mod_muc/mod_muc_room.erl')
-rw-r--r-- | src/mod_muc/mod_muc_room.erl | 52 |
1 files changed, 41 insertions, 11 deletions
diff --git a/src/mod_muc/mod_muc_room.erl b/src/mod_muc/mod_muc_room.erl index 2fc518c8..63455293 100644 --- a/src/mod_muc/mod_muc_room.erl +++ b/src/mod_muc/mod_muc_room.erl @@ -2625,11 +2625,16 @@ process_iq_owner(From, set, Lang, SubEl, StateData) -> {?NS_XDATA, "cancel"} -> {result, [], StateData}; {?NS_XDATA, "submit"} -> - case {check_allowed_log_change(XEl, StateData, From), - check_allowed_persistent_change(XEl, StateData, From)} of - {allow, allow} -> set_config(XEl, StateData); - _ -> {error, ?ERR_BAD_REQUEST} - end; + case is_allowed_log_change(XEl, StateData, From) + andalso + is_allowed_persistent_change(XEl, StateData, + From) + andalso + is_allowed_room_name_desc_limits(XEl, + StateData) of + true -> set_config(XEl, StateData); + false -> {error, ?ERR_BAD_REQUEST} + end; _ -> {error, ?ERR_BAD_REQUEST} end; @@ -2681,26 +2686,51 @@ process_iq_owner(From, get, Lang, SubEl, StateData) -> {error, ?ERRT_FORBIDDEN(Lang, ErrText)} end. -check_allowed_log_change(XEl, StateData, From) -> +is_allowed_log_change(XEl, StateData, From) -> case lists:keymember("muc#roomconfig_enablelogging", 1, jlib:parse_xdata_submit(XEl)) of false -> - allow; + true; true -> - mod_muc_log:check_access_log( - StateData#state.server_host, From) + (allow == mod_muc_log:check_access_log( + StateData#state.server_host, From)) end. -check_allowed_persistent_change(XEl, StateData, From) -> +is_allowed_persistent_change(XEl, StateData, From) -> case lists:keymember("muc#roomconfig_persistentroom", 1, jlib:parse_xdata_submit(XEl)) of false -> - allow; + true; true -> {_AccessRoute, _AccessCreate, _AccessAdmin, AccessPersistent} = StateData#state.access, acl:match_rule(StateData#state.server_host, AccessPersistent, From) end. +%% Check if the Room Name and Room Description defined in the Data Form +%% are conformant to the configured limits +is_allowed_room_name_desc_limits(XEl, StateData) -> + IsNameAccepted = + case lists:keysearch("muc#roomconfig_roomname", 1, + jlib:parse_xdata_submit(XEl)) of + {value, {_, [N]}} -> + length(N) =< gen_mod:get_module_opt(StateData#state.server_host, + mod_muc, max_room_name, + infinite); + _ -> + true + end, + IsDescAccepted = + case lists:keysearch("muc#roomconfig_roomdesc", 1, + jlib:parse_xdata_submit(XEl)) of + {value, {_, [D]}} -> + length(D) =< gen_mod:get_module_opt(StateData#state.server_host, + mod_muc, max_room_desc, + infinite); + _ -> + true + end, + IsNameAccepted and IsDescAccepted. + -define(XFIELD(Type, Label, Var, Val), {xmlelement, "field", [{"type", Type}, {"label", translate:translate(Lang, Label)}, |