From c78e99dd543bee1b4bf7e3b3837c5ccd1baf1900 Mon Sep 17 00:00:00 2001 From: Badlop Date: Tue, 17 Jun 2025 11:53:51 +0200 Subject: [PATCH] Use auxiliary function to get HOME, use Mnesia directory when not set (#4402) --- src/ejabberd_app.erl | 5 +++++ src/ejabberd_config.erl | 2 +- src/ejabberd_listener.erl | 2 +- src/ejabberd_sql.erl | 2 +- src/ext_mod.erl | 4 +--- src/misc.erl | 20 ++++++++++++++++++++ src/mod_http_upload.erl | 2 +- 7 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/ejabberd_app.erl b/src/ejabberd_app.erl index 9f9324494..5d15d98fd 100644 --- a/src/ejabberd_app.erl +++ b/src/ejabberd_app.erl @@ -44,6 +44,7 @@ start(normal, _Args) -> ejabberd_logger:start(), write_pid_file(), start_included_apps(), + misc:warn_unset_home(), start_elixir_application(), setup_if_elixir_conf_used(), case ejabberd_config:load() of @@ -176,6 +177,10 @@ file_queue_init() -> Err -> throw({?MODULE, Err}) end. +%%% +%%% Elixir +%%% + -ifdef(ELIXIR_ENABLED). is_using_elixir_config() -> Config = ejabberd_config:path(), diff --git a/src/ejabberd_config.erl b/src/ejabberd_config.erl index c4e6b3a62..3a556d7f6 100644 --- a/src/ejabberd_config.erl +++ b/src/ejabberd_config.erl @@ -503,7 +503,7 @@ get_predefined_keywords(Host) -> _ -> [{<<"HOST">>, Host}] end, - {ok, [[Home]]} = init:get_argument(home), + Home = misc:get_home(), HostList ++ [{<<"HOME">>, list_to_binary(Home)}, {<<"SEMVER">>, ejabberd_option:version()}, diff --git a/src/ejabberd_listener.erl b/src/ejabberd_listener.erl index a3a9cc3ed..05e1c1661 100644 --- a/src/ejabberd_listener.erl +++ b/src/ejabberd_listener.erl @@ -222,7 +222,7 @@ setup_provisional_udsocket_dir(DefinitivePath) -> get_provisional_udsocket_path(Path) -> PathBase64 = misc:term_to_base64(Path), - PathBuild = filename:join(os:getenv("HOME"), PathBase64), + PathBuild = filename:join(misc:get_home(), PathBase64), %% Shorthen the path, a long path produces a crash when opening the socket. binary:part(PathBuild, {0, erlang:min(107, byte_size(PathBuild))}). diff --git a/src/ejabberd_sql.erl b/src/ejabberd_sql.erl index 36db77fee..0c29f039e 100644 --- a/src/ejabberd_sql.erl +++ b/src/ejabberd_sql.erl @@ -1376,7 +1376,7 @@ write_file_if_new(File, Payload) -> tmp_dir() -> case os:type() of - {win32, _} -> filename:join([os:getenv("HOME"), "conf"]); + {win32, _} -> filename:join([misc:get_home(), "conf"]); _ -> filename:join(["/tmp", "ejabberd"]) end. diff --git a/src/ext_mod.erl b/src/ext_mod.erl index 3593c2896..8af0300aa 100644 --- a/src/ext_mod.erl +++ b/src/ext_mod.erl @@ -371,8 +371,6 @@ geturl(Url) -> {error, Reason} end. -getenv(Env) -> - getenv(Env, ""). getenv(Env, Default) -> case os:getenv(Env) of false -> Default; @@ -453,7 +451,7 @@ delete_path(Path, Package) -> delete_path(filename:join(filename:dirname(Path), Package)). modules_dir() -> - DefaultDir = filename:join(getenv("HOME"), ".ejabberd-modules"), + DefaultDir = filename:join(misc:get_home(), ".ejabberd-modules"), getenv("CONTRIB_MODULES_PATH", DefaultDir). sources_dir() -> diff --git a/src/misc.erl b/src/misc.erl index ca7e43486..0ddc85996 100644 --- a/src/misc.erl +++ b/src/misc.erl @@ -36,6 +36,7 @@ l2i/1, i2l/1, i2l/2, expr_to_term/1, term_to_expr/1, now_to_usec/1, usec_to_now/1, encode_pid/1, decode_pid/2, compile_exprs/2, join_atoms/2, try_read_file/1, get_descr/2, + get_home/0, warn_unset_home/0, css_dir/0, img_dir/0, js_dir/0, msgs_dir/0, sql_dir/0, lua_dir/0, read_css/1, read_img/1, read_js/1, read_lua/1, intersection/2, format_val/1, cancel_timer/1, unique_timestamp/0, @@ -470,6 +471,25 @@ get_descr(Lang, Text) -> Copyright = ejabberd_config:get_copyright(), <>. +-spec get_home() -> string(). +get_home() -> + case init:get_argument(home) of + {ok, [[Home]]} -> + Home; + error -> + mnesia:system_info(directory) + end. + +warn_unset_home() -> + case init:get_argument(home) of + {ok, [[_Home]]} -> + ok; + error -> + ?INFO_MSG("The 'HOME' environment variable is not set, " + "ejabberd will use as HOME the Mnesia directory: ~s.", + [mnesia:system_info(directory)]) + end. + -spec intersection(list(), list()) -> list(). intersection(L1, L2) -> lists:filter( diff --git a/src/mod_http_upload.erl b/src/mod_http_upload.erl index fddf27f46..e47da035e 100644 --- a/src/mod_http_upload.erl +++ b/src/mod_http_upload.erl @@ -717,7 +717,7 @@ get_proc_name(ServerHost, ModuleName, PutURL) -> -spec expand_home(binary()) -> binary(). expand_home(Input) -> - {ok, [[Home]]} = init:get_argument(home), + Home = misc:get_home(), misc:expand_keyword(<<"@HOME@">>, Input, Home). -spec expand_host(binary(), binary()) -> binary().