Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/hobarrera/mutt-kz
Browse files Browse the repository at this point in the history
* 'master' of https://github.com/hobarrera/mutt-kz:
  Add the crypt_opportunistic_encrypt option and calls.
  Implement crypt_opportunistic_encrypt().
  Implement auto_mode in the find_keys methods.
  Pull is_numerical_keyid() into crypt.c.
  Introduce an auto_mode parameter
  Refactor the address list generation out of the find_keys routines.
  • Loading branch information
karelzak committed Feb 6, 2015
2 parents a9d83f2 + 7d0217a commit 4e9cf84
Show file tree
Hide file tree
Showing 19 changed files with 289 additions and 208 deletions.
17 changes: 17 additions & 0 deletions compose.c
Expand Up @@ -526,14 +526,29 @@ int mutt_compose_menu (HEADER *msg, /* structure for new message */
break;
case OP_COMPOSE_EDIT_TO:
menu->redraw = edit_address_list (HDR_TO, &msg->env->to);
if (option (OPTCRYPTOPPORTUNISTICENCRYPT))
{
crypt_opportunistic_encrypt (msg);
redraw_crypt_lines (msg);
}
mutt_message_hook (NULL, msg, M_SEND2HOOK);
break;
case OP_COMPOSE_EDIT_BCC:
menu->redraw = edit_address_list (HDR_BCC, &msg->env->bcc);
if (option (OPTCRYPTOPPORTUNISTICENCRYPT))
{
crypt_opportunistic_encrypt (msg);
redraw_crypt_lines (msg);
}
mutt_message_hook (NULL, msg, M_SEND2HOOK);
break;
case OP_COMPOSE_EDIT_CC:
menu->redraw = edit_address_list (HDR_CC, &msg->env->cc);
if (option (OPTCRYPTOPPORTUNISTICENCRYPT))
{
crypt_opportunistic_encrypt (msg);
redraw_crypt_lines (msg);
}
mutt_message_hook (NULL, msg, M_SEND2HOOK);
break;
case OP_COMPOSE_EDIT_SUBJECT:
Expand Down Expand Up @@ -593,6 +608,8 @@ int mutt_compose_menu (HEADER *msg, /* structure for new message */
mutt_error (_("Bad IDN in \"%s\": '%s'"), tag, err);
FREE (&err);
}
if (option (OPTCRYPTOPPORTUNISTICENCRYPT))
crypt_opportunistic_encrypt (msg);
}
else
{
Expand Down
149 changes: 75 additions & 74 deletions crypt-gpgme.c
Expand Up @@ -3994,7 +3994,8 @@ static crypt_key_t *crypt_select_key (crypt_key_t *keys,
}

static crypt_key_t *crypt_getkeybyaddr (ADDRESS * a, short abilities,
unsigned int app, int *forced_valid)
unsigned int app, int *forced_valid,
int auto_mode)
{
ADDRESS *r, *p;
LIST *hints = NULL;
Expand All @@ -4019,7 +4020,8 @@ static crypt_key_t *crypt_getkeybyaddr (ADDRESS * a, short abilities,
if (a && a->personal)
hints = crypt_add_string_to_hints (hints, a->personal);

mutt_message (_("Looking for keys matching \"%s\"..."), a->mailbox);
if (! auto_mode )
mutt_message (_("Looking for keys matching \"%s\"..."), a->mailbox);
keys = get_candidates (hints, app, (abilities & KEYFLAG_CANSIGN) );

mutt_free_list (&hints);
Expand Down Expand Up @@ -4094,7 +4096,14 @@ static crypt_key_t *crypt_getkeybyaddr (ADDRESS * a, short abilities,

if (matches)
{
if (the_valid_key && !multi && !weak
if (auto_mode)
{
if (the_valid_key)
k = crypt_copy_key (the_valid_key);
else
k = NULL;
}
else if (the_valid_key && !multi && !weak
&& !(invalid && option (OPTPGPSHOWUNUSABLE)))
{
/*
Expand Down Expand Up @@ -4122,7 +4131,7 @@ static crypt_key_t *crypt_getkeybyaddr (ADDRESS * a, short abilities,
}


static crypt_key_t *crypt_getkeybystr (char *p, short abilities,
static crypt_key_t *crypt_getkeybystr (const char *p, short abilities,
unsigned int app, int *forced_valid)
{
LIST *hints = NULL;
Expand Down Expand Up @@ -4244,45 +4253,25 @@ static crypt_key_t *crypt_ask_for_key (char *tag,
}

/* 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 (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc,
unsigned int app)
message. It returns NULL if any of the keys can not be found.
If auto_mode is true, only keys that can be determined without
prompting will be used. */
static char *find_keys (ADDRESS *adrlist, unsigned int app, int auto_mode)
{
char *keyID, *keylist = NULL, *t;
const char *keyID = NULL;
char *keylist = NULL, *t;
size_t keylist_size = 0;
size_t keylist_used = 0;
ADDRESS *tmp = NULL, *addr = NULL;
ADDRESS **last = &tmp;
ADDRESS *addr = NULL;
ADDRESS *p, *q;
int i;
crypt_key_t *k_info, *key;
crypt_key_t *k_info;
const char *fqdn = mutt_fqdn (1);

#if 0
*r_application = APPLICATION_PGP|APPLICATION_SMIME;
#endif

for (i = 0; i < 3; i++)
{
switch (i)
{
case 0: p = to; break;
case 1: p = cc; break;
case 2: p = bcc; break;
default: abort ();
}

*last = rfc822_cpy_adr (p, 0);
while (*last)
last = &((*last)->next);
}

if (fqdn)
rfc822_qualify (tmp, fqdn);

tmp = mutt_remove_duplicates (tmp);

for (p = tmp; p ; p = p->next)

for (p = adrlist; p ; p = p->next)
{
char buf[LONG_STRING];
int forced_valid = 0;
Expand All @@ -4292,11 +4281,22 @@ static char *find_keys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc,

if ((keyID = mutt_crypt_hook (p)) != NULL)
{
int r;
snprintf (buf, sizeof (buf), _("Use keyID = \"%s\" for %s?"),
keyID, p->mailbox);
if ((r = mutt_yesorno (buf, M_YES)) == M_YES)
int r = M_NO;
if (! auto_mode)
{
snprintf (buf, sizeof (buf), _("Use keyID = \"%s\" for %s?"),
keyID, p->mailbox);
r = mutt_yesorno (buf, M_YES);
}
if (auto_mode || (r == M_YES))
{
if (crypt_is_numerical_keyid (keyID))
{
if (strncmp (keyID, "0x", 2) == 0)
keyID += 2;
goto bypass_selection; /* you don't see this. */
}

/* check for e-mail address */
if ((t = strchr (keyID, '@')) &&
(addr = rfc822_parse_adrlist (NULL, keyID)))
Expand All @@ -4305,7 +4305,7 @@ static char *find_keys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc,
rfc822_qualify (addr, fqdn);
q = addr;
}
else
else if (! auto_mode)
{
#if 0
k_info = crypt_getkeybystr (keyID, KEYFLAG_CANENCRYPT,
Expand All @@ -4319,69 +4319,70 @@ static char *find_keys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc,
else if (r == -1)
{
FREE (&keylist);
rfc822_free_address (&tmp);
rfc822_free_address (&addr);
return NULL;
}
}

if (k_info == NULL
&& (k_info = crypt_getkeybyaddr (q, KEYFLAG_CANENCRYPT,
app, &forced_valid)) == NULL)
if (k_info == NULL)
{
k_info = crypt_getkeybyaddr (q, KEYFLAG_CANENCRYPT,
app, &forced_valid, auto_mode);
}

if ((k_info == NULL) && (! auto_mode))
{
snprintf (buf, sizeof (buf), _("Enter keyID for %s: "), q->mailbox);

if ((key = crypt_ask_for_key (buf, q->mailbox,
KEYFLAG_CANENCRYPT,
k_info = crypt_ask_for_key (buf, q->mailbox,
KEYFLAG_CANENCRYPT,
#if 0
*r_application,
*r_application,
#else
app,
app,
#endif
&forced_valid)) == NULL)
{
FREE (&keylist);
rfc822_free_address (&tmp);
rfc822_free_address (&addr);
return NULL;
}
&forced_valid);
}

if (k_info == NULL)
{
FREE (&keylist);
rfc822_free_address (&addr);
return NULL;
}
else
key = k_info;

{
const char *s = crypt_fpr (key);

keyID = crypt_fpr (k_info);

#if 0
if (key->flags & KEYFLAG_ISX509)
*r_application &= ~APPLICATION_PGP;
if (!(key->flags & KEYFLAG_ISX509))
*r_application &= ~APPLICATION_SMIME;
if (k_info->flags & KEYFLAG_ISX509)
*r_application &= ~APPLICATION_PGP;
if (!(k_info->flags & KEYFLAG_ISX509))
*r_application &= ~APPLICATION_SMIME;
#endif

keylist_size += mutt_strlen (s) + 4 + 1;
safe_realloc (&keylist, keylist_size);
sprintf (keylist + keylist_used, "%s0x%s%s", /* __SPRINTF_CHECKED__ */
keylist_used ? " " : "", s,
forced_valid? "!":"");
}
bypass_selection:
keylist_size += mutt_strlen (keyID) + 4 + 1;
safe_realloc (&keylist, keylist_size);
sprintf (keylist + keylist_used, "%s0x%s%s", /* __SPRINTF_CHECKED__ */
keylist_used ? " " : "", keyID,
forced_valid? "!":"");
keylist_used = mutt_strlen (keylist);

crypt_free_key (&key);
crypt_free_key (&k_info);
rfc822_free_address (&addr);
}
rfc822_free_address (&tmp);
return (keylist);
}

char *pgp_gpgme_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc)
char *pgp_gpgme_findkeys (ADDRESS *adrlist, int auto_mode)
{
return find_keys (to, cc, bcc, APPLICATION_PGP);
return find_keys (adrlist, APPLICATION_PGP, auto_mode);
}

char *smime_gpgme_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc)
char *smime_gpgme_findkeys (ADDRESS *adrlist, int auto_mode)
{
return find_keys (to, cc, bcc, APPLICATION_SMIME);
return find_keys (adrlist, APPLICATION_SMIME, auto_mode);
}

/*
Expand Down
4 changes: 2 additions & 2 deletions crypt-gpgme.h
Expand Up @@ -24,8 +24,8 @@
void pgp_gpgme_init (void);
void smime_gpgme_init (void);

char *pgp_gpgme_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc);
char *smime_gpgme_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc);
char *pgp_gpgme_findkeys (ADDRESS *adrlist, int auto_mode);
char *smime_gpgme_findkeys (ADDRESS *adrlist, int auto_mode);

BODY *pgp_gpgme_encrypt_message (BODY *a, char *keylist, int sign);
BODY *smime_gpgme_build_smime_entity (BODY *a, char *keylist);
Expand Down
4 changes: 2 additions & 2 deletions crypt-mod-pgp-classic.c
Expand Up @@ -46,9 +46,9 @@ static int crypt_mod_pgp_application_handler (BODY *m, STATE *s)
return pgp_application_pgp_handler (m, s);
}

static char *crypt_mod_pgp_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc)
static char *crypt_mod_pgp_findkeys (ADDRESS *adrlist, int auto_mode)
{
return pgp_findKeys (to, cc, bcc);
return pgp_findKeys (adrlist, auto_mode);
}

static BODY *crypt_mod_pgp_sign_message (BODY *a)
Expand Down
4 changes: 2 additions & 2 deletions crypt-mod-pgp-gpgme.c
Expand Up @@ -70,9 +70,9 @@ static void crypt_mod_pgp_invoke_import (const char *fname)
pgp_gpgme_invoke_import (fname);
}

static char *crypt_mod_pgp_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc)
static char *crypt_mod_pgp_findkeys (ADDRESS *adrlist, int auto_mode)
{
return pgp_gpgme_findkeys (to, cc, bcc);
return pgp_gpgme_findkeys (adrlist, auto_mode);
}

static BODY *crypt_mod_pgp_sign_message (BODY *a)
Expand Down
4 changes: 2 additions & 2 deletions crypt-mod-smime-classic.c
Expand Up @@ -46,9 +46,9 @@ static int crypt_mod_smime_application_handler (BODY *m, STATE *s)
return smime_application_smime_handler (m, s);
}

static char *crypt_mod_smime_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc)
static char *crypt_mod_smime_findkeys (ADDRESS *adrlist, int auto_mode)
{
return smime_findKeys (to, cc, bcc);
return smime_findKeys (adrlist, auto_mode);
}

static BODY *crypt_mod_smime_sign_message (BODY *a)
Expand Down
4 changes: 2 additions & 2 deletions crypt-mod-smime-gpgme.c
Expand Up @@ -55,9 +55,9 @@ static int crypt_mod_smime_application_handler (BODY *m, STATE *s)
return smime_gpgme_application_handler (m, s);
}

static char *crypt_mod_smime_findkeys (ADDRESS *to, ADDRESS *cc, ADDRESS *bcc)
static char *crypt_mod_smime_findkeys (ADDRESS *adrlist, int auto_mode)
{
return smime_gpgme_findkeys (to, cc, bcc);
return smime_gpgme_findkeys (adrlist, auto_mode);
}

static BODY *crypt_mod_smime_sign_message (BODY *a)
Expand Down
3 changes: 1 addition & 2 deletions crypt-mod.h
Expand Up @@ -43,8 +43,7 @@ typedef int (*crypt_func_pgp_check_traditional_t) (FILE *fp, BODY *b,
typedef BODY *(*crypt_func_pgp_traditional_encryptsign_t) (BODY *a, int flags,
char *keylist);
typedef BODY *(*crypt_func_pgp_make_key_attachment_t) (char *tempf);
typedef char *(*crypt_func_findkeys_t) (ADDRESS *to,
ADDRESS *cc, ADDRESS *bcc);
typedef char *(*crypt_func_findkeys_t) (ADDRESS *adrlist, int auto_mode);
typedef BODY *(*crypt_func_sign_message_t) (BODY *a);
typedef BODY *(*crypt_func_pgp_encrypt_message_t) (BODY *a, char *keylist,
int sign);
Expand Down

0 comments on commit 4e9cf84

Please sign in to comment.