void X509_STORE_free(X509_STORE *vfy) { int i; STACK_OF(X509_LOOKUP) *sk; X509_LOOKUP *lu; if (vfy == NULL) return; i = CRYPTO_add(&vfy->references, -1, CRYPTO_LOCK_X509_STORE); REF_PRINT_COUNT("X509_STORE", vfy); if (i > 0) return; REF_ASSERT_ISNT(i < 0); sk = vfy->get_cert_methods; for (i = 0; i < sk_X509_LOOKUP_num(sk); i++) { lu = sk_X509_LOOKUP_value(sk, i); X509_LOOKUP_shutdown(lu); X509_LOOKUP_free(lu); } sk_X509_LOOKUP_free(sk); sk_X509_OBJECT_pop_free(vfy->objs, cleanup); CRYPTO_free_ex_data(CRYPTO_EX_INDEX_X509_STORE, vfy, &vfy->ex_data); X509_VERIFY_PARAM_free(vfy->param); OPENSSL_free(vfy); }
X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m) { int i; STACK_OF(X509_LOOKUP) *sk; X509_LOOKUP *lu; sk = v->get_cert_methods; for (i = 0; i < sk_X509_LOOKUP_num(sk); i++) { lu = sk_X509_LOOKUP_value(sk, i); if (m == lu->method) { return lu; } } /* a new one */ lu = X509_LOOKUP_new(m); if (lu == NULL) return NULL; else { lu->store_ctx = v; if (sk_X509_LOOKUP_push(v->get_cert_methods, lu)) return lu; else { X509_LOOKUP_free(lu); return NULL; } } }
int X509_STORE_get_by_subject(X509_STORE_CTX *vs, int type, X509_NAME *name, X509_OBJECT *ret) { X509_STORE *ctx = vs->ctx; X509_LOOKUP *lu; X509_OBJECT stmp, *tmp; int i; CRYPTO_MUTEX_lock_write(&ctx->objs_lock); tmp = X509_OBJECT_retrieve_by_subject(ctx->objs, type, name); CRYPTO_MUTEX_unlock_write(&ctx->objs_lock); if (tmp == NULL || type == X509_LU_CRL) { for (i = 0; i < (int)sk_X509_LOOKUP_num(ctx->get_cert_methods); i++) { lu = sk_X509_LOOKUP_value(ctx->get_cert_methods, i); if (X509_LOOKUP_by_subject(lu, type, name, &stmp)) { tmp = &stmp; break; } } if (tmp == NULL) return 0; } /* * if (ret->data.ptr != NULL) X509_OBJECT_free_contents(ret); */ ret->type = tmp->type; ret->data.ptr = tmp->data.ptr; X509_OBJECT_up_ref_count(ret); return 1; }
void X509_STORE_free(X509_STORE *vfy) { size_t j; STACK_OF(X509_LOOKUP) *sk; X509_LOOKUP *lu; if (vfy == NULL) return; if (!CRYPTO_refcount_dec_and_test_zero(&vfy->references)) { return; } CRYPTO_MUTEX_cleanup(&vfy->objs_lock); sk = vfy->get_cert_methods; for (j = 0; j < sk_X509_LOOKUP_num(sk); j++) { lu = sk_X509_LOOKUP_value(sk, j); X509_LOOKUP_shutdown(lu); X509_LOOKUP_free(lu); } sk_X509_LOOKUP_free(sk); sk_X509_OBJECT_pop_free(vfy->objs, cleanup); if (vfy->param) X509_VERIFY_PARAM_free(vfy->param); OPENSSL_free(vfy); }
void X509_STORE_free(X509_STORE *vfy) { int i; STACK_OF(X509_LOOKUP) *sk; X509_LOOKUP *lu; if (vfy == NULL) return; i = CRYPTO_add(&vfy->references, -1, CRYPTO_LOCK_X509_STORE); #ifdef REF_PRINT REF_PRINT("X509_STORE", vfy); #endif if (i > 0) return; #ifdef REF_CHECK if (i < 0) { fprintf(stderr, "X509_STORE_free, bad reference count\n"); abort(); /* ok */ } #endif sk = vfy->get_cert_methods; for (i = 0; i < sk_X509_LOOKUP_num(sk); i++) { lu = sk_X509_LOOKUP_value(sk, i); X509_LOOKUP_shutdown(lu); X509_LOOKUP_free(lu); } sk_X509_LOOKUP_free(sk); sk_X509_OBJECT_pop_free(vfy->objs, cleanup); CRYPTO_free_ex_data(CRYPTO_EX_INDEX_X509_STORE, vfy, &vfy->ex_data); X509_VERIFY_PARAM_free(vfy->param); OPENSSL_free(vfy); }
int X509_STORE_get_by_subject(X509_STORE_CTX *vs, int type, X509_NAME *name, X509_OBJECT *ret) { X509_STORE *ctx=vs->ctx; X509_LOOKUP *lu; X509_OBJECT stmp,*tmp; int i,j; CRYPTO_w_lock(CRYPTO_LOCK_X509_STORE); tmp=X509_OBJECT_retrieve_by_subject(ctx->objs,type,name); CRYPTO_w_unlock(CRYPTO_LOCK_X509_STORE); if (tmp == NULL || type == X509_LU_CRL) { for (i=vs->current_method; i<sk_X509_LOOKUP_num(ctx->get_cert_methods); i++) { lu=sk_X509_LOOKUP_value(ctx->get_cert_methods,i); j=X509_LOOKUP_by_subject(lu,type,name,&stmp); if (j < 0) { vs->current_method=j; return j; } else if (j) { tmp= &stmp; break; } } vs->current_method=0; if (tmp == NULL) return 0; } /* if (ret->data.ptr != NULL) X509_OBJECT_free_contents(ret); */ ret->type=tmp->type; ret->data.ptr=tmp->data.ptr; X509_OBJECT_up_ref_count(ret); return 1; }
void X509_STORE_free(X509_STORE *vfy) { int i; STACK_OF(X509_LOOKUP) *sk; X509_LOOKUP *lu; if (vfy == NULL) return; sk = vfy->get_cert_methods; for (i = 0; i < sk_X509_LOOKUP_num(sk); i++) { lu = sk_X509_LOOKUP_value(sk, i); X509_LOOKUP_shutdown(lu); X509_LOOKUP_free(lu); } sk_X509_LOOKUP_free(sk); sk_X509_OBJECT_pop_free(vfy->objs, cleanup); CRYPTO_free_ex_data(CRYPTO_EX_INDEX_X509_STORE, vfy, &vfy->ex_data); if (vfy->param) X509_VERIFY_PARAM_free(vfy->param); OPENSSL_free(vfy); }