}
}
+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)
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,
address_list_wipe(&lst);
address_list_wipe(&addr);
buffer_delete(&keylist);
+ p_delete(&keyID);
return NULL;
}
}
}
}
+ p_delete(&keyID);
if (!key) {
key = crypt_getkeybyaddr(addr, KEYFLAG_CANENCRYPT, app, &forced_valid);