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}