summaryrefslogtreecommitdiffstats
path: root/ssl/ssl_cert.c
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2012-12-26 14:51:37 +0000
committerDr. Stephen Henson <steve@openssl.org>2012-12-26 14:51:37 +0000
commita897502cd9e4bf3d1fe7ccd0838643b3ca44031c (patch)
tree612a5020f946a2a019eec7a3df0d31d13cfe646c /ssl/ssl_cert.c
parent8546add6923d783b586ee94e1760f81ffae4e380 (diff)
Add new ctrl to retrieve client certificate types, print out
details in s_client. Also add ctrl to set client certificate types. If not used sensible values will be included based on supported signature algorithms: for example if we don't include any DSA signing algorithms the DSA certificate type is omitted. Fix restriction in old code where certificate types would be truncated if it exceeded TLS_CT_NUMBER. (backport from HEAD)
Diffstat (limited to 'ssl/ssl_cert.c')
-rw-r--r--ssl/ssl_cert.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/ssl/ssl_cert.c b/ssl/ssl_cert.c
index 1edbf18f3b..59a8544431 100644
--- a/ssl/ssl_cert.c
+++ b/ssl/ssl_cert.c
@@ -388,6 +388,15 @@ CERT *ssl_cert_dup(CERT *cert)
ret->client_sigalgs = NULL;
/* Shared sigalgs also NULL */
ret->shared_sigalgs = NULL;
+ /* Copy any custom client certificate types */
+ if (cert->ctypes)
+ {
+ ret->ctypes = OPENSSL_malloc(cert->ctype_num);
+ if (!ret->ctypes)
+ goto err;
+ memcpy(ret->ctypes, cert->ctypes, cert->ctype_num);
+ ret->ctype_num = cert->ctype_num;
+ }
ret->cert_flags = cert->cert_flags;
@@ -489,6 +498,8 @@ void ssl_cert_free(CERT *c)
OPENSSL_free(c->client_sigalgs);
if (c->shared_sigalgs)
OPENSSL_free(c->shared_sigalgs);
+ if (c->ctypes)
+ OPENSSL_free(c->ctypes);
OPENSSL_free(c);
}