NeoMutt  2022-04-29-249-gaae397
Teaching an old dog new tricks
DOXYGEN
functions.c File Reference

Envelope functions. More...

#include "config.h"
#include <stdbool.h>
#include <stdio.h>
#include "private.h"
#include "mutt/lib.h"
#include "address/lib.h"
#include "config/lib.h"
#include "email/lib.h"
#include "core/lib.h"
#include "alias/lib.h"
#include "gui/lib.h"
#include "mutt.h"
#include "functions.h"
#include "lib.h"
#include "enter/lib.h"
#include "ncrypt/lib.h"
#include "question/lib.h"
#include "hook.h"
#include "mutt_logging.h"
#include "muttlib.h"
#include "opcodes.h"
#include "wdata.h"
#include "mixmaster/lib.h"
#include "autocrypt/lib.h"
+ Include dependency graph for functions.c:

Go to the source code of this file.

Functions

static void autocrypt_compose_menu (struct Email *e, const struct ConfigSubset *sub)
 Autocrypt compose settings. More...
 
static bool edit_address_list (enum HeaderField field, struct AddressList *al)
 Let the user edit the address list. More...
 
void update_crypt_info (struct EnvelopeWindowData *wdata)
 Update the crypto info. More...
 
static int op_envelope_edit_bcc (struct EnvelopeWindowData *wdata, int op)
 Edit the BCC list - Implements envelope_function_t -. More...
 
static int op_envelope_edit_cc (struct EnvelopeWindowData *wdata, int op)
 Edit the CC list - Implements envelope_function_t -. More...
 
static int op_envelope_edit_fcc (struct EnvelopeWindowData *wdata, int op)
 Enter a file to save a copy of this message in - Implements envelope_function_t -. More...
 
static int op_envelope_edit_from (struct EnvelopeWindowData *wdata, int op)
 Edit the from field - Implements envelope_function_t -. More...
 
static int op_envelope_edit_reply_to (struct EnvelopeWindowData *wdata, int op)
 Edit the Reply-To field - Implements envelope_function_t -. More...
 
static int op_envelope_edit_subject (struct EnvelopeWindowData *wdata, int op)
 Edit the subject of this message - Implements envelope_function_t -. More...
 
static int op_envelope_edit_to (struct EnvelopeWindowData *wdata, int op)
 Edit the TO list - Implements envelope_function_t -. More...
 
static int op_compose_pgp_menu (struct EnvelopeWindowData *wdata, int op)
 Show PGP options - Implements envelope_function_t -. More...
 
static int op_compose_smime_menu (struct EnvelopeWindowData *wdata, int op)
 Show S/MIME options - Implements envelope_function_t -. More...
 
static int op_compose_autocrypt_menu (struct EnvelopeWindowData *wdata, int op)
 Show autocrypt compose menu options - Implements envelope_function_t -. More...
 
static int op_envelope_edit_followup_to (struct EnvelopeWindowData *wdata, int op)
 Edit the Followup-To field - Implements envelope_function_t -. More...
 
static int op_envelope_edit_newsgroups (struct EnvelopeWindowData *wdata, int op)
 Edit the newsgroups list - Implements envelope_function_t -. More...
 
static int op_envelope_edit_x_comment_to (struct EnvelopeWindowData *wdata, int op)
 Edit the X-Comment-To field - Implements envelope_function_t -. More...
 
static int op_compose_mix (struct EnvelopeWindowData *wdata, int op)
 Send the message through a mixmaster remailer chain - Implements envelope_function_t -. More...
 
int env_function_dispatcher (struct MuttWindow *win, int op)
 Perform an Envelope function - Implements function_dispatcher_t -. More...
 

Variables

struct EnvelopeFunction EnvelopeFunctions []
 All the NeoMutt functions that the Envelope supports. More...
 

Detailed Description

Envelope functions.

Authors
  • Richard Russon

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Definition in file functions.c.

Function Documentation

◆ autocrypt_compose_menu()

static void autocrypt_compose_menu ( struct Email e,
const struct ConfigSubset sub 
)
static

Autocrypt compose settings.

Parameters
eEmail
subConfigSubset

Definition at line 64 of file functions.c.

65{
66 /* L10N: The compose menu autocrypt prompt.
67 (e)ncrypt enables encryption via autocrypt.
68 (c)lear sets cleartext.
69 (a)utomatic defers to the recommendation. */
70 const char *prompt = _("Autocrypt: (e)ncrypt, (c)lear, (a)utomatic?");
71
73
74 /* L10N: The letter corresponding to the compose menu autocrypt prompt
75 (e)ncrypt, (c)lear, (a)utomatic */
76 const char *letters = _("eca");
77
78 int choice = mutt_multi_choice(prompt, letters);
79 switch (choice)
80 {
81 case 1:
84 break;
85 case 2:
86 e->security &= ~SEC_AUTOCRYPT;
88 break;
89 case 3:
90 {
91 e->security &= ~SEC_AUTOCRYPT_OVERRIDE;
92 const bool c_crypt_opportunistic_encrypt = cs_subset_bool(sub, "crypt_opportunistic_encrypt");
93 if (c_crypt_opportunistic_encrypt)
95 break;
96 }
97 }
98}
bool cs_subset_bool(const struct ConfigSubset *sub, const char *name)
Get a boolean config item by name.
Definition: helpers.c:73
#define _(a)
Definition: message.h:28
#define SEC_INLINE
Email has an inline signature.
Definition: lib.h:85
#define SEC_AUTOCRYPT
(Autocrypt) Message will be, or was Autocrypt encrypt+signed
Definition: lib.h:87
#define SEC_OPPENCRYPT
Opportunistic encrypt mode.
Definition: lib.h:86
#define APPLICATION_PGP
Use PGP to encrypt/sign.
Definition: lib.h:90
#define SEC_ENCRYPT
Email is encrypted.
Definition: lib.h:78
#define SEC_AUTOCRYPT_OVERRIDE
(Autocrypt) Indicates manual set/unset of encryption
Definition: lib.h:88
#define SEC_SIGN
Email is signed.
Definition: lib.h:79
int mutt_multi_choice(const char *prompt, const char *letters)
Offer the user a multiple choice question.
Definition: question.c:54
SecurityFlags security
bit 0-10: flags, bit 11,12: application, bit 13: traditional pgp See: ncrypt/lib.h pgplib....
Definition: email.h:41
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ edit_address_list()

static bool edit_address_list ( enum HeaderField  field,
struct AddressList *  al 
)
static

Let the user edit the address list.

Parameters
[in]fieldField to edit, e.g. HDR_FROM
[in,out]alAddressList to edit
Return values
trueThe address list was changed

Definition at line 107 of file functions.c.

108{
109 struct Buffer *old_list = mutt_buffer_pool_get();
110 struct Buffer *new_list = mutt_buffer_pool_get();
111
112 /* need to be large for alias expansion */
113 mutt_buffer_alloc(old_list, 8192);
114 mutt_buffer_alloc(new_list, 8192);
115
117 mutt_addrlist_write(al, new_list->data, new_list->dsize, false);
118 mutt_buffer_fix_dptr(new_list);
119 mutt_buffer_copy(old_list, new_list);
120 if (mutt_buffer_get_field(_(Prompts[field]), new_list, MUTT_COMP_ALIAS, false,
121 NULL, NULL, NULL) == 0)
122 {
126 }
127
128 char *err = NULL;
129 if (mutt_addrlist_to_intl(al, &err) != 0)
130 {
131 mutt_error(_("Bad IDN: '%s'"), err);
132 mutt_refresh();
133 FREE(&err);
134 }
135
136 const bool rc = !mutt_str_equal(mutt_buffer_string(new_list), mutt_buffer_string(old_list));
137 mutt_buffer_pool_release(&old_list);
138 mutt_buffer_pool_release(&new_list);
139 return rc;
140}
void mutt_addrlist_clear(struct AddressList *al)
Unlink and free all Address in an AddressList.
Definition: address.c:1470
size_t mutt_addrlist_write(const struct AddressList *al, char *buf, size_t buflen, bool display)
Write an Address to a buffer.
Definition: address.c:1150
int mutt_addrlist_to_local(struct AddressList *al)
Convert an Address list from Punycode.
Definition: address.c:1388
int mutt_addrlist_parse2(struct AddressList *al, const char *s)
Parse a list of email addresses.
Definition: address.c:616
int mutt_addrlist_to_intl(struct AddressList *al, char **err)
Convert an Address list to Punycode.
Definition: address.c:1305
void mutt_expand_aliases(struct AddressList *al)
Expand aliases in a List of Addresses.
Definition: alias.c:298
void mutt_buffer_alloc(struct Buffer *buf, size_t new_size)
Make sure a buffer can store at least new_size bytes.
Definition: buffer.c:275
void mutt_buffer_fix_dptr(struct Buffer *buf)
Move the dptr to end of the Buffer.
Definition: buffer.c:189
size_t mutt_buffer_copy(struct Buffer *dst, const struct Buffer *src)
Copy a Buffer's contents to another Buffer.
Definition: buffer.c:462
static const char * mutt_buffer_string(const struct Buffer *buf)
Convert a buffer to a const char * "string".
Definition: buffer.h:77
void mutt_refresh(void)
Force a refresh of the screen.
Definition: curs_lib.c:140
int mutt_buffer_get_field(const char *field, struct Buffer *buf, CompletionFlags complete, bool multiple, struct Mailbox *m, char ***files, int *numfiles)
Ask the user for a string.
Definition: window.c:180
const char *const Prompts[]
Definition: window.c:89
#define mutt_error(...)
Definition: logging.h:87
#define FREE(x)
Definition: memory.h:43
bool mutt_str_equal(const char *a, const char *b)
Compare two strings.
Definition: string.c:807
#define MUTT_COMP_ALIAS
Alias completion (in alias dialog)
Definition: mutt.h:53
void mutt_buffer_pool_release(struct Buffer **pbuf)
Free a Buffer from the pool.
Definition: pool.c:112
struct Buffer * mutt_buffer_pool_get(void)
Get a Buffer from the pool.
Definition: pool.c:101
String manipulation buffer.
Definition: buffer.h:34
size_t dsize
Length of data.
Definition: buffer.h:37
char * data
Pointer to data.
Definition: buffer.h:35
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ update_crypt_info()

void update_crypt_info ( struct EnvelopeWindowData wdata)

Update the crypto info.

Parameters
wdataEnvelope Window data

Definition at line 146 of file functions.c.

147{
148 struct Email *e = wdata->email;
149
150 const bool c_crypt_opportunistic_encrypt = cs_subset_bool(wdata->sub, "crypt_opportunistic_encrypt");
151 if (c_crypt_opportunistic_encrypt)
153
154#ifdef USE_AUTOCRYPT
155 const bool c_autocrypt = cs_subset_bool(wdata->sub, "autocrypt");
156 if (c_autocrypt)
157 {
159
160 /* Anything that enables SEC_ENCRYPT or SEC_SIGN, or turns on SMIME
161 * overrides autocrypt, be it oppenc or the user having turned on
162 * those flags manually. */
164 {
166 }
167 else
168 {
170 {
171 if (wdata->autocrypt_rec == AUTOCRYPT_REC_YES)
172 {
175 }
176 else
177 e->security &= ~SEC_AUTOCRYPT;
178 }
179 }
180 }
181#endif
182}
@ AUTOCRYPT_REC_YES
Autocrypt should be used.
Definition: lib.h:162
enum AutocryptRec mutt_autocrypt_ui_recommendation(const struct Email *e, char **keylist)
Get the recommended action for an Email.
Definition: autocrypt.c:567
void crypt_opportunistic_encrypt(struct Email *e)
Can all recipients be determined.
Definition: crypt.c:1025
#define APPLICATION_SMIME
Use SMIME to encrypt/sign.
Definition: lib.h:91
The envelope/body of an email.
Definition: email.h:37
struct Email * email
Email being composed.
Definition: wdata.h:41
struct ConfigSubset * sub
Inherited config items.
Definition: wdata.h:40
enum AutocryptRec autocrypt_rec
Autocrypt recommendation.
Definition: wdata.h:57
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ EnvelopeFunctions

struct EnvelopeFunction EnvelopeFunctions[]
Initial value:
= {
{ OP_COMPOSE_AUTOCRYPT_MENU, op_compose_autocrypt_menu },
{ OP_COMPOSE_MIX, op_compose_mix },
{ OP_COMPOSE_PGP_MENU, op_compose_pgp_menu },
{ OP_COMPOSE_SMIME_MENU, op_compose_smime_menu },
{ OP_ENVELOPE_EDIT_BCC, op_envelope_edit_bcc },
{ OP_ENVELOPE_EDIT_CC, op_envelope_edit_cc },
{ OP_ENVELOPE_EDIT_FCC, op_envelope_edit_fcc },
{ OP_ENVELOPE_EDIT_FOLLOWUP_TO, op_envelope_edit_followup_to },
{ OP_ENVELOPE_EDIT_FROM, op_envelope_edit_from },
{ OP_ENVELOPE_EDIT_NEWSGROUPS, op_envelope_edit_newsgroups },
{ OP_ENVELOPE_EDIT_REPLY_TO, op_envelope_edit_reply_to },
{ OP_ENVELOPE_EDIT_SUBJECT, op_envelope_edit_subject },
{ OP_ENVELOPE_EDIT_TO, op_envelope_edit_to },
{ OP_ENVELOPE_EDIT_X_COMMENT_TO, op_envelope_edit_x_comment_to },
{ 0, NULL },
}
static int op_envelope_edit_bcc(struct EnvelopeWindowData *wdata, int op)
Edit the BCC list - Implements envelope_function_t -.
Definition: functions.c:189
static int op_envelope_edit_subject(struct EnvelopeWindowData *wdata, int op)
Edit the subject of this message - Implements envelope_function_t -.
Definition: functions.c:276
static int op_envelope_edit_to(struct EnvelopeWindowData *wdata, int op)
Edit the TO list - Implements envelope_function_t -.
Definition: functions.c:303
static int op_envelope_edit_followup_to(struct EnvelopeWindowData *wdata, int op)
Edit the Followup-To field - Implements envelope_function_t -.
Definition: functions.c:437
static int op_compose_pgp_menu(struct EnvelopeWindowData *wdata, int op)
Show PGP options - Implements envelope_function_t -.
Definition: functions.c:320
static int op_compose_autocrypt_menu(struct EnvelopeWindowData *wdata, int op)
Show autocrypt compose menu options - Implements envelope_function_t -.
Definition: functions.c:398
static int op_compose_mix(struct EnvelopeWindowData *wdata, int op)
Send the message through a mixmaster remailer chain - Implements envelope_function_t -.
Definition: functions.c:512
static int op_envelope_edit_from(struct EnvelopeWindowData *wdata, int op)
Edit the from field - Implements envelope_function_t -.
Definition: functions.c:251
static int op_envelope_edit_reply_to(struct EnvelopeWindowData *wdata, int op)
Edit the Reply-To field - Implements envelope_function_t -.
Definition: functions.c:264
static int op_envelope_edit_x_comment_to(struct EnvelopeWindowData *wdata, int op)
Edit the X-Comment-To field - Implements envelope_function_t -.
Definition: functions.c:485
static int op_envelope_edit_fcc(struct EnvelopeWindowData *wdata, int op)
Enter a file to save a copy of this message in - Implements envelope_function_t -.
Definition: functions.c:223
static int op_envelope_edit_cc(struct EnvelopeWindowData *wdata, int op)
Edit the CC list - Implements envelope_function_t -.
Definition: functions.c:206
static int op_envelope_edit_newsgroups(struct EnvelopeWindowData *wdata, int op)
Edit the newsgroups list - Implements envelope_function_t -.
Definition: functions.c:461
static int op_compose_smime_menu(struct EnvelopeWindowData *wdata, int op)
Show S/MIME options - Implements envelope_function_t -.
Definition: functions.c:358

All the NeoMutt functions that the Envelope supports.

Definition at line 526 of file functions.c.