X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=lib-crypt%2Fcrypt-gpgme.c;h=5bd3173c801955ec20a9818b7fad87914d8a20dd;hb=132d06d5920f9a496a8623acfbbabe9739618489;hp=e575b3bba6c73782205b15142979847dc0199cbc;hpb=8c4119f543278427eb9b632589b5e786c2961b01;p=apps%2Fmadmutt.git diff --git a/lib-crypt/crypt-gpgme.c b/lib-crypt/crypt-gpgme.c index e575b3b..5bd3173 100644 --- a/lib-crypt/crypt-gpgme.c +++ b/lib-crypt/crypt-gpgme.c @@ -6,10 +6,9 @@ * Copyright (C) 2001 Thomas Roessler * Oliver Ehli * Copyright (C) 2002, 2003, 2004 g10 Code GmbH - * - * This file is part of mutt-ng, see http://www.muttng.org/. - * It's licensed under the GNU General Public License, - * please see the file GPL in the top level source directory. + */ +/* + * Copyright © 2006 Pierre Habouzit */ #include @@ -72,17 +71,6 @@ typedef struct crypt_entry { static struct crypt_cache *id_defaults = NULL; static gpgme_key_t signature_key = NULL; -/* Show a message that a backend will be invoked. */ -void crypt_invoke_message (int type) -{ - if (type & APPLICATION_PGP) { - mutt_message _("Invoking PGP..."); - } - else if (type & APPLICATION_SMIME) { - mutt_message _("Invoking S/MIME..."); - } -} - /* * General helper functions. */ @@ -1209,8 +1197,7 @@ static int show_one_sig_status (gpgme_ctx_t ctx, int idx, STATE * s) /* Do the actual verification step. With IS_SMIME set to true we assume S/MIME (surprise!) */ -static int verify_one (BODY * sigbdy, STATE * s, - const char *tempfile, int is_smime) +int crypt_verify_one(BODY *sigbdy, STATE *s, FILE *fp, int is_smime) { int badsig = -1; int anywarn = 0; @@ -1227,7 +1214,7 @@ static int verify_one (BODY * sigbdy, STATE * s, if (is_smime) gpgme_data_set_encoding (signature, GPGME_DATA_ENCODING_BASE64); - err = gpgme_data_new_from_file (&message, tempfile, 1); + err = gpgme_data_new_from_stream(&message, fp); if (err) { gpgme_data_release (signature); mutt_error (_("error allocating data object: %s\n"), gpgme_strerror (err)); @@ -1307,16 +1294,6 @@ static int verify_one (BODY * sigbdy, STATE * s, return badsig ? 1 : anywarn ? 2 : 0; } -int crypt_pgp_verify_one (BODY * sigbdy, STATE * s, const char *tempfile) -{ - return verify_one (sigbdy, s, tempfile, 0); -} - -int crypt_smime_verify_one (BODY * sigbdy, STATE * s, const char *tempfile) -{ - return verify_one (sigbdy, s, tempfile, 1); -} - /* * Implementation of `decrypt_part'. */ @@ -3701,17 +3678,37 @@ static char *find_keys (address_t * to, address_t * cc, address_t * bcc, return (keylist); } -char *crypt_pgp_findkeys (address_t * to, address_t * cc, address_t * bcc) +int crypt_get_keys (HEADER * msg, char **keylist) { - return find_keys (to, cc, bcc, APPLICATION_PGP); -} + /* Do a quick check to make sure that we can find all of the encryption + * keys if the user has requested this service. + */ -char *crypt_smime_findkeys (address_t * to, address_t * cc, address_t * bcc) -{ - return find_keys (to, cc, bcc, APPLICATION_SMIME); + *keylist = NULL; + + if (msg->security & ENCRYPT) { + if (msg->security & APPLICATION_PGP) { + set_option(OPTPGPCHECKTRUST); + *keylist = find_keys(msg->env->to, msg->env->cc, msg->env->bcc, + APPLICATION_PGP); + unset_option(OPTPGPCHECKTRUST); + if (!*keylist) + return -1; + } + + if (msg->security & APPLICATION_SMIME) { + *keylist = find_keys(msg->env->to, msg->env->cc, msg->env->bcc, + APPLICATION_SMIME); + if (!*keylist) + return -1; + } + } + + return (0); } -static int gpgme_send_menu (HEADER * msg, int *redraw, int is_smime) + +int crypt_send_menu (HEADER * msg, int *redraw, int is_smime) { crypt_key_t *p; char input_signas[STRING]; @@ -3726,12 +3723,12 @@ static int gpgme_send_menu (HEADER * msg, int *redraw, int is_smime) choice = mutt_multi_choice (_ ("S/MIME (e)ncrypt, (s)ign, sign (a)s, (b)oth, (p)gp or (c)lear?"), - _("esabpfc")); + _("esabpc")); else choice = mutt_multi_choice (_ ("PGP (e)ncrypt, (s)ign, sign (a)s, (b)oth, s/(m)ime or (c)lear?"), - _("esabmfc")); + _("esabmc")); switch (choice) { case 1: /* (e)ncrypt */ @@ -3745,7 +3742,6 @@ static int gpgme_send_menu (HEADER * msg, int *redraw, int is_smime) break; case 3: /* sign (a)s */ -/* unset_option(OPTCRYPTCHECKTRUST); */ if ((p = crypt_ask_for_key (_("Sign as: "), NULL, KEYFLAG_CANSIGN, is_smime ? APPLICATION_SMIME : APPLICATION_PGP, NULL))) { @@ -3769,31 +3765,18 @@ static int gpgme_send_menu (HEADER * msg, int *redraw, int is_smime) break; case 6: /* (c)lear */ - msg->security = 0; - break; + return msg->security = 0; } - if (choice == 6 || choice == 7); - else if (is_smime) { + if (is_smime) { msg->security &= ~APPLICATION_PGP; msg->security |= APPLICATION_SMIME; - } - else { + } else { msg->security &= ~APPLICATION_SMIME; msg->security |= APPLICATION_PGP; } - return (msg->security); -} - -int crypt_pgp_send_menu(HEADER * msg, int *redraw) -{ - return gpgme_send_menu(msg, redraw, 0); -} - -int crypt_smime_send_menu(HEADER * msg, int *redraw) -{ - return gpgme_send_menu (msg, redraw, 1); + return msg->security; } int crypt_smime_verify_sender (HEADER * h)