X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=crypt.cpkg;h=67b37c2e8e925ff7452f91e6057b8fa34b77afc3;hp=ae29cd2980952a69bcce53d6d84a51466e6d5515;hb=981e10e224fde4de5d40adcee1deda89df2715ca;hpb=f435868132e200bfa71ac155f037cf64bf5414ba diff --git a/crypt.cpkg b/crypt.cpkg index ae29cd2..67b37c2 100644 --- a/crypt.cpkg +++ b/crypt.cpkg @@ -17,7 +17,6 @@ #include #include -#include #include #include @@ -327,7 +326,7 @@ static gpgme_ctx_t create_gpgme_context(int for_smime) if (err) { mutt_error(_("error creating gpgme context: %s\n"), gpgme_strerror(err)); - sleep(2); + mutt_sleep(2); mutt_exit(1); } if (!for_smime) @@ -336,7 +335,7 @@ static gpgme_ctx_t create_gpgme_context(int for_smime) err = gpgme_set_protocol(ctx, GPGME_PROTOCOL_CMS); if (err) { mutt_error(_("error enabling CMS protocol: %s\n"), gpgme_strerror(err)); - sleep(2); + mutt_sleep(2); mutt_exit(1); } return ctx; @@ -353,7 +352,7 @@ static gpgme_data_t create_gpgme_data(void) if (err) { mutt_error(_("error creating gpgme data object: %s\n"), gpgme_strerror(err)); - sleep(2); + mutt_sleep(2); mutt_exit(1); } return data; @@ -471,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; @@ -483,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); @@ -509,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; } @@ -2268,8 +2269,8 @@ static void crypt_entry (char *s, ssize_t l, MUTTMENU * menu, int num) entry.key = cryptkey_table[num]; entry.num = num + 1; - m_strformat(s, l, COLS - SW, mod_crypt.pgp_entry_format, crypt_entry_fmt, - &entry, 0); + m_strformat(s, l, getmaxx(main_w), mod_crypt.pgp_entry_format, + crypt_entry_fmt, &entry, 0); } /* Compare two addresses and the keyid to be used for sorting. */ @@ -3401,6 +3402,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) @@ -3423,10 +3441,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, @@ -3437,6 +3455,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; } @@ -3453,6 +3472,7 @@ static char *find_keys(ENVELOPE *env, unsigned int app) } } } + p_delete(&keyID); if (!key) { key = crypt_getkeybyaddr(addr, KEYFLAG_CANENCRYPT, app, &forced_valid); @@ -3684,16 +3704,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;