X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=crypt.cpkg;h=f8fce19b538581cbc240f102c71512239049668d;hb=46ece9fa274ab37920bf258305eda4f518b9c8f0;hp=797a4b694867ff98b0b5cfb9639ce508d543ac8f;hpb=a5fa2af549bea868843481ec567804555f6d9c58;p=apps%2Fmadmutt.git diff --git a/crypt.cpkg b/crypt.cpkg index 797a4b6..f8fce19 100644 --- a/crypt.cpkg +++ b/crypt.cpkg @@ -3400,6 +3400,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 +3439,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 +3453,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 +3470,7 @@ static char *find_keys(ENVELOPE *env, unsigned int app) } } } + p_delete(&keyID); if (!key) { key = crypt_getkeybyaddr(addr, KEYFLAG_CANENCRYPT, app, &forced_valid);