summaryrefslogtreecommitdiffstats
path: root/ssl_openssl.c
diff options
context:
space:
mode:
authorAdriaan de Jong <dejong@fox-it.com>2011-06-28 10:08:08 +0200
committerDavid Sommerseth <davids@redhat.com>2011-10-21 10:53:32 +0200
commitdea110e0531c88c71f71bc91badbaa8f6fb37e72 (patch)
treec54b80df67e1e4f782a5778573788bdfe8938cf7 /ssl_openssl.c
parentbf707bd2b1f3af28afed84738e0f6a59db59bb74 (diff)
downloadopenvpn-dea110e0531c88c71f71bc91badbaa8f6fb37e72.tar.gz
openvpn-dea110e0531c88c71f71bc91badbaa8f6fb37e72.tar.xz
openvpn-dea110e0531c88c71f71bc91badbaa8f6fb37e72.zip
Refactored: Moved BIO debug functions to OpenSSL backend
Signed-off-by: Adriaan de Jong <dejong@fox-it.com> Acked-by: Gert Doering <gert@greenie.muc.de> Signed-off-by: David Sommerseth <davids@redhat.com>
Diffstat (limited to 'ssl_openssl.c')
-rw-r--r--ssl_openssl.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/ssl_openssl.c b/ssl_openssl.c
index 1c72b16..2d5e914 100644
--- a/ssl_openssl.c
+++ b/ssl_openssl.c
@@ -840,6 +840,69 @@ tls_ctx_load_ca (struct tls_root_ctx *ctx, const char *ca_file,
*
*/
+#ifdef BIO_DEBUG
+
+#warning BIO_DEBUG defined
+
+static FILE *biofp; /* GLOBAL */
+static bool biofp_toggle; /* GLOBAL */
+static time_t biofp_last_open; /* GLOBAL */
+static const int biofp_reopen_interval = 600; /* GLOBAL */
+
+static void
+close_biofp()
+{
+ if (biofp)
+ {
+ ASSERT (!fclose (biofp));
+ biofp = NULL;
+ }
+}
+
+static void
+open_biofp()
+{
+ const time_t current = time (NULL);
+ const pid_t pid = getpid ();
+
+ if (biofp_last_open + biofp_reopen_interval < current)
+ close_biofp();
+ if (!biofp)
+ {
+ char fn[256];
+ openvpn_snprintf(fn, sizeof(fn), "bio/%d-%d.log", pid, biofp_toggle);
+ biofp = fopen (fn, "w");
+ ASSERT (biofp);
+ biofp_last_open = time (NULL);
+ biofp_toggle ^= 1;
+ }
+}
+
+static void
+bio_debug_data (const char *mode, BIO *bio, const uint8_t *buf, int len, const char *desc)
+{
+ struct gc_arena gc = gc_new ();
+ if (len > 0)
+ {
+ open_biofp();
+ fprintf(biofp, "BIO_%s %s time=" time_format " bio=" ptr_format " len=%d data=%s\n",
+ mode, desc, time (NULL), (ptr_type)bio, len, format_hex (buf, len, 0, &gc));
+ fflush (biofp);
+ }
+ gc_free (&gc);
+}
+
+static void
+bio_debug_oc (const char *mode, BIO *bio)
+{
+ open_biofp();
+ fprintf(biofp, "BIO %s time=" time_format " bio=" ptr_format "\n",
+ mode, time (NULL), (ptr_type)bio);
+ fflush (biofp);
+}
+
+#endif
+
/*
* OpenVPN's interface to SSL/TLS authentication,
* encryption, and decryption is exclusively