dovecot-2.2: lib-ssl-iostream: Added ssl_iostream_destroy() to d...

dovecot at dovecot.org dovecot at dovecot.org
Sat Jul 28 17:56:05 EEST 2012


details:   http://hg.dovecot.org/dovecot-2.2/rev/ff479f84022f
changeset: 14720:ff479f84022f
user:      Timo Sirainen <tss at iki.fi>
date:      Sat Jul 28 17:32:14 2012 +0300
description:
lib-ssl-iostream: Added ssl_iostream_destroy() to do a clean SSL shutdown.

diffstat:

 src/lib-ssl-iostream/iostream-openssl.c  |  13 +++++++++++++
 src/lib-ssl-iostream/iostream-ssl-none.c |   4 ++++
 src/lib-ssl-iostream/iostream-ssl.h      |   2 ++
 3 files changed, 19 insertions(+), 0 deletions(-)

diffs (49 lines):

diff -r eee77416e137 -r ff479f84022f src/lib-ssl-iostream/iostream-openssl.c
--- a/src/lib-ssl-iostream/iostream-openssl.c	Sat Jul 28 16:29:22 2012 +0300
+++ b/src/lib-ssl-iostream/iostream-openssl.c	Sat Jul 28 17:32:14 2012 +0300
@@ -252,6 +252,19 @@
 	ssl_iostream_free(ssl_io);
 }
 
+void ssl_iostream_destroy(struct ssl_iostream **_ssl_io)
+{
+	struct ssl_iostream *ssl_io = *_ssl_io;
+
+	*_ssl_io = NULL;
+
+	(void)SSL_shutdown(ssl_io->ssl);
+	(void)ssl_iostream_more(ssl_io);
+	(void)o_stream_flush(ssl_io->plain_output);
+
+	ssl_iostream_unref(&ssl_io);
+}
+
 static bool ssl_iostream_bio_output(struct ssl_iostream *ssl_io)
 {
 	size_t bytes, max_bytes;
diff -r eee77416e137 -r ff479f84022f src/lib-ssl-iostream/iostream-ssl-none.c
--- a/src/lib-ssl-iostream/iostream-ssl-none.c	Sat Jul 28 16:29:22 2012 +0300
+++ b/src/lib-ssl-iostream/iostream-ssl-none.c	Sat Jul 28 17:32:14 2012 +0300
@@ -18,6 +18,10 @@
 {
 }
 
+void ssl_iostream_destroy(struct ssl_iostream **ssl_io ATTR_UNUSED)
+{
+}
+
 int ssl_iostream_handshake(struct ssl_iostream *ssl_io ATTR_UNUSED)
 {
 	return -1;
diff -r eee77416e137 -r ff479f84022f src/lib-ssl-iostream/iostream-ssl.h
--- a/src/lib-ssl-iostream/iostream-ssl.h	Sat Jul 28 16:29:22 2012 +0300
+++ b/src/lib-ssl-iostream/iostream-ssl.h	Sat Jul 28 17:32:14 2012 +0300
@@ -24,6 +24,8 @@
 			 struct ssl_iostream **iostream_r);
 /* returned input and output streams must also be unreferenced */
 void ssl_iostream_unref(struct ssl_iostream **ssl_io);
+/* shutdown SSL connection and unreference ssl iostream */
+void ssl_iostream_destroy(struct ssl_iostream **ssl_io);
 
 int ssl_iostream_handshake(struct ssl_iostream *ssl_io);
 void ssl_iostream_set_handshake_callback(struct ssl_iostream *ssl_io,


More information about the dovecot-cvs mailing list