summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniil Fedotov <hairyhum@gmail.com>2018-08-10 11:37:08 +0100
committerDaniil Fedotov <hairyhum@gmail.com>2018-08-14 14:19:41 +0100
commitd296e80b521c1f0ae39cea0440104046884d58b0 (patch)
tree83b2fe82003551dd99955f1f291b3f3d48ebbc78
parent67620efffaf46a2622e0774fef1f18e27bdc2550 (diff)
downloadrabbitmq-server-git-d296e80b521c1f0ae39cea0440104046884d58b0.tar.gz
Simple validation for config file content and extension.
-rwxr-xr-xscripts/rabbitmq-server12
-rw-r--r--scripts/rabbitmq-server.bat10
-rw-r--r--scripts/rabbitmq-service.bat10
-rw-r--r--src/rabbit.erl5
-rw-r--r--src/rabbit_config.erl64
-rw-r--r--src/rabbit_prelaunch.erl21
6 files changed, 108 insertions, 14 deletions
diff --git a/scripts/rabbitmq-server b/scripts/rabbitmq-server
index f9c0862c87..163bcdf18f 100755
--- a/scripts/rabbitmq-server
+++ b/scripts/rabbitmq-server
@@ -79,10 +79,10 @@ fi
RABBITMQ_ADVANCED_CONFIG_FILE_NOEX="${RABBITMQ_ADVANCED_CONFIG_FILE%.*}"
if [ "${RABBITMQ_ADVANCED_CONFIG_FILE_NOEX}.config" = "${RABBITMQ_ADVANCED_CONFIG_FILE}" \
-o "${RABBITMQ_ADVANCED_CONFIG_FILE_NOEX}" = "${RABBITMQ_ADVANCED_CONFIG_FILE}" ]; then
- echo "Valid advanced config extension"
RABBITMQ_ADVANCED_CONFIG_FILE="${RABBITMQ_ADVANCED_CONFIG_FILE_NOEX}.config"
else
- echo "Warning: wrong extension for advanced config: ${RABBITMQ_ADVANCED_CONFIG_FILE}"
+ echo "ERROR: Wrong extension for RABBITMQ_ADVANCED_CONFIG_FILE: ${RABBITMQ_ADVANCED_CONFIG_FILE}"
+ echo "ERROR: should be .config"
exit 1
fi
@@ -108,6 +108,7 @@ if [ "${RABBITMQ_CONFIG_FILE_NOEX}" = "${RABBITMQ_CONFIG_FILE}" ]; then
echo "WARNING: Assuming the new config format is used"
# No config file exist. Use advanced config for -config arg.
RABBITMQ_CONFIG_ARG_FILE="${RABBITMQ_ADVANCED_CONFIG_FILE}"
+ RABBITMQ_CONFIG_FILE=""
fi
fi
@@ -122,6 +123,12 @@ if [ "${RABBITMQ_CONFIG_FILE_NOEX}.config" = "${RABBITMQ_CONFIG_FILE}" ]; then
# Config file extension is .conf
elif [ "${RABBITMQ_CONFIG_FILE_NOEX}.conf" = "${RABBITMQ_CONFIG_FILE}" ]; then
RABBITMQ_CONFIG_ARG_FILE="${RABBITMQ_ADVANCED_CONFIG_FILE}"
+elif [ "x" != "x${RABBITMQ_CONFIG_FILE}" \
+ -a "${RABBITMQ_CONFIG_FILE_NOEX}" != "${RABBITMQ_CONFIG_FILE}" ]; then
+ # Config file has an extension, but it's neither .conf or .config
+ echo "ERROR: Wrong extension for RABBITMQ_CONFIG_FILE: ${RABBITMQ_CONFIG_FILE}"
+ echo "ERROR: should be either .conf or .config"
+ exit 1
fi
# Set -config if the file exists
@@ -257,7 +264,6 @@ start_rabbitmq_server() {
ERL_MAX_ETS_TABLES=$ERL_MAX_ETS_TABLES \
ERL_CRASH_DUMP=$ERL_CRASH_DUMP \
exec ${ERL_DIR}erl \
- -init_debug \
-pa ${RABBITMQ_SERVER_CODE_PATH} ${RABBITMQ_EBIN_ROOT} \
${RABBITMQ_START_RABBIT} \
${RABBITMQ_NAME_TYPE} ${RABBITMQ_NODENAME} \
diff --git a/scripts/rabbitmq-server.bat b/scripts/rabbitmq-server.bat
index bec5441947..196a61adc6 100644
--- a/scripts/rabbitmq-server.bat
+++ b/scripts/rabbitmq-server.bat
@@ -65,7 +65,8 @@ CALL :get_noex !RABBITMQ_ADVANCED_CONFIG_FILE! RABBITMQ_ADVANCED_CONFIG_FILE_NOE
if "!RABBITMQ_ADVANCED_CONFIG_FILE!" == "!RABBITMQ_ADVANCED_CONFIG_FILE_NOEX!" (
set RABBITMQ_ADVANCED_CONFIG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE_NOEX!.config
) else if not "!RABBITMQ_ADVANCED_CONFIG_FILE!" == "!RABBITMQ_ADVANCED_CONFIG_FILE_NOEX!.config" (
- echo "Warning: wrong extension for advanced config: !RABBITMQ_ADVANCED_CONFIG_FILE!"
+ echo "ERROR: Wrong extension for RABBITMQ_ADVANCED_CONFIG_FILE: !RABBITMQ_ADVANCED_CONFIG_FILE!"
+ echo "ERROR: should be .config"
exit /B 1
)
@@ -106,6 +107,13 @@ if "!RABBITMQ_CONFIG_FILE_NOEX!.config" == "!RABBITMQ_CONFIG_FILE" (
set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_CONFIG_FILE!
) else if "!RABBITMQ_CONFIG_FILE_NOEX!.conf" == "!RABBITMQ_CONFIG_FILE" (
set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE!
+) else if not "" == "!RABBITMQ_CONFIG_FILE!" (
+ if not "!RABBITMQ_CONFIG_FILE_NOEX!" == "!RABBITMQ_CONFIG_FILE!" (
+ rem Config file has an extension, but it's neither .conf or .config
+ echo "ERROR: Wrong extension for RABBITMQ_CONFIG_FILE: !RABBITMQ_CONFIG_FILE!"
+ echo "ERROR: should be either .conf or .config"
+ exit /B 1
+ )
)
rem Set -config if the file exists
diff --git a/scripts/rabbitmq-service.bat b/scripts/rabbitmq-service.bat
index 1d08d21c73..8bafd0f7e9 100644
--- a/scripts/rabbitmq-service.bat
+++ b/scripts/rabbitmq-service.bat
@@ -148,7 +148,8 @@ CALL :get_noex !RABBITMQ_ADVANCED_CONFIG_FILE! RABBITMQ_ADVANCED_CONFIG_FILE_NOE
if "!RABBITMQ_ADVANCED_CONFIG_FILE!" == "!RABBITMQ_ADVANCED_CONFIG_FILE_NOEX!" (
set RABBITMQ_ADVANCED_CONFIG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE_NOEX!.config
) else if not "!RABBITMQ_ADVANCED_CONFIG_FILE!" == "!RABBITMQ_ADVANCED_CONFIG_FILE_NOEX!.config" (
- echo "Warning: wrong extension for advanced config: !RABBITMQ_ADVANCED_CONFIG_FILE!"
+ echo "ERROR: Wrong extension for RABBITMQ_ADVANCED_CONFIG_FILE: !RABBITMQ_ADVANCED_CONFIG_FILE!"
+ echo "ERROR: should be .config"
exit /B 1
)
@@ -189,6 +190,13 @@ if "!RABBITMQ_CONFIG_FILE_NOEX!.config" == "!RABBITMQ_CONFIG_FILE" (
set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_CONFIG_FILE!
) else if "!RABBITMQ_CONFIG_FILE_NOEX!.conf" == "!RABBITMQ_CONFIG_FILE" (
set RABBITMQ_CONFIG_ARG_FILE=!RABBITMQ_ADVANCED_CONFIG_FILE!
+) else if not "" == "!RABBITMQ_CONFIG_FILE!" (
+ if not "!RABBITMQ_CONFIG_FILE_NOEX!" == "!RABBITMQ_CONFIG_FILE!" (
+ rem Config file has an extension, but it's neither .conf or .config
+ echo "ERROR: Wrong extension for RABBITMQ_CONFIG_FILE: !RABBITMQ_CONFIG_FILE!"
+ echo "ERROR: should be either .conf or .config"
+ exit /B 1
+ )
)
rem Set -config if the file exists
diff --git a/src/rabbit.erl b/src/rabbit.erl
index 57aa825a1b..6f36de0aa5 100644
--- a/src/rabbit.erl
+++ b/src/rabbit.erl
@@ -313,6 +313,11 @@ boot() ->
end).
ensure_config() ->
+ case rabbit_config:validate_config_files() of
+ ok -> ok;
+ {error, {ErrFmt, ErrArgs}} ->
+ log_boot_error_and_exit(check_config_file, ErrFmt, ErrArgs)
+ end,
case rabbit_config:prepare_and_use_config() of
{error, Reason} ->
{Format, Arg} = case Reason of
diff --git a/src/rabbit_config.erl b/src/rabbit_config.erl
index d236561713..66404334f0 100644
--- a/src/rabbit_config.erl
+++ b/src/rabbit_config.erl
@@ -7,7 +7,8 @@
update_app_config/1,
schema_dir/0,
config_files/0,
- get_advanced_config/0
+ get_advanced_config/0,
+ validate_config_files/0
]).
prepare_and_use_config() ->
@@ -200,7 +201,7 @@ config_files() ->
|| [File] <- Files];
error -> case config_setting() of
none -> [];
- File -> [filename:absname(filename:rootname(F, ".config") ++ ".config")
+ File -> [filename:absname(filename:rootname(File, ".config") ++ ".config")
++
" (not found)"]
end
@@ -232,3 +233,62 @@ config_setting() ->
end
end.
+-spec validate_config_files() -> ok | {error, {Fmt :: string(), Args :: list()}}.
+validate_config_files() ->
+ ConfigFile = os:getenv("RABBITMQ_CONFIG_FILE"),
+ AdvancedConfigFile = get_advanced_config(),
+ AssertConfig = case filename:extension(ConfigFile) of
+ ".config" -> assert_config(ConfigFile, "RABBITMQ_CONFIG_FILE");
+ ".conf" -> assert_conf(ConfigFile, "RABBITMQ_CONFIG_FILE");
+ _ -> ok
+ end,
+ case AssertConfig of
+ ok ->
+ assert_config(AdvancedConfigFile, "RABBITMQ_ADVANCED_CONFIG_FILE");
+ {error, Err} ->
+ {error, Err}
+ end.
+
+assert_config("", _) -> ok;
+assert_config(none, _) -> ok;
+assert_config(Filename, Env) ->
+ ".config" = filename:extension(Filename),
+ case filelib:is_regular(Filename) of
+ true ->
+ case file:consult(Filename) of
+ {ok, _} -> ok;
+ {error, {1, erl_parse, Err}} ->
+ {error, {"ERROR: Unable to parse erlang terms from ~s file: ~s~n"
+ "Error: ~p~n"
+ "Check that the file has the correct format. "
+ "If you are using the new ini-style format, the file "
+ "extension should be '.conf'~n",
+ [Env, Filename, Err]}};
+ {error, Err} ->
+ {error, {"ERROR Unable to parse erlang terms from ~s file: ~s~n"
+ "Error: ~p~n",
+ [Env, Filename, Err]}}
+ end;
+ false ->
+ ok
+ end.
+
+assert_conf("", _) -> ok;
+assert_conf(Filename, Env) ->
+ ".conf" = filename:extension(Filename),
+ case filelib:is_regular(Filename) of
+ true ->
+ case file:read_file(Filename) of
+ {ok, <<"[", _/binary>>} ->
+ {error, {"ERROR: wrong format of the config file ~s: ~s~n"
+ "Check that the file is in the new ini-style config format "
+ "If you are using the old format the file extension should"
+ "be .config~n",
+ [Env, Filename]}};
+ _ ->
+ ok
+ end;
+ false ->
+ ok
+ end.
+
diff --git a/src/rabbit_prelaunch.erl b/src/rabbit_prelaunch.erl
index f5905151cc..1231f0090e 100644
--- a/src/rabbit_prelaunch.erl
+++ b/src/rabbit_prelaunch.erl
@@ -17,6 +17,7 @@
-module(rabbit_prelaunch).
-export([start/0, stop/0]).
+-export([config_file_check/0]).
-import(rabbit_misc, [pget/2, pget/3]).
@@ -43,7 +44,8 @@ start() ->
ok = duplicate_node_check(NodeName, NodeHost),
ok = dist_port_set_check(),
ok = dist_port_range_check(),
- ok = dist_port_use_check(NodeHost);
+ ok = dist_port_use_check(NodeHost),
+ ok = config_file_check();
[] ->
%% Ignore running node while installing windows service
ok = dist_port_set_check(),
@@ -57,6 +59,14 @@ stop() ->
%%----------------------------------------------------------------------------
+config_file_check() ->
+ case rabbit_config:validate_config_files() of
+ ok -> ok;
+ {error, {Err, Args}} ->
+ io:format(Err, Args),
+ rabbit_misc:quit(?ERROR_CODE)
+ end.
+
%% Check whether a node with the same name is already running
duplicate_node_check(NodeName, NodeHost) ->
case rabbit_nodes:names(NodeHost) of
@@ -75,7 +85,7 @@ duplicate_node_check(NodeName, NodeHost) ->
end.
dist_port_set_check() ->
- case get_config(os:getenv("RABBITMQ_CONFIG_FILE")) of
+ case get_config(os:getenv("RABBITMQ_CONFIG_ARG_FILE")) of
{ok, [Config]} ->
Kernel = pget(kernel, Config, []),
case {pget(inet_dist_listen_min, Kernel, none),
@@ -89,14 +99,11 @@ dist_port_set_check() ->
ok
end.
+get_config("") -> {error, nofile};
get_config(File) ->
case consult_file(File) of
{ok, Contents} -> {ok, Contents};
- {error, _} ->
- case rabbit_config:get_advanced_config() of
- none -> {error, enoent};
- FileName -> file:consult(FileName)
- end
+ {error, _} = E -> E
end.
consult_file(false) -> {error, nofile};