Merge pull request #10170 from terry-xiaoyu/copyof44

Copyof44
This commit is contained in:
Xinyu Liu 2023-03-20 13:32:50 +08:00 committed by GitHub
commit 3d99bd2ef5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
97 changed files with 523 additions and 295 deletions

View File

@ -29,7 +29,7 @@
!export EMQX_LOG__LEVEL=debug
!./bin/emqx start
?EMQ X .* is started successfully!
?EMQ.* is started successfully!
?SH-PROMPT
[shell emqx2]
@ -43,7 +43,7 @@
!export EMQX_LOG__LEVEL=debug
!./bin/emqx start
?EMQ X .* is started successfully!
?EMQ.* is started successfully!
?SH-PROMPT
!./bin/emqx_ctl cluster join emqx@127.0.0.1

View File

@ -93,9 +93,9 @@ jobs:
./_build/${{ matrix.profile }}/rel/emqx/bin/emqx stop
echo "EMQX stopped"
./_build/${{ matrix.profile }}/rel/emqx/bin/emqx install
echo "EQMX installed"
echo "EMQX installed"
./_build/${{ matrix.profile }}/rel/emqx/bin/emqx uninstall
echo "EQMX uninstaled"
echo "EMQX uninstaled"
- uses: actions/upload-artifact@v3
with:
name: ${{ matrix.profile }}

View File

@ -109,9 +109,9 @@ jobs:
./_build/${{ matrix.profile }}/rel/emqx/bin/emqx stop
echo "EMQX stopped"
./_build/${{ matrix.profile }}/rel/emqx/bin/emqx install
echo "EQMX installed"
echo "EMQX installed"
./_build/${{ matrix.profile }}/rel/emqx/bin/emqx uninstall
echo "EQMX uninstaled"
echo "EMQX uninstaled"
mac:
strategy:

View File

@ -79,7 +79,7 @@ jobs:
TARGET: emqx/${{ needs.build.outputs.imgname }}
EMQX_TAG: ${{ needs.build.outputs.version }}
run: |
docker-compose \
docker compose \
-f .ci/docker-compose-file/docker-compose-emqx-cluster.yaml \
up -d --build
- uses: actions/checkout@v3
@ -180,7 +180,7 @@ jobs:
EMQX_TAG: ${{ needs.build.outputs.version }}
MYSQL_TAG: ${{ matrix.mysql_tag }}
run: |
docker-compose \
docker compose \
-f .ci/docker-compose-file/docker-compose-emqx-cluster.yaml \
-f .ci/docker-compose-file/docker-compose-mysql-tls.yaml \
up -d --build
@ -287,7 +287,7 @@ jobs:
EMQX_TAG: ${{ needs.build.outputs.version }}
PGSQL_TAG: ${{ matrix.pgsql_tag }}
run: |
docker-compose \
docker compose \
-f .ci/docker-compose-file/docker-compose-emqx-broker-cluster.yaml \
-f .ci/docker-compose-file/docker-compose-pgsql-tls.yaml \
up -d --build
@ -383,7 +383,7 @@ jobs:
EMQX_TAG: ${{ needs.build.outputs.version }}
MYSQL_TAG: 8
run: |
docker-compose \
docker compose \
-f .ci/docker-compose-file/docker-compose-emqx-broker-cluster.yaml \
-f .ci/docker-compose-file/docker-compose-mysql-tcp.yaml \
-f .ci/docker-compose-file/docker-compose-enterprise-tomcat-tcp.yaml \

View File

@ -33,7 +33,7 @@ jobs:
env:
LDAP_TAG: ${{ matrix.ldap_tag }}
run: |
docker-compose \
docker compose \
-f .ci/docker-compose-file/docker-compose-ldap-tcp.yaml \
-f .ci/docker-compose-file/docker-compose.yaml \
up -d --build
@ -88,9 +88,9 @@ jobs:
run: |
docker rm -f $(docker ps -qa) || true
docker network rm $(docker network ls -q) || true
- name: docker-compose up
- name: docker compose up
run: |
docker-compose \
docker compose \
-f .ci/docker-compose-file/docker-compose-toxiproxy.yaml \
-f .ci/docker-compose-file/docker-compose-mongo-${{ matrix.connect_type }}.yaml \
-f .ci/docker-compose-file/docker-compose.yaml \
@ -164,10 +164,10 @@ jobs:
run: |
docker rm -f $(docker ps -qa) || true
docker network rm $(docker network ls -q) || true
- name: docker-compose up
- name: docker compose up
timeout-minutes: 5
run: |
docker-compose \
docker compose \
-f .ci/docker-compose-file/docker-compose-mysql-${{ matrix.connect_type }}.yaml \
-f .ci/docker-compose-file/docker-compose.yaml \
up -d --build
@ -254,9 +254,9 @@ jobs:
run: |
docker rm -f $(docker ps -qa) || true
docker network rm $(docker network ls -q) || true
- name: docker-compose up
- name: docker compose up
run: |
docker-compose \
docker compose \
-f .ci/docker-compose-file/docker-compose-pgsql-${{ matrix.connect_type }}.yaml \
-f .ci/docker-compose-file/docker-compose.yaml \
up -d --build
@ -339,9 +339,9 @@ jobs:
run: |
docker rm -f $(docker ps -qa) || true
docker network rm $(docker network ls -q) || true
- name: docker-compose up
- name: docker compose up
run: |
docker-compose \
docker compose \
-f .ci/docker-compose-file/docker-compose-redis-${{ matrix.node_type }}-${{ matrix.connect_type }}.yaml \
-f .ci/docker-compose-file/docker-compose.yaml \
up -d --build

View File

@ -43,7 +43,9 @@ check_acl(ClientInfo, PubSub, Topic, _AclResult, #{acl := ACLParams = #{path :=
ClientInfo1 = ClientInfo#{access => access(PubSub), topic => Topic},
Username = maps:get(username, ClientInfo1, undefined),
case check_acl_request(ACLParams, ClientInfo1) of
{ok, 200, <<"ignore">>} -> ok;
{ok, 200, <<"ignore">>} ->
?LOG(debug, "ignored, ~s to topic ~ts, username: ~ts",
[PubSub, Topic, Username]);
{ok, 200, _Body} ->
?LOG(debug, "Allow ~s to topic ~ts, username: ~ts",
[PubSub, Topic, Username]),

View File

@ -1,6 +1,6 @@
{application, emqx_auth_http,
[{description, "EMQX Authentication/ACL with HTTP API"},
{vsn, "4.3.11"}, % strict semver, bump manually!
{vsn, "4.3.12"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_auth_http_sup]},
{applications, [kernel,stdlib,ehttpc]},

View File

@ -1,7 +1,10 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.3.10",
[{"4.3.11",
[{load_module,emqx_auth_http,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_http,brutal_purge,soft_purge,[]}]},
{"4.3.10",
[{load_module,emqx_auth_http,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_http,brutal_purge,soft_purge,[]}]},
{"4.3.9",
@ -45,7 +48,10 @@
{load_module,emqx_auth_http_cli,brutal_purge,soft_purge,[]}]},
{<<"4.3.[0-1]">>,[{restart_application,emqx_auth_http}]},
{<<".*">>,[]}],
[{"4.3.10",
[{"4.3.11",
[{load_module,emqx_auth_http,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_http,brutal_purge,soft_purge,[]}]},
{"4.3.10",
[{load_module,emqx_auth_http,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_http,brutal_purge,soft_purge,[]}]},
{"4.3.9",

View File

@ -39,7 +39,7 @@ check(ClientInfo, AuthResult, #{auth := AuthParms = #{path := Path},
Username = maps:get(username, ClientInfo, undefined),
case authenticate(AuthParms, ClientInfo) of
{ok, 200, <<"ignore">>} ->
ok;
?LOG(debug, "Auth ignored, path: ~ts, username: ~ts", [Path, Username]);
{ok, 200, Body} ->
?LOG(debug, "Auth succeeded from path: ~ts, username: ~ts", [Path, Username]),
IsSuperuser = is_superuser(SuperParams, ClientInfo),

View File

@ -1,6 +1,6 @@
{application, emqx_auth_jwt,
[{description, "EMQX Authentication with JWT"},
{vsn, "4.4.9"}, % strict semver, bump manually!
{vsn, "4.4.10"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_auth_jwt_sup]},
{applications, [kernel,stdlib,jose]},

View File

@ -1,7 +1,8 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.4.8",
[{"4.4.9",[{load_module,emqx_auth_jwt,brutal_purge,soft_purge,[]}]},
{"4.4.8",
[{load_module,emqx_auth_jwt,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_jwt_svr,brutal_purge,soft_purge,[]}]},
{<<"4\\.4\\.[2-7]">>,
@ -9,7 +10,8 @@
{load_module,emqx_auth_jwt,brutal_purge,soft_purge,[]}]},
{<<"4\\.4\\.[0-1]">>,[{restart_application,emqx_auth_jwt}]},
{<<".*">>,[]}],
[{"4.4.8",
[{"4.4.9",[{load_module,emqx_auth_jwt,brutal_purge,soft_purge,[]}]},
{"4.4.8",
[{load_module,emqx_auth_jwt,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_jwt_svr,brutal_purge,soft_purge,[]}]},
{<<"4\\.4\\.[2-7]">>,

View File

@ -41,15 +41,15 @@ check(ClientInfo, AuthResult, State) ->
check_auth(ClientInfo, AuthResult, #{from := From, checklists := Checklists}) ->
case maps:find(From, ClientInfo) of
error ->
ok;
?LOG(debug, "Auth ignored, ~p not found in Client: ~p", [From, ClientInfo]);
{ok, undefined} ->
ok;
?LOG(debug, "Auth ignored, ~p undefined, Client: ~p", [From, ClientInfo]);
{ok, Token} ->
case emqx_auth_jwt_svr:verify(Token) of
{error, not_found} ->
ok;
?LOG_SENSITIVE(debug, "Auth ignored, ~p not_found, Client: ~p", [Token, ClientInfo]);
{error, not_token} ->
ok;
?LOG_SENSITIVE(debug, "Auth ignored, ~p not_token, Client: ~p", [Token, ClientInfo]);
{error, Reason} ->
?LOG_SENSITIVE(debug,
"Auth from JWT failed, Client: ~p, Reason: ~p",

View File

@ -28,7 +28,9 @@
check_acl(ClientInfo, PubSub, Topic, NoMatchAction, State) ->
case do_check_acl(ClientInfo, PubSub, Topic, NoMatchAction, State) of
ok -> ok;
ok -> ?LOG_SENSITIVE(debug,
"[LDAP] ACL ignored, Topic: ~p, Action: ~p for Client: ~p",
[Topic, PubSub, ClientInfo]);
{stop, allow} ->
?LOG_SENSITIVE(debug,
"[LDAP] Allow Topic: ~p, Action: ~p for Client: ~p",

View File

@ -1,6 +1,6 @@
{application, emqx_auth_ldap,
[{description, "EMQX Authentication/ACL with LDAP"},
{vsn, "4.3.7"}, % strict semver, bump manually!
{vsn, "4.3.8"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_auth_ldap_sup]},
{applications, [kernel,stdlib,eldap2,ecpool]},

View File

@ -1,7 +1,10 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.3.6",
[{"4.3.7",
[{load_module,emqx_auth_ldap,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_ldap,brutal_purge,soft_purge,[]}]},
{"4.3.6",
[{load_module,emqx_acl_ldap,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_ldap,brutal_purge,soft_purge,[]}]},
{"4.3.5",
@ -24,7 +27,10 @@
{load_module,emqx_acl_ldap,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_ldap_cli,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{"4.3.6",
[{"4.3.7",
[{load_module,emqx_auth_ldap,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_ldap,brutal_purge,soft_purge,[]}]},
{"4.3.6",
[{load_module,emqx_acl_ldap,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_ldap,brutal_purge,soft_purge,[]}]},
{"4.3.5",

View File

@ -59,13 +59,15 @@ check(ClientInfo = #{username := Username, password := Password}, AuthResult,
case CheckResult of
ok ->
?LOG_SENSITIVE(debug,
"[LDAP] Auth from ldap succeeded, Client: ~p",
"[LDAP] Auth succeeded, Client: ~p",
[ClientInfo]),
{stop, AuthResult#{auth_result => success, anonymous => false}};
{error, not_found} ->
ok;
?LOG_SENSITIVE(debug,
"[LDAP] Auth ignored, Client: ~p",
[ClientInfo]);
{error, ResultCode} ->
?LOG_SENSITIVE(error, "[LDAP] Auth from ldap failed: ~p", [ResultCode]),
?LOG_SENSITIVE(error, "[LDAP] Auth failed: ~p", [ResultCode]),
{stop, AuthResult#{auth_result => ResultCode, anonymous => false}}
end.

View File

@ -54,7 +54,9 @@ check_acl(ClientInfo = #{ clientid := Clientid }, PubSub, Topic, _NoMatchAction,
[Topic, PubSub, ClientInfo]),
{stop, deny};
_ ->
ok
?LOG_SENSITIVE(debug,
"[Mnesia] ACL ignored, Topic: ~p, Action: ~p for Client: ~p",
[Topic, PubSub, ClientInfo])
end.
description() -> "Acl with Mnesia".

View File

@ -1,6 +1,6 @@
{application, emqx_auth_mnesia,
[{description, "EMQX Authentication with Mnesia"},
{vsn, "4.3.11"}, % strict semver, bump manually
{vsn, "4.3.12"}, % strict semver, bump manually
{modules, []},
{registered, []},
{applications, [kernel,stdlib,mnesia]},

View File

@ -1,7 +1,10 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.3.10",
[{"4.3.11",
[{load_module,emqx_auth_mnesia,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_mnesia,brutal_purge,soft_purge,[]}]},
{"4.3.10",
[{load_module,emqx_auth_mnesia,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_mnesia,brutal_purge,soft_purge,[]}]},
{"4.3.9",
@ -47,7 +50,10 @@
{load_module,emqx_acl_mnesia_cli,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_mnesia_app,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{"4.3.10",
[{"4.3.11",
[{load_module,emqx_auth_mnesia,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_mnesia,brutal_purge,soft_purge,[]}]},
{"4.3.10",
[{load_module,emqx_auth_mnesia,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_mnesia,brutal_purge,soft_purge,[]}]},
{"4.3.9",

View File

@ -60,19 +60,17 @@ check(ClientInfo = #{ clientid := Clientid
MatchSpec = ets:fun2ms(fun({?TABLE, {clientid, X}, Password, InterTime}) when X =:= Clientid-> Password;
({?TABLE, {username, X}, Password, InterTime}) when X =:= Username andalso X =/= undefined -> Password
end),
Info = maps:without([password], ClientInfo),
case ets:select(?TABLE, MatchSpec) of
[] ->
ok;
?LOG(debug, "[Mnesia] Auth ignored, Client: ~p", [Info]);
List ->
case match_password(NPassword, HashType, List) of
false ->
Info = maps:without([password], ClientInfo),
?LOG(info, "[Mnesia] Auth from mnesia failed: ~p", [Info]),
{stop, AuthResult#{anonymous => false, auth_result => password_error}};
_ ->
?LOG_SENSITIVE(debug,
"[Mnesia] Auth from mnesia succeeded, Client: ~p",
[ClientInfo]),
?LOG(debug,"[Mnesia] Auth from mnesia succeeded, Client: ~p", [Info]),
{stop, AuthResult#{anonymous => false, auth_result => success}}
end
end.

View File

@ -35,7 +35,9 @@ check_acl(ClientInfo, PubSub, Topic, _AclResult, Env = #{aclquery := AclQuery})
maps:from_list(emqx_auth_mongo:replvars(Selector, ClientInfo))
end, SelectorList),
case emqx_auth_mongo:query_multi(Pool, Coll, SelectorMapList) of
[] -> ok;
[] -> ?LOG_SENSITIVE(debug,
"[MongoDB] ACL ignored, Topic: ~p, Action: ~p for Client: ~p",
[Topic, PubSub, ClientInfo]);
Rows ->
try match(ClientInfo, Topic, topics(PubSub, Rows)) of
matched ->
@ -50,7 +52,7 @@ check_acl(ClientInfo, PubSub, Topic, _AclResult, Env = #{aclquery := AclQuery})
{stop, deny}
catch
_Err:Reason->
?LOG(error, "[MongoDB] Check mongo ~p ACL failed, got ACL config: ~p, error: :~p",
?LOG(error, "[MongoDB] ACL ignored, check mongo ~p ACL failed, got ACL config: ~p, error: ~p",
[PubSub, Rows, Reason]),
ignore
end

View File

@ -1,6 +1,6 @@
{application, emqx_auth_mongo,
[{description, "EMQX Authentication/ACL with MongoDB"},
{vsn, "4.4.6"}, % strict semver, bump manually!
{vsn, "4.4.7"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_auth_mongo_sup]},
{applications, [kernel,stdlib,mongodb,ecpool]},

View File

@ -1,7 +1,10 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.4.5",
[{"4.4.6",
[{load_module,emqx_auth_mongo,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_mongo,brutal_purge,soft_purge,[]}]},
{"4.4.5",
[{load_module,emqx_acl_mongo,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_mongo,brutal_purge,soft_purge,[]}]},
{"4.4.4",
@ -22,7 +25,10 @@
{load_module,emqx_auth_mongo,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_mongo,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{"4.4.5",
[{"4.4.6",
[{load_module,emqx_auth_mongo,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_mongo,brutal_purge,soft_purge,[]}]},
{"4.4.5",
[{load_module,emqx_acl_mongo,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_mongo,brutal_purge,soft_purge,[]}]},
{"4.4.4",

View File

@ -52,10 +52,11 @@ check(ClientInfo = #{password := Password}, AuthResult,
hash = HashType, selector = Selector} = AuthQuery,
Pool = maps:get(pool, Env, ?APP),
case query(Pool, Collection, maps:from_list(replvars(Selector, ClientInfo))) of
undefined -> ok;
undefined ->
?LOG_SENSITIVE(debug, "[MongoDB] Auth ignored, Client: ~p", [ClientInfo]);
{error, Reason} ->
?tp(emqx_auth_mongo_check_authn_error, #{error => Reason}),
?LOG_SENSITIVE(error, "[MongoDB] Can't connect to MongoDB server: ~0p", [Reason]),
?LOG_SENSITIVE(error, "[MongoDB] Auth failed, Can't connect to MongoDB server: ~0p", [Reason]),
{stop, AuthResult#{auth_result => not_authorized, anonymous => false}};
UserMap ->
Result = case [maps:get(Field, UserMap, undefined) || Field <- Fields] of
@ -69,7 +70,7 @@ check(ClientInfo = #{password := Password}, AuthResult,
ok ->
?tp(emqx_auth_mongo_superuser_check_authn_ok, #{}),
?LOG_SENSITIVE(debug,
"[MongoDB] Auth from mongo succeeded, Client: ~p",
"[MongoDB] Auth succeeded, Client: ~p",
[ClientInfo]),
{stop, AuthResult#{is_superuser => is_superuser(Pool, SuperQuery, ClientInfo),
anonymous => false,

View File

@ -28,7 +28,10 @@
check_acl(ClientInfo, PubSub, Topic, NoMatchAction, #{pool := Pool} = State) ->
case do_check_acl(Pool, ClientInfo, PubSub, Topic, NoMatchAction, State) of
ok -> ok;
ok ->
?LOG_SENSITIVE(debug,
"[MySQL] ACL ignored, Topic: ~p, Action: ~p for Client: ~p",
[Topic, PubSub, ClientInfo]);
{stop, allow} ->
?LOG_SENSITIVE(debug,
"[MySQL] Allow Topic: ~p, Action: ~p for Client: ~p",

View File

@ -1,6 +1,6 @@
{application, emqx_auth_mysql,
[{description, "EMQX Authentication/ACL with MySQL"},
{vsn, "4.3.5"}, % strict semver, bump manually!
{vsn, "4.3.6"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_auth_mysql_sup]},
{applications, [kernel,stdlib,mysql,ecpool]},

View File

@ -1,7 +1,10 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.3.4",
[{"4.3.5",
[{load_module,emqx_auth_mysql,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_mysql,brutal_purge,soft_purge,[]}]},
{"4.3.4",
[{load_module,emqx_auth_mysql,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_mysql,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_mysql_cli,brutal_purge,soft_purge,[]}]},
@ -20,7 +23,10 @@
{load_module,emqx_auth_mysql,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_mysql,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{"4.3.4",
[{"4.3.5",
[{load_module,emqx_auth_mysql,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_mysql,brutal_purge,soft_purge,[]}]},
{"4.3.4",
[{load_module,emqx_auth_mysql,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_mysql,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_mysql_cli,brutal_purge,soft_purge,[]}]},

View File

@ -46,16 +46,14 @@ check(ClientInfo = #{password := Password}, AuthResult,
end,
case CheckPass of
ok ->
?LOG_SENSITIVE(debug,
"[MySQL] Auth from mysql succeeded, Client: ~p",
[ClientInfo]),
?LOG_SENSITIVE(debug, "[MySQL] Auth succeeded, Client: ~p", [ClientInfo]),
{stop, AuthResult#{is_superuser => is_superuser(Pool, SuperQuery, ClientInfo),
anonymous => false,
auth_result => success}};
{error, not_found} ->
ok;
?LOG_SENSITIVE(debug, "[MySQL] Auth ignored, Client: ~p", [ClientInfo]);
{error, ResultCode} ->
?LOG_SENSITIVE(error, "[MySQL] Auth from mysql failed: ~p", [ResultCode]),
?LOG_SENSITIVE(error, "[MySQL] Auth failed: ~p", [ResultCode]),
{stop, AuthResult#{auth_result => ResultCode, anonymous => false}}
end.

View File

@ -32,7 +32,10 @@ do_check_acl(_Pool, #{username := <<$$, _/binary>>}, _PubSub, _Topic, _NoMatchAc
ok;
do_check_acl(Pool, ClientInfo, PubSub, Topic, _NoMatchAction, #{acl_query := {AclSql, AclParams}}) ->
case emqx_auth_pgsql_cli:equery(Pool, AclSql, AclParams, ClientInfo) of
{ok, _, []} -> ok;
{ok, _, []} ->
?LOG_SENSITIVE(debug,
"[Postgres] ACL ignored, Topic: ~p, Action: ~p for Client: ~p",
[Topic, PubSub, ClientInfo]);
{ok, _, Rows} ->
Rules = filter(PubSub, compile(Rows)),
case match(ClientInfo, Topic, Rules) of

View File

@ -1,6 +1,6 @@
{application, emqx_auth_pgsql,
[{description, "EMQX Authentication/ACL with PostgreSQL"},
{vsn, "4.4.5"}, % strict semver, bump manually!
{vsn, "4.4.6"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_auth_pgsql_sup]},
{applications, [kernel,stdlib,epgsql,ecpool]},

View File

@ -1,7 +1,10 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.4.4",
[{"4.4.5",
[{load_module,emqx_auth_pgsql,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_pgsql,brutal_purge,soft_purge,[]}]},
{"4.4.4",
[{load_module,emqx_acl_pgsql,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_pgsql,brutal_purge,soft_purge,[]}]},
{"4.4.3",
@ -14,7 +17,10 @@
{load_module,emqx_auth_pgsql,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_pgsql_app,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{"4.4.4",
[{"4.4.5",
[{load_module,emqx_auth_pgsql,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_pgsql,brutal_purge,soft_purge,[]}]},
{"4.4.4",
[{load_module,emqx_acl_pgsql,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_pgsql,brutal_purge,soft_purge,[]}]},
{"4.4.3",

View File

@ -45,16 +45,14 @@ check(ClientInfo = #{password := Password}, AuthResult,
end,
case CheckPass of
ok ->
?LOG_SENSITIVE(debug,
"[Postgres] Auth from pgsql succeeded, Client: ~p",
[ClientInfo]),
?LOG_SENSITIVE(debug, "[Postgres] Auth succeeded, Client: ~p", [ClientInfo]),
{stop, AuthResult#{is_superuser => is_superuser(Pool, SuperQuery, ClientInfo),
anonymous => false,
auth_result => success}};
{error, not_found} ->
ok;
?LOG_SENSITIVE(debug, "[Postgres] Auth ignored, Client: ~p", [ClientInfo]);
{error, ResultCode} ->
?LOG_SENSITIVE(error, "[Postgres] Auth from pgsql failed: ~p", [ResultCode]),
?LOG_SENSITIVE(error, "[Postgres] Auth failed: ~p", [ResultCode]),
{stop, AuthResult#{auth_result => ResultCode, anonymous => false}}
end.

View File

@ -30,7 +30,10 @@ check_acl(#{username := <<$$, _/binary>>}, _PubSub, _Topic, _AclResult, _Config)
check_acl(ClientInfo, PubSub, Topic, _AclResult,
#{acl_cmd := AclCmd, timeout := Timeout, type := Type, pool := Pool}) ->
case emqx_auth_redis_cli:q(Pool, Type, AclCmd, ClientInfo, Timeout) of
{ok, []} -> ok;
{ok, []} ->
?LOG_SENSITIVE(debug,
"[Redis] ACL ignored, Topic: ~p, Action: ~p for Client: ~p",
[Topic, PubSub, ClientInfo]);
{ok, Rules} ->
case match(ClientInfo, PubSub, Topic, Rules) of
allow ->

View File

@ -1,6 +1,6 @@
{application, emqx_auth_redis,
[{description, "EMQX Authentication/ACL with Redis"},
{vsn, "4.3.5"}, % strict semver, bump manually!
{vsn, "4.3.6"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_auth_redis_sup]},
{applications, [kernel,stdlib,eredis,eredis_cluster,ecpool]},

View File

@ -1,8 +1,12 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.3.4",
[{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]}]},
[{"4.3.5",
[{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_redis,brutal_purge,soft_purge,[]}]},
{"4.3.4",
[{load_module,emqx_auth_redis,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]}]},
{"4.3.3",
[{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_redis,brutal_purge,soft_purge,[]},
@ -18,8 +22,12 @@
{load_module,emqx_auth_redis,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{"4.3.4",
[{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]}]},
[{"4.3.5",
[{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_redis,brutal_purge,soft_purge,[]}]},
{"4.3.4",
[{load_module,emqx_auth_redis,brutal_purge,soft_purge,[]},
{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]}]},
{"4.3.3",
[{load_module,emqx_acl_redis,brutal_purge,soft_purge,[]},
{load_module,emqx_auth_redis,brutal_purge,soft_purge,[]},

View File

@ -47,14 +47,15 @@ check(ClientInfo = #{password := Password}, AuthResult,
end,
case CheckPass of
ok ->
?LOG_SENSITIVE(debug, "[Redis] Auth succeeded, Client: ~p", [ClientInfo]),
IsSuperuser = is_superuser(Pool, Type, SuperCmd, ClientInfo, Timeout),
{stop, AuthResult#{is_superuser => IsSuperuser,
anonymous => false,
auth_result => success}};
{error, not_found} ->
ok;
?LOG_SENSITIVE(debug, "[Redis] Auth ignored, Client: ~p", [ClientInfo]);
{error, ResultCode} ->
?LOG_SENSITIVE(error, "[Redis] Auth from redis failed: ~p", [ResultCode]),
?LOG_SENSITIVE(error, "[Redis] Auth failed: ~p", [ResultCode]),
{stop, AuthResult#{auth_result => ResultCode, anonymous => false}}
end.

View File

@ -1,6 +1,6 @@
{application, emqx_bridge_mqtt,
[{description, "EMQX Bridge to MQTT Broker"},
{vsn, "4.3.8"}, % strict semver, bump manually!
{vsn, "4.3.9"}, % strict semver, bump manually!
{modules, []},
{registered, []},
{applications, [kernel,stdlib,replayq,emqtt]},

View File

@ -1,7 +1,9 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.3.7",
[{"4.3.8",
[{load_module,emqx_bridge_mqtt_actions,brutal_purge,soft_purge,[]}]},
{"4.3.7",
[{load_module,emqx_bridge_mqtt_actions,brutal_purge,soft_purge,[]}]},
{"4.3.6",
[{load_module,emqx_bridge_connect,brutal_purge,soft_purge,[]},
@ -23,7 +25,9 @@
{load_module,emqx_bridge_worker,brutal_purge,soft_purge,[]},
{load_module,emqx_bridge_mqtt_actions,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{"4.3.7",
[{"4.3.8",
[{load_module,emqx_bridge_mqtt_actions,brutal_purge,soft_purge,[]}]},
{"4.3.7",
[{load_module,emqx_bridge_mqtt_actions,brutal_purge,soft_purge,[]}]},
{"4.3.6",
[{load_module,emqx_bridge_connect,brutal_purge,soft_purge,[]},

View File

@ -1,6 +1,6 @@
{application, emqx_coap,
[{description, "EMQX CoAP Gateway"},
{vsn, "4.3.3"}, % strict semver, bump manually!
{vsn, "4.3.4"}, % strict semver, bump manually!
{modules, []},
{registered, []},
{applications, [kernel,stdlib,gen_coap]},

View File

@ -1,7 +1,7 @@
%% -*- mode: erlang -*-
{application, emqx_exhook,
[{description, "EMQX Extension for Hook"},
{vsn, "4.4.6"},
{vsn, "4.4.7"},
{modules, []},
{registered, []},
{mod, {emqx_exhook_app, []}},

View File

@ -1,6 +1,6 @@
{application, emqx_exproto,
[{description, "EMQX Extension for Protocol"},
{vsn, "4.3.15"}, %% 4.3.3 is used by ee
{vsn, "4.3.16"}, %% 4.3.3 is used by ee
{modules, []},
{registered, []},
{mod, {emqx_exproto_app, []}},

View File

@ -1,6 +1,6 @@
{application, emqx_lua_hook,
[{description, "EMQX Lua Hooks"},
{vsn, "4.3.2"}, % strict semver, bump manually!
{vsn, "4.3.3"}, % strict semver, bump manually!
{modules, []},
{registered, []},
{applications, [kernel,stdlib]},

View File

@ -2,6 +2,8 @@
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.3.1",[{load_module,emqx_lua_script,brutal_purge,soft_purge,[]}]},
{"4.3.0",[{load_module,emqx_lua_script,brutal_purge,soft_purge,[]}]}],
{"4.3.0",[{load_module,emqx_lua_script,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{"4.3.1",[{load_module,emqx_lua_script,brutal_purge,soft_purge,[]}]},
{"4.3.0",[{load_module,emqx_lua_script,brutal_purge,soft_purge,[]}]}]}.
{"4.3.0",[{load_module,emqx_lua_script,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}]}.

View File

@ -1,6 +1,6 @@
{application,emqx_lwm2m,
[{description,"EMQX LwM2M Gateway"},
{vsn, "4.3.8"}, % strict semver, bump manually!
{vsn, "4.3.9"}, % strict semver, bump manually!
{modules,[]},
{registered,[emqx_lwm2m_sup]},
{applications,[kernel,stdlib,lwm2m_coap]},

View File

@ -7,14 +7,18 @@
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]}]},
{<<"4\\.3\\.[0-1]">>,[{restart_application,emqx_lwm2m}]},
{"4.3.2",
{"4.3.6",
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]}]},
{"4.3.5",
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_protocol,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_api,brutal_purge,soft_purge,[]}]},
{<<"4\\.3\\.[3-4]">>,
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
@ -24,33 +28,34 @@
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_protocol,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_api,brutal_purge,soft_purge,[]}]},
{"4.3.5",
{"4.3.2",
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_api,brutal_purge,soft_purge,[]}]},
{"4.3.6",
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_protocol,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]}]}],
{load_module,emqx_lwm2m_api,brutal_purge,soft_purge,[]}]},
{<<"4\\.3\\.[0-1]">>,[{restart_application,emqx_lwm2m}]},
{<<".*">>,[]}],
[{"4.3.7",
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]}]},
{<<"4\\.3\\.[0-1]">>,[{restart_application,emqx_lwm2m}]},
{"4.3.2",
{"4.3.6",
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]}]},
{"4.3.5",
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_protocol,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_api,brutal_purge,soft_purge,[]}]},
{<<"4\\.3\\.[3-4]">>,
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
@ -60,16 +65,13 @@
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_protocol,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_api,brutal_purge,soft_purge,[]}]},
{"4.3.5",
{"4.3.2",
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_api,brutal_purge,soft_purge,[]}]},
{"4.3.6",
[{load_module,emqx_lwm2m_xml_object_db,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_xml_object,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_protocol,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_message,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_json,brutal_purge,soft_purge,[]},
{load_module,emqx_lwm2m_cmd_handler,brutal_purge,soft_purge,[]}]}]}.
{load_module,emqx_lwm2m_api,brutal_purge,soft_purge,[]}]},
{<<"4\\.3\\.[0-1]">>,[{restart_application,emqx_lwm2m}]},
{<<".*">>,[]}]}.

View File

@ -1,6 +1,6 @@
{application, emqx_management,
[{description, "EMQX Management API and CLI"},
{vsn, "4.4.13"}, % strict semver, bump manually!
{vsn, "4.4.14"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_management_sup]},
{applications, [kernel,stdlib,emqx_plugin_libs,minirest]},

View File

@ -1,6 +1,6 @@
{application, emqx_plugin_libs,
[{description, "EMQX Plugin utility libs"},
{vsn, "4.4.6"},
{vsn, "4.4.8"},
{modules, []},
{applications, [kernel,stdlib]},
{env, []}

View File

@ -1,12 +1,14 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[
[{"4.4.7",[{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]}]},
{"4.4.6",[{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]}]},
{<<"4\\.4\\.[3-5]">>,
[{load_module,emqx_trace,brutal_purge,soft_purge,[]},
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]},
{"4.4.2",[
{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]},
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]},
{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]}]},
{"4.4.2",
[{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]},
{load_module,emqx_trace,brutal_purge,soft_purge,[]},
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]},
{"4.4.1",
@ -20,13 +22,12 @@
{update,emqx_slow_subs,{advanced,["4.4.0"]}},
{load_module,emqx_slow_subs_api,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[
[{"4.4.7",[{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]}]},
{"4.4.6",[{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]}]},
{<<"4\\.4\\.[3-5]">>,
[{load_module,emqx_trace,brutal_purge,soft_purge,[]},
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]},
{"4.4.3",
[{load_module,emqx_trace,brutal_purge,soft_purge,[]},
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]}]},
{load_module,emqx_trace_api,brutal_purge,soft_purge,[]},
{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]}]},
{"4.4.2",
[{load_module,emqx_plugin_libs_ssl,brutal_purge,soft_purge,[]},
{load_module,emqx_trace,brutal_purge,soft_purge,[]},

View File

@ -18,9 +18,14 @@
-export([save_files_return_opts/2,
save_files_return_opts/3,
save_files_return_opts/4,
save_file/2
]).
-export([maybe_delete_dir/1,
maybe_delete_dir/2
]).
-type file_input_key() :: binary(). %% <<"file">> | <<"filename">>
-type file_input() :: #{file_input_key() => binary()}.
@ -38,11 +43,18 @@
-type opt_key() :: keyfile | certfile | cacertfile | verify | versions | ciphers.
-type opt_value() :: term().
-type opts() :: [{opt_key(), opt_value()}].
-type dirname() :: atom() | string() | binary().
%% @doc Parse ssl options input.
%% If the input contains file content, save the files in the given dir.
%% Returns ssl options for Erlang's ssl application.
-spec save_files_return_opts(opts_input(), atom() | string() | binary(),
-spec save_files_return_opts(opts_input(), dirname(),
string() | binary(), dirname()) -> opts().
save_files_return_opts(Options, SubDir, ResId, ResSubdir) ->
Dir = filename:join([emqx:get_env(data_dir), SubDir, ResId, ResSubdir]),
save_files_return_opts(Options, Dir).
-spec save_files_return_opts(opts_input(), dirname(),
string() | binary()) -> opts().
save_files_return_opts(Options, SubDir, ResId) ->
Dir = filename:join([emqx:get_env(data_dir), SubDir, ResId]),
@ -141,6 +153,20 @@ maybe_save_file(FileName, Content, Dir) ->
error({"failed_to_save_ssl_file", FullFilename, Reason})
end.
maybe_delete_dir(SubDir, ResId) ->
Dir = filename:join([emqx:get_env(data_dir), SubDir, ResId]),
maybe_delete_dir(Dir).
maybe_delete_dir(Dir) ->
case file:del_dir_r(Dir) of
ok ->
ok;
{error, enoent} ->
ok;
{error, Reason} ->
logger:error("Delete Resource dir ~p failed for reason: ~p", [Dir, Reason])
end.
ensure_str(L) when is_list(L) -> L;
ensure_str(B) when is_binary(B) -> unicode:characters_to_list(B, utf8).

View File

@ -1,6 +1,6 @@
{application, emqx_prometheus,
[{description, "Prometheus for EMQX"},
{vsn, "4.3.2"}, % strict semver, bump manually!
{vsn, "4.3.3"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_prometheus_sup]},
{applications, [kernel,stdlib,prometheus]},

View File

@ -1,6 +1,6 @@
{application, emqx_psk_file,
[{description,"EMQX PSK Plugin from File"},
{vsn, "4.3.1"}, % strict semver, bump manually!
{vsn, "4.3.2"}, % strict semver, bump manually!
{modules,[]},
{registered,[emqx_psk_file_sup]},
{applications,[kernel,stdlib]},

View File

@ -2,9 +2,11 @@
{VSN,
[{"4.3.0",
[{load_module,emqx_psk_file,brutal_purge,soft_purge,[]},
{load_module,emqx_psk_file_sup,brutal_purge,soft_purge,[]}]}
{load_module,emqx_psk_file_sup,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}
],
[{"4.3.0",
[{load_module,emqx_psk_file,brutal_purge,soft_purge,[]},
{load_module,emqx_psk_file_sup,brutal_purge,soft_purge,[]}]}
{load_module,emqx_psk_file_sup,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}
]}.

View File

@ -1,6 +1,6 @@
{application, emqx_recon,
[{description, "EMQX Recon Plugin"},
{vsn, "4.3.0"}, % strict semver, bump manually!
{vsn, "4.3.1"}, % strict semver, bump manually!
{modules, []},
{registered, []},
{applications, [kernel,stdlib,recon]},

View File

@ -1,6 +1,6 @@
{application, emqx_retainer,
[{description, "EMQX Retainer"},
{vsn, "4.4.4"}, % strict semver, bump manually!
{vsn, "4.4.5"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_retainer_sup]},
{applications, [kernel,stdlib]},

View File

@ -1,6 +1,6 @@
{application, emqx_rule_engine,
[{description, "EMQX Rule Engine"},
{vsn, "4.4.15"}, % strict semver, bump manually!
{vsn, "4.4.16"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_rule_engine_sup, emqx_rule_registry, emqx_rule_engine_jwt_sup]},
{applications, [kernel,stdlib,rulesql,getopt,jose]},

View File

@ -1,14 +1,18 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{<<"4\\.4\\.1[3-4]">>,
[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
[{"4.4.15",
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}]},
{<<"4\\.4\\.1[3-4]">>,
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}]},
{"4.4.12",
[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
@ -16,7 +20,8 @@
{update,emqx_rule_engine_jwt_sup,supervisor},
{load_module,emqx_rule_engine_jwt,brutal_purge,soft_purge,[]}]},
{"4.4.11",
[{load_module,emqx_rule_engine_jwt_worker,brutal_purge,soft_purge,[]},
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine_jwt_worker,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},
{update,emqx_rule_engine_jwt_sup,supervisor},
@ -25,10 +30,10 @@
{load_module,emqx_rule_engine_sup,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]},
{apply,{emqx_rule_engine_sup,ensure_api_delegator_started,[]}},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}]},
{"4.4.10",
[{add_module,emqx_rule_engine_jwt},
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{add_module,emqx_rule_engine_jwt},
{add_module,emqx_rule_engine_jwt_worker},
{add_module,emqx_rule_engine_jwt_sup},
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
@ -45,7 +50,8 @@
{load_module,emqx_rule_funcs,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]}]},
{"4.4.9",
[{add_module,emqx_rule_engine_jwt},
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{add_module,emqx_rule_engine_jwt},
{add_module,emqx_rule_engine_jwt_worker},
{add_module,emqx_rule_engine_jwt_sup},
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
@ -232,14 +238,18 @@
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{<<"4\\.4\\.1[3-4]">>,
[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
[{"4.4.15",
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}]},
{<<"4\\.4\\.1[3-4]">>,
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}
]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}]},
{"4.4.12",
[{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_registry,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]},
@ -247,7 +257,8 @@
{update,emqx_rule_engine_jwt_sup,supervisor},
{load_module,emqx_rule_engine_jwt,brutal_purge,soft_purge,[]}]},
{"4.4.11",
[{load_module,emqx_rule_engine_jwt_worker,brutal_purge,soft_purge,[]},
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine_jwt_worker,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_events,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},
{update,emqx_rule_engine_jwt_sup,supervisor},
@ -258,7 +269,8 @@
{load_module,emqx_rule_engine_api,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_engine,brutal_purge,soft_purge,[]}]},
{"4.4.10",
[{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
{apply,{emqx_rule_engine_sup,ensure_api_delegator_stopped,[]}},
{load_module,emqx_rule_utils,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},
@ -276,7 +288,8 @@
{delete_module,emqx_rule_engine_jwt_worker},
{delete_module,emqx_rule_engine_jwt}]},
{"4.4.9",
[{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
[{load_module,emqx_rule_runtime,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_actions,brutal_purge,soft_purge,[]},
{apply,{emqx_rule_engine_sup,ensure_api_delegator_stopped,[]}},
{load_module,emqx_rule_utils,brutal_purge,soft_purge,[]},
{load_module,emqx_rule_monitor,brutal_purge,soft_purge,[]},

View File

@ -89,6 +89,7 @@
try (_EXP_)
catch
throw : Reason ->
_EXP_ON_FAIL_,
throw({_ERROR_CONTEXT_, Reason});
_EXCLASS_:_EXCPTION_:_ST_ ->
_EXP_ON_FAIL_,
@ -492,13 +493,16 @@ delete_resource(ResId) ->
case emqx_rule_registry:remove_resource(ResId) of
ok ->
_ = ?CLUSTER_CALL(clear_resource, [ModD, Destroy, ResId, ResType]),
ok;
emqx_plugin_libs_ssl:maybe_delete_dir("rules", ResId);
{error, _} = R -> R
end
catch
throw:Reason -> {error, Reason}
end;
not_found ->
%% always try to remove the dir as the resource might be created but have
%% not been initialized yet.
emqx_plugin_libs_ssl:maybe_delete_dir("rules", ResId),
{error, not_found}
end.
@ -711,7 +715,9 @@ action_instance_id(ActionName) ->
iolist_to_binary([atom_to_list(ActionName), "_", integer_to_list(erlang:system_time())]).
init_resource(Module, OnCreate, ResId, Config) ->
Params = ?RAISE(Module:OnCreate(ResId, Config), {Module, OnCreate}),
Params = ?RAISE(Module:OnCreate(ResId, Config),
emqx_plugin_libs_ssl:maybe_delete_dir("rules", ResId),
{Module, OnCreate}),
ResParams = #resource_params{id = ResId,
params = Params,
status = #{is_alive => true}},

View File

@ -265,6 +265,8 @@ take_action(#action_instance{id = Id, name = ActName, fallbacks = Fallbacks} = A
emqx_rule_metrics:inc_actions_taken(Id),
apply_action_func(Selected, Envs, Apply, ActName)
of
badact_quiet ->
handle_action_failure(OnFailed, Id, Fallbacks, Selected, Envs, badact_quiet);
{badact, Reason} ->
handle_action_failure(OnFailed, Id, Fallbacks, Selected, Envs, Reason);
Result -> Result
@ -320,10 +322,12 @@ wait_action_on(Id, RetryN) ->
end.
handle_action_failure(continue, _Id, Fallbacks, Selected, Envs = #{metadata := Metadata}, Reason) ->
Reason =/= badact_quiet andalso
?LOG_RULE_ACTION(error, Metadata, "Continue next action, reason: ~0p", [Reason]),
_ = take_actions(Fallbacks, Selected, Envs, continue),
failed;
handle_action_failure(stop, Id, Fallbacks, Selected, Envs = #{metadata := Metadata}, Reason) ->
Reason =/= badact_quiet andalso
?LOG_RULE_ACTION(error, Metadata, "Skip all actions, reason: ~0p", [Reason]),
_ = take_actions(Fallbacks, Selected, Envs, continue),
error({take_action_failed, {Id, Reason}}).

View File

@ -40,6 +40,8 @@ groups() ->
].
init_per_suite(Config) ->
%% ensure alarm_handler started
{ok, _} = application:ensure_all_started(sasl),
ok = ekka_mnesia:start(),
ok = emqx_rule_registry:mnesia(boot),
Config.

View File

@ -1,6 +1,6 @@
{application, emqx_sasl,
[{description, "EMQX SASL"},
{vsn, "4.3.0"}, % strict semver, bump manually!
{vsn, "4.3.1"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_sasl_sup]},
{applications, [kernel,stdlib,pbkdf2]},

View File

@ -1,6 +1,6 @@
{application, emqx_sn,
[{description, "EMQX MQTT-SN Plugin"},
{vsn, "4.3.8"}, % strict semver, bump manually!
{vsn, "4.3.9"}, % strict semver, bump manually!
{modules, []},
{registered, []},
{applications, [kernel,stdlib,esockd]},

View File

@ -29,7 +29,8 @@
{load_module,emqx_sn_app,brutal_purge,soft_purge,[]},
{update,emqx_sn_gateway,{advanced,["4.3.2"]}}
]},
{<<"4\\.3\\.[0-1]">>, [{restart_application,emqx_sn}]}
{<<"4\\.3\\.[0-1]">>, [{restart_application,emqx_sn}]},
{<<".*">>,[]}
],
[
{"4.3.7",[
@ -60,5 +61,6 @@
{load_module,emqx_sn_app,brutal_purge,soft_purge,[]},
{update,emqx_sn_gateway,{advanced,["4.3.2"]}}
]},
{<<"4\\.3\\.[0-1]">>, [{restart_application,emqx_sn}]}
{<<"4\\.3\\.[0-1]">>, [{restart_application,emqx_sn}]},
{<<".*">>,[]}
]}.

View File

@ -1,6 +1,6 @@
{application, emqx_stomp,
[{description, "EMQX Stomp Protocol Plugin"},
{vsn, "4.3.7"}, % strict semver, bump manually!
{vsn, "4.3.8"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_stomp_sup]},
{applications, [kernel,stdlib]},

View File

@ -1,6 +1,6 @@
{application, emqx_web_hook,
[{description, "EMQX WebHook Plugin"},
{vsn, "4.3.16"}, % strict semver, bump manually!
{vsn, "4.3.18"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_web_hook_sup]},
{applications, [kernel,stdlib,ehttpc]},

View File

@ -1,7 +1,9 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.3.15",
[{"4.3.17",[{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
{"4.3.16",[{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
{"4.3.15",
[{load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]},
{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
{"4.3.14",
@ -32,7 +34,9 @@
[{load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]},
{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{"4.3.15",
[{"4.3.17",[{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
{"4.3.16",[{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
{"4.3.15",
[{load_module,emqx_web_hook_app,brutal_purge,soft_purge,[]},
{load_module,emqx_web_hook_actions,brutal_purge,soft_purge,[]}]},
{"4.3.14",

View File

@ -52,5 +52,4 @@
- Fix crash when updating a client's keepalive via the HTTP API if it connects with keepalive disabled [#9933](https://github.com/emqx/emqx/pull/9933).
- Fix that `Erlang distribution` can't use TLS [#9981](https://github.com/emqx/emqx/pull/9981).
About `Erlang distribution`, See [here](https://www.emqx.io/docs/en/v4.4/advanced/cluster.html#distributed-erlang) for details.
- Delete the files directory when `resources` were deleted to avoid files leaking [#10039](https://github.com/emqx/emqx/pull/10039).

View File

@ -2,8 +2,6 @@
## 增强
## 修复
- MongoDB 库已升级至支持 MongoDB 5.1 及以上版本[#9707](https://github.com/emqx/emqx/pull/9707)。
- 现在 Dashboard 支持 HAProxy 的 Proxy Protocol 了 [9803](https://github.com/emqx/emqx/pull/9803)。
@ -20,7 +18,7 @@
- 为认证和授权添加了更多调试日志 [#9943](https://github.com/emqx/emqx/pull/9943)。
- 将统计数据 `live_connections.count``live_connections.max` 公开给 Prometheus [#9929](https://github.com/emqx/emqx/pull/9929).
- 将统计数据 `live_connections.count``live_connections.max` 公开给 Prometheus [#9929](https://github.com/emqx/emqx/pull/9929)
## 修复
@ -53,5 +51,4 @@
- 修复当客户端连接禁用 keepalive 时, 通过 HTTP API 更新其 keepalive 会崩溃的问题 [#9933](https://github.com/emqx/emqx/pull/9933)。
- 修复 `Erlang distribution` 无法使用 TLS 的问题 [#9981](https://github.com/emqx/emqx/pull/9981)。
关于 `Erlang distribution`, 详见 [这里](https://www.emqx.io/docs/zh/v4.4/advanced/cluster.html)。
- 在 `资源` 删除时清理其文件目录以防止文件泄露 [#10039](https://github.com/emqx/emqx/pull/10039)。

View File

@ -1,6 +1,17 @@
# v4.4.16
## Enhancements
- Change "EMQ X" to "EMQX" from the outputs of CLIs and names of plugins [#10099](https://github.com/emqx/emqx/pull/10099).
## Bug fixes
- Fixed MQTT bridge TLS connection could not verify wildcard certificate from peer[#10094](https://github.com/emqx/emqx/pull/10094).
- Avoid changing the payload of MQTT messages when printing debug logs [#10091](https://github.com/emqx/emqx/pull/10091).
Before this fix, if EMQX receives a message with Payload "e\ne\nc\nc\n2\n\n\n", the log message will be as follows:
```
2023-03-08T13:28:04.320622+08:00 [debug] mqttx_e34bd582@127.0.0.1:54020 [MQTT] RECV PUBLISH(Q1, R0, D0, Topic=t/1, PacketId=39467, Payload=e, e, c, c, 2, , , )
```
This is the corresponding log message now:
```
2023-03-08T14:26:50.935575+08:00 [debug] mqttx_e34bd582@127.0.0.1:54020 [MQTT] RECV PUBLISH(Q1, R0, D0, Topic=t/1, PacketId=39467, Payload=<<"e\ne\nc\nc\n2\n\n\n">>)
```

View File

@ -1,5 +1,17 @@
# v4.4.15
# v4.4.16
## 增强
- 从命令行的输出里和插件的名字中,把 "EMQ X" 改成 "EMQX" [#10099](https://github.com/emqx/emqx/pull/10099)。
## 修复
- 修正了 MQTT 桥接 TLS 连接无法验证对端的带通配符的证书[#10094](https://github.com/emqx/emqx/pull/10094)。
- 避免打印 debug 日志的时候改动 MQTT 消息的 Payload 的内容 [#10091](https://github.com/emqx/emqx/pull/10091)。
在这个修复之前,如果 EMQX 收到一个 Payload 为 "e\ne\nc\nc\n2\n\n\n" 的消息,日志打印会变成这样:
```
2023-03-08T13:28:04.320622+08:00 [debug] mqttx_e34bd582@127.0.0.1:54020 [MQTT] RECV PUBLISH(Q1, R0, D0, Topic=t/1, PacketId=39467, Payload=e, e, c, c, 2, , , )
```
这是此修复之后的样子:
```
2023-03-08T14:26:50.935575+08:00 [debug] mqttx_e34bd582@127.0.0.1:54020 [MQTT] RECV PUBLISH(Q1, R0, D0, Topic=t/1, PacketId=39467, Payload=<<"e\ne\nc\nc\n2\n\n\n">>)
```

10
changes/v4.4.17-en.md Normal file
View File

@ -0,0 +1,10 @@
# v4.4.17
## Enhancements
## Bug fixes
- Fix that `Erlang distribution` can't use TLS [#9981](https://github.com/emqx/emqx/pull/9981).
About `Erlang distribution`, See [here](https://www.emqx.io/docs/en/v4.4/advanced/cluster.html#distributed-erlang) for details.
- Fixed MQTT bridge TLS connection could not verify wildcard certificate from peer[#10094](https://github.com/emqx/emqx/pull/10094).

10
changes/v4.4.17-zh.md Normal file
View File

@ -0,0 +1,10 @@
# v4.4.17
## 增强
## 修复
- 修复 `Erlang distribution` 无法使用 TLS 的问题 [#9981](https://github.com/emqx/emqx/pull/9981)。
关于 `Erlang distribution`, 详见 [这里](https://www.emqx.io/docs/zh/v4.4/advanced/cluster.html)。
- 修正了 MQTT 桥接 TLS 连接无法验证对端的带通配符的证书[#10094](https://github.com/emqx/emqx/pull/10094)。

View File

@ -63,8 +63,20 @@
<<"4.4.13">>,<<"4.4.2">>,<<"4.4.3">>,<<"4.4.4">>,<<"4.4.5">>,
<<"4.4.6">>,<<"4.4.7">>,<<"4.4.8">>,<<"4.4.9">>],
otp => <<"24.3.4.2-1">>}}.
{<<"4.4.15">>,
#{from_versions =>
[<<"4.4.0">>,<<"4.4.1">>,<<"4.4.10">>,<<"4.4.11">>,<<"4.4.12">>,
<<"4.4.13">>,<<"4.4.14">>,<<"4.4.2">>,<<"4.4.3">>,<<"4.4.4">>,<<"4.4.5">>,
<<"4.4.6">>,<<"4.4.7">>,<<"4.4.8">>,<<"4.4.9">>],
otp => <<"24.3.4.2-1">>}}.
{<<"4.4.16">>,
#{from_versions =>
[<<"4.4.0">>,<<"4.4.1">>,<<"4.4.10">>,<<"4.4.11">>,<<"4.4.12">>,
<<"4.4.13">>,<<"4.4.14">>,<<"4.4.15">>,<<"4.4.2">>,<<"4.4.3">>,<<"4.4.4">>,<<"4.4.5">>,
<<"4.4.6">>,<<"4.4.7">>,<<"4.4.8">>,<<"4.4.9">>],
otp => <<"24.3.4.2-1">>}}.
{<<"4.5.0">>,
#{from_versions =>
[<<"4.4.10">>,<<"4.4.11">>,<<"4.4.13">>,<<"4.4.14">>,<<"4.4.8">>,
[<<"4.4.10">>,<<"4.4.11">>,<<"4.4.13">>,<<"4.4.14">>,<<"4.4.15">>,<<"4.4.16">>,<<"4.4.8">>,
<<"4.4.9">>],
otp => <<"24.3.4.2-1">>}}.

View File

@ -13,8 +13,8 @@ type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
version: 4.4.14
version: 4.4.16
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application.
appVersion: 4.4.14
appVersion: 4.4.16

View File

@ -243,7 +243,7 @@ Let's create a static node list cluster from docker-compose.
+ Start the docker-compose cluster
```bash
docker-compose -p my_emqx up -d
docker compose -p my_emqx up -d
```
+ View cluster

View File

@ -29,7 +29,7 @@
-ifndef(EMQX_ENTERPRISE).
-define(EMQX_RELEASE, {opensource, "4.4.14"}).
-define(EMQX_RELEASE, {opensource, "4.4.16"}).
-else.

View File

@ -1,6 +1,6 @@
{application, emqx_dashboard,
[{description, "EMQX Web Dashboard"},
{vsn, "4.4.14"}, % strict semver, bump manually!
{vsn, "4.4.15"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_dashboard_sup]},
{applications, [kernel,stdlib,mnesia,minirest]},

View File

@ -155,11 +155,11 @@ rewrite(Topic, MP, Dest, Binds) ->
NewTopic.
fill_client_binds(#{clientid := ClientId, username := Username}) ->
filter_client_binds([{"%c", ClientId}, {"%u", Username}]);
filter_client_binds([{"%c", bin(ClientId)}, {"%u", bin(Username)}]);
fill_client_binds(#message{from = ClientId, headers = Headers}) ->
Username = maps:get(username, Headers, undefined),
filter_client_binds([{"%c", ClientId}, {"%u", Username}]).
filter_client_binds([{"%c", bin(ClientId)}, {"%u", bin(Username)}]).
filter_client_binds(Binds) ->
lists:filter(fun({_, undefined}) -> false;
@ -184,3 +184,7 @@ validate_topic(Type, Topic) ->
error:Reason ->
{error, Reason}
end.
bin(S) when is_binary(S) -> S;
bin(S) when is_list(S) -> list_to_binary(S);
bin(S) when is_atom(S) -> atom_to_binary(S, utf8).

View File

@ -1,6 +1,6 @@
{application, emqx_modules,
[{description, "EMQX Module Management"},
{vsn, "4.4.9"},
{vsn, "4.4.10"},
{modules, []},
{applications, [kernel,stdlib]},
{mod, {emqx_modules_app, []}},

View File

@ -1,7 +1,8 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{<<"4\\.4\\.[6-8]">>,
[{"4.4.9",[{load_module,emqx_mod_rewrite,brutal_purge,soft_purge,[]}]},
{<<"4\\.4\\.[6-8]">>,
[{load_module,emqx_modules,brutal_purge,soft_purge,[]},
{load_module,emqx_mod_acl_internal,brutal_purge,soft_purge,[]},
{load_module,emqx_mod_delayed,brutal_purge,soft_purge,[]},
@ -38,7 +39,8 @@
{load_module,emqx_mod_sup,brutal_purge,soft_purge,[]}
]},
{<<".*">>,[]}],
[{<<"4\\.4\\.[6-8]">>,
[{"4.4.9",[{load_module,emqx_mod_rewrite,brutal_purge,soft_purge,[]}]},
{<<"4\\.4\\.[6-8]">>,
[{load_module,emqx_modules,brutal_purge,soft_purge,[]},
{load_module,emqx_mod_acl_internal,brutal_purge,soft_purge,[]},
{load_module,emqx_mod_delayed,brutal_purge,soft_purge,[]},

View File

@ -58,13 +58,13 @@ set_special_configs(_App) ->
t_load_case(_) ->
UnHooks = emqx_hooks:lookup('message.publish'),
?assertEqual([], UnHooks),
ok = emqx_mod_delayed:load([]),
_ = emqx_mod_delayed:load([]),
Hooks = emqx_hooks:lookup('message.publish'),
?assertEqual(1, length(Hooks)),
ok.
t_delayed_message(_) ->
ok = emqx_mod_delayed:load([]),
_ = emqx_mod_delayed:load([]),
DelayedMsg = emqx_message:make(?MODULE, 1, <<"$delayed/1/publish">>, <<"delayed_m">>),
?assertEqual({stop, DelayedMsg#message{topic = <<"publish">>, headers = #{allow_publish => false}}}, on_message_publish(DelayedMsg)),
@ -81,7 +81,7 @@ t_delayed_message(_) ->
ok = emqx_mod_delayed:unload([]).
t_banned_delayed(_) ->
ok = emqx_mod_delayed:load([]),
_ = emqx_mod_delayed:load([]),
ClientId1 = <<"bc1">>,
ClientId2 = <<"bc2">>,
@ -119,6 +119,7 @@ t_banned_delayed(_) ->
snabbkaffe:stop(),
emqx_banned:delete(Who),
timer:sleep(500),
EmptyKey = mnesia:dirty_all_keys(emqx_mod_delayed),
?assertEqual([], EmptyKey),
ok = emqx_mod_delayed:unload([]).

View File

@ -1,6 +1,6 @@
{application, emqx_telemetry,
[{description, "EMQX Telemetry"},
{vsn, "4.3.4"}, % strict semver, bump manually!
{vsn, "4.3.6"}, % strict semver, bump manually!
{modules, []},
{registered, [emqx_telemetry_sup]},
{applications, [kernel,stdlib]},

View File

@ -1,11 +1,9 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.3.3",[{load_module,emqx_telemetry,brutal_purge,soft_purge,[]}]},
{<<"4\\.3\\.[0-2]">>,
[{<<"4\\.3\\.[0-4]">>,
[{load_module,emqx_telemetry,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}],
[{"4.3.3",[{load_module,emqx_telemetry,brutal_purge,soft_purge,[]}]},
{<<"4\\.3\\.[0-2]">>,
[{<<"4\\.3\\.[0-4]">>,
[{load_module,emqx_telemetry,brutal_purge,soft_purge,[]}]},
{<<".*">>,[]}]}.

View File

@ -75,7 +75,7 @@
enabled :: undefined | boolean(),
url :: string(),
url :: undefined | string(),
report_interval :: undefined | non_neg_integer(),
@ -90,6 +90,8 @@
-define(TELEMETRY, emqx_telemetry).
-define(HTTP_TIMEOUT, 10).
%%--------------------------------------------------------------------
%% Mnesia bootstrap
%%--------------------------------------------------------------------
@ -115,19 +117,19 @@ stop() ->
gen_server:stop(?MODULE).
enable() ->
gen_server:call(?MODULE, enable).
gen_server:call(?MODULE, enable, infinity).
disable() ->
gen_server:call(?MODULE, disable).
gen_server:call(?MODULE, disable, infinity).
is_enabled() ->
gen_server:call(?MODULE, is_enabled).
gen_server:call(?MODULE, is_enabled, infinity).
get_uuid() ->
gen_server:call(?MODULE, get_uuid).
gen_server:call(?MODULE, get_uuid, infinity).
get_telemetry() ->
gen_server:call(?MODULE, get_telemetry).
gen_server:call(?MODULE, get_telemetry, infinity).
%%--------------------------------------------------------------------
%% gen_server callbacks
@ -353,15 +355,18 @@ report_telemetry(State = #state{url = URL}) ->
Data = get_telemetry(State),
case emqx_json:safe_encode(Data) of
{ok, Bin} ->
httpc_request(post, URL, [], Bin),
_ = httpc_request(post, URL, [], Bin),
?tp(debug, telemetry_data_reported, #{});
{error, Reason} ->
%% debug? why?
?tp(debug, telemetry_data_encode_error, #{data => Data, reason => Reason})
end.
%% we might set url = undefined in testcase
httpc_request(_, undefined, _, _) ->
ignore;
httpc_request(Method, URL, Headers, Body) ->
HTTPOptions = [{timeout, timer:seconds(10)}, {ssl, [{verify, verify_none}]}],
HTTPOptions = [{timeout, timer:seconds(?HTTP_TIMEOUT)}, {ssl, [{verify, verify_none}]}],
Options = [],
httpc:request(Method, {URL, Headers, "application/json", Body}, HTTPOptions, Options).

View File

@ -42,7 +42,7 @@ t_uuid(_) ->
{ok, UUID2} = emqx_telemetry:get_uuid(),
emqx_telemetry:stop(),
emqx_telemetry:start_link([{enabled, true},
{url, "https://telemetry.emqx.io/api/telemetry"},
{url, undefined},
{report_interval, 7 * 24 * 60 * 60}]),
{ok, UUID3} = emqx_telemetry:get_uuid(),
?assertEqual(UUID2, UUID3).
@ -80,7 +80,7 @@ t_send_after_enable(_) ->
ok = snabbkaffe:start_trace(),
try
ok = emqx_telemetry:enable(),
?assertMatch({ok, _}, ?block_until(#{?snk_kind := telemetry_data_reported}, 2000, 100))
?assertMatch({ok, _}, ?block_until(#{?snk_kind := telemetry_data_reported}, 15000, 100))
after
ok = snabbkaffe:stop()
end.

View File

@ -9,12 +9,12 @@ PKG_VSN="${PKG_VSN:-$(./pkg-vsn.sh)}"
case "${PKG_VSN}" in
4.3*)
EMQX_CE_DASHBOARD_VERSION='v4.3.12'
EMQX_EE_DASHBOARD_VERSION='v4.3.27'
EMQX_EE_DASHBOARD_VERSION='v4.3.30'
;;
4.4*)
# keep the above 4.3 untouched, otherwise conflicts!
EMQX_CE_DASHBOARD_VERSION='v4.4.8'
EMQX_EE_DASHBOARD_VERSION='v4.4.18'
EMQX_CE_DASHBOARD_VERSION='v4.4.10'
EMQX_EE_DASHBOARD_VERSION='v4.4.22'
;;
*)
echo "Unsupported version $PKG_VSN" >&2

View File

@ -6,7 +6,7 @@
%% the emqx `release' version, which in turn is comprised of several
%% apps, one of which is this. See `emqx_release.hrl' for more
%% info.
{vsn, "4.4.15"}, % strict semver, bump manually!
{vsn, "4.4.16"}, % strict semver, bump manually!
{modules, []},
{registered, []},
{applications, [ kernel

View File

@ -1,7 +1,12 @@
%% -*- mode: erlang -*-
%% Unless you know what you are doing, DO NOT edit manually!!
{VSN,
[{"4.4.14",
[{"4.4.15",
[{load_module,emqx,brutal_purge,soft_purge,[]},
{load_module,emqx_packet,brutal_purge,soft_purge,[]},
{load_module,emqx_relup,brutal_purge,soft_purge,[]},
{load_module,emqx_app,brutal_purge,soft_purge,[]}]},
{"4.4.14",
[{load_module,emqx_vm,brutal_purge,soft_purge,[]},
{load_module,emqx_keepalive,brutal_purge,soft_purge,[]},
{load_module,emqx_broker,brutal_purge,soft_purge,[]},
@ -494,7 +499,12 @@
{apply,{application,set_env,
[gen_rpc,insecure_auth_fallback_allowed,true]}}]},
{<<".*">>,[]}],
[{"4.4.14",
[{"4.4.15",
[{load_module,emqx,brutal_purge,soft_purge,[]},
{load_module,emqx_packet,brutal_purge,soft_purge,[]},
{load_module,emqx_relup,brutal_purge,soft_purge,[]},
{load_module,emqx_app,brutal_purge,soft_purge,[]}]},
{"4.4.14",
[{load_module,emqx_vm,brutal_purge,soft_purge,[]},
{load_module,emqx_keepalive,brutal_purge,soft_purge,[]},
{load_module,emqx_broker,brutal_purge,soft_purge,[]},

View File

@ -156,7 +156,10 @@ get_description() ->
case os:getenv("EMQX_DESCRIPTION") of
false -> Descr0;
"" -> Descr0;
Str -> string:strip(Str, both, $\n)
Str ->
%% We replace the "EMQ X" to "EMQX" incase the description has been
%% loaded to the OS Envs and cannot be changed without reboot.
replace_emq_x_to_emqx(string:strip(Str, both, $\n))
end.
get_release() ->
@ -183,3 +186,6 @@ start_autocluster() ->
ekka:callback(reboot, fun emqx:reboot/0),
_ = ekka:autocluster(?APP), %% returns 'ok' or a pid or 'any()' as in spec
ok.
replace_emq_x_to_emqx(Str) ->
re:replace(Str, "\\bEMQ X\\b", "EMQX", [{return,list}]).

View File

@ -438,7 +438,7 @@ format_variable(undefined, _) ->
format_variable(Variable, undefined) ->
format_variable(Variable);
format_variable(Variable, Payload) ->
[format_variable(Variable), ", Payload=", Payload].
[format_variable(Variable), io_lib:format(", Payload=~0p", [Payload])].
format_variable(#mqtt_packet_connect{
proto_ver = ProtoVer,

View File

@ -33,6 +33,7 @@ post_release_upgrade(FromRelVsn, _) ->
?INFO("emqx has been upgraded from ~s to ~s!", [FromRelVsn, CurrRelVsn]),
maybe_refresh_jwt_module(FromRelVsn),
_ = maybe_restart_oracle_resources(FromRelVsn),
_ = maybe_start_schema_registry(FromRelVsn),
reload_components().
%% What to do after downgraded to an old release vsn.
@ -98,17 +99,9 @@ maybe_refresh_jwt_module(_) ->
-ifdef(EMQX_ENTERPRISE).
maybe_restart_oracle_resources("4.4." ++ PatchVsn0) ->
try
case list_to_integer(PatchVsn0) of
PatchVsn when PatchVsn =< 14 ->
emqx_rule_engine:start_all_resources_of_type(backend_oracle);
_ -> ok
end
catch
Err:Reason:ST ->
?INFO("maybe_restart_oracle_resources failed: ~p", [{Err, Reason, ST}]),
ok
end;
do_when_vsn_lte(PatchVsn0, 14, ?FUNCTION_NAME, fun() ->
emqx_rule_engine:start_all_resources_of_type(backend_oracle)
end);
maybe_restart_oracle_resources(_) ->
ok.
@ -118,3 +111,32 @@ maybe_restart_oracle_resources(_) ->
ok.
-endif.
-ifdef(EMQX_ENTERPRISE).
maybe_start_schema_registry("4.4." ++ PatchVsn0) ->
do_when_vsn_lte(PatchVsn0, 15, ?FUNCTION_NAME, fun() ->
emqx_plugins:load(emqx_schema_registry)
end);
maybe_start_schema_registry(_) ->
ok.
-else.
maybe_start_schema_registry(_) ->
ok.
-endif.
-ifdef(EMQX_ENTERPRISE).
do_when_vsn_lte(SrcVsnStr, TargetVsn, ActionName, Action) ->
try
case list_to_integer(SrcVsnStr) of
Vsn when Vsn =< TargetVsn ->
?INFO("doing ~p", [ActionName]),
_ = Action(),
ok;
_ -> ok
end
catch
Err:Reason:ST ->
?INFO("~p failed: ~p", [ActionName, {Err, Reason, ST}]),
ok
end.
-endif.

View File

@ -380,7 +380,7 @@ read_otp_version() ->
Filename = filename:join([ReleasesDir, emqx_app:get_release(), "BUILT_ON"]),
case file:read_file(Filename) of
{ok, BuiltOn} ->
%% running on EQMX release
%% running on EMQX release
BuiltOn;
{error, enoent} ->
OtpMajor = erlang:system_info(otp_release),