summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2009-12-08 13:42:08 +0000
committerDr. Stephen Henson <steve@openssl.org>2009-12-08 13:42:08 +0000
commit5430200b8b9528861ec9759623107f407ba8c38f (patch)
tree13554bb74de1bacd69b49781c9f78a7966f49e18
parent13f6d57b1ef964f2b9cbd8f68783884caef0e5cb (diff)
Add ctrl and macro so we can determine if peer support secure renegotiation.
-rw-r--r--CHANGES5
-rw-r--r--apps/s_client.c2
-rw-r--r--apps/s_server.c2
-rw-r--r--ssl/ssl.h4
-rw-r--r--ssl/ssl_lib.c4
5 files changed, 17 insertions, 0 deletions
diff --git a/CHANGES b/CHANGES
index 58f695dd85..d3596e6b05 100644
--- a/CHANGES
+++ b/CHANGES
@@ -863,6 +863,11 @@
Changes between 0.9.8l (?) and 0.9.8m (?) [xx XXX xxxx]
+ *) Add ctrl macro SSL_get_secure_renegotiation_support() which returns 1 if
+ peer supports secure renegotiation and 0 otherwise. Print out peer
+ renegotiation support in s_client/s_server.
+ [Steve Henson]
+
*) Replace the highly broken and deprecated SPKAC certification method with
the updated NID creation version. This should correctly handle UTF8.
[Steve Henson]
diff --git a/apps/s_client.c b/apps/s_client.c
index 2f647b852d..a52e728a16 100644
--- a/apps/s_client.c
+++ b/apps/s_client.c
@@ -1730,6 +1730,8 @@ static void print_stuff(BIO *bio, SSL *s, int full)
EVP_PKEY_bits(pktmp));
EVP_PKEY_free(pktmp);
}
+ BIO_printf(bio, "Secure Renegotiation IS%s supported\n",
+ SSL_get_secure_renegotiation_support(s) ? "" : " NOT");
#ifndef OPENSSL_NO_COMP
comp=SSL_get_current_compression(s);
expansion=SSL_get_current_expansion(s);
diff --git a/apps/s_server.c b/apps/s_server.c
index 6f67689519..9ec5600c75 100644
--- a/apps/s_server.c
+++ b/apps/s_server.c
@@ -2215,6 +2215,8 @@ static int init_ssl_connection(SSL *con)
con->kssl_ctx->client_princ);
}
#endif /* OPENSSL_NO_KRB5 */
+ BIO_printf(bio_s_out, "Secure Renegotiation IS%s supported\n",
+ SSL_get_secure_renegotiation_support(con) ? "" : " NOT");
return(1);
}
diff --git a/ssl/ssl.h b/ssl/ssl.h
index e3cb2a1a02..dc04b66a87 100644
--- a/ssl/ssl.h
+++ b/ssl/ssl.h
@@ -625,6 +625,8 @@ typedef struct ssl_session_st
#define SSL_set_mtu(ssl, mtu) \
SSL_ctrl((ssl),SSL_CTRL_SET_MTU,(mtu),NULL)
+#define SSL_get_secure_renegotiation_support(ssl) \
+ SSL_ctrl((ssl), SSL_CTRL_GET_RI_SUPPORT, 0, NULL)
void SSL_CTX_set_msg_callback(SSL_CTX *ctx, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg));
void SSL_set_msg_callback(SSL *ssl, void (*cb)(int write_p, int version, int content_type, const void *buf, size_t len, SSL *ssl, void *arg));
@@ -1374,6 +1376,8 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION)
#define SSL_CTRL_SET_MAX_SEND_FRAGMENT 52
+#define SSL_CTRL_GET_RI_SUPPORT 53
+
/* see tls1.h for macros based on these */
#ifndef OPENSSL_NO_TLSEXT
#define SSL_CTRL_SET_TLSEXT_SERVERNAME_CB 53
diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c
index 3583c4d0aa..39bd9d7cf0 100644
--- a/ssl/ssl_lib.c
+++ b/ssl/ssl_lib.c
@@ -1062,6 +1062,10 @@ long SSL_ctrl(SSL *s,int cmd,long larg,void *parg)
return 0;
s->max_send_fragment = larg;
return 1;
+ case SSL_CTRL_GET_RI_SUPPORT:
+ if (s->s3)
+ return s->s3->send_connection_binding;
+ else return 0;
default:
return(s->method->ssl_ctrl(s,cmd,larg,parg));
}