X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=crypto%2Ftrace.c;h=ecfc6d4e3101e59a778098c6544207b23513504b;hb=792ea008af17238d2af91301241973dc4f4f544c;hp=533770c669f646070fe3cdeb54112cf83921c325;hpb=13d06925e8cb15bf4247f14280d535618e7a4b2b;p=oweals%2Fopenssl.git diff --git a/crypto/trace.c b/crypto/trace.c index 533770c669..ecfc6d4e31 100644 --- a/crypto/trace.c +++ b/crypto/trace.c @@ -119,12 +119,12 @@ struct trace_category_st { #define TRACE_CATEGORY_(name) { #name, OSSL_TRACE_CATEGORY_##name } static const struct trace_category_st trace_categories[] = { - TRACE_CATEGORY_(ANY), + TRACE_CATEGORY_(ALL), TRACE_CATEGORY_(TRACE), TRACE_CATEGORY_(INIT), TRACE_CATEGORY_(TLS), TRACE_CATEGORY_(TLS_CIPHER), - TRACE_CATEGORY_(ENGINE_CONF), + TRACE_CATEGORY_(CONF), TRACE_CATEGORY_(ENGINE_TABLE), TRACE_CATEGORY_(ENGINE_REF_COUNT), TRACE_CATEGORY_(PKCS5V2), @@ -218,7 +218,7 @@ static int trace_detach_cb(int category, int type, const void *data) return 1; } -static int set_trace_data(int category, BIO **channel, +static int set_trace_data(int category, int type, BIO **channel, const char **prefix, const char **suffix, int (*attach_cb)(int, int, const void *), int (*detach_cb)(int, int, const void *)) @@ -253,11 +253,13 @@ static int set_trace_data(int category, BIO **channel, if (channel != NULL && curr_channel != NULL) { BIO_free(curr_channel); + trace_channels[category].type = 0; trace_channels[category].bio = NULL; } /* Before running callbacks are done, set new data where appropriate */ if (channel != NULL && *channel != NULL) { + trace_channels[category].type = type; trace_channels[category].bio = *channel; } @@ -313,10 +315,11 @@ void ossl_trace_cleanup(void) /* We force the TRACE category to be treated last */ if (category == OSSL_TRACE_CATEGORY_TRACE) continue; - set_trace_data(category, &channel, &prefix, &suffix, + set_trace_data(category, 0, &channel, &prefix, &suffix, trace_attach_cb, trace_detach_cb); } - set_trace_data(OSSL_TRACE_CATEGORY_TRACE, &channel, &prefix, &suffix, + set_trace_data(OSSL_TRACE_CATEGORY_TRACE, 0, &channel, + &prefix, &suffix, trace_attach_cb, trace_detach_cb); CRYPTO_THREAD_lock_free(trace_lock); #endif @@ -325,14 +328,11 @@ void ossl_trace_cleanup(void) int OSSL_trace_set_channel(int category, BIO *channel) { #ifndef OPENSSL_NO_TRACE - if (category < 0 || category >= OSSL_TRACE_CATEGORY_NUM - || !set_trace_data(category, &channel, NULL, NULL, - trace_attach_cb, trace_detach_cb)) - return 0; - - trace_channels[category].type = SIMPLE_CHANNEL; + if (category >= 0 && category < OSSL_TRACE_CATEGORY_NUM) + return set_trace_data(category, SIMPLE_CHANNEL, &channel, NULL, NULL, + trace_attach_cb, trace_detach_cb); #endif - return 1; + return 0; } #ifndef OPENSSL_NO_TRACE @@ -366,7 +366,7 @@ int OSSL_trace_set_callback(int category, OSSL_trace_cb callback, void *data) struct trace_data_st *trace_data = NULL; if (category < 0 || category >= OSSL_TRACE_CATEGORY_NUM) - goto err; + return 0; if (callback != NULL) { if ((channel = BIO_new(&trace_method)) == NULL @@ -381,46 +381,38 @@ int OSSL_trace_set_callback(int category, OSSL_trace_cb callback, void *data) BIO_set_data(channel, trace_data); } - if (!set_trace_data(category, &channel, NULL, NULL, + if (!set_trace_data(category, CALLBACK_CHANNEL, &channel, NULL, NULL, trace_attach_w_callback_cb, trace_detach_cb)) goto err; - trace_channels[category].type = CALLBACK_CHANNEL; - goto done; + return 1; err: BIO_free(channel); OPENSSL_free(trace_data); - return 0; - done: #endif - return 1; + + return 0; } int OSSL_trace_set_prefix(int category, const char *prefix) { - int rv = 1; - #ifndef OPENSSL_NO_TRACE - if (category >= 0 || category < OSSL_TRACE_CATEGORY_NUM) - return set_trace_data(category, NULL, &prefix, NULL, + if (category >= 0 && category < OSSL_TRACE_CATEGORY_NUM) + return set_trace_data(category, 0, NULL, &prefix, NULL, trace_attach_cb, trace_detach_cb); - rv = 0; #endif - return rv; + return 0; } int OSSL_trace_set_suffix(int category, const char *suffix) { - int rv = 1; - #ifndef OPENSSL_NO_TRACE - if (category >= 0 || category < OSSL_TRACE_CATEGORY_NUM) - return set_trace_data(category, NULL, NULL, &suffix, + if (category >= 0 && category < OSSL_TRACE_CATEGORY_NUM) + return set_trace_data(category, 0, NULL, NULL, &suffix, trace_attach_cb, trace_detach_cb); - rv = 0; #endif - return rv; + return 0; } #ifndef OPENSSL_NO_TRACE @@ -430,7 +422,7 @@ static int ossl_trace_get_category(int category) return -1; if (trace_channels[category].bio != NULL) return category; - return OSSL_TRACE_CATEGORY_ANY; + return OSSL_TRACE_CATEGORY_ALL; } #endif @@ -439,7 +431,8 @@ int OSSL_trace_enabled(int category) int ret = 0; #ifndef OPENSSL_NO_TRACE category = ossl_trace_get_category(category); - ret = trace_channels[category].bio != NULL; + if (category >= 0) + ret = trace_channels[category].bio != NULL; #endif return ret; } @@ -451,6 +444,9 @@ BIO *OSSL_trace_begin(int category) char *prefix = NULL; category = ossl_trace_get_category(category); + if (category < 0) + return NULL; + channel = trace_channels[category].bio; prefix = trace_channels[category].prefix;