From 676f017ec0c0ffa80126ddaf781159c96f719df5 Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Mon, 16 Jan 2023 14:02:16 +0100 Subject: [PATCH 1/3] fix: ensure no colon in filenames --- apps/emqx/src/emqx_authentication_config.erl | 4 ++-- apps/emqx/src/emqx_misc.erl | 11 ++++++++++- apps/emqx_bridge/src/emqx_bridge_resource.erl | 3 ++- apps/emqx_resource/src/emqx_resource_worker.erl | 5 +++-- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/apps/emqx/src/emqx_authentication_config.erl b/apps/emqx/src/emqx_authentication_config.erl index 98471e152..300fb4a66 100644 --- a/apps/emqx/src/emqx_authentication_config.erl +++ b/apps/emqx/src/emqx_authentication_config.erl @@ -327,9 +327,9 @@ atom(Bin) -> binary_to_existing_atom(Bin, utf8). certs_dir(ChainName, ConfigOrID) -> DirName = dir(ChainName, ConfigOrID), SubDir = iolist_to_binary(filename:join(["authn", DirName])), - binary:replace(SubDir, <<":">>, <<"-">>, [global]). + emqx_misc:safe_filename(SubDir). dir(ChainName, ID) when is_binary(ID) -> - binary:replace(iolist_to_binary([to_bin(ChainName), "-", ID]), <<":">>, <<"-">>); + emqx_misc:safe_filename(iolist_to_binary([to_bin(ChainName), "-", ID])); dir(ChainName, Config) when is_map(Config) -> dir(ChainName, authenticator_id(Config)). diff --git a/apps/emqx/src/emqx_misc.erl b/apps/emqx/src/emqx_misc.erl index 483b99587..c20227c07 100644 --- a/apps/emqx/src/emqx_misc.erl +++ b/apps/emqx/src/emqx_misc.erl @@ -55,7 +55,8 @@ readable_error_msg/1, safe_to_existing_atom/1, safe_to_existing_atom/2, - pub_props_to_packet/1 + pub_props_to_packet/1, + safe_filename/1 ]). -export([ @@ -708,3 +709,11 @@ pub_props_to_packet(Properties) -> true end, maps:filtermap(F, Properties). + +%% fix filename by replacing characters which could be invalid on some filesystems +%% with safe ones +-spec safe_filename(binary() | unicode:chardata()) -> binary() | [unicode:chardata()]. +safe_filename(Filename) when is_binary(Filename) -> + binary:replace(Filename, <<":">>, <<"-">>, [global]); +safe_filename(Filename) when is_list(Filename) -> + string:replace(Filename, ":", "-", all). diff --git a/apps/emqx_bridge/src/emqx_bridge_resource.erl b/apps/emqx_bridge/src/emqx_bridge_resource.erl index 4f8d248b2..b916a0fbe 100644 --- a/apps/emqx_bridge/src/emqx_bridge_resource.erl +++ b/apps/emqx_bridge/src/emqx_bridge_resource.erl @@ -216,7 +216,8 @@ recreate(Type, Name, Conf, Opts) -> ). create_dry_run(Type, Conf0) -> - TmpPath = iolist_to_binary(["bridges-create-dry-run:", emqx_misc:gen_id(8)]), + TmpPath0 = iolist_to_binary(["bridges-create-dry-run:", emqx_misc:gen_id(8)]), + TmpPath = emqx_misc:safe_filename(TmpPath0), Conf = emqx_map_lib:safe_atom_key_map(Conf0), case emqx_connector_ssl:convert_certs(TmpPath, Conf) of {error, Reason} -> diff --git a/apps/emqx_resource/src/emqx_resource_worker.erl b/apps/emqx_resource/src/emqx_resource_worker.erl index 7840fd474..697d5a84b 100644 --- a/apps/emqx_resource/src/emqx_resource_worker.erl +++ b/apps/emqx_resource/src/emqx_resource_worker.erl @@ -871,8 +871,9 @@ queue_count(Q) -> replayq:count(Q). disk_queue_dir(Id, Index) -> - QDir = binary_to_list(Id) ++ ":" ++ integer_to_list(Index), - filename:join([emqx:data_dir(), "resource_worker", node(), QDir]). + QDir0 = binary_to_list(Id) ++ ":" ++ integer_to_list(Index), + QDir = filename:join([emqx:data_dir(), "resource_worker", node(), QDir0]), + emqx_misc:safe_filename(QDir). ensure_flush_timer(Data = #{tref := undefined, batch_time := T}) -> Ref = make_ref(), From 5ee36d440619890d7756942e15561eb86fc2bf71 Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Mon, 16 Jan 2023 17:42:41 +0100 Subject: [PATCH 2/3] ci: fix typo in error message --- .github/workflows/run_jmeter_tests.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/run_jmeter_tests.yaml b/.github/workflows/run_jmeter_tests.yaml index 81923dba5..94cc91706 100644 --- a/.github/workflows/run_jmeter_tests.yaml +++ b/.github/workflows/run_jmeter_tests.yaml @@ -126,7 +126,7 @@ jobs: - name: check logs run: | if cat jmeter_logs/${{ matrix.scripts_type }}.jtl | grep -e 'true' > /dev/null 2>&1; then - echo "check logs filed" + echo "check logs failed" exit 1 fi - uses: actions/upload-artifact@v3 @@ -235,7 +235,7 @@ jobs: - name: check logs run: | if cat jmeter_logs/${{ matrix.scripts_type }}_${{ matrix.pgsql_tag }}.jtl | grep -e 'true' > /dev/null 2>&1; then - echo "check logs filed" + echo "check logs failed" exit 1 fi - uses: actions/upload-artifact@v3 @@ -341,7 +341,7 @@ jobs: - name: check logs run: | if cat jmeter_logs/${{ matrix.scripts_type }}_${{ matrix.mysql_tag }}.jtl | grep -e 'true' > /dev/null 2>&1; then - echo "check logs filed" + echo "check logs failed" exit 1 fi - uses: actions/upload-artifact@v3 @@ -439,7 +439,7 @@ jobs: - name: check logs run: | if cat jmeter_logs/${{ matrix.scripts_type }}.jtl | grep -e 'true' > /dev/null 2>&1; then - echo "check logs filed" + echo "check logs failed" exit 1 fi - uses: actions/upload-artifact@v3 @@ -531,7 +531,7 @@ jobs: - name: check logs run: | if cat jmeter_logs/${{ matrix.scripts_type }}_${{ matrix.mysql_tag }}.jtl | grep -e 'true' > /dev/null 2>&1; then - echo "check logs filed" + echo "check logs failed" exit 1 fi - uses: actions/upload-artifact@v3 From 55fe996d222b1bbcc159e91cb7629f77beede7ec Mon Sep 17 00:00:00 2001 From: Ivan Dyachkov Date: Mon, 16 Jan 2023 17:43:47 +0100 Subject: [PATCH 3/3] docs: add changelog --- changes/v5.0.15/fix-9780.en.md | 1 + changes/v5.0.15/fix-9780.zh.md | 1 + 2 files changed, 2 insertions(+) create mode 100644 changes/v5.0.15/fix-9780.en.md create mode 100644 changes/v5.0.15/fix-9780.zh.md diff --git a/changes/v5.0.15/fix-9780.en.md b/changes/v5.0.15/fix-9780.en.md new file mode 100644 index 000000000..cf777e6dc --- /dev/null +++ b/changes/v5.0.15/fix-9780.en.md @@ -0,0 +1 @@ +When creating disk queue directory for resource worker, substitute ':' with '-' in worker id. diff --git a/changes/v5.0.15/fix-9780.zh.md b/changes/v5.0.15/fix-9780.zh.md new file mode 100644 index 000000000..bc5079e1d --- /dev/null +++ b/changes/v5.0.15/fix-9780.zh.md @@ -0,0 +1 @@ +在为资源缓存进程创建磁盘队列目录时,在ID中用 '-' 代替 ':'。