@@ -587,6 +587,76 @@ static int wolfssl_dns_entry_othername_to_gn(DNS_entry* dns,
587587#endif /* OPENSSL_ALL || WOLFSSL_WPAS_SMALL */
588588
589589#if defined(OPENSSL_ALL ) || defined(OPENSSL_EXTRA )
590+ static int DNS_to_GENERAL_NAME (WOLFSSL_GENERAL_NAME * gn , DNS_entry * dns )
591+ {
592+ gn -> type = dns -> type ;
593+ switch (gn -> type ) {
594+ case WOLFSSL_GEN_OTHERNAME :
595+ if (!wolfssl_dns_entry_othername_to_gn (dns , gn )) {
596+ WOLFSSL_MSG ("OTHERNAME set failed" );
597+ return WOLFSSL_FAILURE ;
598+ }
599+ break ;
600+
601+ case WOLFSSL_GEN_EMAIL :
602+ case WOLFSSL_GEN_DNS :
603+ case WOLFSSL_GEN_URI :
604+ case WOLFSSL_GEN_IPADD :
605+ case WOLFSSL_GEN_IA5 :
606+ gn -> d .ia5 -> length = dns -> len ;
607+ if (wolfSSL_ASN1_STRING_set (gn -> d .ia5 , dns -> name ,
608+ gn -> d .ia5 -> length ) != WOLFSSL_SUCCESS ) {
609+ WOLFSSL_MSG ("ASN1_STRING_set failed" );
610+ return WOLFSSL_FAILURE ;
611+ }
612+ break ;
613+
614+
615+ case WOLFSSL_GEN_DIRNAME :
616+ /* wolfSSL_GENERAL_NAME_new() mallocs this by default */
617+ wolfSSL_ASN1_STRING_free (gn -> d .ia5 );
618+ gn -> d .ia5 = NULL ;
619+
620+ gn -> d .dirn = wolfSSL_X509_NAME_new ();;
621+ /* @TODO extract dir name info from DNS_entry */
622+ break ;
623+
624+ #ifdef WOLFSSL_RID_ALT_NAME
625+ case WOLFSSL_GEN_RID :
626+ /* wolfSSL_GENERAL_NAME_new() mallocs this by default */
627+ wolfSSL_ASN1_STRING_free (gn -> d .ia5 );
628+ gn -> d .ia5 = NULL ;
629+
630+ gn -> d .registeredID = wolfSSL_ASN1_OBJECT_new ();
631+ if (gn -> d .registeredID == NULL ) {
632+ return WOLFSSL_FAILURE ;
633+ }
634+ gn -> d .registeredID -> obj = (const unsigned char * )XMALLOC (dns -> len ,
635+ gn -> d .registeredID -> heap , DYNAMIC_TYPE_ASN1 );
636+ if (gn -> d .registeredID -> obj == NULL ) {
637+ /* registeredID gets free'd up by caller after failure */
638+ return WOLFSSL_FAILURE ;
639+ }
640+ gn -> d .registeredID -> dynamic |= WOLFSSL_ASN1_DYNAMIC_DATA ;
641+ XMEMCPY ((byte * )gn -> d .registeredID -> obj , dns -> ridString , dns -> len );
642+ gn -> d .registeredID -> objSz = dns -> len ;
643+ gn -> d .registeredID -> grp = oidCertExtType ;
644+ gn -> d .registeredID -> nid = WC_NID_registeredAddress ;
645+ break ;
646+ #endif
647+
648+ case WOLFSSL_GEN_X400 :
649+ /* Unsupported: fall through */
650+ case WOLFSSL_GEN_EDIPARTY :
651+ /* Unsupported: fall through */
652+ default :
653+ WOLFSSL_MSG ("Unsupported type conversion" );
654+ return WOLFSSL_FAILURE ;
655+ }
656+ return WOLFSSL_SUCCESS ;
657+ }
658+
659+
590660static int wolfssl_x509_alt_names_to_gn (WOLFSSL_X509 * x509 ,
591661 WOLFSSL_X509_EXTENSION * ext )
592662{
@@ -624,24 +694,10 @@ static int wolfssl_x509_alt_names_to_gn(WOLFSSL_X509* x509,
624694 goto err ;
625695 }
626696
627- gn -> type = dns -> type ;
628- if (gn -> type == WOLFSSL_GEN_OTHERNAME ) {
629- if (!wolfssl_dns_entry_othername_to_gn (dns , gn )) {
630- WOLFSSL_MSG ("OTHERNAME set failed" );
631- wolfSSL_GENERAL_NAME_free (gn );
632- wolfSSL_sk_pop_free (sk , NULL );
633- goto err ;
634- }
635- }
636- else {
637- gn -> d .ia5 -> length = dns -> len ;
638- if (wolfSSL_ASN1_STRING_set (gn -> d .ia5 , dns -> name ,
639- gn -> d .ia5 -> length ) != WOLFSSL_SUCCESS ) {
640- WOLFSSL_MSG ("ASN1_STRING_set failed" );
641- wolfSSL_GENERAL_NAME_free (gn );
642- wolfSSL_sk_pop_free (sk , NULL );
643- goto err ;
644- }
697+ if (DNS_to_GENERAL_NAME (gn , dns ) != WOLFSSL_SUCCESS ) {
698+ wolfSSL_GENERAL_NAME_free (gn );
699+ wolfSSL_sk_pop_free (sk , NULL );
700+ goto err ;
645701 }
646702
647703 if (wolfSSL_sk_GENERAL_NAME_push (sk , gn ) <= 0 ) {
0 commit comments