diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 94840d5d0..8f1e4f39d 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -14,6 +14,9 @@ jobs:
fail-fast: false
matrix:
otp:
+ - "26.2"
+ - "26.1"
+ - "26.0"
- "25.3"
- "25.2"
- "25.1"
diff --git a/src/yaws_config.erl b/src/yaws_config.erl
index 94d7d9217..ee6a15f0e 100644
--- a/src/yaws_config.erl
+++ b/src/yaws_config.erl
@@ -74,7 +74,7 @@ load(E) ->
end,
GC2 = ?gc_set_debug(GC1, E#env.debug),
GC3 = GC2#gconf{trace = E#env.trace},
- R = fload(FD, GC3),
+ R = fload({FD, File}, GC3),
?Debug("FLOAD(~s): ~p", [File, R]),
case R of
{ok, GC4, Cs} ->
@@ -789,28 +789,28 @@ string_to_node_mod_fun(String) ->
%% two states, global, server
-fload(FD, GC) ->
- case catch fload(FD, GC, [], 1, ?NEXTLINE) of
+fload({FD, ConfFile}, GC) ->
+ case catch fload({FD, ConfFile}, GC, [], 1, ?NEXTLINE) of
{ok, GC1, Cs} -> {ok, GC1, lists:reverse(Cs)};
Err -> Err
end.
-fload(FD, GC, Cs, _Lno, eof) ->
+fload({FD, _ConfFile}, GC, Cs, _Lno, eof) ->
file:close(FD),
{ok, GC, Cs};
-fload(FD, GC, Cs, Lno, Chars) ->
+fload({FD, ConfFile}, GC, Cs, Lno, Chars) ->
case toks(Lno, Chars) of
[] ->
- fload(FD, GC, Cs, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, GC, Cs, Lno+1, ?NEXTLINE);
["subconfig", '=', Name] ->
- case subconfigfiles(FD, Name, Lno) of
+ case subconfigfiles({FD, ConfFile}, Name, Lno) of
{ok, Files} ->
case fload_subconfigfiles(Files, global, GC, Cs) of
{ok, GC1, Cs1} ->
- fload(FD, GC1, Cs1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, GC1, Cs1, Lno+1, ?NEXTLINE);
Err ->
Err
end;
@@ -819,11 +819,11 @@ fload(FD, GC, Cs, Lno, Chars) ->
end;
["subconfigdir", '=', Name] ->
- case subconfigdir(FD, Name, Lno) of
+ case subconfigdir({FD, ConfFile}, Name, Lno) of
{ok, Files} ->
case fload_subconfigfiles(Files, global, GC, Cs) of
{ok, GC1, Cs1} ->
- fload(FD, GC1, Cs1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, GC1, Cs1, Lno+1, ?NEXTLINE);
Err ->
Err
end;
@@ -834,19 +834,19 @@ fload(FD, GC, Cs, Lno, Chars) ->
["trace", '=', Bstr] when GC#gconf.trace == false ->
case Bstr of
"traffic" ->
- fload(FD, GC#gconf{trace = {true, traffic}}, Cs,
+ fload({FD, ConfFile}, GC#gconf{trace = {true, traffic}}, Cs,
Lno+1, ?NEXTLINE);
"http" ->
- fload(FD, GC#gconf{trace = {true, http}}, Cs,
+ fload({FD, ConfFile}, GC#gconf{trace = {true, http}}, Cs,
Lno+1, ?NEXTLINE);
"false" ->
- fload(FD, GC#gconf{trace = false}, Cs, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, GC#gconf{trace = false}, Cs, Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect false|http|traffic at line ~w",[Lno])}
end;
["trace", '=', _Bstr] ->
%% don't overwrite setting from commandline
- fload(FD, GC, Cs, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, GC, Cs, Lno+1, ?NEXTLINE);
["logdir", '=', Logdir] ->
@@ -862,7 +862,7 @@ fload(FD, GC, Cs, Lno, Chars) ->
case is_dir(Dir) of
true ->
put(logdir, Dir),
- fload(FD, GC#gconf{logdir = Dir}, Cs, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, GC#gconf{logdir = Dir}, Cs, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect directory at line ~w (logdir ~s)",
[Lno, Dir])}
@@ -872,40 +872,40 @@ fload(FD, GC, Cs, Lno, Chars) ->
Dir = filename:absname(Ebindir),
case warn_dir("ebin_dir", Dir) of
true ->
- fload(FD, GC#gconf{ebin_dir = [Dir|GC#gconf.ebin_dir]}, Cs,
+ fload({FD, ConfFile}, GC#gconf{ebin_dir = [Dir|GC#gconf.ebin_dir]}, Cs,
Lno+1, ?NEXTLINE);
false ->
- fload(FD, GC, Cs, Lno+1, ?NEXTLINE)
+ fload({FD, ConfFile}, GC, Cs, Lno+1, ?NEXTLINE)
end;
["src_dir", '=', Srcdir] ->
Dir = filename:absname(Srcdir),
case warn_dir("src_dir", Dir) of
true ->
- fload(FD, GC#gconf{src_dir = [Dir|GC#gconf.src_dir]}, Cs,
+ fload({FD, ConfFile}, GC#gconf{src_dir = [Dir|GC#gconf.src_dir]}, Cs,
Lno+1, ?NEXTLINE);
false ->
- fload(FD, GC, Cs, Lno+1, ?NEXTLINE)
+ fload({FD, ConfFile}, GC, Cs, Lno+1, ?NEXTLINE)
end;
["runmod", '=', Mod0] ->
Mod = list_to_atom(Mod0),
- fload(FD, GC#gconf{runmods = [Mod|GC#gconf.runmods]}, Cs,
+ fload({FD, ConfFile}, GC#gconf{runmods = [Mod|GC#gconf.runmods]}, Cs,
Lno+1, ?NEXTLINE);
["enable_soap", '=', Bool] ->
if (Bool == "true") ->
- fload(FD, GC#gconf{enable_soap = true}, Cs,
+ fload({FD, ConfFile}, GC#gconf{enable_soap = true}, Cs,
Lno+1, ?NEXTLINE);
true ->
- fload(FD, GC#gconf{enable_soap = false}, Cs,
+ fload({FD, ConfFile}, GC#gconf{enable_soap = false}, Cs,
Lno+1, ?NEXTLINE)
end;
["soap_srv_mods", '=' | SoapSrvMods] ->
case parse_soap_srv_mods(SoapSrvMods, []) of
{ok, L} ->
- fload(FD, GC#gconf{soap_srv_mods = L}, Cs,
+ fload({FD, ConfFile}, GC#gconf{soap_srv_mods = L}, Cs,
Lno+1, ?NEXTLINE);
{error, Str} ->
{error, ?F("~s at line ~w", [Str, Lno])}
@@ -914,10 +914,10 @@ fload(FD, GC, Cs, Lno, Chars) ->
["max_connections", '=', Int] ->
case (catch list_to_integer(Int)) of
I when is_integer(I) ->
- fload(FD, GC#gconf{max_connections = I}, Cs,
+ fload({FD, ConfFile}, GC#gconf{max_connections = I}, Cs,
Lno+1, ?NEXTLINE);
_ when Int == "nolimit" ->
- fload(FD, GC, Cs, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, GC, Cs, Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect integer at line ~w", [Lno])}
end;
@@ -925,7 +925,7 @@ fload(FD, GC, Cs, Lno, Chars) ->
["process_options", '=', POpts] ->
case parse_process_options(POpts) of
{ok, ProcList} ->
- fload(FD, GC#gconf{process_options=ProcList}, Cs,
+ fload({FD, ConfFile}, GC#gconf{process_options=ProcList}, Cs,
Lno+1, ?NEXTLINE);
{error, Str} ->
{error, ?F("~s at line ~w", [Str, Lno])}
@@ -934,7 +934,7 @@ fload(FD, GC, Cs, Lno, Chars) ->
["large_file_chunk_size", '=', Int] ->
case (catch list_to_integer(Int)) of
I when is_integer(I) ->
- fload(FD, GC#gconf{large_file_chunk_size = I}, Cs,
+ fload({FD, ConfFile}, GC#gconf{large_file_chunk_size = I}, Cs,
Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect integer at line ~w", [Lno])}
@@ -943,7 +943,7 @@ fload(FD, GC, Cs, Lno, Chars) ->
["large_file_sendfile", '=', Method] ->
case set_sendfile_flags(GC, Method) of
{ok, GC1} ->
- fload(FD, GC1, Cs, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, GC1, Cs, Lno+1, ?NEXTLINE);
{error, Str} ->
{error, ?F("~s at line ~w", [Str, Lno])}
end;
@@ -951,7 +951,7 @@ fload(FD, GC, Cs, Lno, Chars) ->
["acceptor_pool_size", '=', Int] ->
case catch list_to_integer(Int) of
I when is_integer(I), I >= 0 ->
- fload(FD, GC#gconf{acceptor_pool_size = I}, Cs,
+ fload({FD, ConfFile}, GC#gconf{acceptor_pool_size = I}, Cs,
Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect integer >= 0 at line ~w", [Lno])}
@@ -960,7 +960,7 @@ fload(FD, GC, Cs, Lno, Chars) ->
["log_wrap_size", '=', Int] ->
case (catch list_to_integer(Int)) of
I when is_integer(I) ->
- fload(FD, GC#gconf{log_wrap_size = I}, Cs,
+ fload({FD, ConfFile}, GC#gconf{log_wrap_size = I}, Cs,
Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect integer at line ~w", [Lno])}
@@ -969,7 +969,7 @@ fload(FD, GC, Cs, Lno, Chars) ->
["log_resolve_hostname", '=', Bool] ->
case is_bool(Bool) of
{true, Val} ->
- fload(FD, ?gc_log_set_resolve_hostname(GC, Val), Cs,
+ fload({FD, ConfFile}, ?gc_log_set_resolve_hostname(GC, Val), Cs,
Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
@@ -978,7 +978,7 @@ fload(FD, GC, Cs, Lno, Chars) ->
["fail_on_bind_err", '=', Bool] ->
case is_bool(Bool) of
{true, Val} ->
- fload(FD, ?gc_set_fail_on_bind_err(GC, Val), Cs,
+ fload({FD, ConfFile}, ?gc_set_fail_on_bind_err(GC, Val), Cs,
Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
@@ -989,10 +989,10 @@ fload(FD, GC, Cs, Lno, Chars) ->
Dir = filename:absname(Incdir),
case warn_dir("include_dir", Dir) of
true ->
- fload(FD, GC#gconf{include_dir= [Dir|GC#gconf.include_dir]},
+ fload({FD, ConfFile}, GC#gconf{include_dir= [Dir|GC#gconf.include_dir]},
Cs, Lno+1, ?NEXTLINE);
false ->
- fload(FD, GC, Cs, Lno+1, ?NEXTLINE)
+ fload({FD, ConfFile}, GC, Cs, Lno+1, ?NEXTLINE)
end;
@@ -1001,7 +1001,7 @@ fload(FD, GC, Cs, Lno, Chars) ->
case is_dir(Dir) of
true ->
put(mnesiadir, Dir),
- fload(FD, GC#gconf{mnesia_dir = Dir}, Cs, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, GC#gconf{mnesia_dir = Dir}, Cs, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect mnesia directory at line ~w", [Lno])}
end;
@@ -1011,16 +1011,16 @@ fload(FD, GC, Cs, Lno, Chars) ->
error_logger:format(
"tmpdir in yaws.conf is no longer supported - ignoring\n",[]
),
- fload(FD, GC, Cs, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, GC, Cs, Lno+1, ?NEXTLINE);
["keepalive_timeout", '=', Val] ->
%% keep this bugger for backward compat for a while
case (catch list_to_integer(Val)) of
I when is_integer(I) ->
- fload(FD, GC#gconf{keepalive_timeout = I}, Cs,
+ fload({FD, ConfFile}, GC#gconf{keepalive_timeout = I}, Cs,
Lno+1, ?NEXTLINE);
_ when Val == "infinity" ->
- fload(FD, GC#gconf{keepalive_timeout = infinity}, Cs,
+ fload({FD, ConfFile}, GC#gconf{keepalive_timeout = infinity}, Cs,
Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect integer at line ~w", [Lno])}
@@ -1029,11 +1029,11 @@ fload(FD, GC, Cs, Lno, Chars) ->
["keepalive_maxuses", '=', Int] ->
case (catch list_to_integer(Int)) of
I when is_integer(I) ->
- fload(FD, GC#gconf{keepalive_maxuses = I}, Cs,
+ fload({FD, ConfFile}, GC#gconf{keepalive_maxuses = I}, Cs,
Lno+1, ?NEXTLINE);
_ when Int == "nolimit" ->
%% nolimit is the default
- fload(FD, GC, Cs, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, GC, Cs, Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect integer at line ~w", [Lno])}
end;
@@ -1044,7 +1044,7 @@ fload(FD, GC, Cs, Lno, Chars) ->
[]),
case is_file(PhpPath) of
true ->
- fload(FD, GC#gconf{phpexe = PhpPath}, Cs, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, GC#gconf{phpexe = PhpPath}, Cs, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect executable file at line ~w", [Lno])}
end;
@@ -1054,12 +1054,12 @@ fload(FD, GC, Cs, Lno, Chars) ->
error_logger:format(
"read_timeout in yaws.conf is no longer supported - ignoring\n",[]
),
- fload(FD, GC, Cs, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, GC, Cs, Lno+1, ?NEXTLINE);
["max_num_cached_files", '=', Val] ->
case (catch list_to_integer(Val)) of
I when is_integer(I) ->
- fload(FD, GC#gconf{max_num_cached_files = I}, Cs,
+ fload({FD, ConfFile}, GC#gconf{max_num_cached_files = I}, Cs,
Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect integer at line ~w", [Lno])}
@@ -1069,7 +1069,7 @@ fload(FD, GC, Cs, Lno, Chars) ->
["max_num_cached_bytes", '=', Val] ->
case (catch list_to_integer(Val)) of
I when is_integer(I) ->
- fload(FD, GC#gconf{max_num_cached_bytes = I}, Cs,
+ fload({FD, ConfFile}, GC#gconf{max_num_cached_bytes = I}, Cs,
Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect integer at line ~w", [Lno])}
@@ -1079,7 +1079,7 @@ fload(FD, GC, Cs, Lno, Chars) ->
["max_size_cached_file", '=', Val] ->
case (catch list_to_integer(Val)) of
I when is_integer(I) ->
- fload(FD, GC#gconf{max_size_cached_file = I}, Cs,
+ fload({FD, ConfFile}, GC#gconf{max_size_cached_file = I}, Cs,
Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect integer at line ~w", [Lno])}
@@ -1088,7 +1088,7 @@ fload(FD, GC, Cs, Lno, Chars) ->
["cache_refresh_secs", '=', Val] ->
case (catch list_to_integer(Val)) of
I when is_integer(I), I >= 0 ->
- fload(FD, GC#gconf{cache_refresh_secs = I}, Cs,
+ fload({FD, ConfFile}, GC#gconf{cache_refresh_secs = I}, Cs,
Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect 0 or positive integer at line ~w",[Lno])}
@@ -1098,7 +1098,7 @@ fload(FD, GC, Cs, Lno, Chars) ->
["copy_error_log", '=', Bool] ->
case is_bool(Bool) of
{true, Val} ->
- fload(FD, ?gc_set_copy_errlog(GC, Val), Cs,
+ fload({FD, ConfFile}, ?gc_set_copy_errlog(GC, Val), Cs,
Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
@@ -1111,23 +1111,23 @@ fload(FD, GC, Cs, Lno, Chars) ->
" it is now a per-server variable", []),
case is_bool(Bool) of
{true, _Val} ->
- fload(FD, GC, Cs, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, GC, Cs, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
end;
["id", '=', String] when GC#gconf.id == undefined;
GC#gconf.id == "default" ->
- fload(FD, GC#gconf{id=String}, Cs, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, GC#gconf{id=String}, Cs, Lno+1, ?NEXTLINE);
["id", '=', String] ->
error_logger:format("Ignoring 'id = ~p' setting at line ~p~n",
[String,Lno]),
- fload(FD, GC, Cs, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, GC, Cs, Lno+1, ?NEXTLINE);
["pick_first_virthost_on_nomatch", '=', Bool] ->
case is_bool(Bool) of
{true, Val} ->
- fload(FD, ?gc_set_pick_first_virthost_on_nomatch(GC,Val),
+ fload({FD, ConfFile}, ?gc_set_pick_first_virthost_on_nomatch(GC,Val),
Cs, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
@@ -1138,14 +1138,14 @@ fload(FD, GC, Cs, Lno, Chars) ->
error_logger:format(
"use_fdsrv in yaws.conf is no longer supported - ignoring\n",[]
),
- fload(FD, GC, Cs, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, GC, Cs, Lno+1, ?NEXTLINE);
["use_old_ssl", '=', _Bool] ->
%% feature removed
error_logger:format(
"use_old_ssl in yaws.conf is no longer supported - ignoring\n",[]
),
- fload(FD, GC, Cs, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, GC, Cs, Lno+1, ?NEXTLINE);
["use_large_ssl_pool", '=', _Bool] ->
%% just ignore - not relevant any longer
@@ -1153,29 +1153,29 @@ fload(FD, GC, Cs, Lno, Chars) ->
"use_large_ssl_pool in yaws.conf is no longer supported"
" - ignoring\n", []
),
- fload(FD, GC, Cs, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, GC, Cs, Lno+1, ?NEXTLINE);
["x_forwarded_for_log_proxy_whitelist", '=' | _] ->
error_logger:format(
"x_forwarded_for_log_proxy_whitelist in yaws.conf is no longer"
" supported - ignoring\n", []
),
- fload(FD, GC, Cs, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, GC, Cs, Lno+1, ?NEXTLINE);
["ysession_mod", '=', Mod_str] ->
Ysession_mod = list_to_atom(Mod_str),
- fload(FD, GC#gconf{ysession_mod = Ysession_mod}, Cs,
+ fload({FD, ConfFile}, GC#gconf{ysession_mod = Ysession_mod}, Cs,
Lno+1, ?NEXTLINE);
["ysession_cookiegen", '=', Mod_str] ->
Ysession_cookiegen = list_to_atom(Mod_str),
- fload(FD, GC#gconf{ysession_cookiegen = Ysession_cookiegen}, Cs,
+ fload({FD, ConfFile}, GC#gconf{ysession_cookiegen = Ysession_cookiegen}, Cs,
Lno+1, ?NEXTLINE);
["ysession_idle_timeout", '=', YsessionIdle] ->
case (catch list_to_integer(YsessionIdle)) of
I when is_integer(I), I > 0 ->
- fload(FD, GC#gconf{ysession_idle_timeout = I}, Cs,
+ fload({FD, ConfFile}, GC#gconf{ysession_idle_timeout = I}, Cs,
Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect positive integer at line ~w",[Lno])}
@@ -1184,21 +1184,21 @@ fload(FD, GC, Cs, Lno, Chars) ->
["ysession_long_timeout", '=', YsessionLong] ->
case (catch list_to_integer(YsessionLong)) of
I when is_integer(I), I > 0 ->
- fload(FD, GC#gconf{ysession_long_timeout = I}, Cs,
+ fload({FD, ConfFile}, GC#gconf{ysession_long_timeout = I}, Cs,
Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect positive integer at line ~w",[Lno])}
end;
["server_signature", '=', Signature] ->
- fload(FD, GC#gconf{yaws=Signature}, Cs, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, GC#gconf{yaws=Signature}, Cs, Lno+1, ?NEXTLINE);
["default_type", '=', MimeType] ->
case parse_mime_types_info(default_type, MimeType,
GC#gconf.mime_types_info,
#mime_types_info{}) of
{ok, Info} ->
- fload(FD, GC#gconf{mime_types_info=Info}, Cs,
+ fload({FD, ConfFile}, GC#gconf{mime_types_info=Info}, Cs,
Lno+1, ?NEXTLINE);
{error, Str} ->
{error, ?F("~s at line ~w", [Str, Lno])}
@@ -1209,7 +1209,7 @@ fload(FD, GC, Cs, Lno, Chars) ->
GC#gconf.mime_types_info,
#mime_types_info{}) of
{ok, Info} ->
- fload(FD, GC#gconf{mime_types_info=Info}, Cs,
+ fload({FD, ConfFile}, GC#gconf{mime_types_info=Info}, Cs,
Lno+1, ?NEXTLINE);
{error, Str} ->
{error, ?F("~s at line ~w", [Str, Lno])}
@@ -1220,7 +1220,7 @@ fload(FD, GC, Cs, Lno, Chars) ->
GC#gconf.mime_types_info,
#mime_types_info{}) of
{ok, Info} ->
- fload(FD, GC#gconf{mime_types_info=Info}, Cs,
+ fload({FD, ConfFile}, GC#gconf{mime_types_info=Info}, Cs,
Lno+1, ?NEXTLINE);
{error, Str} ->
{error, ?F("~s at line ~w", [Str, Lno])}
@@ -1231,7 +1231,7 @@ fload(FD, GC, Cs, Lno, Chars) ->
GC#gconf.mime_types_info,
#mime_types_info{}) of
{ok, Info} ->
- fload(FD, GC#gconf{mime_types_info=Info}, Cs,
+ fload({FD, ConfFile}, GC#gconf{mime_types_info=Info}, Cs,
Lno+1, ?NEXTLINE);
{error, Str} ->
{error, ?F("~s at line ~w", [Str, Lno])}
@@ -1242,7 +1242,7 @@ fload(FD, GC, Cs, Lno, Chars) ->
GC#gconf.mime_types_info,
#mime_types_info{}) of
{ok, Info} ->
- fload(FD, GC#gconf{mime_types_info=Info}, Cs,
+ fload({FD, ConfFile}, GC#gconf{mime_types_info=Info}, Cs,
Lno+1, ?NEXTLINE);
{error, Str} ->
{error, ?F("~s at line ~w", [Str, Lno])}
@@ -1251,7 +1251,7 @@ fload(FD, GC, Cs, Lno, Chars) ->
["nslookup_pref", '=' | Pref] ->
case parse_nslookup_pref(Pref) of
{ok, Families} ->
- fload(FD, GC#gconf{nslookup_pref = Families}, Cs,
+ fload({FD, ConfFile}, GC#gconf{nslookup_pref = Families}, Cs,
Lno+1, ?NEXTLINE);
{error, Str} ->
{error, ?F("~s at line ~w", [Str, Lno])}
@@ -1260,9 +1260,9 @@ fload(FD, GC, Cs, Lno, Chars) ->
["sni", '=', Sni] ->
if
Sni == "disable" ->
- fload(FD, GC#gconf{sni=disable}, Cs, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, GC#gconf{sni=disable}, Cs, Lno+1, ?NEXTLINE);
Sni == "enable" orelse Sni == "strict" ->
- fload(FD, GC#gconf{sni=list_to_atom(Sni)}, Cs, Lno+1,
+ fload({FD, ConfFile}, GC#gconf{sni=list_to_atom(Sni)}, Cs, Lno+1,
?NEXTLINE);
true ->
{error, ?F("Expect disable|enable|strict at line ~w",[Lno])}
@@ -1271,7 +1271,7 @@ fload(FD, GC, Cs, Lno, Chars) ->
['<', "server", Server, '>'] ->
C = #sconf{servername = Server, listen = [],
php_handler = {cgi, GC#gconf.phpexe}},
- fload(FD, server, GC, C, Cs, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C, Cs, Lno+1, ?NEXTLINE);
[H|_] ->
{error, ?F("Unexpected tokens ~p at line ~w", [H, Lno])};
@@ -1280,12 +1280,12 @@ fload(FD, GC, Cs, Lno, Chars) ->
end.
-fload(FD, server, _GC, _C, _Cs, Lno, eof) ->
+fload({FD, _ConfFile}, server, _GC, _C, _Cs, Lno, eof) ->
file:close(FD),
{error, ?F("Unexpected end-of-file at line ~w", [Lno])};
-fload(FD, server, GC, C, Cs, Lno, Chars) ->
- case fload(FD, server, GC, C, Lno, Chars) of
+fload({FD, ConfFile}, server, GC, C, Cs, Lno, Chars) ->
+ case fload({FD, ConfFile}, server, GC, C, Lno, Chars) of
{ok, _, _, Lno1, eof} ->
{error, ?F("Unexpected end-of-file at line ~w", [Lno1])};
{ok, GC1, C1, Lno1, ['<', "/server", '>']} ->
@@ -1319,10 +1319,10 @@ fload(FD, server, GC, C, Cs, Lno, Chars) ->
case C1#sconf.listen of
[] ->
C2 = C1#sconf{listen = {127,0,0,1}},
- fload(FD, GC1, [C2|Cs], Lno1+1, ?NEXTLINE);
+ fload({FD, ConfFile}, GC1, [C2|Cs], Lno1+1, ?NEXTLINE);
Ls ->
Cs1 = [C1#sconf{listen=L} || L <- Ls] ++ Cs,
- fload(FD, GC1, Cs1, Lno1+1, ?NEXTLINE)
+ fload({FD, ConfFile}, GC1, Cs1, Lno1+1, ?NEXTLINE)
end;
false ->
{error,
@@ -1334,28 +1334,28 @@ fload(FD, server, GC, C, Cs, Lno, Chars) ->
Err
end.
-fload(FD, extra_response_headers, GC, C, Lno, Chars) ->
+fload({FD, ConfFile}, extra_response_headers, GC, C, Lno, Chars) ->
case toks(Lno, Chars) of
[] ->
- fload(FD, extra_response_headers, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, extra_response_headers, GC, C, Lno+1, ?NEXTLINE);
["extramod", '=', Mod] ->
ExtraResponseHdrs = C#sconf.extra_response_headers,
C1 = C#sconf{extra_response_headers = [{extramod, list_to_atom(Mod)}|
ExtraResponseHdrs]},
- fload(FD, extra_response_headers, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, extra_response_headers, GC, C1, Lno+1, ?NEXTLINE);
["add", Hdr, '=', Value] ->
ExtraResponseHdrs = C#sconf.extra_response_headers,
C1 = C#sconf{extra_response_headers = [{add,Hdr,Value}|
ExtraResponseHdrs]},
- fload(FD, extra_response_headers, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, extra_response_headers, GC, C1, Lno+1, ?NEXTLINE);
["always", "add", Hdr, '=', Value] ->
ExtraResponseHdrs = C#sconf.extra_response_headers,
C1 = C#sconf{extra_response_headers = [{always_add,Hdr,Value}|
ExtraResponseHdrs]},
- fload(FD, extra_response_headers, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, extra_response_headers, GC, C1, Lno+1, ?NEXTLINE);
["add", Hdr, '='| Value] ->
StringVal = lists:flatten(
@@ -1367,7 +1367,7 @@ fload(FD, extra_response_headers, GC, C, Lno, Chars) ->
ExtraResponseHdrs = C#sconf.extra_response_headers,
C1 = C#sconf{extra_response_headers = [{add,Hdr,StringVal}|
ExtraResponseHdrs]},
- fload(FD, extra_response_headers, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, extra_response_headers, GC, C1, Lno+1, ?NEXTLINE);
["always", "add", Hdr, '='| Value] ->
StringVal = lists:flatten(
@@ -1379,16 +1379,16 @@ fload(FD, extra_response_headers, GC, C, Lno, Chars) ->
ExtraResponseHdrs = C#sconf.extra_response_headers,
C1 = C#sconf{extra_response_headers = [{always_add,Hdr,StringVal}|
ExtraResponseHdrs]},
- fload(FD, extra_response_headers, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, extra_response_headers, GC, C1, Lno+1, ?NEXTLINE);
["erase", Hdr] ->
ExtraResponseHdrs = C#sconf.extra_response_headers,
C1 = C#sconf{extra_response_headers = [{erase,Hdr}|
ExtraResponseHdrs]},
- fload(FD, extra_response_headers, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, extra_response_headers, GC, C1, Lno+1, ?NEXTLINE);
['<', "/extra_response_headers", '>'] ->
- fload(FD, server, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C, Lno+1, ?NEXTLINE);
[H|T] ->
{error, ?F("Unexpected input ~p at line ~w", [[H|T], Lno])};
@@ -1396,24 +1396,24 @@ fload(FD, extra_response_headers, GC, C, Lno, Chars) ->
Err
end;
-fload(FD, server, GC, C, Lno, eof) ->
+fload({FD, _ConfFile}, server, GC, C, Lno, eof) ->
file:close(FD),
{ok, GC, C, Lno, eof};
-fload(FD, _, _GC, _C, Lno, eof) ->
+fload({FD, _ConfFile}, _, _GC, _C, Lno, eof) ->
file:close(FD),
{error, ?F("Unexpected end-of-file at line ~w", [Lno])};
-fload(FD, server, GC, C, Lno, Chars) ->
+fload({FD, ConfFile}, server, GC, C, Lno, Chars) ->
case toks(Lno, Chars) of
[] ->
- fload(FD, server, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C, Lno+1, ?NEXTLINE);
["subconfig", '=', Name] ->
- case subconfigfiles(FD, Name, Lno) of
+ case subconfigfiles({FD, ConfFile}, Name, Lno) of
{ok, Files} ->
case fload_subconfigfiles(Files, server, GC, C) of
{ok, GC1, C1} ->
- fload(FD, server, GC1, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC1, C1, Lno+1, ?NEXTLINE);
Err ->
Err
end;
@@ -1422,11 +1422,11 @@ fload(FD, server, GC, C, Lno, Chars) ->
end;
["subconfigdir", '=', Name] ->
- case subconfigdir(FD, Name, Lno) of
+ case subconfigdir({FD, ConfFile}, Name, Lno) of
{ok, Files} ->
case fload_subconfigfiles(Files, server, GC, C) of
{ok, GC1, C1} ->
- fload(FD, server, GC1, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC1, C1, Lno+1, ?NEXTLINE);
Err ->
Err
end;
@@ -1435,13 +1435,13 @@ fload(FD, server, GC, C, Lno, Chars) ->
end;
["server_signature", '=', Sig] ->
- fload(FD, server, GC, C#sconf{yaws=Sig}, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C#sconf{yaws=Sig}, Lno+1, ?NEXTLINE);
["access_log", '=', Bool] ->
case is_bool(Bool) of
{true, Val} ->
C1 = ?sc_set_access_log(C, Val),
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
end;
@@ -1450,14 +1450,14 @@ fload(FD, server, GC, C, Lno, Chars) ->
case is_bool(Bool) of
{true, Val} ->
C1 = ?sc_set_auth_log(C, Val),
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
end;
["logger_mod", '=', Module] ->
C1 = C#sconf{logger_mod = list_to_atom(Module)},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
["dir_listings", '=', StrVal] ->
case StrVal of
@@ -1468,13 +1468,13 @@ fload(FD, server, GC, C, Lno, Chars) ->
{"all.tgz", yaws_ls},
{"all.tbz2", yaws_ls}|
C2#sconf.appmods]},
- fload(FD, server, GC, C3, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C3, Lno+1, ?NEXTLINE);
"true_nozip" ->
C1 = ?sc_set_dir_listings(C, true),
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
"false" ->
C1 = ?sc_set_dir_listings(C, false),
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect true|true_nozip|false at line ~w",[Lno])}
end;
@@ -1484,7 +1484,7 @@ fload(FD, server, GC, C, Lno, Chars) ->
{true, Val} ->
C1 = C#sconf{deflate_options=#deflate{}},
C2 = ?sc_set_deflate(C1, Val),
- fload(FD, server, GC, C2, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C2, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
end;
@@ -1493,7 +1493,7 @@ fload(FD, server, GC, C, Lno, Chars) ->
case is_bool(Bool) of
{true,Val} ->
C1 = ?sc_set_auth_skip_docroot(C, Val),
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
end;
@@ -1516,10 +1516,10 @@ fload(FD, server, GC, C, Lno, Chars) ->
C1#sconf.appmods,
{"/",yaws_appmod_dav}),
C2 = C1#sconf{appmods=DavAppmods},
- fload(FD, server, GC1, C2, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC1, C2, Lno+1, ?NEXTLINE);
{true,false} ->
C1 = ?sc_set_dav(C, false),
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
end;
@@ -1528,7 +1528,7 @@ fload(FD, server, GC, C, Lno, Chars) ->
case (catch list_to_integer(Val)) of
I when is_integer(I) ->
C1 = C#sconf{port = I},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect integer at line ~w", [Lno])}
end;
@@ -1537,17 +1537,17 @@ fload(FD, server, GC, C, Lno, Chars) ->
case Val of
"http" ->
C1 = C#sconf{rmethod = Val},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
"https" ->
C1 = C#sconf{rmethod = Val},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect http or https at line ~w", [Lno])}
end;
["rhost", '=', Val] ->
C1 = C#sconf{rhost = Val},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
["listen", '=', IP] ->
case inet_parse:address(IP) of
@@ -1566,28 +1566,28 @@ fload(FD, server, GC, C, Lno, Chars) ->
true ->
C#sconf{listen = [Addr, Lstn]}
end,
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE)
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE)
end;
["listen_backlog", '=', Val] ->
case (catch list_to_integer(Val)) of
B when is_integer(B) ->
C1 = update_soptions(C, listen_opts, backlog, B),
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect integer at line ~w", [Lno])}
end;
["servername", '=', Name] ->
C1 = ?sc_set_add_port((C#sconf{servername = Name}),false),
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
["serveralias", '=' | Names] ->
C1 = C#sconf{serveralias = Names ++ C#sconf.serveralias},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
[ '<', "listen_opts", '>'] ->
- fload(FD, listen_opts, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, listen_opts, GC, C, Lno+1, ?NEXTLINE);
["docroot", '=', Rootdir | XtraDirs] ->
RootDirs = lists:map(fun(R) -> filename:absname(R) end,
@@ -1596,25 +1596,25 @@ fload(FD, server, GC, C, Lno, Chars) ->
[] when C#sconf.docroot =:= undefined ->
C1 = C#sconf{docroot = hd(RootDirs),
xtra_docroots = tl(RootDirs)},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
[] ->
XtraDocroots = RootDirs ++ C#sconf.xtra_docroots,
C1 = C#sconf{xtra_docroots = XtraDocroots},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
NoDirs ->
error_logger:info_msg("Warning, Skip invalid docroots"
" at line ~w : ~s~n",
[Lno, string:join(NoDirs, ", ")]),
case lists:subtract(RootDirs, NoDirs) of
[] ->
- fload(FD, server, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C, Lno+1, ?NEXTLINE);
[H|T] when C#sconf.docroot =:= undefined ->
C1 = C#sconf{docroot = H, xtra_docroots = T},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
Ds ->
XtraDocroots = Ds ++ C#sconf.xtra_docroots,
C1 = C#sconf{xtra_docroots = XtraDocroots},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE)
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE)
end
end;
@@ -1622,12 +1622,12 @@ fload(FD, server, GC, C, Lno, Chars) ->
case Size of
"nolimit" ->
C1 = C#sconf{partial_post_size = nolimit},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
Val ->
case (catch list_to_integer(Val)) of
I when is_integer(I) ->
C1 = C#sconf{partial_post_size = I},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
_ ->
{error,
?F("Expect integer or 'nolimit' at line ~w",
@@ -1637,98 +1637,98 @@ fload(FD, server, GC, C, Lno, Chars) ->
['<', "auth", '>'] ->
C1 = C#sconf{authdirs=[#auth{}|C#sconf.authdirs]},
- fload(FD, server_auth, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_auth, GC, C1, Lno+1, ?NEXTLINE);
['<', "redirect", '>'] ->
- fload(FD, server_redirect, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_redirect, GC, C, Lno+1, ?NEXTLINE);
['<', "deflate", '>'] ->
C1 = C#sconf{deflate_options=#deflate{mime_types=[]}},
- fload(FD, server_deflate, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_deflate, GC, C1, Lno+1, ?NEXTLINE);
["default_server_on_this_ip", '=', _Bool] ->
error_logger:format(
"default_server_on_this_ip in yaws.conf is no longer"
" supported - ignoring\n", []
),
- fload(FD, server, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C, Lno+1, ?NEXTLINE);
[ '<', "ssl", '>'] ->
ssl_start(),
- fload(FD, ssl, GC, C#sconf{ssl = #ssl{}}, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, ssl, GC, C#sconf{ssl = #ssl{}}, Lno+1, ?NEXTLINE);
["appmods", '=' | AppMods] ->
case parse_appmods(AppMods, []) of
{ok, L} ->
C1 = C#sconf{appmods = L ++ C#sconf.appmods},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
{error, Str} ->
{error, ?F("~s at line ~w", [Str, Lno])}
end;
["dispatchmod", '=', DispatchMod] ->
C1 = C#sconf{dispatch_mod = list_to_atom(DispatchMod)},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
["expires", '=' | Expires] ->
case parse_expires(Expires, []) of
{ok, L} ->
C1 = C#sconf{expires = L ++ C#sconf.expires},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
{error, Str} ->
{error, ?F("~s at line ~w", [Str, Lno])}
end;
["errormod_404", '=' , Module] ->
C1 = C#sconf{errormod_404 = list_to_atom(Module)},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
["errormod_crash", '=', Module] ->
C1 = C#sconf{errormod_crash = list_to_atom(Module)},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
["errormod_401", '=' , Module] ->
C1 = C#sconf{errormod_401 = list_to_atom(Module)},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
["arg_rewrite_mod", '=', Module] ->
C1 = C#sconf{arg_rewrite_mod = list_to_atom(Module)},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
["tilde_expand", '=', Bool] ->
case is_bool(Bool) of
{true, Val} ->
C1 = ?sc_set_tilde_expand(C,Val),
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
end;
['<', "opaque", '>'] ->
- fload(FD, opaque, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, opaque, GC, C, Lno+1, ?NEXTLINE);
["start_mod", '=' , Module] ->
C1 = C#sconf{start_mod = list_to_atom(Module)},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
['<', "rss", '>'] ->
erase(rss_id),
put(rss, []),
- fload(FD, rss, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, rss, GC, C, Lno+1, ?NEXTLINE);
["tilde_allowed_scripts", '=' | Suffixes] ->
C1 = C#sconf{tilde_allowed_scripts=Suffixes},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
["allowed_scripts", '=' | Suffixes] ->
C1 = C#sconf{allowed_scripts=Suffixes},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
["index_files", '=' | Files] ->
case parse_index_files(Files) of
ok ->
C1 = C#sconf{index_files = Files},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
{error, Str} ->
{error, ?F("~s at line ~w", [Str, Lno])}
end;
@@ -1737,7 +1737,7 @@ fload(FD, server, GC, C, Lno, Chars) ->
case parse_revproxy(Tail) of
{ok, RevProxy} ->
C1 = C#sconf{revproxy = [RevProxy | C#sconf.revproxy]},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
{error, url} ->
{error, ?F("Bad url at line ~p",[Lno])};
{error, syntax} ->
@@ -1750,20 +1750,20 @@ fload(FD, server, GC, C, Lno, Chars) ->
case is_bool(Bool) of
{true, Val} ->
C1 = ?sc_set_forward_proxy(C, Val),
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
end;
['<', "extra_cgi_vars", "dir", '=', Dir, '>'] ->
C1 = C#sconf{extra_cgi_vars=[{Dir, []}|C#sconf.extra_cgi_vars]},
- fload(FD, extra_cgi_vars, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, extra_cgi_vars, GC, C1, Lno+1, ?NEXTLINE);
["statistics", '=', Bool] ->
case is_bool(Bool) of
{true, Val} ->
C1 = ?sc_set_statistics(C, Val),
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
end;
@@ -1776,7 +1776,7 @@ fload(FD, server, GC, C, Lno, Chars) ->
case string_to_host_and_port(HostPortSpec) of
{ok, Host, Port} ->
C1 = C#sconf{fcgi_app_server = {Host, Port}},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
{error, Reason} ->
{error, ?F("Invalid fcgi_app_server ~p at line ~w: ~s",
[HostPortSpec, Lno, Reason])}
@@ -1786,7 +1786,7 @@ fload(FD, server, GC, C, Lno, Chars) ->
case is_bool(Bool) of
{true, Val} ->
C1 = ?sc_set_fcgi_trace_protocol(C, Val),
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
end;
@@ -1795,7 +1795,7 @@ fload(FD, server, GC, C, Lno, Chars) ->
case is_bool(Bool) of
{true, Val} ->
C1 = ?sc_set_fcgi_log_app_error(C, Val),
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
end;
@@ -1806,7 +1806,7 @@ fload(FD, server, GC, C, Lno, Chars) ->
case string_to_host_and_port(HostPortSpec) of
{ok, Host, Port} ->
C1 = C#sconf{php_handler = {fcgi, {Host, Port}}},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
{error, Reason} ->
{error,
?F("Invalid php fcgi server ~p at line ~w: ~s",
@@ -1817,7 +1817,7 @@ fload(FD, server, GC, C, Lno, Chars) ->
case parse_phpmod(PhpMod, GC#gconf.phpexe) of
{ok, I} ->
C1 = C#sconf{php_handler = I},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
{error, Reason} ->
{error,
?F("Invalid php_handler configuration at line ~w: ~s",
@@ -1826,7 +1826,7 @@ fload(FD, server, GC, C, Lno, Chars) ->
["shaper", '=', Module] ->
C1 = C#sconf{shaper = list_to_atom(Module)},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
["default_type", '=', MimeType] ->
@@ -1834,7 +1834,7 @@ fload(FD, server, GC, C, Lno, Chars) ->
C#sconf.mime_types_info,
GC#gconf.mime_types_info) of
{ok, Info} ->
- fload(FD, server, GC, C#sconf{mime_types_info=Info},
+ fload({FD, ConfFile}, server, GC, C#sconf{mime_types_info=Info},
Lno+1, ?NEXTLINE);
{error, Str} ->
{error, ?F("~s at line ~w", [Str, Lno])}
@@ -1845,7 +1845,7 @@ fload(FD, server, GC, C, Lno, Chars) ->
C#sconf.mime_types_info,
GC#gconf.mime_types_info) of
{ok, Info} ->
- fload(FD, server, GC, C#sconf{mime_types_info=Info},
+ fload({FD, ConfFile}, server, GC, C#sconf{mime_types_info=Info},
Lno+1, ?NEXTLINE);
{error, Str} ->
{error, ?F("~s at line ~w", [Str, Lno])}
@@ -1856,7 +1856,7 @@ fload(FD, server, GC, C, Lno, Chars) ->
C#sconf.mime_types_info,
GC#gconf.mime_types_info) of
{ok, Info} ->
- fload(FD, server, GC, C#sconf{mime_types_info=Info},
+ fload({FD, ConfFile}, server, GC, C#sconf{mime_types_info=Info},
Lno+1, ?NEXTLINE);
{error, Str} ->
{error, ?F("~s at line ~w", [Str, Lno])}
@@ -1867,7 +1867,7 @@ fload(FD, server, GC, C, Lno, Chars) ->
C#sconf.mime_types_info,
GC#gconf.mime_types_info) of
{ok, Info} ->
- fload(FD, server, GC, C#sconf{mime_types_info=Info},
+ fload({FD, ConfFile}, server, GC, C#sconf{mime_types_info=Info},
Lno+1, ?NEXTLINE);
{error, Str} ->
{error, ?F("~s at line ~w", [Str, Lno])}
@@ -1878,7 +1878,7 @@ fload(FD, server, GC, C, Lno, Chars) ->
C#sconf.mime_types_info,
GC#gconf.mime_types_info) of
{ok, Info} ->
- fload(FD, server, GC, C#sconf{mime_types_info=Info},
+ fload({FD, ConfFile}, server, GC, C#sconf{mime_types_info=Info},
Lno+1, ?NEXTLINE);
{error, Str} ->
{error, ?F("~s at line ~w", [Str, Lno])}
@@ -1888,28 +1888,28 @@ fload(FD, server, GC, C, Lno, Chars) ->
case is_bool(Bool) of
{true, Val} ->
C1 = ?sc_set_strip_undef_bindings(C, Val),
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
end;
['<', "extra_response_headers", '>'] ->
- fload(FD, extra_response_headers, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, extra_response_headers, GC, C, Lno+1, ?NEXTLINE);
["options_asterisk_methods", '=' | Methods] ->
case parse_options_asterisk_methods(Methods) of
{ok, []} ->
C1 = C#sconf{options_asterisk_methods = []},
- fload(FD, server, GC, C1, Lno+1,
+ fload({FD, ConfFile}, server, GC, C1, Lno+1,
?NEXTLINE);
{ok, L} when C#sconf.options_asterisk_methods =:= undefined ->
C1 = C#sconf{options_asterisk_methods = L},
- fload(FD, server, GC, C1, Lno+1,
+ fload({FD, ConfFile}, server, GC, C1, Lno+1,
?NEXTLINE);
{ok, L} ->
C1 = C#sconf{options_asterisk_methods =
L ++ C#sconf.options_asterisk_methods},
- fload(FD, server, GC, C1, Lno+1,
+ fload({FD, ConfFile}, server, GC, C1, Lno+1,
?NEXTLINE);
{error, Str} ->
{error, ?F("~s at line ~w", [Str, Lno])}
@@ -1925,16 +1925,16 @@ fload(FD, server, GC, C, Lno, Chars) ->
end;
-fload(FD, listen_opts, GC, C, Lno, Chars) ->
+fload({FD, ConfFile}, listen_opts, GC, C, Lno, Chars) ->
case toks(Lno, Chars) of
[] ->
- fload(FD, listen_opts, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, listen_opts, GC, C, Lno+1, ?NEXTLINE);
["buffer", '=', Int] ->
case (catch list_to_integer(Int)) of
B when is_integer(B) ->
C1 = update_soptions(C, listen_opts, buffer, B),
- fload(FD, listen_opts, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, listen_opts, GC, C1, Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect integer at line ~w", [Lno])}
end;
@@ -1943,7 +1943,7 @@ fload(FD, listen_opts, GC, C, Lno, Chars) ->
case is_bool(Bool) of
{true, Val} ->
C1 = update_soptions(C, listen_opts, delay_send, Val),
- fload(FD, listen_opts, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, listen_opts, GC, C1, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
end;
@@ -1952,10 +1952,10 @@ fload(FD, listen_opts, GC, C, Lno, Chars) ->
case (catch list_to_integer(Val)) of
I when is_integer(I) ->
C1 = update_soptions(C, listen_opts, linger, {true, I}),
- fload(FD, listen_opts, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, listen_opts, GC, C1, Lno+1, ?NEXTLINE);
_ when Val == "false" ->
C1 = update_soptions(C, listen_opts, linger, {false, 0}),
- fload(FD, listen_opts, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, listen_opts, GC, C1, Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect integer|false at line ~w", [Lno])}
end;
@@ -1964,7 +1964,7 @@ fload(FD, listen_opts, GC, C, Lno, Chars) ->
case is_bool(Bool) of
{true, Val} ->
C1 = update_soptions(C, listen_opts, nodelay, Val),
- fload(FD, listen_opts, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, listen_opts, GC, C1, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
end;
@@ -1973,7 +1973,7 @@ fload(FD, listen_opts, GC, C, Lno, Chars) ->
case (catch list_to_integer(Int)) of
P when is_integer(P) ->
C1 = update_soptions(C, listen_opts, priority, P),
- fload(FD, listen_opts, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, listen_opts, GC, C1, Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect integer at line ~w", [Lno])}
end;
@@ -1982,7 +1982,7 @@ fload(FD, listen_opts, GC, C, Lno, Chars) ->
case (catch list_to_integer(Int)) of
I when is_integer(I) ->
C1 = update_soptions(C, listen_opts, sndbuf, I),
- fload(FD, listen_opts, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, listen_opts, GC, C1, Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect integer at line ~w", [Lno])}
end;
@@ -1991,7 +1991,7 @@ fload(FD, listen_opts, GC, C, Lno, Chars) ->
case (catch list_to_integer(Int)) of
I when is_integer(I) ->
C1 = update_soptions(C, listen_opts, recbuf, I),
- fload(FD, listen_opts, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, listen_opts, GC, C1, Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect integer at line ~w", [Lno])}
end;
@@ -2000,11 +2000,11 @@ fload(FD, listen_opts, GC, C, Lno, Chars) ->
case (catch list_to_integer(Val)) of
I when is_integer(I) ->
C1 = update_soptions(C, listen_opts, send_timeout, I),
- fload(FD, listen_opts, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, listen_opts, GC, C1, Lno+1, ?NEXTLINE);
_ when Val == "infinity" ->
C1 = update_soptions(C, listen_opts, send_timeout,
infinity),
- fload(FD, listen_opts, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, listen_opts, GC, C1, Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect integer|infinity at line ~w", [Lno])}
end;
@@ -2014,13 +2014,13 @@ fload(FD, listen_opts, GC, C, Lno, Chars) ->
{true, Val} ->
C1 = update_soptions(C, listen_opts, send_timeout_close,
Val),
- fload(FD, listen_opts, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, listen_opts, GC, C1, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
end;
['<', "/listen_opts", '>'] ->
- fload(FD, server, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C, Lno+1, ?NEXTLINE);
[H|T] ->
{error, ?F("Unexpected input ~p at line ~w", [[H|T], Lno])};
@@ -2028,10 +2028,10 @@ fload(FD, listen_opts, GC, C, Lno, Chars) ->
Err
end;
-fload(FD, ssl, GC, C, Lno, Chars) ->
+fload({FD, ConfFile}, ssl, GC, C, Lno, Chars) ->
case toks(Lno, Chars) of
[] ->
- fload(FD, ssl, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, ssl, GC, C, Lno+1, ?NEXTLINE);
%% A bunch of ssl options
@@ -2039,7 +2039,7 @@ fload(FD, ssl, GC, C, Lno, Chars) ->
case is_file(Val) of
true ->
C1 = C#sconf{ssl = (C#sconf.ssl)#ssl{keyfile = Val}},
- fload(FD, ssl, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, ssl, GC, C1, Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect existing file at line ~w", [Lno])}
end;
@@ -2048,7 +2048,7 @@ fload(FD, ssl, GC, C, Lno, Chars) ->
case is_file(Val) of
true ->
C1 = C#sconf{ssl = (C#sconf.ssl)#ssl{certfile = Val}},
- fload(FD, ssl, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, ssl, GC, C1, Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect existing file at line ~w", [Lno])}
end;
@@ -2057,7 +2057,7 @@ fload(FD, ssl, GC, C, Lno, Chars) ->
case is_file(Val) of
true ->
C1 = C#sconf{ssl = (C#sconf.ssl)#ssl{cacertfile = Val}},
- fload(FD, ssl, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, ssl, GC, C1, Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect existing file at line ~w", [Lno])}
end;
@@ -2066,7 +2066,7 @@ fload(FD, ssl, GC, C, Lno, Chars) ->
case is_file(Val) of
true ->
C1 = C#sconf{ssl = (C#sconf.ssl)#ssl{dhfile = Val}},
- fload(FD, ssl, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, ssl, GC, C1, Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect existing file at line ~w", [Lno])}
end;
@@ -2095,7 +2095,7 @@ fload(FD, ssl, GC, C, Lno, Chars) ->
SSL = (C#sconf.ssl)#ssl{verify=Val,
fail_if_no_peer_cert=Fail},
C1 = C#sconf{ssl=SSL},
- fload(FD, ssl, GC, C1, Lno+1, ?NEXTLINE)
+ fload({FD, ConfFile}, ssl, GC, C1, Lno+1, ?NEXTLINE)
end;
["fail_if_no_peer_cert", '=', Bool] ->
@@ -2103,7 +2103,7 @@ fload(FD, ssl, GC, C, Lno, Chars) ->
{true, Val} ->
C1 = C#sconf{ssl = (C#sconf.ssl)#ssl{
fail_if_no_peer_cert = Val}},
- fload(FD, ssl, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, ssl, GC, C1, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
end;
@@ -2113,14 +2113,14 @@ fload(FD, ssl, GC, C, Lno, Chars) ->
case lists:member(Val, [0, 1,2,3,4,5,6,7]) of
true ->
C1 = C#sconf{ssl = (C#sconf.ssl)#ssl{depth = Val}},
- fload(FD, ssl, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, ssl, GC, C1, Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect integer 0..7 at line ~w", [Lno])}
end;
["password", '=', Val] ->
C1 = C#sconf{ssl = (C#sconf.ssl)#ssl{password = Val}},
- fload(FD, ssl, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, ssl, GC, C1, Lno+1, ?NEXTLINE);
["ciphers", '=', Val] ->
try
@@ -2130,7 +2130,7 @@ fload(FD, ssl, GC, C, Lno, Chars) ->
case check_ciphers(L, Ciphers) of
ok ->
C1 = C#sconf{ssl = (C#sconf.ssl)#ssl{ciphers = L}},
- fload(FD, ssl, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, ssl, GC, C1, Lno+1, ?NEXTLINE);
Err ->
Err
end
@@ -2144,7 +2144,7 @@ fload(FD, ssl, GC, C, Lno, Chars) ->
case check_eccs(L, Curves) of
ok ->
C1 = C#sconf{ssl = (C#sconf.ssl)#ssl{eccs = L}},
- fload(FD, ssl, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, ssl, GC, C1, Lno+1, ?NEXTLINE);
Err ->
Err
end
@@ -2164,7 +2164,7 @@ fload(FD, ssl, GC, C, Lno, Chars) ->
Ssl#ssl.reneg_set)}
end,
C1 = C#sconf{ssl=Ssl1},
- fload(FD, ssl, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, ssl, GC, C1, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
end;
@@ -2182,7 +2182,7 @@ fload(FD, ssl, GC, C, Lno, Chars) ->
Ssl#ssl.reneg_set)}
end,
C1 = C#sconf{ssl=Ssl1},
- fload(FD, ssl, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, ssl, GC, C1, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
end;
@@ -2193,7 +2193,7 @@ fload(FD, ssl, GC, C, Lno, Chars) ->
C2 = C#sconf{
ssl=(C#sconf.ssl)#ssl{honor_cipher_order=Val}
},
- fload(FD, ssl, GC, C2, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, ssl, GC, C2, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
end;
@@ -2204,7 +2204,7 @@ fload(FD, ssl, GC, C, Lno, Chars) ->
C1 = C#sconf{
ssl=(C#sconf.ssl)#ssl{protocol_version=Vsns}
},
- fload(FD, ssl, GC, C1, Lno+1, ?NEXTLINE)
+ fload({FD, ConfFile}, ssl, GC, C1, Lno+1, ?NEXTLINE)
catch _:_ ->
{error, ?F("Bad ssl protocol_version at line ~w", [Lno])}
end;
@@ -2215,13 +2215,13 @@ fload(FD, ssl, GC, C, Lno, Chars) ->
C1 = C#sconf{
ssl=(C#sconf.ssl)#ssl{require_sni=Val}
},
- fload(FD, ssl, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, ssl, GC, C1, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
end;
['<', "/ssl", '>'] ->
- fload(FD, server, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C, Lno+1, ?NEXTLINE);
[H|T] ->
{error, ?F("Unexpected input ~p at line ~w", [[H|T], Lno])};
@@ -2229,16 +2229,16 @@ fload(FD, ssl, GC, C, Lno, Chars) ->
Err
end;
-fload(FD, server_auth, GC, C, Lno, Chars) ->
+fload({FD, ConfFile}, server_auth, GC, C, Lno, Chars) ->
[Auth|AuthDirs] = C#sconf.authdirs,
case toks(Lno, Chars) of
[] ->
- fload(FD, server_auth, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_auth, GC, C, Lno+1, ?NEXTLINE);
["docroot", '=', Docroot] ->
Auth1 = Auth#auth{docroot = filename:absname(Docroot)},
C1 = C#sconf{authdirs=[Auth1|AuthDirs]},
- fload(FD, server_auth, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_auth, GC, C1, Lno+1, ?NEXTLINE);
["dir", '=', Dir] ->
case file:list_dir(Dir) of
@@ -2251,12 +2251,12 @@ fload(FD, server_auth, GC, C, Lno, Chars) ->
Dir1 = yaws_api:path_norm(Dir),
Auth1 = Auth#auth{dir = [Dir1 | Auth#auth.dir]},
C1 = C#sconf{authdirs=[Auth1|AuthDirs]},
- fload(FD, server_auth, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_auth, GC, C1, Lno+1, ?NEXTLINE);
["realm", '=', Realm] ->
Auth1 = Auth#auth{realm = Realm},
C1 = C#sconf{authdirs=[Auth1|AuthDirs]},
- fload(FD, server_auth, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_auth, GC, C1, Lno+1, ?NEXTLINE);
["authmod", '=', Mod] ->
Mod1 = list_to_atom(Mod),
@@ -2271,7 +2271,7 @@ fload(FD, server_auth, GC, C, Lno, Chars) ->
end,
Auth1 = Auth#auth{mod = Mod1, headers = H},
C1 = C#sconf{authdirs=[Auth1|AuthDirs]},
- fload(FD, server_auth, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_auth, GC, C1, Lno+1, ?NEXTLINE);
["user", '=', User] ->
case parse_auth_user(User, Lno) of
@@ -2280,7 +2280,7 @@ fload(FD, server_auth, GC, C, Lno, Chars) ->
users = [{Name, Algo, Salt, Hash}|Auth#auth.users]
},
C1 = C#sconf{authdirs=[Auth1|AuthDirs]},
- fload(FD, server_auth, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_auth, GC, C1, Lno+1, ?NEXTLINE);
{error, Str} ->
{error, Str}
end;
@@ -2291,7 +2291,7 @@ fload(FD, server_auth, GC, C, Lno, Chars) ->
{_,D,O} -> Auth#auth{acl={all, D, O}}
end,
C1 = C#sconf{authdirs=[Auth1|AuthDirs]},
- fload(FD, server_auth, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_auth, GC, C1, Lno+1, ?NEXTLINE);
["allow", '=' | IPs] ->
Auth1 = case Auth#auth.acl of
@@ -2305,7 +2305,7 @@ fload(FD, server_auth, GC, C, Lno, Chars) ->
Auth#auth{acl={AllowIPs1, DenyIPs, Order}}
end,
C1 = C#sconf{authdirs=[Auth1|AuthDirs]},
- fload(FD, server_auth, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_auth, GC, C1, Lno+1, ?NEXTLINE);
["deny", '=', "all"] ->
Auth1 = case Auth#auth.acl of
@@ -2313,7 +2313,7 @@ fload(FD, server_auth, GC, C, Lno, Chars) ->
{A,_,O} -> Auth#auth{acl={A, all, O}}
end,
C1 = C#sconf{authdirs=[Auth1|AuthDirs]},
- fload(FD, server_auth, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_auth, GC, C1, Lno+1, ?NEXTLINE);
["deny", '=' | IPs] ->
Auth1 = case Auth#auth.acl of
@@ -2327,7 +2327,7 @@ fload(FD, server_auth, GC, C, Lno, Chars) ->
Auth#auth{acl={AllowIPs, DenyIPs1, Order}}
end,
C1 = C#sconf{authdirs=[Auth1|AuthDirs]},
- fload(FD, server_auth, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_auth, GC, C1, Lno+1, ?NEXTLINE);
["order", '=', "allow", ',', "deny"] ->
Auth1 = case Auth#auth.acl of
@@ -2335,7 +2335,7 @@ fload(FD, server_auth, GC, C, Lno, Chars) ->
{A,D,_} -> Auth#auth{acl={A, D, allow_deny}}
end,
C1 = C#sconf{authdirs=[Auth1|AuthDirs]},
- fload(FD, server_auth, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_auth, GC, C1, Lno+1, ?NEXTLINE);
["order", '=', "deny", ',', "allow"] ->
Auth1 = case Auth#auth.acl of
@@ -2343,12 +2343,12 @@ fload(FD, server_auth, GC, C, Lno, Chars) ->
{A,D,_} -> Auth#auth{acl={A, D, deny_allow}}
end,
C1 = C#sconf{authdirs=[Auth1|AuthDirs]},
- fload(FD, server_auth, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_auth, GC, C1, Lno+1, ?NEXTLINE);
["pam", "service", '=', Serv] ->
Auth1 = Auth#auth{pam=Serv},
C1 = C#sconf{authdirs=[Auth1|AuthDirs]},
- fload(FD, server_auth, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_auth, GC, C1, Lno+1, ?NEXTLINE);
['<', "/auth", '>'] ->
Pam = Auth#auth.pam,
@@ -2367,7 +2367,7 @@ fload(FD, server_auth, GC, C, Lno, Chars) ->
Ds -> [Auth1#auth{dir=D} || D <- Ds] ++ AuthDirs
end,
C1 = C#sconf{authdirs=AuthDirs1},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
[H|T] ->
{error, ?F("Unexpected input ~p at line ~w", [[H|T], Lno])};
@@ -2375,11 +2375,11 @@ fload(FD, server_auth, GC, C, Lno, Chars) ->
Err
end;
-fload(FD, server_redirect, GC, C, Lno, Chars) ->
+fload({FD, ConfFile}, server_redirect, GC, C, Lno, Chars) ->
RedirMap = C#sconf.redirect_map,
case toks(Lno, Chars) of
[] ->
- fload(FD, server_redirect, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_redirect, GC, C, Lno+1, ?NEXTLINE);
[Path, '=', '=' | Rest] ->
%% "Normalize" Path
@@ -2389,7 +2389,7 @@ fload(FD, server_redirect, GC, C, Lno, Chars) ->
{error, Str};
Redir ->
C1 = C#sconf{redirect_map=RedirMap ++ [Redir]},
- fload(FD, server_redirect, GC, C1, Lno+1, ?NEXTLINE)
+ fload({FD, ConfFile}, server_redirect, GC, C1, Lno+1, ?NEXTLINE)
end;
[Path, '=' | Rest] ->
@@ -2400,11 +2400,11 @@ fload(FD, server_redirect, GC, C, Lno, Chars) ->
{error, Str};
Redir ->
C1 = C#sconf{redirect_map=RedirMap ++ [Redir]},
- fload(FD, server_redirect, GC, C1, Lno+1, ?NEXTLINE)
+ fload({FD, ConfFile}, server_redirect, GC, C1, Lno+1, ?NEXTLINE)
end;
['<', "/redirect", '>'] ->
- fload(FD, server, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C, Lno+1, ?NEXTLINE);
[H|T] ->
{error, ?F("Unexpected input ~p at line ~w", [[H|T], Lno])};
@@ -2412,22 +2412,22 @@ fload(FD, server_redirect, GC, C, Lno, Chars) ->
Err
end;
-fload(FD, server_deflate, GC, C, Lno, Chars) ->
+fload({FD, ConfFile}, server_deflate, GC, C, Lno, Chars) ->
Deflate = C#sconf.deflate_options,
case toks(Lno, Chars) of
[] ->
- fload(FD, server_deflate, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_deflate, GC, C, Lno+1, ?NEXTLINE);
["min_compress_size", '=', CSize] ->
case (catch list_to_integer(CSize)) of
I when is_integer(I), I > 0 ->
Deflate1 = Deflate#deflate{min_compress_size=I},
C1 = C#sconf{deflate_options=Deflate1},
- fload(FD, server_deflate, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_deflate, GC, C1, Lno+1, ?NEXTLINE);
_ when CSize == "nolimit" ->
Deflate1 = Deflate#deflate{min_compress_size=nolimit},
C1 = C#sconf{deflate_options=Deflate1},
- fload(FD, server_deflate, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_deflate, GC, C1, Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect integer > 0 at line ~w", [Lno])}
end;
@@ -2438,7 +2438,7 @@ fload(FD, server_deflate, GC, C, Lno, Chars) ->
{ok, L} ->
Deflate1 = Deflate#deflate{mime_types=L},
C1 = C#sconf{deflate_options=Deflate1},
- fload(FD, server_deflate, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_deflate, GC, C1, Lno+1, ?NEXTLINE);
{error, Str} ->
{error, ?F("~s at line ~w", [Str, Lno])}
end;
@@ -2454,11 +2454,11 @@ fload(FD, server_deflate, GC, C, Lno, Chars) ->
L =:= best_compression; L =:= best_speed ->
Deflate1 = Deflate#deflate{compression_level=L},
C1 = C#sconf{deflate_options=Deflate1},
- fload(FD, server_deflate, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_deflate, GC, C1, Lno+1, ?NEXTLINE);
is_integer(L), L >= 0, L =< 9 ->
Deflate1 = Deflate#deflate{compression_level=L},
C1 = C#sconf{deflate_options=Deflate1},
- fload(FD, server_deflate, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_deflate, GC, C1, Lno+1, ?NEXTLINE);
true ->
{error, ?F("Bad compression level at line ~w", [Lno])}
end;
@@ -2468,7 +2468,7 @@ fload(FD, server_deflate, GC, C, Lno, Chars) ->
I when is_integer(I), I > 8, I < 16 ->
Deflate1 = Deflate#deflate{window_size=I * -1},
C1 = C#sconf{deflate_options=Deflate1},
- fload(FD, server_deflate, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_deflate, GC, C1, Lno+1, ?NEXTLINE);
_ ->
{error,
?F("Expect integer between 9..15 at line ~w",
@@ -2480,7 +2480,7 @@ fload(FD, server_deflate, GC, C, Lno, Chars) ->
I when is_integer(I), I >= 1, I =< 9 ->
Deflate1 = Deflate#deflate{mem_level=I},
C1 = C#sconf{deflate_options=Deflate1},
- fload(FD, server_deflate, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_deflate, GC, C1, Lno+1, ?NEXTLINE);
_ ->
{error, ?F("Expect integer between 1..9 at line ~w", [Lno])}
end;
@@ -2492,7 +2492,7 @@ fload(FD, server_deflate, GC, C, Lno, Chars) ->
Strategy =:= "huffman_only" ->
Deflate1 = Deflate#deflate{strategy=list_to_atom(Strategy)},
C1 = C#sconf{deflate_options=Deflate1},
- fload(FD, server_deflate, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_deflate, GC, C1, Lno+1, ?NEXTLINE);
true ->
{error,
?F("Unknown strategy ~p at line ~w", [Strategy, Lno])}
@@ -2503,7 +2503,7 @@ fload(FD, server_deflate, GC, C, Lno, Chars) ->
{true, Val} ->
Deflate1 = Deflate#deflate{use_gzip_static=Val},
C1 = C#sconf{deflate_options=Deflate1},
- fload(FD, server_deflate, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server_deflate, GC, C1, Lno+1, ?NEXTLINE);
false ->
{error, ?F("Expect true|false at line ~w", [Lno])}
end;
@@ -2518,7 +2518,7 @@ fload(FD, server_deflate, GC, C, Lno, Chars) ->
Deflate
end,
C1 = C#sconf{deflate_options = Deflate1},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
[H|T] ->
{error, ?F("Unexpected input ~p at line ~w", [[H|T], Lno])};
@@ -2526,19 +2526,19 @@ fload(FD, server_deflate, GC, C, Lno, Chars) ->
Err
end;
-fload(FD, extra_cgi_vars, GC, C, Lno, Chars) ->
+fload({FD, ConfFile}, extra_cgi_vars, GC, C, Lno, Chars) ->
[{Dir, Vars}|EVars] = C#sconf.extra_cgi_vars,
case toks(Lno, Chars) of
[] ->
- fload(FD, extra_cgi_vars, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, extra_cgi_vars, GC, C, Lno+1, ?NEXTLINE);
[Var, '=', Val] ->
C1 = C#sconf{extra_cgi_vars=[{Dir, [{Var, Val} | Vars]}|EVars]},
- fload(FD, extra_cgi_vars, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, extra_cgi_vars, GC, C1, Lno+1, ?NEXTLINE);
['<', "/extra_cgi_vars", '>'] ->
C1 = C#sconf{extra_cgi_vars = [EVars | C#sconf.extra_cgi_vars]},
- fload(FD, server, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C1, Lno+1, ?NEXTLINE);
[H|T] ->
{error, ?F("Unexpected input ~p at line ~w", [[H|T], Lno])};
@@ -2546,34 +2546,34 @@ fload(FD, extra_cgi_vars, GC, C, Lno, Chars) ->
Err
end;
-fload(FD, rss, GC, C, Lno, Chars) ->
+fload({FD, ConfFile}, rss, GC, C, Lno, Chars) ->
case toks(Lno, Chars) of
[] ->
- fload(FD, rss, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, rss, GC, C, Lno+1, ?NEXTLINE);
["rss_id", '=', Value] -> % mandatory !!
put(rss_id, list_to_atom(Value)),
- fload(FD, rss, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, rss, GC, C, Lno+1, ?NEXTLINE);
["rss_dir", '=', Value] -> % mandatory !!
put(rss, [{db_dir, Value} | get(rss)]),
- fload(FD, rss, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, rss, GC, C, Lno+1, ?NEXTLINE);
["rss_expire", '=', Value] ->
put(rss, [{expire, Value} | get(rss)]),
- fload(FD, rss, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, rss, GC, C, Lno+1, ?NEXTLINE);
["rss_days", '=', Value] ->
put(rss, [{days, Value} | get(rss)]),
- fload(FD, rss, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, rss, GC, C, Lno+1, ?NEXTLINE);
["rss_rm_exp", '=', Value] ->
put(rss, [{rm_exp, Value} | get(rss)]),
- fload(FD, rss, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, rss, GC, C, Lno+1, ?NEXTLINE);
["rss_max", '=', Value] ->
put(rss, [{rm_max, Value} | get(rss)]),
- fload(FD, rss, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, rss, GC, C, Lno+1, ?NEXTLINE);
['<', "/rss", '>'] ->
case get(rss_id) of
@@ -2581,7 +2581,7 @@ fload(FD, rss, GC, C, Lno, Chars) ->
{error, ?F("No rss_id specified at line ~w", [Lno])};
RSSid ->
yaws_rss:open(RSSid, get(rss)),
- fload(FD, server, GC, C, Lno+1, ?NEXTLINE)
+ fload({FD, ConfFile}, server, GC, C, Lno+1, ?NEXTLINE)
end;
[H|T] ->
@@ -2590,14 +2590,14 @@ fload(FD, rss, GC, C, Lno, Chars) ->
Err
end;
-fload(FD, opaque, GC, C, Lno, Chars) ->
+fload({FD, ConfFile}, opaque, GC, C, Lno, Chars) ->
case toks(Lno, Chars) of
[] ->
- fload(FD, opaque, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, opaque, GC, C, Lno+1, ?NEXTLINE);
[Key, '=', Value] ->
C1 = C#sconf{opaque = [{Key,Value} | C#sconf.opaque]},
- fload(FD, opaque, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, opaque, GC, C1, Lno+1, ?NEXTLINE);
[Key, '='| Value] ->
String_value = lists:flatten(
@@ -2608,10 +2608,10 @@ fload(FD, opaque, GC, C, Lno, Chars) ->
Item
end, Value)),
C1 = C#sconf{opaque = [{Key, String_value} | C#sconf.opaque]},
- fload(FD, opaque, GC, C1, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, opaque, GC, C1, Lno+1, ?NEXTLINE);
['<', "/opaque", '>'] ->
- fload(FD, server, GC, C, Lno+1, ?NEXTLINE);
+ fload({FD, ConfFile}, server, GC, C, Lno+1, ?NEXTLINE);
[H|T] ->
{error, ?F("Unexpected input ~p at line ~w", [[H|T], Lno])};
@@ -3559,9 +3559,8 @@ parse_auth_user(User, Algo, B64Salt, B64Hash) ->
end.
-subconfigfiles(FD, Name, Lno) ->
- {ok, Config} = file:pid2name(FD),
- ConfPath = filename:dirname(filename:absname(Config)),
+subconfigfiles({_FD, ConfFile}, Name, Lno) ->
+ ConfPath = filename:dirname(filename:absname(ConfFile)),
File = filename:absname(Name, ConfPath),
case {is_file(File), is_wildcard(Name)} of
{true,_} ->
@@ -3575,9 +3574,8 @@ subconfigfiles(FD, Name, Lno) ->
" (subconfig: ~s)", [Lno, Name])}
end.
-subconfigdir(FD, Name, Lno) ->
- {ok, Config} = file:pid2name(FD),
- ConfPath = filename:dirname(filename:absname(Config)),
+subconfigdir({_FD, ConfFile}, Name, Lno) ->
+ ConfPath = filename:dirname(filename:absname(ConfFile)),
Dir = filename:absname(Name, ConfPath),
case is_dir(Dir) of
true ->
@@ -3609,7 +3607,7 @@ fload_subconfigfiles([File|Files], global, GC, Cs) ->
error_logger:info_msg("Yaws: Using global subconfig file ~s~n", [File]),
case file:open(File, [read]) of
{ok, FD} ->
- R = (catch fload(FD, GC, Cs, 1, ?NEXTLINE)),
+ R = (catch fload({FD, File}, GC, Cs, 1, ?NEXTLINE)),
?Debug("FLOAD(~s): ~p", [File, R]),
case R of
{ok, GC1, Cs1} -> fload_subconfigfiles(Files, global, GC1, Cs1);
@@ -3624,7 +3622,7 @@ fload_subconfigfiles([File|Files], server, GC, C) ->
error_logger:info_msg("Yaws: Using server subconfig file ~s~n", [File]),
case file:open(File, [read]) of
{ok, FD} ->
- R = (catch fload(FD, server, GC, C, 1, ?NEXTLINE)),
+ R = (catch fload({FD, File}, server, GC, C, 1, ?NEXTLINE)),
?Debug("FLOAD(~s): ~p", [File, R]),
case R of
{ok, GC1, C1, _, eof} ->
diff --git a/ssl/mkcert_altname/README b/ssl/mkcert_altname/README
index 6dcf395c5..4f0b9454d 100644
--- a/ssl/mkcert_altname/README
+++ b/ssl/mkcert_altname/README
@@ -23,7 +23,7 @@ Create a new CA using
Create a CSR
-# openssl req -new -config ./openssl.cnf -newkey rsa:1024 -nodes -keyout yaws.ppk -out yaws.csr
+# openssl req -new -config ./openssl.cnf -newkey rsa:2048 -nodes -keyout yaws.ppk -out yaws.csr
Sign the csr
diff --git a/ssl/mkcert_altname/alice.sni.example.com-cert.pem b/ssl/mkcert_altname/alice.sni.example.com-cert.pem
index c0e43056f..9c75a63a3 100644
--- a/ssl/mkcert_altname/alice.sni.example.com-cert.pem
+++ b/ssl/mkcert_altname/alice.sni.example.com-cert.pem
@@ -1,24 +1,25 @@
-----BEGIN CERTIFICATE-----
-MIIEETCCAvmgAwIBAgIJAMJnYN35FfXkMA0GCSqGSIb3DQEBBQUAMIG1MQswCQYD
-VQQGEwJTRTEVMBMGA1UECBMMR29uZHdhbmFsYW5kMREwDwYDVQQHEwhZYXdzdG93
-bjETMBEGA1UEChMKSHliZXIgSW5jLjEbMBkGA1UECxMSSmFuaXRvcmlhbCBzZWN0
-aW9uMR4wHAYDVQQDExVhbGljZS5zbmkuZXhhbXBsZS5jb20xKjAoBgkqhkiG9w0B
-CQEWG25vYm9keUBub3doZXJlLmdvbmR3YW5hbGFuZDAeFw0xNTA5MDEyMDA1MjBa
-Fw0yNTA4MjkyMDA1MjBaMIG1MQswCQYDVQQGEwJTRTEVMBMGA1UECBMMR29uZHdh
-bmFsYW5kMREwDwYDVQQHEwhZYXdzdG93bjETMBEGA1UEChMKSHliZXIgSW5jLjEb
-MBkGA1UECxMSSmFuaXRvcmlhbCBzZWN0aW9uMR4wHAYDVQQDExVhbGljZS5zbmku
-ZXhhbXBsZS5jb20xKjAoBgkqhkiG9w0BCQEWG25vYm9keUBub3doZXJlLmdvbmR3
-YW5hbGFuZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMKjcQ5Y7r8d
-etxCvrnj4I+9jZ5mtzErt1wGpnjM06YHetzzOsQCGgt58k+f7PgNMXRxgCoWZcr1
-4WX8DNeRBBCRVneKv8eo5xpLKOFzkN3nKW8g1QfjJmMoE2mX2LHLZz5WLmah8U+u
-0MysQS/ghEKnIFeGbza5sIypqJNukIFqhyvMosksGVwfmMli8Z48pzvyX9ndMo0A
-vbIUZyAfGHIfzlMYfBdSG6h0CrgqP5M8jNMC9YMKQC9Zz6uLAxyYwXndkCVjIRIR
-4Y1yHyBU9CnRFcBTvRnsJ0+Lgj2PEktu33cOgXVOI6EqIlkVh2wuulPwoVXo/fFh
-TL35peHERXMCAwEAAaMiMCAwHgYDVR0RBBcwFYITYm9iLnNuaS5leGFtcGxlLmNv
-bTANBgkqhkiG9w0BAQUFAAOCAQEAHf686TX/Pj18yB57nWdydjyRMiczHeYDXIoJ
-5KnUx7VycjOlBJB3xfRFoCgpVvm8/x03LA3lspta1T5eeTPuazGlc6C43xkKdCMA
-RZaJBwmcpopcDNE1l7SjWb+Fkhvoa3oh9CzZZ+0S5PBbQ4MJevVptXc3LTJ0LQ4z
-bhKQqXuZxqGIEzndP8lSicZDtRtMLYEruS5OG7SIL34WMgkS2sDP36FR2olnlgq8
-FJX1qn1ZFY3mjxniXO2cxtsaAXOrqwJscGTyjpgOzBUo6JtdS4EtgWG/FNpvhePz
-hYNomW11cNmsUuANEoCvaE8gWtqHiTUqUSv+Yd1woOUHHcdzOw==
+MIIEKzCCAxOgAwIBAgIUYRlCFCBC1JfmyLsOLneiEa/MwEEwDQYJKoZIhvcNAQEL
+BQAwdjELMAkGA1UEBhMCU0UxFTATBgNVBAgMDEdvbmR3YW5hbGFuZDETMBEGA1UE
+CgwKSHliZXIgSW5jLjEbMBkGA1UECwwSSmFuaXRvcmlhbCBzZWN0aW9uMR4wHAYD
+VQQDDBVhbGljZS5zbmkuZXhhbXBsZS5jb20wHhcNMjMxMjI4MTkyMDI5WhcNMzMx
+MjI1MTkyMDI5WjCBtTELMAkGA1UEBhMCU0UxFTATBgNVBAgTDEdvbmR3YW5hbGFu
+ZDERMA8GA1UEBxMIWWF3c3Rvd24xEzARBgNVBAoTCkh5YmVyIEluYy4xGzAZBgNV
+BAsTEkphbml0b3JpYWwgc2VjdGlvbjEeMBwGA1UEAxMVYWxpY2Uuc25pLmV4YW1w
+bGUuY29tMSowKAYJKoZIhvcNAQkBFhtub2JvZHlAbm93aGVyZS5nb25kd2FuYWxh
+bmQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVU42DMt2eywGSM4xG
+wpc2UGxjUM3Sr6hx+vAWp9cwvLiETZWQe7UuYKBa5G7fdvQvMvy79iUh4fvwGwDb
+bU1u4AkDHEHp3sg1mpoznCbXGpcJOiWLRNesMA5TyBN0pTJfU9ClI/pcaVn/+uV4
+nE8hjC2poRAL1T0tb+mw1XgyhUzM+max9F4pS4WDXmj07b8KWyRwRDianNtP4xqF
+ujuHl+4+vhbGoo0/Nssh5l+wOj+F854Z00VnZB0wZKyoO+khOpTTeMamzkKX4YsS
+BArFpyNBRlPrHBhV4XdjJ7jXSHZD26JLIEKJJZcu1iDFZF0aVzaHostPYPs2KtLj
+wWnVAgMBAAGjcTBvMC0GA1UdEQQmMCSCD3NuaS5leGFtcGxlLmNvbYIRKi5zbmku
+ZXhhbXBsZS5jb20wHQYDVR0OBBYEFHezPcv2y4W1UotBNrTOU8j7Sp9nMB8GA1Ud
+IwQYMBaAFN3myw9smPNd1YD4GX3V+N+jEAoeMA0GCSqGSIb3DQEBCwUAA4IBAQCy
+QvzZtjeNO0JwMq9Gs+U84wOIAXaQMh2wtiX6mXfo3I1J2ScogNeTQpkBYtawKScX
+8QqJEW3mkfFexTXzmpW5vtvh9VAYluy3/Tw2F8K0wUCaA1RiODd3kmU1Dbge0r4u
+XJJE/zgHjz4HfRBhpODEcWPcYOH6u3nhMDMPRjbWJcLq7u3HfDRrGhUtj3NWLTZ5
+OFVmtweZ1pNWiE2IrsG24gmAXsrdaKN2xU0nwkbWWEl1k4im4GlBGwP451yhagAX
+vSZJ/8cCTveVRrX+4BMau4HiX+JE+0Cd/VMYqX1szG8rAVYPY3gTJ6H/LkwrUvDl
+jnwJATONGg4QGc5psHyf
-----END CERTIFICATE-----
diff --git a/ssl/mkcert_altname/alice.sni.example.com-key.pem b/ssl/mkcert_altname/alice.sni.example.com-key.pem
index cb83b1563..bd4c16021 100644
--- a/ssl/mkcert_altname/alice.sni.example.com-key.pem
+++ b/ssl/mkcert_altname/alice.sni.example.com-key.pem
@@ -1,27 +1,28 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEAwqNxDljuvx163EK+uePgj72Nnma3MSu3XAameMzTpgd63PM6
-xAIaC3nyT5/s+A0xdHGAKhZlyvXhZfwM15EEEJFWd4q/x6jnGkso4XOQ3ecpbyDV
-B+MmYygTaZfYsctnPlYuZqHxT67QzKxBL+CEQqcgV4ZvNrmwjKmok26QgWqHK8yi
-ySwZXB+YyWLxnjynO/Jf2d0yjQC9shRnIB8Ych/OUxh8F1IbqHQKuCo/kzyM0wL1
-gwpAL1nPq4sDHJjBed2QJWMhEhHhjXIfIFT0KdEVwFO9GewnT4uCPY8SS27fdw6B
-dU4joSoiWRWHbC66U/ChVej98WFMvfml4cRFcwIDAQABAoIBAAXCNi8ZfH7VDXSE
-2QXA8zzte8oq+dKPm44yeCxsyvpHkGAHJj70XPbn9b5bWfSA12y9ivAz13Eo0zFk
-QrECDl+7HRbOWRw8KBJEFQKOm8Ok+jnae9MO6mzWm7RtFLE19mkGvbq1oeEcp/rW
-Qdt7xg3+ydstFA9HcSzIPD+YbtgVVIqA6duKwyKfaHgDHDJpo5SyTQXEAui5Ut6u
-GrkNY8L6pEAd69B5E5J3pmbQiIvkPXPrepC+1RaptGb713LwdkVf2/tLzhxAAF0v
-wqbjdk+LOYODzMwOQCC3RP3lHxhebbmxPp3SYf2/VK77F34qLJ0W9Xy0h/DPTeCd
-KHK2jaECgYEA76gzPAdtvR/1stmvtPt3LlTYckN2BbTkYEGkduXVzJOcPa5EOYym
-o+h3QtGR2CkB+iD8nfy84/lABVwlpHc+uuUIcZx+tftyVfKJ/yHEMLpOtGEvXk4c
-qP30ejFe83McpcSrMtOTkrCZUq2Zg6sigeReoYjxnPIZzpZMdetqtPECgYEAz+lU
-9rzopseDIuCSmT/nqwdU2WDtfUiRIV3TK1rhz9jqYjPKoYyIV7pH6+H7o/WLl48t
-wPwEgNlx+b+39hwONuy+wn3UhXyIfdl4lWmfycWm8bYbOCGfJbuv5B1WJT/koXQ1
-DpcI4fyrbHoBCQBVIOZzbMRh1tolvDfpQFnEEKMCgYBZm1JMx5pIdIKxdKM10DAn
-qqGjV4XxbElXlDOiIR1neGmaxmXL/sLv1iOBYEpfwDV1CJBroewecTt2xZVtgQh7
-aNdXY2QdNv7xE9Z1BnMMpRx4ZT4IzLv6k7mtVnhiHlA/yuEYB/PNjSpGt5IGoR4t
-4u1fCI0OWZc8nwXHsVYcgQKBgBVFaQTpZOATT25VDYqSSDBuSpcG3KVRtE92mvE3
-lhy+s5Qielu21ggrrcoLT8SBjauO4X56Cjfoh0mm/Lo4OpgR9p5NY13Y1NoTUsvu
-h4OMLj1ShUxj3DVvE1rCSZr8A3clPXxlpWoBgMRTYyG5n/wCt9Jr8RqbLPspuTp1
-NKMDAoGBAMQ3f+cIEB8Q/UgpTGep33Sh0ezNZ5YyZc2yzUBBBHbFFkBlJJ4bgZyK
-4Jwb4c9QdDDIHFETrcGLbgtuK6tKOjyeofb+BCxpdZE2NykXTLfqG1hkENmGB9EY
-1UuRE/SScHURZw1yFrvbP6Ecmor809uBKfrnjeG4ThMzY/umbDTT
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCVU42DMt2eywGS
+M4xGwpc2UGxjUM3Sr6hx+vAWp9cwvLiETZWQe7UuYKBa5G7fdvQvMvy79iUh4fvw
+GwDbbU1u4AkDHEHp3sg1mpoznCbXGpcJOiWLRNesMA5TyBN0pTJfU9ClI/pcaVn/
++uV4nE8hjC2poRAL1T0tb+mw1XgyhUzM+max9F4pS4WDXmj07b8KWyRwRDianNtP
+4xqFujuHl+4+vhbGoo0/Nssh5l+wOj+F854Z00VnZB0wZKyoO+khOpTTeMamzkKX
+4YsSBArFpyNBRlPrHBhV4XdjJ7jXSHZD26JLIEKJJZcu1iDFZF0aVzaHostPYPs2
+KtLjwWnVAgMBAAECggEAAIB4ogd+e61iereOIeG/CNlx186adnoNJp7phiX3wOvt
+cdJh7Yug4wBDobKRVdJsRSlWdJpB6zB7fIXWtaYTI8uAdEB4zzymrxlvKbu9XK0z
+8z29CRAI6oT501nBiPuSJQRe1+M8UOmwuf3BnitmT65NK/wE1glYLIoq/qNlBURw
+miPoMmrJzcBeV2Ah72z+UQhvY1lOCmX+fAx5ck2TAo9UdGvOo5uP6iTe/CeAvRw1
+fulPpw3weKYtgiMlucuiRBuQ0tf2XKlBF/yDPPIxk2RIwal1g6rKfqIL3Y0qB2mM
+ockFM2HPmdSyglthfjcBIU3FJNFq1ggTZOPuytoXWQKBgQDMLU0Hb/pIHUgBG/AF
+8XFpT6hV+lJR8bcOl8zVpRh04+mUvs8S7j7+/+JsKAdNFvQyP0gfk1ZIojx03WF5
+e84rew3djrtoDpHidPBhXm3QKaG4cy7nwAAeWaZCz8F+Yb0SparWfmMe1wkkJxmb
+bucO2eOm6Xl14n5kRPRYFTkibQKBgQC7OkEs5sCV2v8M+6gkLkie7K0WMbmoPVfX
+thnC9PLGMWEJ4UOA5KZc5l749BLrh5vwqNHGvsDz8y8Hjvs5DTWWbknaiLGB5tj9
+7oOk9HcclKD+xbRruywPk5NAqpx5IqN0qe1l64bSKzn71G6HjR8MOQMq+Z9rkZm9
+oOx105uECQKBgQCcBk4jzdVDgGTCvDeqQvv4ju/Da/u2NPE/TI8x/+x1fqjDiyAw
+hjFLqfy7y8bwiQbo0uTphCzeamOqpnXTYOGG5o0M7wKVHPUsSVJcBc4C0Z2MlzCT
+1mwAxV9BFQP28PeMJV8sc/6I1ahdoSd3WMNm3OiTZzzy8bbGJs9V9Dnp7QKBgHg2
+VCifVGIjhYVxg6kPaqNX9V59uOXz1RX0nx/VJJfqlpLAZxY4OTUG2U3hcNB3dsGT
+s3V3fu5jYvvoaxdbit+2mobNI6Pzc7m/Thk4uc3JBIHwsQJG4Ghz6aUopmUEv4yl
+mn7JNfx1srol0H4KNzgi1wzdz+VCTEM8MvcIUh75AoGANj2Pn9OqPBAHxYgAHcoj
+nxgKVUz86Fshzkn196oilA2RSN38vuCo4H9vvvNnY5hQINED+GgquF4KHz6rS8jQ
+Kk8LEF9l+1JzUZzZ1Ksf53bFqEzzm/SwF9xSQpFhNpyRc/3krJNlWFwv/0JCEYWt
+92a1BBZdt3PF+tZUincaL+M=
+-----END PRIVATE KEY-----
diff --git a/ssl/mkcert_altname/openssl.cnf b/ssl/mkcert_altname/openssl.cnf
index d37d86fda..9f21ab08c 100644
--- a/ssl/mkcert_altname/openssl.cnf
+++ b/ssl/mkcert_altname/openssl.cnf
@@ -67,7 +67,7 @@ cert_opt = ca_default # Certificate field options
default_days = 3650 # how long to certify for
default_crl_days= 30 # how long before next CRL
-default_md = sha1 # which md to use.
+default_md = sha256 # which md to use.
preserve = no # keep passed DN ordering
# A few difference way of specifying how similar the request should look
@@ -98,7 +98,7 @@ emailAddress = optional
####################################################################
[ req ]
-default_bits = 1024
+default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
diff --git a/ssl/mkcert_altname/yaws.sni.example.com-cert.pem b/ssl/mkcert_altname/yaws.sni.example.com-cert.pem
index 5d356950d..12e4d0edc 100644
--- a/ssl/mkcert_altname/yaws.sni.example.com-cert.pem
+++ b/ssl/mkcert_altname/yaws.sni.example.com-cert.pem
@@ -1,25 +1,26 @@
-----BEGIN CERTIFICATE-----
-MIIEHjCCAwagAwIBAgIJALteEnfxVLtfMA0GCSqGSIb3DQEBBQUAMIG0MQswCQYD
-VQQGEwJTRTEVMBMGA1UECBMMR29uZHdhbmFsYW5kMREwDwYDVQQHEwhZYXdzdG93
-bjETMBEGA1UEChMKSHliZXIgSW5jLjEbMBkGA1UECxMSSmFuaXRvcmlhbCBzZWN0
-aW9uMR0wGwYDVQQDExR5YXdzLnNuaS5leGFtcGxlLmNvbTEqMCgGCSqGSIb3DQEJ
-ARYbbm9ib2R5QG5vd2hlcmUuZ29uZHdhbmFsYW5kMB4XDTE1MDkwMTIwMTUzNVoX
-DTI1MDgyOTIwMTUzNVowgbQxCzAJBgNVBAYTAlNFMRUwEwYDVQQIEwxHb25kd2Fu
-YWxhbmQxETAPBgNVBAcTCFlhd3N0b3duMRMwEQYDVQQKEwpIeWJlciBJbmMuMRsw
-GQYDVQQLExJKYW5pdG9yaWFsIHNlY3Rpb24xHTAbBgNVBAMTFHlhd3Muc25pLmV4
-YW1wbGUuY29tMSowKAYJKoZIhvcNAQkBFhtub2JvZHlAbm93aGVyZS5nb25kd2Fu
-YWxhbmQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCjvvarAiwY3NIP
-IkwP34XklSTZCqzceF82kDEq/0BJJQtLPlolaOWUVcEeEIUQNFBdysgFQbN0S8xH
-GQjXC0Oz73MV+9Ekd6SYIjZuS+aL/ym7SBE4kGQqnwxqD8/lj/O2It2HtFoD1pLW
-tMjNMHvScikQvVJLKIwT+F8Hsn4Yrwt57Sr68wn6+uxhnl96vAEauMMmnrWy+znY
-n+4KNTzvlK2AChJh1KwGbCpiMz37yBlVdsAXpHv8xbJS3BE7++CQxTzqf79zKWly
-g1sZOXokWx71FnDmgHji5DqD3DFaCc4MSe3BuxQy8972GagePdIYM1DZunFSg2Eq
-ed1xuyUrAgMBAAGjMTAvMC0GA1UdEQQmMCSCD3NuaS5leGFtcGxlLmNvbYIRKi5z
-bmkuZXhhbXBsZS5jb20wDQYJKoZIhvcNAQEFBQADggEBAJJXxWatXeVaLJrcnW+t
-SyUhm3FiYG5OQCbV+3YJ8Rhpm2ip3VkQG8ReBOf5G0bm8ok/rDRfZkZAVem3kbcg
-RGZDfcHVRR8DsAOFyu69wA/N89ubvzFmIUk+KS2a1BGeHrxv99dXR7QN02mQvNm2
-FoFNXbR+/SuaqMRDIsMhlcKkQ3h3pua5PFsKsfnvCxFUH3HfOWL3AnZ2RwsFV2Ss
-9Bnq+CmYj9ASKSJZzXfAfYAx7ok6AexEwRvce6pMShUlxu690DRDxLtliE1Y/kuD
-OSHsGFZbf+z2TQprZPOcfn/Z4H75ulru9aTsf5seAUxr/ABTfAXV7WyPx7cI87IO
-WdM=
+MIIEVjCCAz6gAwIBAgIUNvnyesgNk+1so3qeXJ9dX7pPptYwDQYJKoZIhvcNAQEL
+BQAwgaExCzAJBgNVBAYTAlNFMRUwEwYDVQQIDAxHb25kd2FuYWxhbmQxEzARBgNV
+BAoMCkh5YmVyIEluYy4xGzAZBgNVBAsMEkphbml0b3JpYWwgc2VjdGlvbjEdMBsG
+A1UEAwwUeWF3cy5zbmkuZXhhbXBsZS5jb20xKjAoBgkqhkiG9w0BCQEWG25vYm9k
+eUBub3doZXJlLmdvbmR3YW5hbGFuZDAeFw0yMzEyMjgxOTE1MDJaFw0zMzEyMjUx
+OTE1MDJaMIG0MQswCQYDVQQGEwJTRTEVMBMGA1UECBMMR29uZHdhbmFsYW5kMREw
+DwYDVQQHEwhZYXdzdG93bjETMBEGA1UEChMKSHliZXIgSW5jLjEbMBkGA1UECxMS
+SmFuaXRvcmlhbCBzZWN0aW9uMR0wGwYDVQQDExR5YXdzLnNuaS5leGFtcGxlLmNv
+bTEqMCgGCSqGSIb3DQEJARYbbm9ib2R5QG5vd2hlcmUuZ29uZHdhbmFsYW5kMIIB
+IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn08EflJJALTfXKnkn9XzaH9+
+Sf9troawAvdl2db38J43hdF9QX8qk6azrfSqmdaSx/59S+sEiAEygvOwrvpzr10/
+0/mC9LkfR3FiwRyMWaAs2uDcBFx7/OTPY44UiiXX6HzfA1fSc0jsBENRAcJ8Ze3y
+T9IMdJdJrAP8IdoSz4Jw4nhvFPz26D1pL3yeJGDGHhSRoh+mGxvZNyZiYXjDlEjo
+fmsg9sLoC8GIs3AciV6trf04Zu/f3HdD3e4uD29lin9Yge38IrUXrxIPVYOHZ2+u
+eBbcpD517TpjtbOswRkfFfGolpuHMvNJ93BGgtTUcYc5FGi6wDeTE3BujBnz7wID
+AQABo3EwbzAtBgNVHREEJjAkgg9zbmkuZXhhbXBsZS5jb22CESouc25pLmV4YW1w
+bGUuY29tMB0GA1UdDgQWBBTrReJPLBvLKqeSr8VRN+fAvgPgyzAfBgNVHSMEGDAW
+gBQTb+jRUwLSFUWecsCC2v/CWRHZWDANBgkqhkiG9w0BAQsFAAOCAQEABleg+zug
+WVkdUZgGQRCECbxYm4aALpvJmkGMr2nHb5Ulh2HWnQsgHkuKCR0wpR4N79NnhxY3
+J4x7Il4UrXNIRmEJn/hkl2bG29hkVw79BMBwWKiKpSgEIraxmGjQJtmSyk17+T0P
+b58hQTTTejTTzk006qcaTfHWFwZFHpW0F2rTThOxx8XJ3QJU8ThSlcf4Rcq8TmGN
+qlrevR25YFo1NDROmH8v9PCEjRBarsI0h5Ihu6nILeS7wzXedakCoOk/2h5XZZUS
+VxCy7VyIINCg9ZbcnPb3frc/DdMraT8X+S/UdeyBQr9KdRUum4u4ZHaPXOFrE38W
+nPnCNOeSdFvVLA==
-----END CERTIFICATE-----
diff --git a/ssl/mkcert_altname/yaws.sni.example.com-key.pem b/ssl/mkcert_altname/yaws.sni.example.com-key.pem
index 3103b4925..fe4b0f6c9 100644
--- a/ssl/mkcert_altname/yaws.sni.example.com-key.pem
+++ b/ssl/mkcert_altname/yaws.sni.example.com-key.pem
@@ -1,27 +1,28 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEogIBAAKCAQEAo772qwIsGNzSDyJMD9+F5JUk2Qqs3HhfNpAxKv9ASSULSz5a
-JWjllFXBHhCFEDRQXcrIBUGzdEvMRxkI1wtDs+9zFfvRJHekmCI2bkvmi/8pu0gR
-OJBkKp8Mag/P5Y/ztiLdh7RaA9aS1rTIzTB70nIpEL1SSyiME/hfB7J+GK8Lee0q
-+vMJ+vrsYZ5ferwBGrjDJp61svs52J/uCjU875StgAoSYdSsBmwqYjM9+8gZVXbA
-F6R7/MWyUtwRO/vgkMU86n+/cylpcoNbGTl6JFse9RZw5oB44uQ6g9wxWgnODEnt
-wbsUMvPe9hmoHj3SGDNQ2bpxUoNhKnndcbslKwIDAQABAoIBAGQrwoLDBW8AR5Dy
-jk13lFVN2Ajeuvj0umqKs0l2dUFJ5CrXrhYMocWo4EcgHAbZugBmuQ5eLwYKCKHF
-8t57CaPd7C2aq0r/1jUrWNkInbUvF7x2TfKogl6AhfusSKZK9fCKS7Nk5VxLu/CV
-D/JWoqkPJYgUCW/pEih1XM08qF84W+zxueuPf9DAjmY59qwyis0xrvwPNMVNzICF
-1cfPXQ/7XufwtBN0+GKi9sSRTCLGVVeG5bka8S/J6diwcaFId5G2Xxc/fwY86a6z
-0Rpl9zqVlmDvzcGyP0+vEgvVDAeG8Z2j3snAhLm7FvEXyLIRSvw8URpt9AQsAPzl
-MutXKoECgYEAzsw1HQ1ZAF2UJEhh9d6U7qyeAZB65ZuvuL2p1pFiftqrekTETxKm
-h5iBmXUD86Crm/TGATPX7w7w7WqTS0IZvJuX/Z4zXJ7houiAPt0+yeYSLunC2aVd
-s1fEZNmbBkQv4ZO0YC+Iol+eY8z7HSg/JwHoyYYb6DC/5dt5AAIue9sCgYEAyrSH
-JnCEYe9V4PU+/Ij2oGpl3zQFnieS5/h9wIto8e9CpxdQG2ZqhdihvTFG/P2w704r
-5coGDgXLaR76oLnWig7IQIOAhttbD0h2thSm03yZsWal6yxldBR+3NLYbKvwMDpu
-zd+kfv2OBm+YhDTJvXeOgsnOAFHBZ8oSngn1ZPECgYBkTUG5vJ6dgcX3ry/sXDAq
-b4kXwycItPGPDlcRHmUCmDcxz6bTn30sKXk6oDnxcc2qkBd1v9qNNdb/oICesQng
-pCsdNR0+YEWaiWCinRb2QGQzYuhCPmXrNbepHq6FZI9Avy5utL912iDt0R8/LiUr
-W064aBajEPoSl9fhfC1lnwKBgE38kpqpY2VCbWn1MNx73VbuWG89VoP4eb6hjdAM
-Ur3x7VTX1UwVZRpFtERTtxoSiIYpLx5jUV0HwbCZ6Jb5qJ7I/SZE8afwsOH6YSHA
-ZEatg3wLH/6QwB+e2wgeXoHAzNHhSUwPpPvulTvIp4cFwDAS1VNgTM82pRBHYE5J
-So4hAoGASEUqLUST1djbFaCcwPkXHhx15+wSVgJyJ7dAwQh8GPQnI3lWSPmw1VEB
-+UHW3tNONnKijw2aBuC3rt9sUks1H9RMDHcU+mq9qa9CLB6XArgPet3iaWm0Tkhc
-OW8kuPUVncR9YU6Tpy6vWwNpT1Qjjbm2NruyhmNbyHU+G8CIAps=
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCfTwR+UkkAtN9c
+qeSf1fNof35J/22uhrAC92XZ1vfwnjeF0X1BfyqTprOt9KqZ1pLH/n1L6wSIATKC
+87Cu+nOvXT/T+YL0uR9HcWLBHIxZoCza4NwEXHv85M9jjhSKJdfofN8DV9JzSOwE
+Q1EBwnxl7fJP0gx0l0msA/wh2hLPgnDieG8U/PboPWkvfJ4kYMYeFJGiH6YbG9k3
+JmJheMOUSOh+ayD2wugLwYizcByJXq2t/Thm79/cd0Pd7i4Pb2WKf1iB7fwitRev
+Eg9Vg4dnb654FtykPnXtOmO1s6zBGR8V8aiWm4cy80n3cEaC1NRxhzkUaLrAN5MT
+cG6MGfPvAgMBAAECggEAJi7uSMi4Lq8rii4+WgER4k4MmvfZ9ibaMRvTEa9wpf+G
+F1Dq0LQGJHWkQ2GNMmo3rC/XIEcoQuDmlnSKOKZW7AVRsyDuvnFQifMnVFnfWewG
+VD/o/DKelTLScm4vhh0j7tlfKpH2IyOrTipEVEOlRVkO5wrVaWyJf+1ElWiLcajU
+8hpmzaFC3xSUmntQNRCdx7IHIxFPNi0NAa6eKwVXqMwSnFtMF1+cMAeuhX0/vvt3
+o7jJ66hRUQA4AE7MrRizlT7yZmYP4QMvD2SrD7sJBmi4M815hEZyt6zGtWEveG1Q
+GIwxcWA3Tb7a69TL2gOcQzLzjQLpeRlGWCHjAqis4QKBgQDcMgRn4ANpZcFqeJg1
+XQiG4syVA1S2ox+4oTo12C0+HMM2OUM2vaKKf3j3AQTMKpSbCf0fGE1RQZ9xr2gr
+iVw9Qrws3UaDsdF0eS8pYOQFx95tUFeyMQCPy1MSnDjLTe6Y0AmKp+GQR6gzcjrz
+OC487AF2Cb3MrkGjdwGvhSxhYwKBgQC5Nn5xmJVpx7mKCkVu1c2sKJMraJzf1OA9
+Si2ge2rmLG2V+IbjmHBLj72bt5KrHE8EYJZVmbJyjUIxvcPLLep3x7BFb7ZtTwF+
+RWfpFAKlx7Ih/G72AlVy6Fls1dCXXjo6CTXbFmZhV4nKI7BooMZuu3J8cRsUujxZ
+liuuEZ/PBQKBgQCIVUuXCQLzwfXkNzB+cdCyuz/Rz1MnFY6xYNnKtsMkXuia7Q9p
+mDZILC64OGBBDOgfqiqXkxNkCQ5wdBs6QXzjzSr3WDWtmm5GADYsF3p2/c4Avqrd
+gCuJ3Gjd7+3WKrVc1gniWJl3HHbPC53mM1WlkLZC4DssvIOVczyO8RSOYwKBgFXA
+dESV97+VGENgRAtv9BzcYF89vTwo7HWUDZH68mCFe2tvOMzRfFSPxaL+GGse3TrS
+mWgilCtTWa18BdXheWhhzSwo79amOLPE4LpaaGtnDQONQ7alF/juuNCaIkyi9OR/
+9S5trZMuG366jWez4IvOP9B78aTkISL9U1XxlQMdAoGBALflKKVRmzPEewG3hLHV
+O4sPiJNUOGY7h9TIzQZ1BnlidAGvPbCenXqS0QOybkqksaQ2iMU+1cTGXxtEdExQ
++PPo/fJ6lp4hUbHPEHYiFxGbrV8bI5rNxjuv5pmEjydLq3VQBYYa0lJ6GI7X+DS1
+vv15csGBjqhV03TnYpH0ew+W
+-----END PRIVATE KEY-----
diff --git a/testsuite/dhfile_SUITE.erl b/testsuite/dhfile_SUITE.erl
index a1a21a823..85ad99a72 100644
--- a/testsuite/dhfile_SUITE.erl
+++ b/testsuite/dhfile_SUITE.erl
@@ -15,15 +15,50 @@ groups() ->
[
].
+%% Skip dhfile tests on broken OTP-26 releases.
+%% Guessing that OTP-26.2.2+ will be fixed.
+-define(OTP26_FIXED_DHFILE, <<"26.2.2">>).
+
+-ifdef(OTP_RELEASE).
+ -if(?OTP_RELEASE == 26).
+otp26_broken_dhfile() ->
+ case otp_release_version("26") of
+ {ok, OtpVsn}
+ when OtpVsn =< ?OTP26_FIXED_DHFILE ->
+ true;
+ _ ->
+ false
+ end.
+ -else.
+otp26_broken_dhfile() ->
+ false.
+ -endif.
+-endif.
+
+otp_release_version(Rel) ->
+ try
+ {ok, _OtpVsn} =
+ file:read_file(filename:join([code:root_dir(), "releases", Rel,
+ "OTP_VERSION"]))
+ catch
+ error:{badmatch, _} ->
+ file:read_file(filename:join([code:root_dir(), "OTP_VERSION"]))
+ end.
+
%%====================================================================
init_per_suite(Config) ->
- Id = "testsuite-server",
- YConf = filename:join(?tempdir(?MODULE), "yaws.conf"),
- application:load(yaws),
- application:set_env(yaws, id, Id),
- application:set_env(yaws, conf, YConf),
- ok = yaws:start(),
- [{yaws_id, Id}, {yaws_config, YConf} | Config].
+ case otp26_broken_dhfile() of
+ true ->
+ {skip, otp26_broken_dhfile};
+ false ->
+ Id = "testsuite-server",
+ YConf = filename:join(?tempdir(?MODULE), "yaws.conf"),
+ application:load(yaws),
+ application:set_env(yaws, id, Id),
+ application:set_env(yaws, conf, YConf),
+ ok = yaws:start(),
+ [{yaws_id, Id}, {yaws_config, YConf} | Config]
+ end.
end_per_suite(_Config) ->
ok = application:stop(yaws),
diff --git a/testsuite/ssl_sni_SUITE.erl b/testsuite/ssl_sni_SUITE.erl
index f47c8471f..8d48f1318 100644
--- a/testsuite/ssl_sni_SUITE.erl
+++ b/testsuite/ssl_sni_SUITE.erl
@@ -12,8 +12,7 @@ all() ->
sni_strict,
sni_required_on_vhost,
sni_not_enabled,
- sni_without_tls,
- sni_not_available
+ sni_without_tls
].
groups() ->
@@ -62,8 +61,6 @@ init_per_testcase(sni_required_on_vhost, Config) ->
restart_yaws("yaws_sni_required_on_vhost.conf", Config);
init_per_testcase(sni_without_tls, Config) ->
Config;
-init_per_testcase(sni_not_available, _Config) ->
- {skip, "sni supported on this Erlang/OTP release"};
init_per_testcase(_Test, Config) ->
Config.
@@ -190,11 +187,6 @@ sni_without_tls(_Config) ->
?assertMatch({error, _}, yaws_config:load(Env)),
ok.
-sni_not_available(_Config) ->
- Env = #env{debug=false, conf={file, ?tempdir(?MODULE) ++ "/yaws_sni_not_available.conf"}},
- ?assertMatch({error, _}, yaws_config:load(Env)),
- ok.
-
%%====================================================================
restart_yaws(File, Config)->
YConf = filename:join(?tempdir(?MODULE), File),
diff --git a/testsuite/ssl_sni_SUITE_data/templates/yaws_sni_not_available.conf b/testsuite/ssl_sni_SUITE_data/templates/yaws_sni_not_available.conf
deleted file mode 100644
index 613c4b744..000000000
--- a/testsuite/ssl_sni_SUITE_data/templates/yaws_sni_not_available.conf
+++ /dev/null
@@ -1,46 +0,0 @@
-logdir = $logdir$
-
-trace = false
-copy_error_log = true
-log_wrap_size = 1000000
-log_resolve_hostname = false
-fail_on_bind_err = true
-pick_first_virthost_on_nomatch = true
-keepalive_timeout = 10000
-
-sni = enable
-
-
- listen = 127.0.0.1
- port = $yaws_port1$
- docroot = $data_srcdir$/www
-
- keyfile = $top_srcdir$/ssl/yaws-key.pem
- certfile = $top_srcdir$/ssl/yaws-cert.pem
- depth = 0
-
-
-
-
- listen = 127.0.0.1
- port = $yaws_port1$
- docroot = $data_srcdir$/www
- serveralias = bob.sni.example.com
-
- keyfile = $top_srcdir$/ssl/mkcert_altname/alice.sni.example.com-key.pem
- certfile = $top_srcdir$/ssl/mkcert_altname/alice.sni.example.com-cert.pem
- depth = 0
-
-
-
-
- listen = 127.0.0.1
- port = $yaws_port1$
- docroot = $data_srcdir$/www
- serveralias = sni.example.com *.sni.example.com
-
- keyfile = $top_srcdir$/ssl/mkcert_altname/yaws.sni.example.com-key.pem
- certfile = $top_srcdir$/ssl/mkcert_altname/yaws.sni.example.com-cert.pem
- depth = 0
-
-
diff --git a/testsuite/websockets_SUITE.erl b/testsuite/websockets_SUITE.erl
index 26d7133ca..5871c6ba9 100644
--- a/testsuite/websockets_SUITE.erl
+++ b/testsuite/websockets_SUITE.erl
@@ -1564,7 +1564,9 @@ open(Host, Port) ->
gen_tcp:connect(Host, Port, Opts).
sslopen(Host, Port) ->
- Opts = [{send_timeout, 2000}, binary, {packet, raw}, {active, false}],
+ Opts = [{send_timeout, 2000}, binary, {packet, raw}, {active, false},
+ %% TODO update test to use default verify option (verify_peer)
+ {verify, verify_none}],
case ssl:connect(Host, Port, Opts) of
{ok, Sock} -> {ok, {ssl, Sock}};
{error, Reason} -> {error, Reason}