You could set (and store across postpone / resume) a flag in msg->security that 
indicates that the user mangled with the encryption settings, which would then 
override opportunistic encryption in the future, for this message.




On 2013-10-26, at 05:46 +0200, Kevin J. McCarthy <ke...@8t8.us> wrote:

> Michael Elkins wrote:
>> I see a potential problem here:  If the user has manually requested
>> encryption or disabled it for the current message, but has
>> opportunistic encryption enabled, it may override what the user has
>> set manually.
> 
> That's a good point.  Right now I can think of three imperfect ideas:
> 
> 1. Set a local variable that temporarily disables opportunistic encrypt
>  if they change the message encryption bit.
>  Unfortunately the local variable flag would be lost with a
>  postpone/resume.
> 
> int mutt_compose_menu (...)
> {
> int disable_opp_enc = 0;
> 
> case OP_COMPOSE_PGP_MENU:  /* also for OP_COMPOSE_SMIME_MENU */
>   int old_enc = (msg->security & ENCRYPT);
>   msg->security = crypt_pgp_send_menu (msg, &menu->redraw);
>   if (old_enc != (msg->security & ENCRYPT))
>     disable_opp_enc = 1;
> 
> case OP_COMPOSE_EDIT_TO:
>   if (option (OPTCRYPTOPPORTUNISTICENCRYPT) &&
>       (! disable_opp_enc))
>   {
>     crypt_opportunistic_encrypt (msg);
>     redraw_crypt_lines (msg);
>   }
> 
> 2. A message warning that opportunistic encrypt is set if they change
>  the encrypt value manually, along with a prompt to turn it off.
>  This would be lost with a postpone/resume across different mutt
>  sessions, however.  The user might also be surprised the option was
>  completely turned off.
> 
> case OP_COMPOSE_PGP_MENU:
>   int old_enc = (msg->security & ENCRYPT);
>   msg->security = crypt_pgp_send_menu (msg, &menu->redraw);
>   if (option (OPTCRYPTOPPORTUNISTICENCRYPT) &&
>       old_enc != (msg->security & ENCRYPT) &&
>       (mutt_yesorno (_("Opportunistic encrypt is set and may override your 
> change.  Disable opportunistic encrypt?"), M_YES) == M_YES))
>   {
>       unset_option(OPTCRYPTOPPORTUNISTICENCRYPT);
>   }
> 
> 3. Documenting the behavior and warning the user the option will
>  override manual encryption changes when turned on.
> 
> Do any of these ideas seem acceptable?  Can you think of a better
> approach?
> 
>> The same problem would also appear for a user doing this:
>> 
>>      set crypt_opportunistic_encrypt
>>      send-hook . unset crypt_autoencrypt
>>      send-hook @mycompany.com set crypt_autoencrypt
>> 
>> The intent here is that I want to *always* encrypt when sending to
>> my colleagues, but opportunistically encrypt whenever I can when
>> sending elsewhere.
> 
> I think this is fixable by adding a check for
> option(OPTCRYPTAUTOENCRYPT) being set inside the
> crypt_opportunistic_encrypt() function.  If it's set, then
> crypt_opportunistic_encrypt() will abort.
> 
>> Perhaps the user interface should look like this:
>> 
>>      set crypt_autoencrypt
>>      send-hook . unset crypt_require_encrypt
>>      send-hook @mycompany.com set crypt_require_encrypt
>> 
>> So $crypt_autoencrypt will encrypt when it can, and fail when
>> $crypt_require_encrypt is set and not all keys can be found.
> 
> I like your suggested configuration variable names.  They better
> represent the intended meaning of each option.  The cost would be a
> surprising behavior change in crypt_autoencrypt that could lead to some
> enraged users.
> 
> With your blessing I'd be glad to submit a different
> patch series renaming crypt_autoencrypt => crypt_require_encrypt and
> then changing this patch series to use the option crypt_autoencrypt.
> 
> -Kevin


Thomas Roessler   (@roessler)












Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

Reply via email to