summaryrefslogtreecommitdiff
path: root/lib/kx.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/kx.c')
-rw-r--r--lib/kx.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/lib/kx.c b/lib/kx.c
index d69e1ef0c1..b016779e3f 100644
--- a/lib/kx.c
+++ b/lib/kx.c
@@ -136,19 +136,26 @@ _gnutls_nss_keylog_func(gnutls_session_t session,
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wanalyzer-file-leak"
+GNUTLS_ONCE(keylog_once);
+
+static void
+keylog_once_init(void)
+{
+ const char *keylogfile;
+
+ keylogfile = secure_getenv("SSLKEYLOGFILE");
+ if (keylogfile != NULL && *keylogfile != '\0') {
+ keylog = fopen(keylogfile, "ae");
+ _gnutls_debug_log("unable to open keylog file %s\n",
+ keylogfile);
+ }
+}
+
void _gnutls_nss_keylog_write(gnutls_session_t session,
const char *label,
const uint8_t *secret, size_t secret_size)
{
- static const char *keylogfile = NULL;
- static unsigned checked_env = 0;
-
- if (!checked_env) {
- checked_env = 1;
- keylogfile = secure_getenv("SSLKEYLOGFILE");
- if (keylogfile != NULL)
- keylog = fopen(keylogfile, "ae");
- }
+ (void)gnutls_once(&keylog_once, keylog_once_init);
if (keylog) {
char client_random_hex[2*GNUTLS_RANDOM_SIZE+1];