65
65
#include "../internal.h"
66
66
#include "internal.h"
67
67
68
- X509_LOOKUP * X509_LOOKUP_new (X509_LOOKUP_METHOD * method ) {
69
- X509_LOOKUP * ret ;
70
68
71
- ret = (X509_LOOKUP * )OPENSSL_zalloc (sizeof (X509_LOOKUP ));
69
+ static int X509_OBJECT_idx_by_subject (STACK_OF (X509_OBJECT ) * h , int type ,
70
+ X509_NAME * name );
71
+ static X509_OBJECT * X509_OBJECT_retrieve_by_subject (
72
+ STACK_OF (X509_OBJECT ) * h , int type , X509_NAME * name );
73
+ static X509_OBJECT * X509_OBJECT_retrieve_match (STACK_OF (X509_OBJECT ) * h ,
74
+ X509_OBJECT * x );
75
+ static int X509_OBJECT_up_ref_count (X509_OBJECT * a );
76
+
77
+ static X509_LOOKUP * X509_LOOKUP_new (X509_LOOKUP_METHOD * method );
78
+ static int X509_LOOKUP_by_subject (X509_LOOKUP * ctx , int type , X509_NAME * name ,
79
+ X509_OBJECT * ret );
80
+ static int X509_LOOKUP_shutdown (X509_LOOKUP * ctx );
81
+
82
+ static X509_LOOKUP * X509_LOOKUP_new (X509_LOOKUP_METHOD * method ) {
83
+ X509_LOOKUP * ret = OPENSSL_zalloc (sizeof (X509_LOOKUP ));
72
84
if (ret == NULL ) {
73
85
return NULL ;
74
86
}
@@ -91,18 +103,7 @@ void X509_LOOKUP_free(X509_LOOKUP *ctx) {
91
103
OPENSSL_free (ctx );
92
104
}
93
105
94
- int X509_LOOKUP_init (X509_LOOKUP * ctx ) {
95
- if (ctx -> method == NULL ) {
96
- return 0 ;
97
- }
98
- if (ctx -> method -> init != NULL ) {
99
- return ctx -> method -> init (ctx );
100
- } else {
101
- return 1 ;
102
- }
103
- }
104
-
105
- int X509_LOOKUP_shutdown (X509_LOOKUP * ctx ) {
106
+ static int X509_LOOKUP_shutdown (X509_LOOKUP * ctx ) {
106
107
if (ctx -> method == NULL ) {
107
108
return 0 ;
108
109
}
@@ -125,14 +126,18 @@ int X509_LOOKUP_ctrl(X509_LOOKUP *ctx, int cmd, const char *argc, long argl,
125
126
}
126
127
}
127
128
128
- int X509_LOOKUP_by_subject (X509_LOOKUP * ctx , int type , X509_NAME * name ,
129
- X509_OBJECT * ret ) {
129
+ static int X509_LOOKUP_by_subject (X509_LOOKUP * ctx , int type , X509_NAME * name ,
130
+ X509_OBJECT * ret ) {
130
131
if ((ctx -> method == NULL ) || (ctx -> method -> get_by_subject == NULL )) {
131
132
return 0 ;
132
133
}
133
134
if (ctx -> skip ) {
134
135
return 0 ;
135
136
}
137
+ // Note |get_by_subject| leaves |ret| in an inconsistent state. It has
138
+ // pointers to an |X509| or |X509_CRL|, but has not bumped the refcount yet.
139
+ // For now, the caller is expected to fix this, but ideally we'd fix the
140
+ // |X509_LOOKUP| convention itself.
136
141
return ctx -> method -> get_by_subject (ctx , type , name , ret ) > 0 ;
137
142
}
138
143
@@ -217,21 +222,6 @@ int X509_STORE_up_ref(X509_STORE *store) {
217
222
return 1 ;
218
223
}
219
224
220
- static void cleanup (X509_OBJECT * a ) {
221
- if (a == NULL ) {
222
- return ;
223
- }
224
- if (a -> type == X509_LU_X509 ) {
225
- X509_free (a -> data .x509 );
226
- } else if (a -> type == X509_LU_CRL ) {
227
- X509_CRL_free (a -> data .crl );
228
- } else {
229
- // abort();
230
- }
231
-
232
- OPENSSL_free (a );
233
- }
234
-
235
225
void X509_STORE_free (X509_STORE * vfy ) {
236
226
size_t j ;
237
227
STACK_OF (X509_LOOKUP ) * sk ;
@@ -254,7 +244,7 @@ void X509_STORE_free(X509_STORE *vfy) {
254
244
X509_LOOKUP_free (lu );
255
245
}
256
246
sk_X509_LOOKUP_free (sk );
257
- sk_X509_OBJECT_pop_free (vfy -> objs , cleanup );
247
+ sk_X509_OBJECT_pop_free (vfy -> objs , X509_OBJECT_free );
258
248
259
249
if (vfy -> param ) {
260
250
X509_VERIFY_PARAM_free (vfy -> param );
@@ -328,7 +318,7 @@ static int x509_store_add(X509_STORE *ctx, void *x, int is_crl) {
328
318
return 0 ;
329
319
}
330
320
331
- X509_OBJECT * const obj = ( X509_OBJECT * ) OPENSSL_malloc ( sizeof ( X509_OBJECT ) );
321
+ X509_OBJECT * const obj = X509_OBJECT_new ( );
332
322
if (obj == NULL ) {
333
323
return 0 ;
334
324
}
@@ -354,8 +344,7 @@ static int x509_store_add(X509_STORE *ctx, void *x, int is_crl) {
354
344
CRYPTO_MUTEX_unlock_write (& ctx -> objs_lock );
355
345
356
346
if (!added ) {
357
- X509_OBJECT_free_contents (obj );
358
- OPENSSL_free (obj );
347
+ X509_OBJECT_free (obj );
359
348
}
360
349
361
350
return ret ;
@@ -370,14 +359,18 @@ int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x) {
370
359
}
371
360
372
361
X509_OBJECT * X509_OBJECT_new (void ) {
373
- X509_OBJECT * ret = OPENSSL_zalloc (sizeof (X509_OBJECT ));
374
- if (ret == NULL ) {
375
- return NULL ;
362
+ return OPENSSL_zalloc (sizeof (X509_OBJECT ));
363
+ }
364
+
365
+ void X509_OBJECT_free (X509_OBJECT * obj ) {
366
+ if (obj == NULL ) {
367
+ return ;
376
368
}
377
- return ret ;
369
+ X509_OBJECT_free_contents (obj );
370
+ OPENSSL_free (obj );
378
371
}
379
372
380
- int X509_OBJECT_up_ref_count (X509_OBJECT * a ) {
373
+ static int X509_OBJECT_up_ref_count (X509_OBJECT * a ) {
381
374
switch (a -> type ) {
382
375
case X509_LU_X509 :
383
376
X509_up_ref (a -> data .x509 );
@@ -398,11 +391,8 @@ void X509_OBJECT_free_contents(X509_OBJECT *a) {
398
391
X509_CRL_free (a -> data .crl );
399
392
break ;
400
393
}
401
- }
402
394
403
- void X509_OBJECT_free (X509_OBJECT * a ) {
404
- X509_OBJECT_free_contents (a );
405
- OPENSSL_free (a );
395
+ OPENSSL_memset (a , 0 , sizeof (X509_OBJECT ));
406
396
}
407
397
408
398
int X509_OBJECT_get_type (const X509_OBJECT * a ) { return a -> type ; }
@@ -488,13 +478,13 @@ static int x509_object_idx_cnt(STACK_OF(X509_OBJECT) *h, int type,
488
478
return (int )idx ;
489
479
}
490
480
491
- int X509_OBJECT_idx_by_subject (STACK_OF (X509_OBJECT ) * h , int type ,
492
- X509_NAME * name ) {
481
+ static int X509_OBJECT_idx_by_subject (STACK_OF (X509_OBJECT ) * h , int type ,
482
+ X509_NAME * name ) {
493
483
return x509_object_idx_cnt (h , type , name , NULL );
494
484
}
495
485
496
- X509_OBJECT * X509_OBJECT_retrieve_by_subject (STACK_OF (X509_OBJECT ) * h , int type ,
497
- X509_NAME * name ) {
486
+ X509_OBJECT * X509_OBJECT_retrieve_by_subject (STACK_OF (X509_OBJECT ) * h ,
487
+ int type , X509_NAME * name ) {
498
488
int idx ;
499
489
idx = X509_OBJECT_idx_by_subject (h , type , name );
500
490
if (idx == -1 ) {
@@ -589,8 +579,8 @@ STACK_OF(X509_CRL) *X509_STORE_get1_crls(X509_STORE_CTX *ctx, X509_NAME *nm) {
589
579
return sk ;
590
580
}
591
581
592
- X509_OBJECT * X509_OBJECT_retrieve_match (STACK_OF (X509_OBJECT ) * h ,
593
- X509_OBJECT * x ) {
582
+ static X509_OBJECT * X509_OBJECT_retrieve_match (STACK_OF (X509_OBJECT ) * h ,
583
+ X509_OBJECT * x ) {
594
584
sk_X509_OBJECT_sort (h );
595
585
size_t idx ;
596
586
if (!sk_X509_OBJECT_find_awslc (h , & idx , x )) {
0 commit comments