diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2008-04-18 18:52:51 +0200 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2008-04-18 18:52:51 +0200 |
commit | d3b135ba9fd390caa7a0a942dae4faf979c4ece1 (patch) | |
tree | 7270b6baa404f5c063a4afb3e4c95b6bdc9db93d /runtime | |
parent | 2069ab114e2aac9c243aff72042912cac7ef6126 (diff) | |
download | rsyslog-d3b135ba9fd390caa7a0a942dae4faf979c4ece1.tar.gz rsyslog-d3b135ba9fd390caa7a0a942dae4faf979c4ece1.tar.bz2 rsyslog-d3b135ba9fd390caa7a0a942dae4faf979c4ece1.zip |
improved TLS session closure
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/nsd_gtls.c | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/runtime/nsd_gtls.c b/runtime/nsd_gtls.c index d1b44fc5..648b843e 100644 --- a/runtime/nsd_gtls.c +++ b/runtime/nsd_gtls.c @@ -103,6 +103,27 @@ gtlsGlblExit(void) } +/* end a GnuTLS session + * The function checks if we have a session and ends it only if so. So it can + * always be called, even if there currently is no session. + */ +static rsRetVal +gtlsEndSess(nsd_gtls_t *pThis) +{ + int gnuRet; + DEFiRet; + + if(pThis->bHaveSess) { + gnuRet = gnutls_bye(pThis->sess, GNUTLS_SHUT_RDWR); + while(gnuRet == GNUTLS_E_INTERRUPTED || gnuRet == GNUTLS_E_AGAIN) { + gnuRet = gnutls_bye(pThis->sess, GNUTLS_SHUT_RDWR); + } + gnutls_deinit(pThis->sess); + } + RETiRet; +} + + /* ---------------------------- end GnuTLS specifics ---------------------------- */ @@ -117,11 +138,7 @@ ENDobjConstruct(nsd_gtls) BEGINobjDestruct(nsd_gtls) /* be sure to specify the object type also in END and CODESTART macros! */ CODESTARTobjDestruct(nsd_gtls) if(pThis->iMode == 1) { - if(pThis->bHaveSess) { - // TODO: Check for EAGAIN et al - gnutls_bye(pThis->sess, GNUTLS_SHUT_RDWR); - gnutls_deinit(pThis->sess); - } + gtlsEndSess(pThis); } if(pThis->pTcp != NULL) |