X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=lib-crypt%2Fcrypt-gpgme.c;h=339b97ccd5aa51eb8295b473f94e6055d3038556;hp=809cec0590b10252b58df8335b4fcc4b95ba26a0;hb=2293e9bc5a94ef33dc596b064c607d6bed5ad1fd;hpb=9c29247938d64f721db448824a1121ef47ad2869 diff --git a/lib-crypt/crypt-gpgme.c b/lib-crypt/crypt-gpgme.c index 809cec0..339b97c 100644 --- a/lib-crypt/crypt-gpgme.c +++ b/lib-crypt/crypt-gpgme.c @@ -18,6 +18,29 @@ #ifdef CRYPT_BACKEND_GPGME +#include +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_LOCALE_H +# include +#endif +#ifdef HAVE_LANGINFO_D_T_FMT +# include +#endif +#ifdef HAVE_SYS_TIME_H +# include +#endif +#ifdef HAVE_SYS_RESOURCE_H +# include +#endif + +#include + #include #include #include @@ -28,43 +51,18 @@ #include #include +#include #include "mutt.h" +#include "lib.h" +#include "alias.h" #include -#include "mutt_menu.h" #include "handler.h" #include "copy.h" #include "pager.h" #include "recvattach.h" #include "sort.h" -#include "lib/debug.h" - -#include -#include -#include -#include -#include -#include -#include - -#include - -#ifdef HAVE_LOCALE_H -#include -#endif -#ifdef HAVE_LANGINFO_D_T_FMT -#include -#endif - -#ifdef HAVE_SYS_TIME_H -# include -#endif - -#ifdef HAVE_SYS_RESOURCE_H -# include -#endif - /* * Helper macros. */ @@ -109,7 +107,7 @@ typedef struct crypt_keyinfo { } crypt_key_t; typedef struct crypt_entry { - size_t num; + ssize_t num; crypt_key_t *key; } crypt_entry_t; @@ -132,7 +130,7 @@ static int digit_or_letter (const unsigned char *s) /* Print the utf-8 encoded string BUF of length LEN bytes to stream FP. Convert the character set. */ -static void print_utf8 (FILE * fp, const char *buf, size_t len) +static void print_utf8 (FILE * fp, const char *buf, ssize_t len) { char *tstr; @@ -253,8 +251,8 @@ static int crypt_id_is_strong (crypt_key_t * key) { gpgme_validity_t val = GPGME_VALIDITY_UNKNOWN; gpgme_user_id_t uid = NULL; - unsigned int is_strong = 0; - unsigned int i = 0; + int is_strong = 0; + int i = 0; if ((key->flags & KEYFLAG_ISX509)) return 1; @@ -476,7 +474,7 @@ static char *data_object_to_tempfile (gpgme_data_t data, FILE ** ret_fp) int err; char tempfile[_POSIX_PATH_MAX]; FILE *fp; - size_t nread = 0; + ssize_t nread = 0; mutt_mktemp (tempfile); fp = safe_fopen (tempfile, "w+"); @@ -538,7 +536,7 @@ static gpgme_key_t *create_recipient_set (const char *keylist, do { while (*s == ' ') s++; - for (i = 0; *s && *s != ' ' && i < sizeof (buf) - 1;) + for (i = 0; *s && *s != ' ' && i < ssizeof(buf) - 1;) buf[i++] = *s++; buf[i] = 0; if (*buf) { @@ -676,7 +674,7 @@ static char *encrypt_gpgme_object (gpgme_data_t plaintext, gpgme_key_t * rset, which must have been allocated by the caller with size BUFLEN. Returns 0 on success or -1 in case of an error. The return string is truncted to BUFLEN - 1. */ -static int get_micalg (gpgme_ctx_t ctx, char *buf, size_t buflen) +static int get_micalg (gpgme_ctx_t ctx, char *buf, ssize_t buflen) { gpgme_sign_result_t result = NULL; const char *algorithm_name = NULL; @@ -958,7 +956,7 @@ static int show_sig_summary (unsigned long sum, if ((sum & GPGME_SIGSUM_SIG_EXPIRED)) { gpgme_verify_result_t result; gpgme_signature_t sig; - unsigned int i; + int i; result = gpgme_op_verify_result (ctx); @@ -991,7 +989,7 @@ static int show_sig_summary (unsigned long sum, const char *t0 = NULL, *t1 = NULL; gpgme_verify_result_t result; gpgme_signature_t sig; - unsigned int i; + int i; state_attach_puts (_("A system error occurred"), s); @@ -1284,18 +1282,17 @@ static int verify_one (BODY * sigbdy, STATE * s, if (!badsig) { gpgme_verify_result_t result; gpgme_sig_notation_t notation; - gpgme_signature_t signature; + gpgme_signature_t sig; result = gpgme_op_verify_result (ctx); if (result) { - for (signature = result->signatures; signature; - signature = signature->next) { - if (signature->notations) { + for (sig = result->signatures; sig; sig = sig->next) { + if (sig->notations) { state_attach_puts ("*** Begin Notation (signature by: ", s); - state_attach_puts (signature->fpr, s); + state_attach_puts (sig->fpr, s); state_attach_puts (") ***\n", s); - for (notation = signature->notations; notation; - notation = notation->next) { + for (notation = sig->notations; notation; notation = notation->next) + { if (notation->name) { state_attach_puts (notation->name, s); state_attach_puts ("=", s); @@ -1317,7 +1314,6 @@ static int verify_one (BODY * sigbdy, STATE * s, gpgme_release (ctx); state_attach_puts (_("[-- End signature information --]\n\n"), s); - debug_print (1, ("returning %d.\n", badsig)); return badsig ? 1 : anywarn ? 2 : 0; } @@ -1347,7 +1343,7 @@ static BODY *decrypt_part (BODY * a, STATE * s, FILE * fpout, int is_smime, { struct stat info; BODY *tattach; - int err; + int err = 0; gpgme_ctx_t ctx; gpgme_data_t ciphertext, plaintext; int maybe_signed = 0; @@ -1518,7 +1514,7 @@ int smime_gpgme_decrypt_mime (FILE * fpin, FILE ** fpout, BODY * b, FILE *tmpfp = NULL; int is_signed; long saved_b_offset; - size_t saved_b_length; + ssize_t saved_b_length; int saved_b_type; if (!mutt_is_application_smime (b)) @@ -1722,7 +1718,7 @@ static void copy_clearsigned (gpgme_data_t data, STATE * s, char *charset) { char buf[HUGE_STRING]; short complete, armor_header; - FGETCONV *fc; + fgetconv_t *fc; char *fname; FILE *fp; @@ -1785,8 +1781,6 @@ int pgp_gpgme_application_handler (BODY * m, STATE * s) char body_charset[STRING]; /* Only used for clearsigned messages. */ - debug_print (2, ("Entering pgp_application_pgp handler\n")); - /* For clearsigned messages we won't be able to get a character set but we know that this may only be text thus we assume Latin-1 here. */ @@ -1948,7 +1942,7 @@ int pgp_gpgme_application_handler (BODY * m, STATE * s) copy_clearsigned (armored_data, s, body_charset); } else if (pgpout) { - FGETCONV *fc; + fgetconv_t *fc; int c; rewind (pgpout); @@ -1990,7 +1984,6 @@ int pgp_gpgme_application_handler (BODY * m, STATE * s) " of PGP message! --]\n\n"), s); return (-1); } - debug_print (2, ("Leaving pgp_application_pgp handler\n")); return (err); } @@ -2008,7 +2001,6 @@ int pgp_gpgme_encrypted_handler (BODY * a, STATE * s) int is_signed; int rc = 0; - debug_print (2, ("Entering pgp_encrypted handler\n")); a = a->parts; if (!a || a->type != TYPEAPPLICATION || !a->subtype || ascii_strcasecmp ("pgp-encrypted", a->subtype) @@ -2070,7 +2062,6 @@ int pgp_gpgme_encrypted_handler (BODY * a, STATE * s) fclose (fpout); mutt_unlink (tempfile); - debug_print (2, ("Leaving pgp_encrypted handler\n")); return (rc); } @@ -2083,8 +2074,6 @@ int smime_gpgme_application_handler (BODY * a, STATE * s) int is_signed; int rc = 0; - debug_print (2, ("Entering smime_encrypted handler\n")); - a->warnsig = 0; mutt_mktemp (tempfile); if (!(fpout = safe_fopen (tempfile, "w+"))) { @@ -2137,7 +2126,6 @@ int smime_gpgme_application_handler (BODY * a, STATE * s) fclose (fpout); mutt_unlink (tempfile); - debug_print (2, ("Leaving smime_encrypted handler\n")); return (rc); } @@ -2157,14 +2145,11 @@ int smime_gpgme_application_handler (BODY * a, STATE * s) * %[...] date of key using strftime(3) */ -static const char *crypt_entry_fmt (char *dest, - size_t destlen, - char op, - const char *src, - const char *prefix, - const char *ifstring, - const char *elsestring, - unsigned long data, format_flag flags) +static const char * +crypt_entry_fmt (char *dest, ssize_t destlen, char op, + const char *src, const char *prefix, + const char *ifstring, const char *elsestring, + unsigned long data, format_flag flags) { char fmt[16]; crypt_entry_t *entry; @@ -2190,7 +2175,7 @@ static const char *crypt_entry_fmt (char *dest, char buf2[SHORT_STRING], *p; int do_locales; struct tm *tm; - size_t len; + ssize_t len; p = dest; @@ -2305,7 +2290,7 @@ static const char *crypt_entry_fmt (char *dest, s = "x"; else { gpgme_user_id_t uid = NULL; - unsigned int i = 0; + int i = 0; for (i = 0, uid = key->kobj->uids; uid && (i < key->idx); i++, uid = uid->next); @@ -2353,7 +2338,7 @@ static const char *crypt_entry_fmt (char *dest, } /* Used by the display fucntion to format a line. */ -static void crypt_entry (char *s, size_t l, MUTTMENU * menu, int num) +static void crypt_entry (char *s, ssize_t l, MUTTMENU * menu, int num) { crypt_key_t **key_table = (crypt_key_t **) menu->data; crypt_entry_t entry; @@ -2532,7 +2517,7 @@ static const unsigned char *parse_dn_part (struct dn_array_s *array, const unsigned char *string) { const unsigned char *s, *s1; - size_t n; + ssize_t n; unsigned char *p; /* parse attributeType */ @@ -2611,7 +2596,7 @@ static const unsigned char *parse_dn_part (struct dn_array_s *array, static struct dn_array_s *parse_dn (const unsigned char *string) { struct dn_array_s *array; - size_t arrayidx, arraysize; + ssize_t arrayidx, arraysize; int i; arraysize = 7; /* C,ST,L,O,OU,CN,email */ @@ -3018,15 +3003,15 @@ leave: */ -/* Convert LIST into a pattern string suitable to be passed to GPGME. +/* Convert string_list_t into a pattern string suitable to be passed to GPGME. We need to convert spaces in an item into a '+' and '%' into "%25". */ -static char *list_to_pattern (LIST * list) +static char *list_to_pattern (string_list_t * list) { - LIST *l; + string_list_t *l; char *pattern, *p; const char *s; - size_t n; + ssize_t n; n = 0; for (l = list; l; l = l->next) { @@ -3068,7 +3053,7 @@ static char *list_to_pattern (LIST * list) /* Return a list of keys which are candidates for the selection. Select by looking at the HINTS list. */ -static crypt_key_t *get_candidates (LIST * hints, unsigned int app, +static crypt_key_t *get_candidates (string_list_t * hints, unsigned int app, int secret) { crypt_key_t *db, *k, **kend; @@ -3098,8 +3083,8 @@ static crypt_key_t *get_candidates (LIST * hints, unsigned int app, depending on the protocol. For gpg we don' t need percent escaped pappert but simple strings passed in an array to the keylist_ext_start function. */ - LIST *l; - size_t n; + string_list_t *l; + ssize_t n; char **patarr; for (l = hints, n = 0; l; l = l->next) { @@ -3212,7 +3197,7 @@ static crypt_key_t *get_candidates (LIST * hints, unsigned int app, /* Add the string STR to the list HINTS. This list is later used to match addresses. */ -static LIST *crypt_add_string_to_hints (LIST * hints, const char *str) +static string_list_t *crypt_add_string_to_hints (string_list_t * hints, const char *str) { char *scratch; char *t; @@ -3369,7 +3354,7 @@ static crypt_key_t *crypt_select_key (crypt_key_t * keys, else { gpgme_validity_t val = GPGME_VALIDITY_UNKNOWN; gpgme_user_id_t uid = NULL; - unsigned int j = 0; + int j = 0; warn_s = "??"; @@ -3429,7 +3414,7 @@ static crypt_key_t *crypt_getkeybyaddr (address_t * a, short abilities, unsigned int app, int *forced_valid) { address_t *r, *p; - LIST *hints = NULL; + string_list_t *hints = NULL; int weak = 0; int invalid = 0; @@ -3454,18 +3439,13 @@ static crypt_key_t *crypt_getkeybyaddr (address_t * a, short abilities, mutt_message (_("Looking for keys matching \"%s\"..."), a->mailbox); keys = get_candidates (hints, app, (abilities & KEYFLAG_CANSIGN)); - mutt_free_list (&hints); + string_list_wipe(&hints); if (!keys) return NULL; - debug_print (5, ("looking for %s <%s>.\n", a->personal, a->mailbox)); - for (k = keys; k; k = k->next) { - debug_print (5, (" looking at key: %s `%.15s'\n", crypt_keyid (k), k->uid)); - if (abilities && !(k->flags & abilities)) { - debug_print (5, (" insufficient abilities: Has %x, want %x\n", k->flags, abilities)); continue; } @@ -3498,7 +3478,7 @@ static crypt_key_t *crypt_getkeybyaddr (address_t * a, short abilities, || !(validity & CRYPT_KV_ADDR))) this_key_has_weak = 1; } - address_delete (&r); + address_list_wipe(&r); if (match) { crypt_key_t *tmp; @@ -3546,7 +3526,7 @@ static crypt_key_t *crypt_getkeybyaddr (address_t * a, short abilities, static crypt_key_t *crypt_getkeybystr (char *p, short abilities, unsigned int app, int *forced_valid) { - LIST *hints = NULL; + string_list_t *hints = NULL; crypt_key_t *keys; crypt_key_t *matches = NULL; crypt_key_t **matches_endp = &matches; @@ -3559,7 +3539,7 @@ static crypt_key_t *crypt_getkeybystr (char *p, short abilities, hints = crypt_add_string_to_hints (hints, p); keys = get_candidates (hints, app, (abilities & KEYFLAG_CANSIGN)); - mutt_free_list (&hints); + string_list_wipe(&hints); if (!keys) return NULL; @@ -3569,7 +3549,6 @@ static crypt_key_t *crypt_getkeybystr (char *p, short abilities, continue; match = 0; - debug_print (5, ("matching \"%s\" against " "key %s, \"%s\":\n", p, crypt_keyid (k), k->uid)); if (!*p || !m_strcasecmp(p, crypt_keyid (k)) || (!m_strncasecmp(p, "0x", 2) @@ -3580,8 +3559,6 @@ static crypt_key_t *crypt_getkeybystr (char *p, short abilities, || m_stristr(k->uid, p)) { crypt_key_t *tmp; - debug_print (5, ("match.\n")); - *matches_endp = tmp = crypt_copy_key (k); matches_endp = &tmp->next; } @@ -3661,8 +3638,8 @@ static char *find_keys (address_t * to, address_t * cc, address_t * bcc, unsigned int app) { char *keyID, *keylist = NULL, *t; - size_t keylist_size = 0; - size_t keylist_used = 0; + ssize_t keylist_size = 0; + ssize_t keylist_used = 0; address_t *tmp = NULL, *addr = NULL; address_t **last = &tmp; address_t *p, *q; @@ -3731,8 +3708,8 @@ static char *find_keys (address_t * to, address_t * cc, address_t * bcc, } else if (r == -1) { p_delete(&keylist); - address_delete (&tmp); - address_delete (&addr); + address_list_wipe(&tmp); + address_list_wipe(&addr); return NULL; } } @@ -3750,8 +3727,8 @@ static char *find_keys (address_t * to, address_t * cc, address_t * bcc, #endif &forced_valid)) == NULL) { p_delete(&keylist); - address_delete (&tmp); - address_delete (&addr); + address_list_wipe(&tmp); + address_list_wipe(&addr); return NULL; } } @@ -3776,9 +3753,9 @@ static char *find_keys (address_t * to, address_t * cc, address_t * bcc, keylist_used = m_strlen(keylist); crypt_free_key (&key); - address_delete (&addr); + address_list_wipe(&addr); } - address_delete (&tmp); + address_list_wipe(&tmp); return (keylist); } @@ -3906,7 +3883,7 @@ int smime_gpgme_send_menu (HEADER * msg, int *redraw) return gpgme_send_menu (msg, redraw, 1); } -static int verify_sender (HEADER * h, gpgme_protocol_t protocol) +static int verify_sender (HEADER * h, gpgme_protocol_t protocol __attribute__((unused))) { address_t *sender = NULL; unsigned int ret = 1;