NeoMutt  2023-11-03-107-g582dc1
Teaching an old dog new tricks
DOXYGEN
Loading...
Searching...
No Matches
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 "browser/lib.h"
#include "editor/lib.h"
#include "history/lib.h"
#include "ncrypt/lib.h"
#include "question/lib.h"
#include "hook.h"
#include "mutt_logging.h"
#include "muttlib.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.
 
static bool edit_address_list (enum HeaderField field, struct AddressList *al)
 Let the user edit the address list.
 
void update_crypt_info (struct EnvelopeWindowData *wdata)
 Update the crypto info.
 
static int op_envelope_edit_bcc (struct EnvelopeWindowData *wdata, int op)
 Edit the BCC list - Implements envelope_function_t -.
 
static int op_envelope_edit_cc (struct EnvelopeWindowData *wdata, int op)
 Edit the CC list - Implements envelope_function_t -.
 
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 -.
 
static int op_envelope_edit_from (struct EnvelopeWindowData *wdata, int op)
 Edit the from field - Implements envelope_function_t -.
 
static int op_envelope_edit_reply_to (struct EnvelopeWindowData *wdata, int op)
 Edit the Reply-To field - Implements envelope_function_t -.
 
static int op_envelope_edit_subject (struct EnvelopeWindowData *wdata, int op)
 Edit the subject of this message - Implements envelope_function_t -.
 
static int op_envelope_edit_to (struct EnvelopeWindowData *wdata, int op)
 Edit the TO list - Implements envelope_function_t -.
 
static int op_compose_pgp_menu (struct EnvelopeWindowData *wdata, int op)
 Show PGP options - Implements envelope_function_t -.
 
static int op_compose_smime_menu (struct EnvelopeWindowData *wdata, int op)
 Show S/MIME options - Implements envelope_function_t -.
 
static int op_compose_autocrypt_menu (struct EnvelopeWindowData *wdata, int op)
 Show autocrypt compose menu options - Implements envelope_function_t -.
 
static int op_envelope_edit_followup_to (struct EnvelopeWindowData *wdata, int op)
 Edit the Followup-To field - Implements envelope_function_t -.
 
static int op_envelope_edit_newsgroups (struct EnvelopeWindowData *wdata, int op)
 Edit the newsgroups list - Implements envelope_function_t -.
 
static int op_envelope_edit_x_comment_to (struct EnvelopeWindowData *wdata, int op)
 Edit the X-Comment-To field - Implements envelope_function_t -.
 
static int op_compose_mix (struct EnvelopeWindowData *wdata, int op)
 Send the message through a mixmaster remailer chain - Implements envelope_function_t -.
 
int env_function_dispatcher (struct MuttWindow *win, int op)
 Perform an Envelope function - Implements function_dispatcher_t -.
 

Variables

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

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 65 of file functions.c.

66{
67 /* L10N: The compose menu autocrypt prompt.
68 (e)ncrypt enables encryption via autocrypt.
69 (c)lear sets cleartext.
70 (a)utomatic defers to the recommendation. */
71 const char *prompt = _("Autocrypt: (e)ncrypt, (c)lear, (a)utomatic?");
72
74
75 /* L10N: The letter corresponding to the compose menu autocrypt prompt
76 (e)ncrypt, (c)lear, (a)utomatic */
77 const char *letters = _("eca");
78
79 int choice = mw_multi_choice(prompt, letters);
80 switch (choice)
81 {
82 case 1:
85 break;
86 case 2:
87 e->security &= ~SEC_AUTOCRYPT;
89 break;
90 case 3:
91 {
92 e->security &= ~SEC_AUTOCRYPT_OVERRIDE;
93 const bool c_crypt_opportunistic_encrypt = cs_subset_bool(sub, "crypt_opportunistic_encrypt");
94 if (c_crypt_opportunistic_encrypt)
96 break;
97 }
98 }
99}
bool cs_subset_bool(const struct ConfigSubset *sub, const char *name)
Get a boolean config item by name.
Definition: helpers.c:48
int mw_multi_choice(const char *prompt, const char *letters)
Offer the user a multiple choice question -.
Definition: question.c:60
#define _(a)
Definition: message.h:28
#define SEC_INLINE
Email has an inline signature.
Definition: lib.h:86
#define SEC_AUTOCRYPT
(Autocrypt) Message will be, or was Autocrypt encrypt+signed
Definition: lib.h:88
#define SEC_OPPENCRYPT
Opportunistic encrypt mode.
Definition: lib.h:87
#define APPLICATION_PGP
Use PGP to encrypt/sign.
Definition: lib.h:91
#define SEC_ENCRYPT
Email is encrypted.
Definition: lib.h:79
#define SEC_AUTOCRYPT_OVERRIDE
(Autocrypt) Indicates manual set/unset of encryption
Definition: lib.h:89
#define SEC_SIGN
Email is signed.
Definition: lib.h:80
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 108 of file functions.c.

109{
110 struct Buffer *old_list = buf_pool_get();
111 struct Buffer *new_list = buf_pool_get();
112
113 /* need to be large for alias expansion */
114 buf_alloc(old_list, 8192);
115 buf_alloc(new_list, 8192);
116
118 mutt_addrlist_write(al, new_list, false);
119 buf_fix_dptr(new_list);
120 buf_copy(old_list, new_list);
121 if (mw_get_field(_(Prompts[field]), new_list, MUTT_COMP_NO_FLAGS, HC_ALIAS,
122 &CompleteAliasOps, NULL) == 0)
123 {
125 mutt_addrlist_parse2(al, buf_string(new_list));
127 }
128
129 char *err = NULL;
130 if (mutt_addrlist_to_intl(al, &err) != 0)
131 {
132 mutt_error(_("Bad IDN: '%s'"), err);
133 mutt_refresh();
134 FREE(&err);
135 }
136
137 const bool rc = !mutt_str_equal(buf_string(new_list), buf_string(old_list));
138 buf_pool_release(&old_list);
139 buf_pool_release(&new_list);
140 return rc;
141}
void mutt_addrlist_clear(struct AddressList *al)
Unlink and free all Address in an AddressList.
Definition: address.c:1461
int mutt_addrlist_to_local(struct AddressList *al)
Convert an Address list from Punycode.
Definition: address.c:1379
size_t mutt_addrlist_write(const struct AddressList *al, struct Buffer *buf, bool display)
Write an Address to a buffer.
Definition: address.c:1207
int mutt_addrlist_parse2(struct AddressList *al, const char *s)
Parse a list of email addresses.
Definition: address.c:641
int mutt_addrlist_to_intl(struct AddressList *al, char **err)
Convert an Address list to Punycode.
Definition: address.c:1294
const struct CompleteOps CompleteAliasOps
Auto-Completion of Aliases.
Definition: complete.c:108
void mutt_expand_aliases(struct AddressList *al)
Expand aliases in a List of Addresses.
Definition: alias.c:298
void buf_fix_dptr(struct Buffer *buf)
Move the dptr to end of the Buffer.
Definition: buffer.c:194
size_t buf_copy(struct Buffer *dst, const struct Buffer *src)
Copy a Buffer's contents to another Buffer.
Definition: buffer.c:572
void buf_alloc(struct Buffer *buf, size_t new_size)
Make sure a buffer can store at least new_size bytes.
Definition: buffer.c:349
static const char * buf_string(const struct Buffer *buf)
Convert a buffer to a const char * "string".
Definition: buffer.h:93
void mutt_refresh(void)
Force a refresh of the screen.
Definition: curs_lib.c:75
const char *const Prompts[]
Names of header fields used in the envelope, e.g. From:, To:
Definition: window.c:92
int mw_get_field(const char *prompt, struct Buffer *buf, CompletionFlags complete, enum HistoryClass hclass, const struct CompleteOps *comp_api, void *cdata)
Ask the user for a string -.
Definition: window.c:275
#define mutt_error(...)
Definition: logging2.h:92
@ HC_ALIAS
Aliases.
Definition: lib.h:52
#define FREE(x)
Definition: memory.h:45
bool mutt_str_equal(const char *a, const char *b)
Compare two strings.
Definition: string.c:763
#define MUTT_COMP_NO_FLAGS
No flags are set.
Definition: mutt.h:55
struct Buffer * buf_pool_get(void)
Get a Buffer from the pool.
Definition: pool.c:81
void buf_pool_release(struct Buffer **ptr)
Return a Buffer to the pool.
Definition: pool.c:94
String manipulation buffer.
Definition: buffer.h:34
+ 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 147 of file functions.c.

148{
149 struct Email *e = wdata->email;
150
151 const bool c_crypt_opportunistic_encrypt = cs_subset_bool(wdata->sub, "crypt_opportunistic_encrypt");
152 if (c_crypt_opportunistic_encrypt)
154
155#ifdef USE_AUTOCRYPT
156 const bool c_autocrypt = cs_subset_bool(wdata->sub, "autocrypt");
157 if (c_autocrypt)
158 {
160
161 /* Anything that enables SEC_ENCRYPT or SEC_SIGN, or turns on SMIME
162 * overrides autocrypt, be it oppenc or the user having turned on
163 * those flags manually. */
165 {
167 }
168 else
169 {
171 {
172 if (wdata->autocrypt_rec == AUTOCRYPT_REC_YES)
173 {
176 }
177 else
178 {
179 e->security &= ~SEC_AUTOCRYPT;
180 }
181 }
182 }
183 }
184#endif
185}
@ 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:557
void crypt_opportunistic_encrypt(struct Email *e)
Can all recipients be determined.
Definition: crypt.c:1034
#define APPLICATION_SMIME
Use SMIME to encrypt/sign.
Definition: lib.h:92
The envelope/body of an email.
Definition: email.h:37
struct Email * email
Email being composed.
Definition: wdata.h:40
struct ConfigSubset * sub
Inherited config items.
Definition: wdata.h:39
enum AutocryptRec autocrypt_rec
Autocrypt recommendation.
Definition: wdata.h:50
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ EnvelopeFunctions

const struct EnvelopeFunction EnvelopeFunctions[]
static
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:192
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:302
static int op_envelope_edit_followup_to(struct EnvelopeWindowData *wdata, int op)
Edit the Followup-To field - Implements envelope_function_t -.
Definition: functions.c:433
static int op_compose_pgp_menu(struct EnvelopeWindowData *wdata, int op)
Show PGP options - Implements envelope_function_t -.
Definition: functions.c:317
static int op_compose_autocrypt_menu(struct EnvelopeWindowData *wdata, int op)
Show autocrypt compose menu options - Implements envelope_function_t -.
Definition: functions.c:395
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:504
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:479
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:222
static int op_envelope_edit_cc(struct EnvelopeWindowData *wdata, int op)
Edit the CC list - Implements envelope_function_t -.
Definition: functions.c:207
static int op_envelope_edit_newsgroups(struct EnvelopeWindowData *wdata, int op)
Edit the newsgroups list - Implements envelope_function_t -.
Definition: functions.c:456
static int op_compose_smime_menu(struct EnvelopeWindowData *wdata, int op)
Show S/MIME options - Implements envelope_function_t -.
Definition: functions.c:355

All the NeoMutt functions that the Envelope supports.

Definition at line 518 of file functions.c.