| 
				
			 | 
			
			
				
				@@ -130,20 +130,6 @@ const char * x509_name ( struct x509_certificate *cert ) { 
			 | 
		
		
	
		
			
			| 
				130
			 | 
			
				130
			 | 
			
			
				
				 	return buf; 
			 | 
		
		
	
		
			
			| 
				131
			 | 
			
				131
			 | 
			
			
				
				 } 
			 | 
		
		
	
		
			
			| 
				132
			 | 
			
				132
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				133
			 | 
			
				
			 | 
			
			
				
				-/** 
			 | 
		
		
	
		
			
			| 
				134
			 | 
			
				
			 | 
			
			
				
				- * Free X.509 certificate 
			 | 
		
		
	
		
			
			| 
				135
			 | 
			
				
			 | 
			
			
				
				- * 
			 | 
		
		
	
		
			
			| 
				136
			 | 
			
				
			 | 
			
			
				
				- * @v refcnt		Reference count 
			 | 
		
		
	
		
			
			| 
				137
			 | 
			
				
			 | 
			
			
				
				- */ 
			 | 
		
		
	
		
			
			| 
				138
			 | 
			
				
			 | 
			
			
				
				-static void x509_free ( struct refcnt *refcnt ) { 
			 | 
		
		
	
		
			
			| 
				139
			 | 
			
				
			 | 
			
			
				
				-	struct x509_certificate *cert = 
			 | 
		
		
	
		
			
			| 
				140
			 | 
			
				
			 | 
			
			
				
				-		container_of ( refcnt, struct x509_certificate, refcnt ); 
			 | 
		
		
	
		
			
			| 
				141
			 | 
			
				
			 | 
			
			
				
				- 
			 | 
		
		
	
		
			
			| 
				142
			 | 
			
				
			 | 
			
			
				
				-	DBGC2 ( cert, "X509 %p freed\n", cert ); 
			 | 
		
		
	
		
			
			| 
				143
			 | 
			
				
			 | 
			
			
				
				-	free ( cert->extensions.auth_info.ocsp.uri ); 
			 | 
		
		
	
		
			
			| 
				144
			 | 
			
				
			 | 
			
			
				
				-	free ( cert ); 
			 | 
		
		
	
		
			
			| 
				145
			 | 
			
				
			 | 
			
			
				
				-} 
			 | 
		
		
	
		
			
			| 
				146
			 | 
			
				
			 | 
			
			
				
				- 
			 | 
		
		
	
		
			
			| 
				147
			 | 
			
				133
			 | 
			
			
				
				 /** 
			 | 
		
		
	
		
			
			| 
				148
			 | 
			
				134
			 | 
			
			
				
				  * Discard a cached certificate 
			 | 
		
		
	
		
			
			| 
				149
			 | 
			
				135
			 | 
			
			
				
				  * 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -626,24 +612,19 @@ static int x509_parse_extended_key_usage ( struct x509_certificate *cert, 
			 | 
		
		
	
		
			
			| 
				626
			 | 
			
				612
			 | 
			
			
				
				 static int x509_parse_ocsp ( struct x509_certificate *cert, 
			 | 
		
		
	
		
			
			| 
				627
			 | 
			
				613
			 | 
			
			
				
				 			     const struct asn1_cursor *raw ) { 
			 | 
		
		
	
		
			
			| 
				628
			 | 
			
				614
			 | 
			
			
				
				 	struct x509_ocsp_responder *ocsp = &cert->extensions.auth_info.ocsp; 
			 | 
		
		
	
		
			
			| 
				629
			 | 
			
				
			 | 
			
			
				
				-	struct asn1_cursor cursor; 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				615
			 | 
			
			
				
				+	struct asn1_cursor *uri = &ocsp->uri; 
			 | 
		
		
	
		
			
			| 
				630
			 | 
			
				616
			 | 
			
			
				
				 	int rc; 
			 | 
		
		
	
		
			
			| 
				631
			 | 
			
				617
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				632
			 | 
			
				618
			 | 
			
			
				
				 	/* Enter accessLocation */ 
			 | 
		
		
	
		
			
			| 
				633
			 | 
			
				
			 | 
			
			
				
				-	memcpy ( &cursor, raw, sizeof ( cursor ) ); 
			 | 
		
		
	
		
			
			| 
				634
			 | 
			
				
			 | 
			
			
				
				-	if ( ( rc = asn1_enter ( &cursor, ASN1_IMPLICIT_TAG ( 6 ) ) ) != 0 ) { 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				619
			 | 
			
			
				
				+	memcpy ( uri, raw, sizeof ( *uri ) ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				620
			 | 
			
			
				
				+	if ( ( rc = asn1_enter ( uri, ASN1_IMPLICIT_TAG ( 6 ) ) ) != 0 ) { 
			 | 
		
		
	
		
			
			| 
				635
			 | 
			
				621
			 | 
			
			
				
				 		DBGC ( cert, "X509 %p OCSP does not contain " 
			 | 
		
		
	
		
			
			| 
				636
			 | 
			
				622
			 | 
			
			
				
				 		       "uniformResourceIdentifier:\n", cert ); 
			 | 
		
		
	
		
			
			| 
				637
			 | 
			
				623
			 | 
			
			
				
				 		DBGC_HDA ( cert, 0, raw->data, raw->len ); 
			 | 
		
		
	
		
			
			| 
				638
			 | 
			
				624
			 | 
			
			
				
				 		return rc; 
			 | 
		
		
	
		
			
			| 
				639
			 | 
			
				625
			 | 
			
			
				
				 	} 
			 | 
		
		
	
		
			
			| 
				640
			 | 
			
				
			 | 
			
			
				
				- 
			 | 
		
		
	
		
			
			| 
				641
			 | 
			
				
			 | 
			
			
				
				-	/* Record URI */ 
			 | 
		
		
	
		
			
			| 
				642
			 | 
			
				
			 | 
			
			
				
				-	ocsp->uri = zalloc ( cursor.len + 1 /* NUL */ ); 
			 | 
		
		
	
		
			
			| 
				643
			 | 
			
				
			 | 
			
			
				
				-	if ( ! ocsp->uri ) 
			 | 
		
		
	
		
			
			| 
				644
			 | 
			
				
			 | 
			
			
				
				-		return -ENOMEM; 
			 | 
		
		
	
		
			
			| 
				645
			 | 
			
				
			 | 
			
			
				
				-	memcpy ( ocsp->uri, cursor.data, cursor.len ); 
			 | 
		
		
	
		
			
			| 
				646
			 | 
			
				
			 | 
			
			
				
				-	DBGC2 ( cert, "X509 %p OCSP URI is %s:\n", cert, ocsp->uri ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				626
			 | 
			
			
				
				+	DBGC2 ( cert, "X509 %p OCSP URI is:\n", cert ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				627
			 | 
			
			
				
				+	DBGC2_HDA ( cert, 0, uri->data, uri->len ); 
			 | 
		
		
	
		
			
			| 
				647
			 | 
			
				628
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				648
			 | 
			
				629
			 | 
			
			
				
				 	return 0; 
			 | 
		
		
	
		
			
			| 
				649
			 | 
			
				630
			 | 
			
			
				
				 } 
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -1073,7 +1054,7 @@ int x509_certificate ( const void *data, size_t len, 
			 | 
		
		
	
		
			
			| 
				1073
			 | 
			
				1054
			 | 
			
			
				
				 	*cert = zalloc ( sizeof ( **cert ) + cursor.len ); 
			 | 
		
		
	
		
			
			| 
				1074
			 | 
			
				1055
			 | 
			
			
				
				 	if ( ! *cert ) 
			 | 
		
		
	
		
			
			| 
				1075
			 | 
			
				1056
			 | 
			
			
				
				 		return -ENOMEM; 
			 | 
		
		
	
		
			
			| 
				1076
			 | 
			
				
			 | 
			
			
				
				-	ref_init ( &(*cert)->refcnt, x509_free ); 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				1057
			 | 
			
			
				
				+	ref_init ( &(*cert)->refcnt, NULL ); 
			 | 
		
		
	
		
			
			| 
				1077
			 | 
			
				1058
			 | 
			
			
				
				 	INIT_LIST_HEAD ( &(*cert)->list ); 
			 | 
		
		
	
		
			
			| 
				1078
			 | 
			
				1059
			 | 
			
			
				
				 	raw = ( *cert + 1 ); 
			 | 
		
		
	
		
			
			| 
				1079
			 | 
			
				1060
			 | 
			
			
				
				  
			 | 
		
		
	
	
		
			
			| 
				
			 | 
			
			
				
				@@ -1363,7 +1344,7 @@ int x509_validate ( struct x509_certificate *cert, 
			 | 
		
		
	
		
			
			| 
				1363
			 | 
			
				1344
			 | 
			
			
				
				 	} 
			 | 
		
		
	
		
			
			| 
				1364
			 | 
			
				1345
			 | 
			
			
				
				  
			 | 
		
		
	
		
			
			| 
				1365
			 | 
			
				1346
			 | 
			
			
				
				 	/* Fail if OCSP is required */ 
			 | 
		
		
	
		
			
			| 
				1366
			 | 
			
				
			 | 
			
			
				
				-	if ( cert->extensions.auth_info.ocsp.uri && 
			 | 
		
		
	
		
			
			| 
				
			 | 
			
				1347
			 | 
			
			
				
				+	if ( cert->extensions.auth_info.ocsp.uri.len && 
			 | 
		
		
	
		
			
			| 
				1367
			 | 
			
				1348
			 | 
			
			
				
				 	     ( ! cert->extensions.auth_info.ocsp.good ) ) { 
			 | 
		
		
	
		
			
			| 
				1368
			 | 
			
				1349
			 | 
			
			
				
				 		DBGC ( cert, "X509 %p \"%s\" requires an OCSP check\n", 
			 | 
		
		
	
		
			
			| 
				1369
			 | 
			
				1350
			 | 
			
			
				
				 		       cert, x509_name ( cert ) ); 
			 |