- Multi-domain certificates support wildcards as well
diff --git a/library/x509parse.c b/library/x509parse.c
index af98843..2852643 100644
--- a/library/x509parse.c
+++ b/library/x509parse.c
@@ -2971,12 +2971,12 @@
return flags;
}
-int x509_wildcard_verify( const char *cn, x509_name *name )
+int x509_wildcard_verify( const char *cn, x509_buf *name )
{
size_t i;
size_t cn_idx = 0;
- if( name->val.len < 3 || name->val.p[0] != '*' || name->val.p[1] != '.' )
+ if( name->len < 3 || name->p[0] != '*' || name->p[1] != '.' )
return( 0 );
for( i = 0; i < strlen( cn ); ++i )
@@ -2991,8 +2991,8 @@
if( cn_idx == 0 )
return( 0 );
- if( memcmp( name->val.p + 1, cn + cn_idx, name->val.len - 1 ) == 0 &&
- strlen( cn ) - cn_idx == name->val.len - 1 )
+ if( memcmp( name->p + 1, cn + cn_idx, name->len - 1 ) == 0 &&
+ strlen( cn ) - cn_idx == name->len - 1 )
{
return( 1 );
}
@@ -3037,7 +3037,7 @@
break;
if( memcmp( name->val.p, "*.", 2 ) == 0 &&
- x509_wildcard_verify( cn, name ) )
+ x509_wildcard_verify( cn, &name->val ) )
break;
}
@@ -3056,6 +3056,10 @@
cur->buf.len == cn_len )
break;
+ if( memcmp( cur->buf.p, "*.", 2 ) == 0 &&
+ x509_wildcard_verify( cn, &cur->buf ) )
+ break;
+
cur = cur->next;
}
}