NOEXPORT int cert_check_local(X509_STORE_CTX *callback_ctx) { X509 *cert=X509_STORE_CTX_get_current_cert(callback_ctx); X509_OBJECT obj; #if OPENSSL_VERSION_NUMBER>=0x10000000L STACK_OF(X509) *sk; int i; sk=X509_STORE_get1_certs(callback_ctx, X509_get_subject_name(cert)); if(sk) { for(i=0; i<sk_X509_num(sk); i++) if(compare_pubkeys(cert, sk_X509_value(sk, i))) { sk_X509_pop_free(sk, X509_free); return 1; /* accept */ } sk_X509_pop_free(sk, X509_free); } #endif /* pre-1.0.0 API only returns a single matching certificate */ if(X509_STORE_get_by_subject(callback_ctx, X509_LU_X509, X509_get_subject_name(cert), &obj)==1 && compare_pubkeys(cert, obj.data.x509)) return 1; /* accept */ s_log(LOG_WARNING, "CERT: Certificate not found in local repository"); X509_STORE_CTX_set_error(callback_ctx, X509_V_ERR_CERT_REJECTED); return 0; /* reject */ }
static void seahorse_gpgme_uid_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { SeahorseGpgmeUid *self = SEAHORSE_GPGME_UID (object); gpgme_key_t pubkey; switch (prop_id) { case PROP_PUBKEY: pubkey = g_value_get_boxed (value); g_return_if_fail (pubkey); if (pubkey != self->pv->pubkey) { if (self->pv->pubkey) { /* Should always be set to the same actual key */ g_return_if_fail (compare_pubkeys (pubkey, self->pv->pubkey)); gpgme_key_unref (self->pv->pubkey); } self->pv->pubkey = g_value_get_boxed (value); if (self->pv->pubkey) gpgme_key_ref (self->pv->pubkey); /* This is expected to be set shortly along with pubkey */ self->pv->userid = NULL; } break; case PROP_ACTUAL_INDEX: seahorse_gpgme_uid_set_actual_index (self, g_value_get_uint (value)); break; case PROP_USERID: seahorse_gpgme_uid_set_userid (self, g_value_get_pointer (value)); break; } }