25RCSID(
"$Id: 60d96dad33977b235317b34be77b282fe53899b6 $")
29#define LOG_PREFIX "tls"
31#include <freeradius-devel/util/debug.h>
32#include <freeradius-devel/util/strerror.h>
39static void _tls_cert_line_push(
char const *file,
int line,
int idx, X509 *cert)
43 X509_NAME_oneline(X509_get_subject_name(cert), subject,
sizeof(subject));
44 subject[
sizeof(subject) - 1] =
'\0';
49static void _tls_cert_line_marker_push(
char const *file,
int line,
50 int idx, X509 *cert,
bool marker)
54 X509_NAME_oneline(X509_get_subject_name(cert), subject,
sizeof(subject));
55 subject[
sizeof(subject) - 1] =
'\0';
61static void _tls_cert_line_marker_no_idx_push(
char const *file,
int line, X509 *cert)
65 X509_NAME_oneline(X509_get_subject_name(cert), subject,
sizeof(subject));
66 subject[
sizeof(subject) - 1] =
'\0';
78void _fr_tls_strerror_push_chain(
char const *file,
int line, STACK_OF(X509) *chain, X509 *cert)
82 for (i = sk_X509_num(chain); i > 0 ; i--) {
83 _tls_cert_line_push(file,
line, i, sk_X509_value(chain, i - 1));
85 if (cert) _tls_cert_line_push(file,
line, i, cert);
96void _fr_tls_strerror_push_chain_marker(
char const *file,
int line,
97 STACK_OF(X509) *chain, X509 *cert, X509 *marker)
101 for (i = sk_X509_num(chain); i > 0 ; i--) {
102 X509 *selected = sk_X509_value(chain, i - 1);
103 _tls_cert_line_marker_push(file,
line, i, selected, (selected == marker));
105 if (cert) _tls_cert_line_marker_push(file,
line, i, cert, (cert == marker));
114void _fr_tls_strerror_push_x509_objects(
char const *file,
int line, STACK_OF(X509_OBJECT) *objects)
118 for (i = sk_X509_OBJECT_num(objects); i > 0 ; i--) {
119 X509_OBJECT *obj = sk_X509_OBJECT_value(objects, i - 1);
121 switch (X509_OBJECT_get_type(obj)) {
126 _tls_cert_line_marker_no_idx_push(file,
line, X509_OBJECT_get0_X509(obj));
150int _fr_tls_strerror_vprintf(
char const *file,
int line,
char const *
msg, va_list ap)
158 char const *openssl_file;
168 error = ERR_get_error_all(&openssl_file, &openssl_line, &func, &
data, &flags);
169 if (!(flags & ERR_TXT_STRING))
data = NULL;
177 p = talloc_vasprintf(NULL,
msg, ap);
202 while ((error = ERR_get_error_all(&openssl_file, &openssl_line, &func, &
data, &flags))) {
203 if (!(flags & ERR_TXT_STRING))
data = NULL;
221int fr_tls_strerror_drain(
void)
226 char const *openssl_file;
239 error = ERR_get_error_all(&openssl_file, &openssl_line, &func, &
data, &flags);
240 if (!error)
return 0;
241 if (!(flags & ERR_TXT_STRING))
data = NULL;
247 while ((error = ERR_get_error_all(&openssl_file, &openssl_line, &func, &
data, &flags))) {
248 if (!(flags & ERR_TXT_STRING))
continue;
static int const char char buffer[256]
#define USES_APPLE_DEPRECATED_API
#define DIAG_OFF_OPTIONAL(_x)
void _fr_strerror_vprintf(char const *file, int line, char const *fmt, va_list ap)
Log to thread local error buffer.
static void _fr_strerror_printf(char const *file, int line, char const *fmt,...)
static void _fr_strerror_printf_push(char const *file, int line, char const *fmt,...)
char const * fr_tls_utils_x509_pkey_type(X509 *cert)
Returns a friendly identifier for the public key type of a certificate.