From: Aki Tuomi Date: Mon, 26 Sep 2016 10:52:33 +0000 (+0300) Subject: lib-ssl-iostream: Add get_compression accessor X-Git-Tag: 2.3.0.rc1~682 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=48e243933060ae3e77abbdc9c0fd0bc2143be26e;p=thirdparty%2Fdovecot%2Fcore.git lib-ssl-iostream: Add get_compression accessor This is needed by login-common --- diff --git a/src/lib-ssl-iostream/iostream-openssl.c b/src/lib-ssl-iostream/iostream-openssl.c index 9cb216e4f7..19a8614578 100644 --- a/src/lib-ssl-iostream/iostream-openssl.c +++ b/src/lib-ssl-iostream/iostream-openssl.c @@ -710,6 +710,19 @@ static const char *openssl_iostream_get_server_name(struct ssl_iostream *ssl_io) return ssl_io->host; } +static const char * +openssl_iostream_get_compression(struct ssl_iostream *ssl_io) +{ +#if defined(HAVE_SSL_COMPRESSION) && !defined(OPENSSL_NO_COMP) + const COMP_METHOD *comp; + + comp = SSL_get_current_compression(ssl_io->ssl); + return comp == NULL ? NULL : SSL_COMP_get_name(comp); +#else + return NULL; +#endif +} + static const char * openssl_iostream_get_security_string(struct ssl_iostream *ssl_io) { @@ -764,6 +777,7 @@ static const struct iostream_ssl_vfuncs ssl_vfuncs = { openssl_iostream_cert_match_name, openssl_iostream_get_peer_name, openssl_iostream_get_server_name, + openssl_iostream_get_compression, openssl_iostream_get_security_string, openssl_iostream_get_last_error }; diff --git a/src/lib-ssl-iostream/iostream-ssl-private.h b/src/lib-ssl-iostream/iostream-ssl-private.h index 7a997175a0..2995381ac4 100644 --- a/src/lib-ssl-iostream/iostream-ssl-private.h +++ b/src/lib-ssl-iostream/iostream-ssl-private.h @@ -32,6 +32,7 @@ struct iostream_ssl_vfuncs { int (*cert_match_name)(struct ssl_iostream *ssl_io, const char *name); const char *(*get_peer_name)(struct ssl_iostream *ssl_io); const char *(*get_server_name)(struct ssl_iostream *ssl_io); + const char *(*get_compression)(struct ssl_iostream *ssl_io); const char *(*get_security_string)(struct ssl_iostream *ssl_io); const char *(*get_last_error)(struct ssl_iostream *ssl_io); }; diff --git a/src/lib-ssl-iostream/iostream-ssl.c b/src/lib-ssl-iostream/iostream-ssl.c index 2d8905c2b8..71f3c9945f 100644 --- a/src/lib-ssl-iostream/iostream-ssl.c +++ b/src/lib-ssl-iostream/iostream-ssl.c @@ -200,6 +200,11 @@ const char *ssl_iostream_get_server_name(struct ssl_iostream *ssl_io) return ssl_vfuncs->get_server_name(ssl_io); } +const char *ssl_iostream_get_compression(struct ssl_iostream *ssl_io) +{ + return ssl_vfuncs->get_compression(ssl_io); +} + const char *ssl_iostream_get_security_string(struct ssl_iostream *ssl_io) { return ssl_vfuncs->get_security_string(ssl_io); diff --git a/src/lib-ssl-iostream/iostream-ssl.h b/src/lib-ssl-iostream/iostream-ssl.h index 13260966bc..36a8c5caff 100644 --- a/src/lib-ssl-iostream/iostream-ssl.h +++ b/src/lib-ssl-iostream/iostream-ssl.h @@ -71,6 +71,7 @@ int ssl_iostream_check_cert_validity(struct ssl_iostream *ssl_io, const char *host, const char **error_r); int ssl_iostream_cert_match_name(struct ssl_iostream *ssl_io, const char *name); const char *ssl_iostream_get_peer_name(struct ssl_iostream *ssl_io); +const char *ssl_iostream_get_compression(struct ssl_iostream *ssl_io); const char *ssl_iostream_get_server_name(struct ssl_iostream *ssl_io); const char *ssl_iostream_get_security_string(struct ssl_iostream *ssl_io); const char *ssl_iostream_get_last_error(struct ssl_iostream *ssl_io);