diff --git a/apps/emqttd/src/emqttd_access_control.erl b/apps/emqttd/src/emqttd_access_control.erl index 4cc9aa71f..94b8025a1 100644 --- a/apps/emqttd/src/emqttd_access_control.erl +++ b/apps/emqttd/src/emqttd_access_control.erl @@ -95,7 +95,7 @@ auth(Client, Password, [{Mod, State} | Mods]) -> check_acl(Client, PubSub, Topic) when PubSub =:= publish orelse PubSub =:= subscribe -> case lookup_mods(acl) of [] -> allow; - [{_, AclMods}] -> check_acl(Client, PubSub, Topic, AclMods) + AclMods -> check_acl(Client, PubSub, Topic, AclMods) end. check_acl(#mqtt_client{clientid = ClientId}, PubSub, Topic, []) -> lager:error("ACL: nomatch when ~s ~s ~s", [ClientId, PubSub, Topic]), @@ -124,7 +124,7 @@ reload_acl() -> %% @end %%------------------------------------------------------------------------------ -spec register_mod(Type :: auth | acl, Mod :: atom(), Opts :: list()) -> ok | {error, any()}. -register_mod(Type, Mod, Opts) -> +register_mod(Type, Mod, Opts) when Type =:= auth; Type =:= acl-> gen_server:call(?SERVER, {register_mod, Type, Mod, Opts}). %%------------------------------------------------------------------------------ @@ -134,7 +134,7 @@ register_mod(Type, Mod, Opts) -> %% @end %%------------------------------------------------------------------------------ -spec unregister_mod(Type :: auth | acl, Mod :: atom()) -> ok | {error, any()}. -unregister_mod(Type, Mod) -> +unregister_mod(Type, Mod) when Type =:= auth; Type =:= acl -> gen_server:call(?SERVER, {unregister_mod, Type, Mod}). %%------------------------------------------------------------------------------ @@ -169,8 +169,8 @@ stop() -> init([AcOpts]) -> ets:new(?ACCESS_CONTROL_TAB, [set, named_table, protected, {read_concurrency, true}]), - ets:insert(?ACCESS_CONTROL_TAB, init_mods(auth, proplists:get_value(auth, AcOpts))), - ets:insert(?ACCESS_CONTROL_TAB, init_mods(acl, proplists:get_value(acl, AcOpts))), + ets:insert(?ACCESS_CONTROL_TAB, {auth_modules, init_mods(auth, proplists:get_value(auth, AcOpts))}), + ets:insert(?ACCESS_CONTROL_TAB, {acl_modules, init_mods(acl, proplists:get_value(acl, AcOpts))}), {ok, state}. init_mods(auth, AuthMods) -> diff --git a/apps/emqttd/src/emqttd_protocol.erl b/apps/emqttd/src/emqttd_protocol.erl index 9dea71419..6c6b29808 100644 --- a/apps/emqttd/src/emqttd_protocol.erl +++ b/apps/emqttd/src/emqttd_protocol.erl @@ -167,7 +167,7 @@ handle(Packet = ?PUBLISH_PACKET(?QOS_1, Topic, PacketId, _Payload), handle(Packet = ?PUBLISH_PACKET(?QOS_2, Topic, PacketId, _Payload), State = #proto_state{clientid = ClientId, session = Session}) -> - case emqttd_access_control:check_acl({client(State), publish, Topic}) of + case emqttd_access_control:check_acl(client(State), publish, Topic) of allow -> NewSession = emqttd_session:publish(Session, ClientId, {?QOS_2, emqtt_message:from_packet(Packet)}), send(?PUBACK_PACKET(?PUBREC, PacketId), State#proto_state{session = NewSession});