X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=crypt.cpkg;h=203e685ab436a4a54a0842afc01b5172319ff83f;hp=797a4b694867ff98b0b5cfb9639ce508d543ac8f;hb=049b21f53af51ad7259613f5eefaa0f37b1b2167;hpb=a5fa2af549bea868843481ec567804555f6d9c58 diff --git a/crypt.cpkg b/crypt.cpkg index 797a4b6..203e685 100644 --- a/crypt.cpkg +++ b/crypt.cpkg @@ -470,7 +470,7 @@ static int data_object_to_stream(gpgme_data_t data, FILE *fp) static char *data_object_to_tempfile(gpgme_data_t data, FILE **ret_fp) { int err; - char tempfile[_POSIX_PATH_MAX]; + char tempfile[_POSIX_PATH_MAX], buf[BUFSIZ]; FILE *fp; ssize_t nread = 0; @@ -482,24 +482,21 @@ static char *data_object_to_tempfile(gpgme_data_t data, FILE **ret_fp) err = ((gpgme_data_seek (data, 0, SEEK_SET) == -1) ? gpgme_error_from_errno (errno) : 0); - if (!err) { - char buf[4096]; + if (err) { + mutt_perror(_("Can't create temporary file")); + goto error; + } - while ((nread = gpgme_data_read(data, buf, sizeof(buf)))) { - if (fwrite (buf, nread, 1, fp) != 1) { - mutt_perror (_("Can't create temporary file")); - m_fclose(&fp); - unlink (tempfile); - return NULL; - } + while ((nread = gpgme_data_read(data, buf, sizeof(buf)))) { + if (fwrite (buf, nread, 1, fp) != 1) { + mutt_perror (_("Can't create temporary file")); + goto error; } } if (nread == -1) { mutt_error (_("error reading data object: %s\n"), gpgme_strerror (err)); - unlink (tempfile); - m_fclose(&fp); - return NULL; + goto error; } if (ret_fp) { rewind(fp); @@ -508,6 +505,11 @@ static char *data_object_to_tempfile(gpgme_data_t data, FILE **ret_fp) m_fclose(&fp); } return m_strdup(tempfile); + + error: + m_fclose(&fp); + unlink (tempfile); + return NULL; } @@ -1908,9 +1910,9 @@ int crypt_pgp_application_pgp_handler(BODY *m, STATE *s) if (needpass == -1) { state_attach_puts (_("[-- Error: could not find beginning" " of PGP message! --]\n\n"), s); - return (-1); + return -1; } - return (err); + return err; } /* MIME handler for pgp/mime encrypted messages. */ @@ -1931,7 +1933,7 @@ int crypt_pgp_encrypted_handler (BODY * a, STATE * s) if (s->flags & M_DISPLAY) state_attach_puts (_("[-- Error: malformed PGP/MIME message! --]\n\n"), s); - return (-1); + return -1; } /* Move forward to the application/pgp-encrypted body. */ @@ -1942,7 +1944,7 @@ int crypt_pgp_encrypted_handler (BODY * a, STATE * s) if (s->flags & M_DISPLAY) state_attach_puts (_("[-- Error: could not create temporary file! " "--]\n"), s); - return (-1); + return -1; } tattach = decrypt_part (a, s, fpout, 0, &is_signed); @@ -1984,7 +1986,7 @@ int crypt_pgp_encrypted_handler (BODY * a, STATE * s) m_fclose(&fpout); mutt_unlink (tempfile); - return (rc); + return rc; } /* Support for application/smime */ @@ -2002,7 +2004,7 @@ int crypt_smime_application_smime_handler (BODY * a, STATE * s) if (s->flags & M_DISPLAY) state_attach_puts (_("[-- Error: could not create temporary file! " "--]\n"), s); - return (-1); + return -1; } tattach = decrypt_part (a, s, fpout, 1, &is_signed); @@ -2048,7 +2050,7 @@ int crypt_smime_application_smime_handler (BODY * a, STATE * s) m_fclose(&fpout); mutt_unlink (tempfile); - return (rc); + return rc; } @@ -2286,8 +2288,7 @@ static int _crypt_compare_address (const void *a, const void *b) static int crypt_compare_address (const void *a, const void *b) { - return ((PgpSortKeys & SORT_REVERSE) ? !_crypt_compare_address (a, b) - : _crypt_compare_address (a, b)); + return !(PgpSortKeys & SORT_REVERSE) == _crypt_compare_address(a, b); } @@ -2306,8 +2307,7 @@ static int _crypt_compare_keyid (const void *a, const void *b) static int crypt_compare_keyid (const void *a, const void *b) { - return ((PgpSortKeys & SORT_REVERSE) ? !_crypt_compare_keyid (a, b) - : _crypt_compare_keyid (a, b)); + return !(PgpSortKeys & SORT_REVERSE) == _crypt_compare_keyid(a, b); } /* Compare 2 creation dates and the addresses. For sorting. */ @@ -2332,8 +2332,7 @@ static int _crypt_compare_date (const void *a, const void *b) static int crypt_compare_date (const void *a, const void *b) { - return ((PgpSortKeys & SORT_REVERSE) ? !_crypt_compare_date (a, b) - : _crypt_compare_date (a, b)); + return !(PgpSortKeys & SORT_REVERSE) == _crypt_compare_date(a, b); } /* Compare two trust values, the key length, the creation dates. the @@ -2374,13 +2373,12 @@ static int _crypt_compare_trust (const void *a, const void *b) if ((r = m_strcasecmp((*s)->uid, (*t)->uid))) return r > 0; - return (m_strcasecmp(crypt_keyid ((*s)), crypt_keyid ((*t)))) > 0; + return m_strcasecmp(crypt_keyid(*s), crypt_keyid(*t)) > 0; } static int crypt_compare_trust (const void *a, const void *b) { - return ((PgpSortKeys & SORT_REVERSE) ? !_crypt_compare_trust (a, b) - : _crypt_compare_trust (a, b)); + return !(PgpSortKeys & SORT_REVERSE) == _crypt_compare_trust(a, b); } /* Print the X.500 Distinguished Name part KEY from the array of parts @@ -3400,6 +3398,23 @@ crypt_ask_for_key(const char *tag, int abilities, int app, int *forced_valid) } } +static char *crypt_hook(address_t *adr) +{ + char *res = NULL; + lua_State *L = luaM_getruntime(); + lua_getglobal(L, "mod_core"); /* push mod_core 1 */ + lua_getfield(L, -1, "crypt_hook"); /* push folder_hook() 2 */ + if (lua_isfunction(L, -1)) { + lua_pushstring(L, adr->mailbox); + if (!lua_pcall(L, 1, 1, 0)) { + res = m_strdup(lua_tostring(L, -1)); + } + lua_pop(L, 1); + } + lua_pop(L, 2); + return res; +} + /* This routine attempts to find the keyids of the recipients of a message. It returns NULL if any of the keys can not be found. */ static char *find_keys(ENVELOPE *env, unsigned int app) @@ -3422,10 +3437,10 @@ static char *find_keys(ENVELOPE *env, unsigned int app) while ((addr = address_list_pop(&lst))) { char buf[STRING]; int forced_valid = 0; - const char *keyID; + char *keyID; cryptkey_t *key = NULL; - if ((keyID = mutt_crypt_hook(addr))) { + if ((keyID = crypt_hook(addr))) { int r; snprintf(buf, sizeof(buf), _("Use keyID = \"%s\" for %s?"), keyID, @@ -3436,6 +3451,7 @@ static char *find_keys(ENVELOPE *env, unsigned int app) address_list_wipe(&lst); address_list_wipe(&addr); buffer_delete(&keylist); + p_delete(&keyID); return NULL; } @@ -3452,6 +3468,7 @@ static char *find_keys(ENVELOPE *env, unsigned int app) } } } + p_delete(&keyID); if (!key) { key = crypt_getkeybyaddr(addr, KEYFLAG_CANENCRYPT, app, &forced_valid); @@ -3683,16 +3700,6 @@ void crypt_pgp_extract_keys_from_attachment_list(FILE * fp, int tag, BODY * top) } } -void crypt_invoke_message (int type) -{ - if (type & APPLICATION_PGP) { - mutt_message _("Invoking PGP..."); - } - else if (type & APPLICATION_SMIME) { - mutt_message _("Invoking S/MIME..."); - } -} - int mutt_protect (HEADER * msg, char *keylist) { BODY *pbody = NULL, *tmp_pbody = NULL; @@ -3734,7 +3741,7 @@ int mutt_protect (HEADER * msg, char *keylist) if (!(tmp_pbody = crypt_smime_build_smime_entity (tmp_smime_pbody, keylist))) { /* signed ? free it! */ - return (-1); + return -1; } /* free tmp_body if messages was signed AND encrypted ... */ if (tmp_smime_pbody != msg->content && tmp_smime_pbody != tmp_pbody) { @@ -3759,7 +3766,7 @@ int mutt_protect (HEADER * msg, char *keylist) body_list_wipe(&tmp_pgp_pbody->next); } - return (-1); + return -1; } /* destroy temporary signature envelope when doing retainable @@ -4024,7 +4031,7 @@ int mutt_signed_handler(BODY *a, STATE *s) if (s->flags & M_DISPLAY && sigcnt) state_attach_puts (_("\n[-- End of signed data --]\n"), s); - return (rc); + return rc; } static int _mutt_check_traditional_pgp (HEADER * h, int *redraw)