Loading mod_ssl.h +7 −0 Changes for mod_ssl.h: 7 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -450,9 +450,16 @@ typedef struct { apr_bucket_brigade *b; /* decrypted input */ } SSLFilterRec; typedef enum { SSL_SHUTDOWN_TYPE_STANDARD, SSL_SHUTDOWN_TYPE_UNCLEAN, SSL_SHUTDOWN_TYPE_ACCURATE } ssl_shutdown_type_e; typedef struct { SSL *ssl; const char *client_dn; ssl_shutdown_type_e shutdown_type; } SSLConnRec; typedef struct { Loading ssl_engine_kernel.c +16 −16 Changes for ssl_engine_kernel.c: 16 added lines, 16 removed lines. Original line number Diff line number Diff line Loading @@ -121,24 +121,27 @@ apr_status_t ssl_hook_CloseConnection(SSLFilterRec *filter) * exchange close notify messages, but allow the user * to force the type of handshake via SetEnvIf directive */ if (apr_table_get(conn->notes, "ssl::flag::unclean-shutdown") == PTRUE) { switch (sslconn->shutdown_type) { case SSL_SHUTDOWN_TYPE_STANDARD: /* send close notify, but don't wait for clients close notify (standard compliant and safe, so it's the DEFAULT!) */ SSL_set_shutdown(ssl, SSL_RECEIVED_SHUTDOWN); cpType = "standard"; break; case SSL_SHUTDOWN_TYPE_UNCLEAN: /* perform no close notify handshake at all (violates the SSL/TLS standard!) */ SSL_set_shutdown(ssl, SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); cpType = "unclean"; } else if (apr_table_get(conn->notes, "ssl::flag::accurate-shutdown") == PTRUE) { break; case SSL_SHUTDOWN_TYPE_ACCURATE: /* send close notify and wait for clients close notify (standard compliant, but usually causes connection hangs) */ SSL_set_shutdown(ssl, 0); cpType = "accurate"; break; } else { /* send close notify, but don't wait for clients close notify (standard compliant and safe, so it's the DEFAULT!) */ SSL_set_shutdown(ssl, SSL_RECEIVED_SHUTDOWN); cpType = "standard"; } SSL_smart_shutdown(ssl); /* and finally log the fact that we've closed the connection */ Loading Loading @@ -218,14 +221,11 @@ int ssl_hook_Translate(request_rec *r) * to allow the close connection handler to use them. */ if (apr_table_get(r->subprocess_env, "ssl-unclean-shutdown") != NULL) apr_table_setn(r->connection->notes, "ssl::flag::unclean-shutdown", PTRUE); else apr_table_setn(r->connection->notes, "ssl::flag::unclean-shutdown", PFALSE); if (apr_table_get(r->subprocess_env, "ssl-accurate-shutdown") != NULL) apr_table_setn(r->connection->notes, "ssl::flag::accurate-shutdown", PTRUE); sslconn->shutdown_type = SSL_SHUTDOWN_TYPE_UNCLEAN; else if (apr_table_get(r->subprocess_env, "ssl-accurate-shutdown") != NULL) sslconn->shutdown_type = SSL_SHUTDOWN_TYPE_ACCURATE; else apr_table_setn(r->connection->notes, "ssl::flag::accurate-shutdown", PFALSE); sslconn->shutdown_type = SSL_SHUTDOWN_TYPE_STANDARD; return DECLINED; } Loading Loading
mod_ssl.h +7 −0 Changes for mod_ssl.h: 7 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -450,9 +450,16 @@ typedef struct { apr_bucket_brigade *b; /* decrypted input */ } SSLFilterRec; typedef enum { SSL_SHUTDOWN_TYPE_STANDARD, SSL_SHUTDOWN_TYPE_UNCLEAN, SSL_SHUTDOWN_TYPE_ACCURATE } ssl_shutdown_type_e; typedef struct { SSL *ssl; const char *client_dn; ssl_shutdown_type_e shutdown_type; } SSLConnRec; typedef struct { Loading
ssl_engine_kernel.c +16 −16 Changes for ssl_engine_kernel.c: 16 added lines, 16 removed lines. Original line number Diff line number Diff line Loading @@ -121,24 +121,27 @@ apr_status_t ssl_hook_CloseConnection(SSLFilterRec *filter) * exchange close notify messages, but allow the user * to force the type of handshake via SetEnvIf directive */ if (apr_table_get(conn->notes, "ssl::flag::unclean-shutdown") == PTRUE) { switch (sslconn->shutdown_type) { case SSL_SHUTDOWN_TYPE_STANDARD: /* send close notify, but don't wait for clients close notify (standard compliant and safe, so it's the DEFAULT!) */ SSL_set_shutdown(ssl, SSL_RECEIVED_SHUTDOWN); cpType = "standard"; break; case SSL_SHUTDOWN_TYPE_UNCLEAN: /* perform no close notify handshake at all (violates the SSL/TLS standard!) */ SSL_set_shutdown(ssl, SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN); cpType = "unclean"; } else if (apr_table_get(conn->notes, "ssl::flag::accurate-shutdown") == PTRUE) { break; case SSL_SHUTDOWN_TYPE_ACCURATE: /* send close notify and wait for clients close notify (standard compliant, but usually causes connection hangs) */ SSL_set_shutdown(ssl, 0); cpType = "accurate"; break; } else { /* send close notify, but don't wait for clients close notify (standard compliant and safe, so it's the DEFAULT!) */ SSL_set_shutdown(ssl, SSL_RECEIVED_SHUTDOWN); cpType = "standard"; } SSL_smart_shutdown(ssl); /* and finally log the fact that we've closed the connection */ Loading Loading @@ -218,14 +221,11 @@ int ssl_hook_Translate(request_rec *r) * to allow the close connection handler to use them. */ if (apr_table_get(r->subprocess_env, "ssl-unclean-shutdown") != NULL) apr_table_setn(r->connection->notes, "ssl::flag::unclean-shutdown", PTRUE); else apr_table_setn(r->connection->notes, "ssl::flag::unclean-shutdown", PFALSE); if (apr_table_get(r->subprocess_env, "ssl-accurate-shutdown") != NULL) apr_table_setn(r->connection->notes, "ssl::flag::accurate-shutdown", PTRUE); sslconn->shutdown_type = SSL_SHUTDOWN_TYPE_UNCLEAN; else if (apr_table_get(r->subprocess_env, "ssl-accurate-shutdown") != NULL) sslconn->shutdown_type = SSL_SHUTDOWN_TYPE_ACCURATE; else apr_table_setn(r->connection->notes, "ssl::flag::accurate-shutdown", PFALSE); sslconn->shutdown_type = SSL_SHUTDOWN_TYPE_STANDARD; return DECLINED; } Loading