mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-30 16:36:29 +01:00
If problem in config file starting ejabberd: display config lines and stop node (EJAB-1148)
SVN Revision: 2845
This commit is contained in:
parent
a89b400c04
commit
1eb2b1f047
@ -101,15 +101,14 @@ get_plain_terms_file(File1) ->
|
|||||||
case file:consult(File) of
|
case file:consult(File) of
|
||||||
{ok, Terms} ->
|
{ok, Terms} ->
|
||||||
include_config_files(Terms);
|
include_config_files(Terms);
|
||||||
{error, {_LineNumber, erl_parse, _ParseMessage} = Reason} ->
|
{error, {LineNumber, erl_parse, _ParseMessage} = Reason} ->
|
||||||
ExitText = lists:flatten(File ++ " approximately in the line "
|
ExitText = describe_config_problem(File, Reason, LineNumber),
|
||||||
++ file:format_error(Reason)),
|
?ERROR_MSG(ExitText, []),
|
||||||
?ERROR_MSG("Problem loading ejabberd config file ~n~s", [ExitText]),
|
exit_or_halt(ExitText);
|
||||||
exit(ExitText);
|
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
ExitText = lists:flatten(File ++ ": " ++ file:format_error(Reason)),
|
ExitText = describe_config_problem(File, Reason),
|
||||||
?ERROR_MSG("Problem loading ejabberd config file ~n~s", [ExitText]),
|
?ERROR_MSG(ExitText, []),
|
||||||
exit(ExitText)
|
exit_or_halt(ExitText)
|
||||||
end.
|
end.
|
||||||
|
|
||||||
%% @doc Convert configuration filename to absolute path.
|
%% @doc Convert configuration filename to absolute path.
|
||||||
@ -171,6 +170,56 @@ normalize_hosts([Host|Hosts], PrepHosts) ->
|
|||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
%%% Errors reading the config file
|
||||||
|
|
||||||
|
describe_config_problem(Filename, Reason) ->
|
||||||
|
Text1 = lists:flatten("Problem loading ejabberd config file " ++ Filename),
|
||||||
|
Text2 = lists:flatten(" : " ++ file:format_error(Reason)),
|
||||||
|
ExitText = Text1 ++ Text2,
|
||||||
|
ExitText.
|
||||||
|
|
||||||
|
describe_config_problem(Filename, Reason, LineNumber) ->
|
||||||
|
Text1 = lists:flatten("Problem loading ejabberd config file " ++ Filename),
|
||||||
|
Text2 = lists:flatten(" approximately in the line "
|
||||||
|
++ file:format_error(Reason)),
|
||||||
|
ExitText = Text1 ++ Text2,
|
||||||
|
Lines = get_config_lines(Filename, LineNumber, 10, 3),
|
||||||
|
?ERROR_MSG("Extract from config file: ~n~s", [Lines]),
|
||||||
|
ExitText.
|
||||||
|
|
||||||
|
get_config_lines(Filename, TargetNumber, PreContext, PostContext) ->
|
||||||
|
{ok, Fd} = file:open(Filename, [read]),
|
||||||
|
LNumbers = lists:seq(TargetNumber-PreContext, TargetNumber+PostContext),
|
||||||
|
NextL = file:read_line(Fd),
|
||||||
|
R = get_config_lines2(Fd, NextL, 1, LNumbers, []),
|
||||||
|
file:close(Fd),
|
||||||
|
R.
|
||||||
|
|
||||||
|
get_config_lines2(_Fd, eof, _CurrLine, _LNumbers, R) ->
|
||||||
|
lists:reverse(R);
|
||||||
|
get_config_lines2(_Fd, _NewLine, _CurrLine, [], R) ->
|
||||||
|
lists:reverse(R);
|
||||||
|
get_config_lines2(Fd, {ok, Data}, CurrLine, [NextWanted | LNumbers], R) ->
|
||||||
|
NextL = file:read_line(Fd),
|
||||||
|
if
|
||||||
|
CurrLine >= NextWanted ->
|
||||||
|
Line2 = [integer_to_list(CurrLine), ": " | Data],
|
||||||
|
get_config_lines2(Fd, NextL, CurrLine+1, LNumbers, [Line2 | R]);
|
||||||
|
true ->
|
||||||
|
get_config_lines2(Fd, NextL, CurrLine+1, [NextWanted | LNumbers], R)
|
||||||
|
end.
|
||||||
|
|
||||||
|
%% If ejabberd isn't yet running in this node, then halt the node
|
||||||
|
exit_or_halt(ExitText) ->
|
||||||
|
case [Vsn || {ejabberd, _Desc, Vsn} <- application:which_applications()] of
|
||||||
|
[] ->
|
||||||
|
timer:sleep(1000),
|
||||||
|
halt(ExitText);
|
||||||
|
[_] ->
|
||||||
|
exit(ExitText)
|
||||||
|
end.
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
%%% Support for 'include_config_file'
|
%%% Support for 'include_config_file'
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user