Custom extension revision.

Use the same structure for client and server custom extensions.

Add utility functions in new file t1_ext.c.
Use new utility functions to handle custom server and client extensions
and remove a lot of code duplication.
Reviewed-by: Emilia Käsper <emilia@openssl.org>
This commit is contained in:
Dr. Stephen Henson
2014-08-10 12:08:08 +01:00
parent 879bde123b
commit ecf4d66090
8 changed files with 284 additions and 212 deletions

View File

@@ -424,24 +424,10 @@ CERT *ssl_cert_dup(CERT *cert)
ret->sec_ex = cert->sec_ex;
#ifndef OPENSSL_NO_TLSEXT
if (cert->custom_cli_ext_records_count)
{
ret->custom_cli_ext_records = BUF_memdup(cert->custom_cli_ext_records, sizeof(custom_cli_ext_record) * cert->custom_cli_ext_records_count);
if (ret->custom_cli_ext_records == NULL)
goto err;
ret->custom_cli_ext_records_count =
cert->custom_cli_ext_records_count;
}
if (cert->custom_srv_ext_records_count)
{
ret->custom_srv_ext_records = BUF_memdup(cert->custom_srv_ext_records, sizeof(custom_srv_ext_record) * cert->custom_srv_ext_records_count);
if (ret->custom_srv_ext_records == NULL)
goto err;
ret->custom_srv_ext_records_count =
cert->custom_srv_ext_records_count;
}
if (!custom_exts_copy(&ret->cli_ext, &cert->cli_ext))
goto err;
if (!custom_exts_copy(&ret->srv_ext, &cert->srv_ext))
goto err;
#endif
return(ret);
@@ -463,10 +449,8 @@ err:
#endif
#ifndef OPENSSL_NO_TLSEXT
if (ret->custom_cli_ext_records)
OPENSSL_free(ret->custom_cli_ext_records);
if (ret->custom_srv_ext_records)
OPENSSL_free(ret->custom_srv_ext_records);
custom_exts_free(&ret->cli_ext);
custom_exts_free(&ret->srv_ext);
#endif
ssl_cert_clear_certs(ret);
@@ -560,10 +544,8 @@ void ssl_cert_free(CERT *c)
if (c->ciphers_raw)
OPENSSL_free(c->ciphers_raw);
#ifndef OPENSSL_NO_TLSEXT
if (c->custom_cli_ext_records)
OPENSSL_free(c->custom_cli_ext_records);
if (c->custom_srv_ext_records)
OPENSSL_free(c->custom_srv_ext_records);
custom_exts_free(&c->cli_ext);
custom_exts_free(&c->srv_ext);
#endif
OPENSSL_free(c);
}