mirror of
				https://github.com/cuberite/polarssl.git
				synced 2025-10-27 01:34:25 -04:00 
			
		
		
		
	verify_name(): factor duplicated code to function
This commit is contained in:
		
							parent
							
								
									1300e99eb1
								
							
						
					
					
						commit
						a468eb1764
					
				| @ -1752,7 +1752,7 @@ static int x509_memcasecmp( const void *s1, const void *s2, size_t len ) | |||||||
| /*
 | /*
 | ||||||
|  * Return 0 if name matches wildcard, -1 otherwise |  * Return 0 if name matches wildcard, -1 otherwise | ||||||
|  */ |  */ | ||||||
| static int x509_check_wildcard( const char *cn, mbedtls_x509_buf *name ) | static int x509_check_wildcard( const char *cn, const mbedtls_x509_buf *name ) | ||||||
| { | { | ||||||
|     size_t i; |     size_t i; | ||||||
|     size_t cn_idx = 0, cn_len = strlen( cn ); |     size_t cn_idx = 0, cn_len = strlen( cn ); | ||||||
| @ -2153,38 +2153,47 @@ callback: | |||||||
|     return( 0 ); |     return( 0 ); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /*
 | ||||||
|  |  * Check for CN match | ||||||
|  |  */ | ||||||
|  | static int x509_crt_check_cn( const mbedtls_x509_buf *name, | ||||||
|  |                               const char *cn, size_t cn_len ) | ||||||
|  | { | ||||||
|  |     /* try exact match */ | ||||||
|  |     if( name->len == cn_len && | ||||||
|  |         x509_memcasecmp( cn, name->p, cn_len ) == 0 ) | ||||||
|  |     { | ||||||
|  |         return( 0 ); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /* try wildcard match */ | ||||||
|  |     if( name->len > 2 && | ||||||
|  |         memcmp( name->p, "*.", 2 ) == 0 && | ||||||
|  |         x509_check_wildcard( cn, name ) == 0 ) | ||||||
|  |     { | ||||||
|  |         return( 0 ); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return( -1 ); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Verify the requested CN - only call this if cn is not NULL! |  * Verify the requested CN - only call this if cn is not NULL! | ||||||
|  */ |  */ | ||||||
| static void x509_crt_verify_name( mbedtls_x509_crt *crt, | static void x509_crt_verify_name( const mbedtls_x509_crt *crt, | ||||||
|                                   const char *cn, |                                   const char *cn, | ||||||
|                                   uint32_t *flags ) |                                   uint32_t *flags ) | ||||||
| { | { | ||||||
|     mbedtls_x509_name *name; |     const mbedtls_x509_name *name; | ||||||
|     mbedtls_x509_sequence *cur = NULL; |     const mbedtls_x509_sequence *cur; | ||||||
|     size_t cn_len; |     size_t cn_len = strlen( cn ); | ||||||
| 
 |  | ||||||
|     name = &crt->subject; |  | ||||||
|     cn_len = strlen( cn ); |  | ||||||
| 
 | 
 | ||||||
|     if( crt->ext_types & MBEDTLS_X509_EXT_SUBJECT_ALT_NAME ) |     if( crt->ext_types & MBEDTLS_X509_EXT_SUBJECT_ALT_NAME ) | ||||||
|     { |     { | ||||||
|         cur = &crt->subject_alt_names; |         for( cur = &crt->subject_alt_names; cur != NULL; cur = cur->next ) | ||||||
| 
 |  | ||||||
|         while( cur != NULL ) |  | ||||||
|         { |         { | ||||||
|             if( cur->buf.len == cn_len && |             if( x509_crt_check_cn( &cur->buf, cn, cn_len ) == 0 ) | ||||||
|                 x509_memcasecmp( cn, cur->buf.p, cn_len ) == 0 ) |  | ||||||
|                 break; |                 break; | ||||||
| 
 |  | ||||||
|             if( cur->buf.len > 2 && |  | ||||||
|                 memcmp( cur->buf.p, "*.", 2 ) == 0 && |  | ||||||
|                 x509_check_wildcard( cn, &cur->buf ) == 0 ) |  | ||||||
|             { |  | ||||||
|                 break; |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             cur = cur->next; |  | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if( cur == NULL ) |         if( cur == NULL ) | ||||||
| @ -2192,21 +2201,13 @@ static void x509_crt_verify_name( mbedtls_x509_crt *crt, | |||||||
|     } |     } | ||||||
|     else |     else | ||||||
|     { |     { | ||||||
|         while( name != NULL ) |         for( name = &crt->subject; name != NULL;  name = name->next ) | ||||||
|         { |         { | ||||||
|             if( MBEDTLS_OID_CMP( MBEDTLS_OID_AT_CN, &name->oid ) == 0 ) |             if( MBEDTLS_OID_CMP( MBEDTLS_OID_AT_CN, &name->oid ) == 0 && | ||||||
|  |                 x509_crt_check_cn( &name->val, cn, cn_len ) == 0 ) | ||||||
|             { |             { | ||||||
|                 if( name->val.len == cn_len && |                 break; | ||||||
|                     x509_memcasecmp( name->val.p, cn, cn_len ) == 0 ) |  | ||||||
|                     break; |  | ||||||
| 
 |  | ||||||
|                 if( name->val.len > 2 && |  | ||||||
|                     memcmp( name->val.p, "*.", 2 ) == 0 && |  | ||||||
|                     x509_check_wildcard( cn, &name->val ) == 0 ) |  | ||||||
|                     break; |  | ||||||
|             } |             } | ||||||
| 
 |  | ||||||
|             name = name->next; |  | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if( name == NULL ) |         if( name == NULL ) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Manuel Pégourié-Gonnard
						Manuel Pégourié-Gonnard