diff --git a/library/x509_crt.c b/library/x509_crt.c index 8541d1139..5d43a4487 100644 --- a/library/x509_crt.c +++ b/library/x509_crt.c @@ -517,6 +517,38 @@ static int x509_get_ext_key_usage( unsigned char **p, * * NOTE: we only parse and use dNSName at this point. */ +static int x509_get_subject_alt_name_cb( void *ctx, + int tag, + unsigned char *data, + size_t data_len ) +{ + mbedtls_asn1_sequence **cur_ptr = (mbedtls_asn1_sequence **) ctx; + mbedtls_asn1_sequence *cur = *cur_ptr; + + /* Skip everything but DNS name */ + if( tag != ( MBEDTLS_ASN1_CONTEXT_SPECIFIC | 2 ) ) + return( 0 ); + + /* Allocate and assign next pointer */ + if( cur->buf.p != NULL ) + { + cur->next = mbedtls_calloc( 1, sizeof( mbedtls_asn1_sequence ) ); + if( cur->next == NULL ) + { + return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_ALLOC_FAILED ); + } + cur = cur->next; + } + + cur->buf.tag = tag; + cur->buf.p = data; + cur->buf.len = data_len; + + *cur_ptr = cur; + return( 0 ); +} + static int x509_subject_alt_name_traverse( unsigned char *p, const unsigned char *end, int (*cb)( void *ctx,