diff options
author | Paweł Chmielowski <pchmielowski@process-one.net> | 2017-02-03 15:22:35 +0100 |
---|---|---|
committer | Paweł Chmielowski <pchmielowski@process-one.net> | 2017-02-03 15:22:35 +0100 |
commit | af5457ba097908a64506f8bf7359296b94eb0bc4 (patch) | |
tree | ee57762e942e93517b479157d74a8d255aeb4cad | |
parent | Set subscribers nicks when recreating room (thanks to Girdhar Sojitra)(#1495) (diff) |
Make sure that api_permissions always have "console commands" section
If user didn't override it in config file, default version which allows
executing all commands will be added
-rw-r--r-- | src/ejabberd_access_permissions.erl | 45 |
1 files changed, 24 insertions, 21 deletions
diff --git a/src/ejabberd_access_permissions.erl b/src/ejabberd_access_permissions.erl index 83defb13e..260176130 100644 --- a/src/ejabberd_access_permissions.erl +++ b/src/ejabberd_access_permissions.erl @@ -230,31 +230,34 @@ code_change(_OldVsn, State, _Extra) -> %%%=================================================================== -spec get_definitions(#state{}) -> {#state{}, any()}. -get_definitions(#state{definitions = Defs, fragments_generators = Gens} = State) -> - DefaultOptions = [{<<"console commands">>, - {[ejabberd_ctl], - [{acl, all}], - {all, none}}}, - {<<"admin access">>, +get_definitions(#state{definitions = Defs} = State) when Defs /= none -> + {State, Defs}; +get_definitions(#state{definitions = none, fragments_generators = Gens} = State) -> + DefaultOptions = [{<<"admin access">>, {[], [{acl,{acl,admin}}, {oauth,[<<"ejabberd:admin">>],[{acl,{acl,admin}}]}], {all, [start, stop]}}}], - NDefs = case Defs of - none -> - ApiPerms = ejabberd_config:get_option(api_permissions, fun(A) -> A end, DefaultOptions), - AllCommands = ejabberd_commands:get_commands_definition(), - Frags = lists:foldl( - fun({_Name, Generator}, Acc) -> - Acc ++ Generator() - end, [], Gens), - lists:map( - fun({Name, {From, Who, {Add, Del}}}) -> - Cmds = filter_commands_with_permissions(AllCommands, Add, Del), - {Name, {From, Who, Cmds}} - end, ApiPerms ++ Frags); - V -> - V + ApiPerms = ejabberd_config:get_option(api_permissions, fun(A) -> A end, + DefaultOptions), + AllCommands = ejabberd_commands:get_commands_definition(), + Frags = lists:foldl( + fun({_Name, Generator}, Acc) -> + Acc ++ Generator() + end, [], Gens), + NDefs0 = lists:map( + fun({Name, {From, Who, {Add, Del}}}) -> + Cmds = filter_commands_with_permissions(AllCommands, Add, Del), + {Name, {From, Who, Cmds}} + end, ApiPerms ++ Frags), + NDefs = case lists:keyfind(<<"console commands">>, 1, NDefs0) of + false -> + [{<<"console commands">>, + {[ejabberd_ctl], + [{acl, all}], + filter_commands_with_permissions(AllCommands, all, none)}} | NDefs0]; + _ -> + NDefs0 end, {State#state{definitions = NDefs}, NDefs}. |