diff options
| -rwxr-xr-x | scripts/rabbitmq-server | 12 | ||||
| -rw-r--r-- | scripts/rabbitmq-server.bat | 10 | ||||
| -rw-r--r-- | scripts/rabbitmq-service.bat | 10 | ||||
| -rw-r--r-- | src/rabbit.erl | 5 | ||||
| -rw-r--r-- | src/rabbit_config.erl | 64 | ||||
| -rw-r--r-- | src/rabbit_prelaunch.erl | 21 |
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}; |
