mirror of
https://github.com/processone/ejabberd.git
synced 2024-06-02 21:17:12 +02:00
Do not distribute the ACL table
This commit is contained in:
parent
cc6dcd161c
commit
0b9754884e
44
src/acl.erl
44
src/acl.erl
|
@ -29,6 +29,7 @@
|
||||||
-author('alexey@process-one.net').
|
-author('alexey@process-one.net').
|
||||||
|
|
||||||
-export([start/0, to_record/3, add/3, add_list/3,
|
-export([start/0, to_record/3, add/3, add_list/3,
|
||||||
|
add_local/3, add_list_local/3,
|
||||||
match_rule/3, match_acl/3]).
|
match_rule/3, match_acl/3]).
|
||||||
|
|
||||||
-include("ejabberd.hrl").
|
-include("ejabberd.hrl").
|
||||||
|
@ -66,6 +67,7 @@
|
||||||
start() ->
|
start() ->
|
||||||
mnesia:create_table(acl,
|
mnesia:create_table(acl,
|
||||||
[{disc_copies, [node()]}, {type, bag},
|
[{disc_copies, [node()]}, {type, bag},
|
||||||
|
{local_content, true},
|
||||||
{attributes, record_info(fields, acl)}]),
|
{attributes, record_info(fields, acl)}]),
|
||||||
mnesia:add_table_copy(acl, node(), ram_copies),
|
mnesia:add_table_copy(acl, node(), ram_copies),
|
||||||
update_table(),
|
update_table(),
|
||||||
|
@ -77,18 +79,49 @@ to_record(Host, ACLName, ACLSpec) ->
|
||||||
#acl{aclname = {ACLName, Host},
|
#acl{aclname = {ACLName, Host},
|
||||||
aclspec = normalize_spec(ACLSpec)}.
|
aclspec = normalize_spec(ACLSpec)}.
|
||||||
|
|
||||||
-spec add(binary(), aclname(), aclspec()) -> {atomic, ok} | {aborted, any()}.
|
-spec add(binary(), aclname(), aclspec()) -> ok | {error, any()}.
|
||||||
|
|
||||||
add(Host, ACLName, ACLSpec) ->
|
add(Host, ACLName, ACLSpec) ->
|
||||||
|
{ResL, BadNodes} = rpc:multicall(ejabberd_cluster:get_nodes(),
|
||||||
|
?MODULE, add_local,
|
||||||
|
[Host, ACLName, ACLSpec]),
|
||||||
|
case lists:keyfind(aborted, 1, ResL) of
|
||||||
|
false when BadNodes == [] ->
|
||||||
|
ok;
|
||||||
|
false ->
|
||||||
|
{error, {failed_nodes, BadNodes}};
|
||||||
|
Err ->
|
||||||
|
{error, Err}
|
||||||
|
end.
|
||||||
|
|
||||||
|
add_local(Host, ACLName, ACLSpec) ->
|
||||||
F = fun () ->
|
F = fun () ->
|
||||||
mnesia:write(#acl{aclname = {ACLName, Host},
|
mnesia:write(#acl{aclname = {ACLName, Host},
|
||||||
aclspec = normalize_spec(ACLSpec)})
|
aclspec = normalize_spec(ACLSpec)})
|
||||||
end,
|
end,
|
||||||
mnesia:transaction(F).
|
case mnesia:transaction(F) of
|
||||||
|
{atomic, ok} ->
|
||||||
|
ok;
|
||||||
|
Err ->
|
||||||
|
Err
|
||||||
|
end.
|
||||||
|
|
||||||
-spec add_list(binary(), [acl()], boolean()) -> false | ok.
|
-spec add_list(binary(), [acl()], boolean()) -> ok | {error, any()}.
|
||||||
|
|
||||||
add_list(Host, ACLs, Clear) ->
|
add_list(Host, ACLs, Clear) ->
|
||||||
|
{ResL, BadNodes} = rpc:multicall(ejabberd_cluster:get_nodes(),
|
||||||
|
?MODULE, add_list_local,
|
||||||
|
[Host, ACLs, Clear]),
|
||||||
|
case lists:keyfind(aborted, 1, ResL) of
|
||||||
|
false when BadNodes == [] ->
|
||||||
|
ok;
|
||||||
|
false ->
|
||||||
|
{error, {failed_nodes, BadNodes}};
|
||||||
|
Err ->
|
||||||
|
{error, Err}
|
||||||
|
end.
|
||||||
|
|
||||||
|
add_list_local(Host, ACLs, Clear) ->
|
||||||
F = fun () ->
|
F = fun () ->
|
||||||
if Clear ->
|
if Clear ->
|
||||||
Ks = mnesia:select(acl,
|
Ks = mnesia:select(acl,
|
||||||
|
@ -112,10 +145,7 @@ add_list(Host, ACLs, Clear) ->
|
||||||
end,
|
end,
|
||||||
ACLs)
|
ACLs)
|
||||||
end,
|
end,
|
||||||
case mnesia:transaction(F) of
|
mnesia:transaction(F).
|
||||||
{atomic, _} -> ok;
|
|
||||||
_ -> false
|
|
||||||
end.
|
|
||||||
|
|
||||||
normalize(A) -> jlib:nodeprep(iolist_to_binary(A)).
|
normalize(A) -> jlib:nodeprep(iolist_to_binary(A)).
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user