diff options
author | Ingela Andin <[email protected]> | 2018-11-01 12:19:19 +0100 |
---|---|---|
committer | GitHub <[email protected]> | 2018-11-01 12:19:19 +0100 |
commit | 91776a3b24e89a343dfa5769747e72e95b194a29 (patch) | |
tree | 3633101ee66cb431df9ed98f37a7e9a7c714b413 | |
parent | f3fabd6be8706d6ac3d6a843e1b19bf791f3510b (diff) | |
parent | dabb85ceb5ef9d7bf3705bab854ecdbf0d6f538b (diff) | |
download | otp-91776a3b24e89a343dfa5769747e72e95b194a29.tar.gz otp-91776a3b24e89a343dfa5769747e72e95b194a29.tar.bz2 otp-91776a3b24e89a343dfa5769747e72e95b194a29.zip |
Merge pull request #1990 from max-au/ssl_pem_cache_timezone_fix
ssl: fix timezone-related bug in ssl_pem_cache
OTP-15402
-rw-r--r-- | lib/ssl/src/ssl_pem_cache.erl | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/lib/ssl/src/ssl_pem_cache.erl b/lib/ssl/src/ssl_pem_cache.erl index b7d23ef01e..41bca2f7b5 100644 --- a/lib/ssl/src/ssl_pem_cache.erl +++ b/lib/ssl/src/ssl_pem_cache.erl @@ -45,7 +45,7 @@ -record(state, { pem_cache, - last_pem_check :: erlang:timestamp(), + last_pem_check :: integer(), clear :: integer() }). @@ -134,8 +134,9 @@ init([Name]) -> PemCache = ssl_pkix_db:create_pem_cache(Name), Interval = pem_check_interval(), erlang:send_after(Interval, self(), clear_pem_cache), + erlang:system_time(second), {ok, #state{pem_cache = PemCache, - last_pem_check = os:timestamp(), + last_pem_check = erlang:convert_time_unit(os:system_time(), native, second), clear = Interval }}. @@ -183,7 +184,7 @@ handle_cast({invalidate_pem, File}, #state{pem_cache = Db} = State) -> handle_info(clear_pem_cache, #state{pem_cache = PemCache, clear = Interval, last_pem_check = CheckPoint} = State) -> - NewCheckPoint = os:timestamp(), + NewCheckPoint = erlang:convert_time_unit(os:system_time(), native, second), start_pem_cache_validator(PemCache, CheckPoint), erlang:send_after(Interval, self(), clear_pem_cache), {noreply, State#state{last_pem_check = NewCheckPoint}}; @@ -229,24 +230,14 @@ init_pem_cache_validator([CacheName, PemCache, CheckPoint]) -> CheckPoint, PemCache). pem_cache_validate({File, _}, CheckPoint) -> - case file:read_file_info(File, []) of - {ok, #file_info{mtime = Time}} -> - case is_before_checkpoint(Time, CheckPoint) of - true -> - ok; - false -> - invalidate_pem(File) - end; + case file:read_file_info(File, [{time, posix}]) of + {ok, #file_info{mtime = Time}} when Time < CheckPoint -> + ok; _ -> invalidate_pem(File) end, CheckPoint. -is_before_checkpoint(Time, CheckPoint) -> - calendar:datetime_to_gregorian_seconds( - calendar:now_to_datetime(CheckPoint)) - - calendar:datetime_to_gregorian_seconds(Time) > 0. - pem_check_interval() -> case application:get_env(ssl, ssl_pem_cache_clean) of {ok, Interval} when is_integer(Interval) -> |