- while (!(err = gpgme_op_keylist_next (ctx, &key))) {
- unsigned int flags = 0;
-
- if (key_check_cap (key, KEY_CAP_CAN_ENCRYPT))
- flags |= KEYFLAG_CANENCRYPT;
- if (key_check_cap (key, KEY_CAP_CAN_SIGN))
- flags |= KEYFLAG_CANSIGN;
-
- for (idx = 0, uid = key->uids; uid; idx++, uid = uid->next) {
- k = p_new(crypt_key_t, 1);
- k->kobj = key;
- k->idx = idx;
- k->uid = uid->uid;
- k->flags = flags;
- *kend = k;
- kend = &k->next;
- }
- }
- if (gpg_err_code (err) != GPG_ERR_EOF)
- mutt_error (_("gpgme_op_keylist_next failed: %s"), gpgme_strerror (err));
- gpgme_op_keylist_end (ctx);
- no_pgphints:
- ;
- }
-
- if ((app & APPLICATION_SMIME)) {
- /* and now look for x509 certificates */
- gpgme_set_protocol (ctx, GPGME_PROTOCOL_CMS);
- err = gpgme_op_keylist_start (ctx, pattern, 0);
- if (err) {
- mutt_error (_("gpgme_op_keylist_start failed: %s"), gpgme_strerror (err));
- gpgme_release (ctx);
- p_delete(&pattern);
- return NULL;
- }
+ if ((app & APPLICATION_SMIME)) {
+ gpgme_set_protocol(ctx, GPGME_PROTOCOL_CMS);
+ err = gpgme_op_keylist_ext_start(ctx, (const char **)hints->arr,
+ secret, 0);
+ if (err) {
+ mutt_error(_("gpgme_op_keylist_start failed: %s"),
+ gpgme_strerror(err));
+ gpgme_release(ctx);
+ return NULL;
+ }