Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:25
erlang
0299-Expose-Error-in-public_key-cacerts_get-0-i...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0299-Expose-Error-in-public_key-cacerts_get-0-if-Bundle-i.patch of Package erlang
From 7693116468bfc85d607c6339add3a206b2186472 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonatan=20M=C3=A4nnchen?= <jonatan@maennchen.ch> Date: Thu, 25 May 2023 13:56:20 +0200 Subject: [PATCH] Expose Error in public_key:cacerts_get/0 if Bundle is not found (#7295) --- lib/public_key/src/pubkey_os_cacerts.erl | 46 ++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/lib/public_key/src/pubkey_os_cacerts.erl b/lib/public_key/src/pubkey_os_cacerts.erl index 93f0e48353..4d577fd63e 100644 --- a/lib/public_key/src/pubkey_os_cacerts.erl +++ b/lib/public_key/src/pubkey_os_cacerts.erl @@ -23,7 +23,7 @@ -module(pubkey_os_cacerts). -include("public_key.hrl"). --export([load/0, load/1, get/0, clear/0]). +-export([load/0, load/1, get/0, clear/0, format_error/2]). -on_load(on_load/0). -nifs([os_cacerts/0]). @@ -35,8 +35,16 @@ get() -> case persistent_term:get(?MODULE, not_loaded) of not_loaded -> - ok = load(), - persistent_term:get(?MODULE); + case load() of + ok -> + persistent_term:get(?MODULE); + {error, Reason} -> + erlang:error( + {failed_load_cacerts, conv_error_reason(Reason)}, + none, + [{error_info, #{cause => Reason, module => ?MODULE}}] + ) + end; CaCerts -> CaCerts end. @@ -216,3 +224,35 @@ load_nif() -> end; Error1 -> Error1 end. + +%%% +%%% Error Handling +%%% + +conv_error_reason(enoent) -> enoent; +conv_error_reason({enotsup, _OS}) -> enotsup; +conv_error_reason({eopnotsupp, _Reason}) -> eopnotsupp; +conv_error_reason({eopnotsupp, _Status, _Acc}) -> eopnotsupp. + +-spec format_error(Reason, StackTrace) -> ErrorMap when + Reason :: term(), + StackTrace :: erlang:stacktrace(), + ErrorMap :: #{pos_integer() => unicode:chardata(), + general => unicode:chardata(), + reason => unicode:chardata()}. + +format_error(Reason, [{_M, _F, _As, Info} | _]) -> + ErrorInfoMap = proplists:get_value(error_info, Info, #{}), + Cause = maps:get(cause, ErrorInfoMap, none), + Message = case Cause of + enoent -> + "operating system CA bundle could not be located"; + {enotsup, OS} -> + io_lib:format("operating system ~p is not supported", [OS]); + {eopnotsupp, SubReason} -> + io_lib:format("operation failed because of ~p", [SubReason]); + {eopnotsupp, Status, _Acc} -> + io_lib:format("operation failed with status ~B", [Status]) + end, + #{general => io_lib:format("Failed to load cacerts: ~s", [Message]), + reason => io_lib:format("~p: ~p", [?MODULE, Reason])}. -- 2.35.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor